canvas-datagrid 0.4.3 → 0.4.4
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/CHANGELOG.md +12 -0
- package/dist/canvas-datagrid.debug.js +355 -144
- package/dist/canvas-datagrid.debug.map +1 -1
- package/dist/canvas-datagrid.js +1 -1
- package/dist/canvas-datagrid.module.js +1 -1
- package/dist/canvas-datagrid.module.js.map +1 -1
- package/dist/types.d.ts +12 -8
- package/lib/contextMenu.js +2 -2
- package/lib/defaults.js +9 -7
- package/lib/docs.js +16 -0
- package/lib/dom.js +29 -2
- package/lib/draw.js +157 -60
- package/lib/events/index.js +130 -65
- package/lib/intf.js +8 -14
- package/lib/publicMethods.js +118 -42
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack://canvasDatagrid/webpack/universalModuleDefinition","webpack://canvasDatagrid/./lib/button.js","webpack://canvasDatagrid/./lib/component.js","webpack://canvasDatagrid/./lib/contextMenu.js","webpack://canvasDatagrid/./lib/defaults.js","webpack://canvasDatagrid/./lib/dom.js","webpack://canvasDatagrid/./lib/draw.js","webpack://canvasDatagrid/./lib/events/index.js","webpack://canvasDatagrid/./lib/events/util.js","webpack://canvasDatagrid/./lib/groups/util.js","webpack://canvasDatagrid/./lib/intf.js","webpack://canvasDatagrid/./lib/main.js","webpack://canvasDatagrid/./lib/publicMethods.js","webpack://canvasDatagrid/./lib/touch.js","webpack://canvasDatagrid/./node_modules/is-printable-key-event/dist/index.js","webpack://canvasDatagrid/webpack/bootstrap","webpack://canvasDatagrid/webpack/runtime/compat get default export","webpack://canvasDatagrid/webpack/runtime/define property getters","webpack://canvasDatagrid/webpack/runtime/hasOwnProperty shorthand","webpack://canvasDatagrid/webpack/runtime/make namespace object","webpack://canvasDatagrid/webpack/startup"],"names":["self","zIndexTop","applyButtonMenuItemStyle","buttonMenuItemContainer","createInlineStyle","mobile","addEventListener","applyButtonStyle","button","buttonMenu","createButton","pos","items","imgSrc","wrapper","document","createElement","buttonArrow","buttonIcon","intf","Array","isArray","Error","init","loc","s","scrollOffset","canvas","undefined","style","buttonZIndex","x","left","y","top","height","position","zIndex","scrollBox","scrollLeft","scrollTop","innerHTML","buttonArrowDownHTML","img","setAttribute","maxWidth","appendChild","body","toggleButtonMenu","dispose","parentNode","removeChild","createDisposeEvent","requestAnimationFrame","disposeButtonMenu","offsetHeight","createButtonMenu","selectedIndex","rect","createItems","addItem","item","menuItemContainer","addContent","content","title","click","ev","apply","disposeButton","clickIndex","idx","dispatchEvent","Event","getBoundingClientRect","bottom","window","innerHeight","buttonMenuWindowMargin","right","innerWidth","Object","defineProperty","get","set","value","isNaN","isFinite","length","forEach","index","removeEventListener","e","keyCode","moveButtonPos","attachButton","typeMap","component","dehyphenateProperty","hyphenateProperty","prop","replace","p","nextLetterCap","prototype","call","char","toUpperCase","cust","toLowerCase","getDefaultItem","base","i","r","defaults","filter","applyComponentStyle","supressChangeAndDrawEvents","isComponent","cStyle","getComputedStyle","tagName","defs","computedStyle","styles","def","val","getPropertyValue","setStyleProperty","resize","data","strData","JSON","parse","schema","strSchema","number","strNum","n","parseInt","strBool","test","string","str","getObservableAttributes","attrs","attributes","attr","push","disconnectedCallback","connected","connectedCallback","parentDOMNode","observe","adoptedCallback","attributeChangedCallback","attrName","oldVal","newVal","tfn","dataType","name","Function","observer","MutationObserver","mutations","checkInnerHTML","checkStyle","mutation","attributeName","target","nodeName","addedNodes","type","characterData","childList","subtree","querySelectorAll","el","hoverScrollTimeout","autoCompleteContext","applyContextItemStyle","contextItemContainer","createContextMenu","parentContextMenu","container","upArrow","downArrow","children","childMenuArrow","removeChildContext","relatedTarget","contextMenu","contains","splice","indexOf","contextAddCallback","getAttribute","cPos","childContextMenuMarginLeft","offsetWidth","childContextMenuMarginTop","createChildContext","childContextMenuArrowHTML","checkArrowVisibility","scrollHeight","fade","element","opacity","timer","setInterval","clearInterval","display","animationDurationHideContextMenu","unfade","animationDurationShowContextMenu","startHoverScroll","t","a","contextHoverScrollAmount","setTimeout","contextHoverScrollRateMs","endHoverScroll","clearTimeout","contextMenuZIndex","color","contextMenuArrowColor","textAlign","inputDropdown","maxHeight","autocompleteBottomMargin","minWidth","width","hasFocus","deltaY","deltaX","contextMenuArrowUpHTML","contextMenuArrowDownHTML","contextMenuWindowMargin","parentGrid","c","createFilterContextMenuItems","filterContainer","filterLabel","filterAutoCompleteButton","filterInput","cell","header","iRect","checkRegExpErrorState","background","contextFilterInputBackground","contextFilterInputColor","invalidFilterRegEx","contextFilterInvalidRegExpBackground","contextFilterInvalidRegExpColor","fillAutoComplete","count","blanksItem","viewData","row","cellValue","String","trim","blankValues","includes","blanksText","maxAutoCompleteItems","formatters","stopPropagation","disposeAutocomplete","keys","concat","map","key","createAutoCompleteContext","autoCompleteItems","onclick","disposeContextMenu","preventDefault","setFilter","en","columnFilters","filterOptionText","contextFilterButtonHTML","cf","h","getHeaderByName","removeFilterOptionText","removeFilterClick","controlInput","focus","getSelectedContiguousColumns","memoKey","selections","selection","rowIndex","compare","sort","b","ranges","begin","end","orderIndex","currentOrderIndex","columnIndex","matchedRange","find","range","orders","columns","matchedSchema","schemaIndex","thisSchema","assign","findIndex","it","getSelectedContiguousRows","allowOnlyOneRow","prev","ok","addDefaultContextMenuItem","getSchema","getColumnsMap","Map","_col","isSorting","orderings","isNormalCell","isBackground","isColumnHeaderCellCap","isScrollBar","isCorner","isRowHeader","showFilter","showCopy","reduce","copyText","execCommand","showPaste","clipBoardData","pasteText","paste","draw","showColumnSelector","columnSelectorText","d","column","toggleColumnVisibility","hidden","setStorageData","columnSelectorHiddenText","columnSelectorVisibleText","columnOrderIndex","contiguousColumns","col","join","hideColumnText","hideColumns","saveAppearance","showClearSettingsOption","sizes","rows","clearSettingsOptionText","createRowOrders","createColumnOrders","storedSettings","columnWidth","cellWidth","cellHeight","allowSorting","showOrderByOption","showOrderByOptionTextAsc","order","showOrderByOptionTextDesc","canHideRows","boundRowIndexes","viewRowIndex","getBoundRowIndexFromViewRowIndex","showHideRow","hideRows","showHideRows","groupAreaHeight","getColumnGroupAreaHeight","groupAreaWidth","getRowGroupAreaWidth","setCollapseStateForAllGroups","allGroups","collapsed","groups","j","group","refresh","showRemoveAllGroupColumns","groupedColumns","showExpandAllGroupColumns","showCollapseAllGroupColumns","showRemoveAllGroupRows","groupedRows","showExpandAllGroupRows","showCollapseAllGroupRows","canGroupByColumns","allowGroupingColumns","isColumnHeader","canUngroupColumns","canGroupByRows","allowGroupingRows","canUngroupRows","groupIndexes","headerIndex","isColumnSelected","isNewGroupRangeValid","groupTitles","groupNames","showGroupColumns","groupColumns","getGroupsColumnBelongsTo","from","to","cell0","cell1","formatArgs","showRemoveGroupColumns","removeGroupColumns","console","warn","rangeTitle","showGroupRows","groupRows","getGroupsRowBelongsTo","showRemoveGroupRows","removeGroupRows","event","mousedown","mouseup","contextmenuEvent","overridePos","childGrids","childGrid","offsetLeft","offsetTop","isChildGrid","childGridsOfParent","matchedMe","grid","nodeA","nodeB","x0","x1","y0","y1","node","newX1","newY1","nodeType","contextPosition","getLayerPos","NativeEvent","getCellAt","isGrid","contextMenuMarginLeft","canvasOffsetLeft","contextMenuMarginTop","canvasOffsetTop","mobileContextMenuMargin","filterButtonMenuOffsetTop","getClippingRect","ele","boundingRect","eleRect","clipRect","w","parentRect","Infinity","columnHeaderCellHeight","getColumnHeaderCellHeight","rowHeaderCellWidth","getRowHeaderCellWidth","scrollBarWidth","clipElement","clip","scrollingElement","resizeEditInput","input","editCell","bm","gridBorderCollapse","borderWidth","cellBorderWidth","getVisibleCellByIndex","mobileEditInputHeight","groupAreaOffsetY","groupAreaOffsetX","columnGroupsAreaHeight","rowGroupsAreaWidth","cellPaddingLeft","ignoreScrollOffset","calculatedTree","offsetParent","isTree","clientX","clientY","endEdit","abort","abortEdit","newValue","oldValue","changes","originalData","boundRowIndex","defaultValue","aborted","addRow","createNewRowData","beginEditAt","inEnterMode","editable","adjacentCells","enumItems","enu","option","valueInEnum","scrollIntoView","setActiveCell","getAdjacentCells","multiLine","editCellZIndex","fontSize","editCellFontSize","scale","cellValueIsEmpty","shouldClearCellValue","nx","ny","altKey","nextRowIndex","shiftKey","Math","max","min","last","first","className","css","padding","buttonPadding","borderStyle","borderColor","buttonBorderColor","cursor","buttonBackgroundColor","userSelect","buttonHoverBackgroundColor","buttonActiveBorderColor","buttonActiveBackgroundColor","verticalAlign","buttonArrowColor","lineHeight","fontWeight","fontFamily","contextMenuFontFamily","contextMenuFontSize","margin","contextMenuItemMargin","borderRadius","contextMenuItemBorderRadius","contextMenuHoverBackground","contextMenuHoverColor","contextMenuLabelMargin","contextMenuLabelDisplay","contextMenuLabelMinWidth","contextMenuLabelMaxWidth","contextMenuBackground","contextMenuColor","border","contextMenuBorder","contextMenuPadding","contextMenuBorderRadius","contextMenuOpacity","overflow","whiteSpace","contextMenuCursor","marginLeft","contextFilterInputBorder","contextFilterInputBorderRadius","contextFilterInputFontFamily","contextFilterInputFontSize","contextFilterButtonBorder","contextFilterButtonBorderRadius","contextMenuFilterButtonFontFamily","contextMenuFilterButtonFontSize","cssFloat","childContextMenuArrowColor","contextMenuChildArrowFontSize","boxSizing","outline","mobileEditFontFamily","mobileEditFontSize","editCellBorder","editCellColor","editCellBackgroundColor","appearance","webkitAppearance","mozAppearance","editCellPaddingLeft","editCellFontFamily","boxShadow","editCellBoxShadow","contextMenuFilterInvalidExpresion","appendTo","setDom","ctx","context","eventParent","onblur","blur","parentIsCanvas","getContext","textBaseline","parentNodeStyle","touchstart","dblclick","mousemove","scrollWheel","copy","cut","keypress","keyup","keydown","perfCounters","cachedImagesDrawn","drawCount","perfWindowSize","entityCount","hiddenFrozenColumnCount","scrollDebugCounters","touchPPSCounters","htmlImageCache","fillArray","low","high","step","drawPerfLine","perfArr","arrIndex","useAbs","beginPath","moveTo","cx","cy","abs","lineTo","strokeStyle","stroke","drawOnAllImagesLoaded","loaded","html","complete","drawHtml","v","formattedValue","cacheKey","toString","round","drawImage","Image","onload","src","btoa","drawLines","coords","fill","drawGroupHandle","fillRect","strokeRect","drawUnhideIndicator","size","dir","active","minPadding","maxPadding","longEdge","median","halfLongEdge","borderCoords","unhideIndicatorBorderColor","lineWidth","fillStyle","unhideIndicatorBackgroundColor","offset","unhideIndicatorColor","drawOrderByArrow","mt","columnHeaderOrderByArrowMarginTop","ml","columnHeaderOrderByArrowMarginLeft","mr","columnHeaderOrderByArrowMarginRight","aw","columnHeaderOrderByArrowWidth","ah","columnHeaderOrderByArrowHeight","columnHeaderOrderByArrowColor","columnHeaderOrderByArrowBorderColor","orderDirection","drawTreeArrow","treeArrowMarginTop","treeArrowMarginRight","treeArrowMarginLeft","treeArrowWidth","treeArrowHeight","treeArrowColor","treeArrowBorderColor","openChildren","drawCellTreeIcon","tree","rowTree","parentCount","iconSize","cellTreeIconWidth","marginTop","cellTreeIconMarginTop","marginRight","cellTreeIconMarginRight","cellTreeIconMarginLeft","paddingLeft","icon","oldFillStyle","oldStrokeStyle","hovered","hovers","onCellTreeIcon","cellTreeIconHoverFillColor","cellTreeIconFillColor","cellTreeIconBorderColor","expand","cellTreeIconLineWidth","cellTreeIconLineColor","drawFilterButtonArrow","filterButtonHeight","filterButtonArrowHeight","filterButtonWidth","filterButtonArrowWidth","filterButtonArrowColor","filterButtonArrowBorderColor","radiusRect","radius","quadraticCurveTo","fillText","text","fillCircle","arc","PI","strokeCircle","clipFrozenArea","mode","lastFrozenColumnPixel","lastFrozenRowPixel","fillHandle","selectionHandleType","strokeHandle","addselectionHandle","hw","selectionHandleSize","tr","br","tl","bl","addBorderLine","l","addEllipsis","ellipsisCache","measureText","wrapText","splitChar","lines","calculatedLineHeight","word","words","split","textHeight","out","wrap","cellWhiteSpace","autoResize","autoResizeRows","elWidth","et","ellipsisText","elClipLength","plWidth","clippedVal","ogWordWidth","previousLine","line","cHeight","paddedHeight","curSplitChar","measure","paddedWidth","arr","originText","stepLength","direction","substr","drawText","treeCellPadding","ll","fontHeight","vPos","hPos","orderByArrowWidth","horizontalAlignment","paddingRight","verticalAlignment","paddingBottom","lineSpacing","debug","font","debugFont","debugColor","stringify","pw","idx_ord","sortColumnIndex","getFrozenColumnsWidth","frozenColumn","collapsedGroups","getCollapsedColumnGroups","isCollapsed","getColumnWidth","internal","visible","checkScrollHeight","rowHeaderCell","treeGrid","rowOpen","rowHeight","cornerCell","rowData","aCell","bc","selectionBorders","moveBorders","selectionHandles","rowHeaders","u","currentCell","rowGroupsRectInfo","rowGroupsFrozenInfo","columnGroupsRectInfo","collapsedColumnGroups","collapsedRowGroups","getCollapsedRowGroups","currentRowIndexOffset","rowIndexOffsetByHiddenRows","hiddenRowRanges","plus","performance","now","visibleRowHeights","saveRowGroupsRectInfo","saveColumnGroupsRectInfo","isColumnCollapsedByGroup","drawScrollBars","drawCorner","entities","m","scrollBarBoxMargin","scrollBarBorderColor","scrollBarBorderWidth","horizontalBox","scrollCache","horizontalBar","scrollBoxWidth","scrollWidth","verticalBox","frozenRow","verticalBar","scrollBoxHeight","horizontalBarVisible","scrollBarBackgroundColor","scrollBarBoxColor","horizontalBoxVisible","scrollBarActiveColor","scrollBarBoxBorderRadius","visibleCells","unshift","verticalBarVisible","verticalBoxVisible","scrollBarCornerBorderColor","scrollBarCornerBackgroundColor","corner","createHandlesOverlayArray","allowMovingSelection","selectionBorderTop","selectionBorderRight","selectionHandle","selectionBorderLeft","selectionBorderBottom","selectionHandleBehavior","createBorderOverlayArray","drawArray","propPrefix","offsetPoint","selectionBorder","isHeader","drawCell","rowOrderIndex","drawEach","cellStyle","cellGridAttributes","isFilterable","filterable","selected","hoverMode","openedFilter","selectedFilterButton","activeCell","rawValue","activeHeader","f","orderByArrowSize","treeArrowSize","visibleRows","paddingTop","cellLineHeight","cellLineSpacing","viewColumnIndex","boundColumnIndex","getBoundColumnIndexFromViewColumnIndex","sortRowIndex","isNormal","gridId","isRowTree","cellTree","rowTreeColIndex","isColumnTree","userHeight","userWidth","cellHeightWithChildGrid","cellWidthWithChildGrid","save","showRowNumbers","createGrid","cellGridHeight","orderBy","filterTextPrefix","isDrawText","movingSelection","moveOffset","restore","drawFilterButton","showRowNumberGaps","previousRowNumber","hasRowGap","beginRowIndex","endRowIndex","barHeight","rowHeaderCellRowNumberGapHeight","barColor","rowHeaderCellRowNumberGapColor","showUnhideColumnsIndicator","unhideIndicator","unhideIndicatorSize","cellX","topY","isActive","orderIndex0","orderIndex1","isHiddenColumn","drawIndicator","leftX","visibleUnhideIndicators","x2","y2","iconsWidth","lineX0","lineX1","orderIndexPtr","prevColumnIndex","nextColumnIndex","indicatorX","showUnhideRowsIndicator","cellY","topIndicators","bottomIndicators","matched","indicatorY","posX","posY","filterButtonBorderColor","filterButtonBackgroundColor","filterButtonActiveBackgroundColor","onFilterButton","filterButtonHoverBackgroundColor","filterButtonBorderRadius","drawRowHeader","showRowHeaders","filteredRowNumber","rowHeaderValue","hasActiveFilters","hasCollapsedRowGroup","headerDescription","shift","drawHeaders","g","o","columnHeaderCell","nonFrozenHeaderWidth","drawHeaderColumnRange","start","rArgs","rhIndex","showColumnHeaders","scrollPixelLeft","columnHeaderCellBorderWidth","scrollIndexLeft","isColumnHeaderCell","endCap","drawRow","treeHeight","rowSansTreeHeight","trees","scrollIndexRight","scrollPixelRight","initDraw","visibleGroups","firstRowIndexOffset","drawBackground","gridBackgroundColor","initGroupArea","translate","drawGroupArea","mx","my","frozenColumnsWidth","frozenRowsHeight","onTheLeft","columnGroupIndicatorPosition","onTheTop","rowGroupIndicatorPosition","groupingAreaBackgroundColor","columnGroupRowHeight","toggleHandleSize","toggleHandlePadding","centerY","bottomY","leftmostX","drawGroupHandleAtX","pushToVisibleGroups","rightX","crossTheFrozen","notInFrozen","colIndex","groupIndicatorColor","groupIndicatorBackgroundColor","ptr","containsBegining","containsEnd","rightCompare","compareX","minLeftX","lineCoords","colWidth","rowGroupColumnWidth","centerX","topmostY","drawGroupHandleAtY","bottomCompare","compareY","minTopY","drawFrozenRows","ln","allowFreezingRows","frozenMarkerBorderWidth","frozenMarkerWidth","drawRows","snapToRow","scrollPixelTop","scrollIndexTop","scrollIndexBottom","scrollPixelBottom","hide","showNewRow","newRow","drawMoveMarkers","moveOverlayBorderWidth","moveOverlayBorderColor","setLineDash","moveOverlayBorderSegments","drawReorderMarkers","reorderObject","dragOffset","reorderMarkerBackgroundColor","reorderMarkerBorderWidth","reorderMarkerBorderColor","dragMode","k","getRowHeight","reorderMarkerIndexBorderWidth","reorderMarkerIndexBorderColor","reorderTarget","selectedColumns","drawBorder","gridBorderWidth","gridBorderColor","drawSelectionBorders","selectionOverlayBorderWidth","selectionOverlayBorderColor","dsb","drawSelectionHandles","selectionHandleBorderWidth","selectionHandleBorderColor","selectionHandleColor","az","touchSelectHandleZone","ax","ay","drawActiveCell","cl","acx","acy","acw","ach","selectionMode","activeCellOverlayBorderWidth","activeCellOverlayBorderColor","getHeaderWidth","drawFrozenMarkers","dragStartObject","xHover","yHover","allowFreezingColumns","frozenMarkerHoverColor","frozenMarkerColor","frozenMarkerHoverBorderColor","frozenMarkerBorderColor","freezeMarkerPosition","frozenMarkerActiveColor","frozenMarkerActiveBorderColor","drawPerfLines","showPerformance","px","py","ph","dpl","debugPerfChartTextColor","toFixed","debugPerfChartBackground","debugScrollHeightColor","debugScrollWidthColor","debugPerformanceColor","debugEntitiesColor","debugTouchPPSXColor","debugTouchPPSYColor","pop","yPPS","xPPS","drawDebug","perf","perfDelta","htmlImages","startScale","scaleDelta","zoomDeltaStart","touchLength","touches","touchPosition","touchPosition1","scrollIndex","scrollPixel","canvasOffset","touchDelta","touchAnimateTo","scrollAnimation","touchPPS","touchPPST","xPPST","yPPST","touchDuration","pointerLockPosition","mouse","touch","touchStart","dragContext","debugBackgroundColor","lh","wheeling","fn","events","removeEachListener","sfn","defaultPrevented","dispatchEachEvent","getRatio","maxPixelRatio","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","refreshScrollCacheX","frozenWidth","isColumnCollapsed","dataWidth","reduceSchema","accumulator","drawAfterResize","vb","nb","co","isScrollBoxCorner","sbw","ratio","cellBorder","columnHeaderCellBorder","dataHeight","dims","topGroupAreaHeight","leftGroupAreaWidth","ch","checkScrollBoxVisibility","overflowX","overflowY","setScrollBoxSize","setCanvasSize","dim","appliedInlineStyles","args","widthBoxRatio","heightBoxRatio","scrollBarBoxMinSize","scrollBarBoxWidth","bar","box","page","pageUpDownOverlap","scroll","dontDraw","floor","draggingItem","which","stopFreezeMove","ctrl","ctrlKey","metaKey","persistantSelectionMode","singleSelectionMode","dragBounds","sBounds","delta","previousCell","scrollTimer","isInGrid","rowBoundaryCrossed","columnBoundaryCrossed","cellBoundaryCrossed","prefix","cursorGrab","indicator","getUnhideIndicator","dragItem","pc","rc","rx","ry","selecting","dragStart","getSelectionBounds","ignoreNextClick","toggleCollapseTree","dragAddToSelection","selectedData","getSelectedData","selectedCells","getSelectedCells","selectionBounds","selectRow","selectArea","isMultiRowsSelected","autoScrollOnMousemove","movedVertically","autoScrollMargin","movedHorizontally","autoScrollZone","columnGroup","getColumnGroupAt","rowGroup","getRowGroupAt","startingBounds","checkSelectionChange","sb","unhideColumns","unhideRows","toggleGroup","leftOffset","topOffset","xInGrid","yInGrid","selectAll","columnHeaderClickBehavior","treeArrowClickRadius","toggleTree","dragResizeColumn","resizingStartingWidth","resizingStartingHeight","minColumnWidth","minRowHeight","resizeScrollZone","resizeChildGrids","globalRowResize","stopDragResize","hasMoved","dragItemIsSelected","fitSelectedColumns","scrollGrid","scrollPointerLock","scrollStartMode","movementX","movementY","scrollMode","scrollStart","scrollModes","scrollRepeatRate","selectionScrollIncrement","stopScrollGrid","exitPointerLock","dragReorder","columReorder","rowReorder","allowColumnReordering","allowRowReordering","isMultiColumnsSelected","selectColumn","source","reorderDeadZone","stopDragReorder","oIndex","tIndex","odata","cr","sortColumnIndices","seletedColumnIndices","deleteCount","selectedRows","dragMove","stopDragMove","moveSelection","freezeMove","startFreezeMove","lastMouseDownTarget","move","freeze","onUnhideIndicator","requestPointerLock","dragging","cols","keepFocusOnMouseOut","isPrintableKeyEvent","selectNone","deleteSelectedData","Number","isArrowKey","firstSelectedRowIndex","firstSelectedRow","firstSelectedColumnIndex","lastSelectedColumn","yAtTop","yAtBottom","xAtLeft","xAtRight","selectionFollowsActiveCell","currentCellIsSelected","fitColumnToValues","autosize","cellTreeExpandCollapse","deltaMode","touchHaltAnimation","scrollTo","pasteData","pasteValue","mimeType","startRowIndex","startColIndex","isSupportedHtml","parseData","cellData","forEachSelectedCell","colName","realRowIndex","cells","existingRowData","newRowData","columnName","boundRowIndexMap","affectedCells","getNextVisibleColumnIndex","visibleColumnIndex","getVisibleSchema","getVisibleColumnIndexOf","clipboardItems","clipboardData","supportedMimeTypes","pasteableItems","itemToPaste","startCell","len","pasteType","getAsString","copySelectedCellsToClipboard","clearSelectedCells","genericDiv","genericSpan","genericTable","excelTable","excelTableRow","some","expression","IGNORE_NODETYPES","isHtmlTable","sanitizeElementData","elementData","innerText","parseHtmlText","doc","DOMParser","parseFromString","querySelector","parseHtmlTable","trs","childNodes","childNode","parseText","htmlSafe","createTextString","isNeat","values","createHTMLString","htmlString","mergeHiddenRowRanges","newRange","inserted","nextRange","ctor","treeGridAttributes","storageName","invalidSearchExpClass","localStyleLibraryStorageKey","add","sortFunction","filters","tempSchema","columnTreeRowStartIndex","columnTreeRowEndIndex","origin","sorters","parsers","schemaHashes","componentL1Events","eventNames","expandToRow","viewDataLength","orderedIndex","entries","firstRowAsString","rowAsString","rowDict","textString","copiedData","setData","has","result","groupIndex","matchedGroup","gi","nextCollapsed","groupsArray","gIndex","visibility","localStorage","setItem","selectedColumn","applyDefaultValue","newRowIndex","forEachHeader","getSchemaNameHash","getFilteredAndSortedViewData","newViewData","originalRowIndex","countOfRows","headerName","filterText","currentFilterFunction","filterFrozenRows","newLen","from2","to2","slice","it2","sortFn","rowA","rowB","rowIndexB","sortFrozenRows","_row","getBestGuessDataType","drawChildGrids","gridKey","setTimer","selectionScrollZone","validateColumn","setDefaults","obj1","obj2","setAttributes","eachAttribute","setStyle","eachStyle","findColumnMaxTextLength","contextmenu","disconnect","tryLoadStoredSettings","reloadStoredValues","tempData","collapsedCount","ctr","ri","lastchild","orTree","ctc","ci","_ri","child","_ci","si","otherData","tempRow","colTrees","collapsedColCount","hasOwnProperty","initCellTreeSettings","invalidRowTree","rt","parentIndex","columnTree","dataColumnLength","invalidColumnTree","ct","getDomRoot","shadowRoot","host","getFontName","fontStyle","getFontHeight","parseFloat","parseStyleValue","initProp","propName","getStyleProperty","styleKeys","supressDrawAndEvent","isDim","getItem","message","initialized","addStyleKeyIfNoneExists","publicStyleKeyIntf","initScrollBox","ie","navigator","userAgent","edge","webKit","moz","cursorGrabing","cursorGrabbing","clearChangeLog","gotoCell","gotoRow","addButton","toggleCellCollapseTree","expandCollapseCellTree","findColumnScrollLeft","findRowScrollTop","toggleGroupColumns","toggleGroupRows","isCellVisible","isRowVisible","isColumnVisible","getSchemaFromData","expandTree","collapseTree","insertRow","deleteRow","insertColumn","deleteColumn","addColumn","setRowHeight","setColumnWidth","resetColumnWidths","resetRowHeights","assertPxColor","clearPxColorAssertions","integerToAlpha","DOMStyles","valueObject","filterFor","filterRegExp","regEnd","pattern","exec","flags","substring","flagLength","RegExp","toLocaleUpperCase","textContent","TypeError","currentCursor","eventName","RangeError","eachDataRow","setTreeGridAttributes","setCellGridAttributes","schemaGetter","schemaSetter","eachSchemaColumn","hideEachSchemaColumn","getTypes","parseInnerHtml","callback","etl","autoGenerateSchema","dataGetter","dataSetter","autoResizeColumns","sHeight","sWidth","setScrollTop","preventScrollEvent","setScrollLeft","supressDrawEvent","webComponent","modules","dom","publicMethods","Grid","eval","module","attachShadow","HTMLElement","create","customElements","observedAttributes","define","canvasDatagrid","require","EXCLUDE_GLOBAL","tKeys","argKey","tKey","sKey","ordA","charCodeAt","ordZ","fromCharCode","showFilterInCell","offsetX","offsetY","targetX","targetY","sbh","treeData","multiColIsSelected","columnIndices","colIsSelected","supressEvent","addCol","removeCol","st","de","dragObject","trArgs","treeGridHeight","beginColumnOrderIndex","endColumnOrderIndex","newSize","dontSetStorageData","sorter","addGroup","groupFor","removeGroup","firstColumnName","lastColumnName","firstOne","lastOne","error","rowIndexFrom","rowIndexTo","isInteger","dataLength","sel","visibleSchema","selectionLength","xi","maxRowLength","minXi","yi","lastSourceIndex","cidx","indicators","yZero","xZero","useTouchScrollZones","getBorder","entitiy","borderResizeZone","tsz","touchScrollZone","moveMode","borderDragBehavior","moveBorder","xBorderBehavior","yBorderBehavior","isVerticalScrollBar","isHorizontalScrollBar","allowColumnResize","allowColumnResizeFromCell","allowRowHeaderResize","allowRowResize","allowRowResizeFromCell","columnGrabZoneSize","rowGrabZoneSize","maxCol","minCol","mapEachSchemaColumn","bounds","rowHeaderCellFont","autosizePadding","autosizeHeaderCellPadding","rowHeaderCellPaddingRight","rowHeaderCellPaddingLeft","formatter","columnHeaderCellFont","columnHeaderCellPaddingRight","columnHeaderCellPaddingLeft","cellAutoResizePadding","cellFont","cellPaddingRight","total","cellFormatterString","headerCell","asc","aValue","bValue","localeCompare","date","Date","getTime","touchTimerMs","debounceTouchMove","touchMoving","touchScrollTimeout","animationFrames","getTouchPos","touchIndex","easingFunctions","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easing","touchEasingMethod","calculatePPSTimed","touchSigmaTimed","calculatePPS","touchSigma","touchEndAnimation","touchReleaseAnimationDurationMs","stopAnimation","touchEditCell","changedTouches","startingCell","calculatePPSTimer","touchContextTimeout","touchStartEvent","zoomAltered","touchStart1","touchScrollStart","touchContextMenuTimeMs","touchEndEvents","touchmove","passive","touchend","touchcancel","touchSelect","handleType","touchSelecting","touchMove","rw","rScrollZone","lScrollZone","bScrollZone","tScrollZone","t1","t2","touchDeadZone","touchZoomSensitivity","touchZoomMin","touchZoomMax","touchScroll","dz","touchReleaseAcceleration","scrollAnimationPPSThreshold"],"mappings":"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","file":"canvas-datagrid.debug.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"canvasDatagrid\"] = factory();\n\telse\n\t\troot[\"canvasDatagrid\"] = factory();\n})(self, function() {\nreturn ","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false, Event: false*/\n'use strict';\n\nexport default function (self) {\n let zIndexTop;\n\n function applyButtonMenuItemStyle(buttonMenuItemContainer) {\n self.createInlineStyle(\n buttonMenuItemContainer,\n 'canvas-datagrid-button-menu-item' + (self.mobile ? '-mobile' : ''),\n );\n buttonMenuItemContainer.addEventListener('mouseover', function () {\n self.createInlineStyle(\n buttonMenuItemContainer,\n 'canvas-datagrid-button-menu-item:hover',\n );\n });\n buttonMenuItemContainer.addEventListener('mouseout', function () {\n self.createInlineStyle(\n buttonMenuItemContainer,\n 'canvas-datagrid-button-menu-item',\n );\n });\n }\n\n function applyButtonStyle(button) {\n self.createInlineStyle(button, 'canvas-datagrid-button-wrapper');\n button.addEventListener('mouseover', function () {\n if (!self.buttonMenu) {\n self.createInlineStyle(button, 'canvas-datagrid-button-wrapper:hover');\n }\n });\n button.addEventListener('mouseout', function () {\n if (!self.buttonMenu) {\n self.createInlineStyle(button, 'canvas-datagrid-button-wrapper');\n }\n });\n }\n\n function createButton(pos, items, imgSrc) {\n var wrapper = document.createElement('div'),\n buttonArrow = document.createElement('div'),\n buttonIcon = document.createElement('div'),\n intf = {};\n\n if (!Array.isArray(items)) {\n throw new Error('createButton expects an array.');\n }\n\n function init() {\n var loc = {},\n s = self.scrollOffset(self.canvas);\n\n if (zIndexTop === undefined) {\n zIndexTop = self.style.buttonZIndex;\n }\n\n applyButtonStyle(wrapper);\n self.createInlineStyle(buttonIcon, 'canvas-datagrid-button-icon');\n self.createInlineStyle(buttonArrow, 'canvas-datagrid-button-arrow');\n\n loc.x = pos.left - s.left;\n loc.y = pos.top - s.top;\n loc.height = 0;\n zIndexTop += 1;\n wrapper.style.position = 'absolute';\n wrapper.style.zIndex = zIndexTop;\n wrapper.style.left = loc.x + 'px';\n wrapper.style.top = loc.y + 'px';\n wrapper.left = pos.left + self.scrollBox.scrollLeft;\n wrapper.top = pos.top + self.scrollBox.scrollTop;\n buttonArrow.innerHTML = self.style.buttonArrowDownHTML;\n if (imgSrc) {\n let img = document.createElement('img');\n img.setAttribute('src', imgSrc);\n img.style.maxWidth = '100%';\n img.style.height = '100%';\n buttonIcon.appendChild(img);\n }\n wrapper.appendChild(buttonIcon);\n wrapper.appendChild(buttonArrow);\n document.body.appendChild(wrapper);\n wrapper.addEventListener('click', toggleButtonMenu);\n }\n\n intf.wrapper = wrapper;\n intf.items = items;\n init();\n\n intf.dispose = function () {\n if (wrapper.parentNode) {\n wrapper.parentNode.removeChild(wrapper);\n }\n };\n return intf;\n }\n\n function toggleButtonMenu() {\n function createDisposeEvent() {\n requestAnimationFrame(function () {\n document.addEventListener('click', self.disposeButtonMenu);\n });\n }\n if (self.buttonMenu) {\n self.disposeButtonMenu();\n } else {\n let pos = {\n left: self.button.wrapper.left - self.scrollBox.scrollLeft,\n top:\n self.button.wrapper.top +\n self.button.wrapper.offsetHeight -\n self.scrollBox.scrollTop,\n };\n self.buttonMenu = createButtonMenu(pos, self.button.items);\n self.createInlineStyle(\n self.button.wrapper,\n 'canvas-datagrid-button-wrapper:active',\n );\n createDisposeEvent();\n }\n }\n\n function createButtonMenu(pos, items) {\n var buttonMenu = document.createElement('div'),\n selectedIndex = -1,\n intf = {},\n rect;\n\n function createItems() {\n function addItem(item, menuItemContainer) {\n function addContent(content) {\n if (content === null) {\n return;\n }\n\n if (typeof content === 'object') {\n menuItemContainer.appendChild(content);\n return;\n }\n\n applyButtonMenuItemStyle(menuItemContainer);\n menuItemContainer.innerHTML = content;\n return;\n }\n\n addContent(item.title);\n item.buttonMenuItemContainer = menuItemContainer;\n\n if (item.click) {\n menuItemContainer.addEventListener('click', function (ev) {\n item.click.apply(self, [ev]);\n self.disposeButton();\n });\n }\n }\n\n for (let item of items) {\n var buttonMenuItemContainer = document.createElement('div');\n addItem(item, buttonMenuItemContainer);\n buttonMenu.appendChild(buttonMenuItemContainer);\n }\n }\n\n function clickIndex(idx) {\n items[idx].buttonMenuItemContainer.dispatchEvent(new Event('click'));\n }\n\n function init() {\n var loc = {},\n s = self.scrollOffset(self.canvas);\n\n if (zIndexTop === undefined) {\n zIndexTop = self.style.buttonZIndex;\n }\n\n createItems();\n self.createInlineStyle(\n buttonMenu,\n 'canvas-datagrid-button-menu' + (self.mobile ? '-mobile' : ''),\n );\n\n loc.x = pos.left - s.left;\n loc.y = pos.top - s.top;\n loc.height = 0;\n zIndexTop += 1;\n buttonMenu.style.position = 'absolute';\n buttonMenu.style.zIndex = zIndexTop;\n buttonMenu.style.left = loc.x + 'px';\n buttonMenu.style.top = loc.y + 'px';\n document.body.appendChild(buttonMenu);\n rect = buttonMenu.getBoundingClientRect();\n\n if (rect.bottom > window.innerHeight) {\n loc.y =\n self.button.wrapper.top -\n buttonMenu.offsetHeight -\n self.scrollBox.scrollTop;\n if (loc.y < 0) {\n loc.y = self.style.buttonMenuWindowMargin;\n }\n\n if (\n buttonMenu.offsetHeight >\n window.innerHeight - self.style.buttonMenuWindowMargin\n ) {\n buttonMenu.style.height =\n window.innerHeight - self.style.buttonMenuWindowMargin * 2 + 'px';\n }\n }\n\n if (rect.right > window.innerWidth) {\n loc.x -=\n rect.right - window.innerWidth + self.style.buttonMenuWindowMargin;\n }\n\n if (loc.x < 0) {\n loc.x = self.style.buttonMenuWindowMargin;\n }\n\n if (loc.y < 0) {\n loc.y = self.style.buttonMenuWindowMargin;\n }\n\n buttonMenu.style.left = loc.x + 'px';\n buttonMenu.style.top = loc.y + 'px';\n }\n\n intf.buttonMenu = buttonMenu;\n init();\n intf.clickIndex = clickIndex;\n intf.rect = rect;\n intf.items = items;\n\n intf.dispose = function () {\n if (buttonMenu.parentNode) {\n buttonMenu.parentNode.removeChild(buttonMenu);\n }\n };\n\n Object.defineProperty(intf, 'selectedIndex', {\n get: function get() {\n return selectedIndex;\n },\n set: function set(value) {\n if (typeof value !== 'number' || isNaN(value) || !isFinite(value)) {\n throw new Error('Button menu selected index must be a sane number.');\n }\n\n selectedIndex = value;\n\n if (selectedIndex > items.length - 1) {\n selectedIndex = items.length - 1;\n }\n\n if (selectedIndex < 0) {\n selectedIndex = 0;\n }\n\n items.forEach(function (item, index) {\n if (index === selectedIndex) {\n return self.createInlineStyle(\n item.buttonMenuItemContainer,\n 'canvas-datagrid-button-menu-item:hover',\n );\n }\n\n self.createInlineStyle(\n item.buttonMenuItemContainer,\n 'canvas-datagrid-button-menu-item',\n );\n });\n },\n });\n return intf;\n }\n\n self.disposeButtonMenu = function () {\n if (self.buttonMenu) {\n document.removeEventListener('click', self.disposeButtonMenu);\n self.buttonMenu.dispose();\n self.buttonMenu = undefined;\n self.createInlineStyle(\n self.button.wrapper,\n 'canvas-datagrid-button-wrapper:hover',\n );\n }\n };\n\n self.disposeButton = function (e) {\n if (e && e.keyCode !== 27) return;\n document.removeEventListener('keydown', self.disposeButton);\n zIndexTop = self.style.buttonZIndex;\n self.disposeButtonMenu();\n\n if (self.button) {\n self.button.dispose();\n }\n\n self.button = undefined;\n };\n\n self.moveButtonPos = function () {\n self.button.wrapper.style.left =\n self.button.wrapper.left - self.scrollBox.scrollLeft + 'px';\n self.button.wrapper.style.top =\n self.button.wrapper.top - self.scrollBox.scrollTop + 'px';\n self.disposeButtonMenu();\n };\n\n self.attachButton = function (pos, items, imgSrc) {\n function createDisposeEvent() {\n requestAnimationFrame(function () {\n document.addEventListener('keydown', self.disposeButton);\n });\n }\n\n if (self.button) {\n self.disposeButton();\n }\n\n self.button = createButton(pos, items, imgSrc);\n createDisposeEvent();\n };\n return;\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nimport defaults from './defaults';\n\nexport default function () {\n var typeMap,\n component = {};\n component.dehyphenateProperty = function hyphenateProperty(prop) {\n prop = prop.replace('--cdg-', '');\n var p = '',\n nextLetterCap;\n Array.prototype.forEach.call(prop, function (char) {\n if (nextLetterCap) {\n nextLetterCap = false;\n p += char.toUpperCase();\n return;\n }\n if (char === '-') {\n nextLetterCap = true;\n return;\n }\n p += char;\n });\n return p;\n };\n component.hyphenateProperty = function hyphenateProperty(prop, cust) {\n var p = '';\n Array.prototype.forEach.call(prop, function (char) {\n if (char === char.toUpperCase()) {\n p += '-' + char.toLowerCase();\n return;\n }\n p += char;\n });\n return (cust ? '--cdg-' : '') + p;\n };\n function getDefaultItem(base, item) {\n var i = {},\n r;\n defaults(i);\n r = i.defaults[base].filter(function (i) {\n return (\n i[0].toLowerCase() === item.toLowerCase() ||\n component.hyphenateProperty(i[0]) === item.toLowerCase() ||\n component.hyphenateProperty(i[0], true) === item.toLowerCase()\n );\n })[0];\n return r;\n }\n component.applyComponentStyle = function (supressChangeAndDrawEvents, intf) {\n if (!intf.isComponent) {\n return;\n }\n var cStyle = window.getComputedStyle(\n intf.tagName === 'CANVAS-DATAGRID' ? intf : intf.canvas,\n null,\n ),\n defs = {};\n intf.computedStyle = cStyle;\n defaults(defs);\n defs = defs.defaults.styles;\n defs.forEach(function (def) {\n var val;\n val = cStyle.getPropertyValue(component.hyphenateProperty(def[0], true));\n if (val === '') {\n val = cStyle.getPropertyValue(\n component.hyphenateProperty(def[0], false),\n );\n }\n if (val !== '' && typeof val === 'string') {\n intf.setStyleProperty(\n def[0],\n typeMap[typeof def[1]](\n val.replace(/^\\s+/, '').replace(/\\s+$/, ''),\n def[1],\n ),\n true,\n );\n }\n });\n if (!supressChangeAndDrawEvents && intf.dispatchEvent) {\n requestAnimationFrame(function () {\n intf.resize(true);\n });\n intf.dispatchEvent('stylechanged', intf.style);\n }\n };\n typeMap = {\n data: function (strData) {\n try {\n return JSON.parse(strData);\n } catch (e) {\n throw new Error('Cannot read JSON data in canvas-datagrid data.');\n }\n },\n schema: function (strSchema) {\n try {\n return JSON.parse(strSchema);\n } catch (e) {\n throw new Error(\n 'Cannot read JSON data in canvas-datagrid schema attribute.',\n );\n }\n },\n number: function (strNum, def) {\n var n = parseInt(strNum, 10);\n return isNaN(n) ? def : n;\n },\n boolean: function (strBool) {\n return /true/i.test(strBool);\n },\n string: function (str) {\n return str;\n },\n };\n component.getObservableAttributes = function () {\n var i = {},\n attrs = ['data', 'schema', 'style', 'className', 'name'];\n defaults(i);\n i.defaults.attributes.forEach(function (attr) {\n attrs.push(attr[0].toLowerCase());\n });\n return attrs;\n };\n component.disconnectedCallback = function () {\n this.connected = false;\n };\n component.connectedCallback = function () {\n var intf = this;\n intf.parentDOMNode.innerHTML = '';\n intf.parentDOMNode.appendChild(intf.canvas);\n intf.connected = true;\n component.observe(intf);\n component.applyComponentStyle(true, intf);\n intf.resize(true);\n };\n component.adoptedCallback = function () {\n this.resize();\n };\n component.attributeChangedCallback = function (attrName, oldVal, newVal) {\n var tfn,\n intf = this,\n def;\n if (attrName === 'style') {\n component.applyComponentStyle(false, intf);\n return;\n }\n if (attrName === 'data') {\n if (intf.dataType === 'application/x-canvas-datagrid') {\n intf.dataType = 'application/json+x-canvas-datagrid';\n }\n intf.data = newVal;\n return;\n }\n if (attrName === 'schema') {\n intf.schema = typeMap.schema(newVal);\n return;\n }\n if (attrName === 'name') {\n intf.name = newVal;\n return;\n }\n if (attrName === 'class' || attrName === 'className') {\n return;\n }\n def = getDefaultItem('attributes', attrName);\n if (def) {\n tfn = typeMap[typeof def[1]];\n intf.attributes[def[0]] = tfn(newVal);\n return;\n }\n if (/^on/.test(attrName)) {\n intf.addEventListener('on' + attrName, Function('e', newVal));\n }\n return;\n };\n component.observe = function (intf) {\n var observer;\n if (!window.MutationObserver) {\n return;\n }\n intf.applyComponentStyle = function () {\n component.applyComponentStyle(false, intf);\n intf.resize();\n };\n /**\n * Applies the computed css styles to the grid. In some browsers, changing directives in attached style sheets does not automatically update the styles in this component. It is necessary to call this method to update in these cases.\n * @memberof canvasDatagrid\n * @name applyComponentStyle\n * @method\n */\n observer = new window.MutationObserver(function (mutations) {\n var checkInnerHTML, checkStyle;\n Array.prototype.forEach.call(mutations, function (mutation) {\n if (\n mutation.attributeName === 'class' ||\n mutation.attributeName === 'style'\n ) {\n checkStyle = true;\n return;\n }\n if (mutation.target.nodeName === 'STYLE') {\n checkStyle = true;\n return;\n }\n if (\n mutation.target.parentNode &&\n mutation.target.parentNode.nodeName === 'STYLE'\n ) {\n checkStyle = true;\n return;\n }\n if (\n mutation.target === intf &&\n (mutation.addedNodes.length > 0 || mutation.type === 'characterData')\n ) {\n checkInnerHTML = true;\n }\n });\n if (checkStyle) {\n intf.applyComponentStyle(false, intf);\n }\n if (checkInnerHTML) {\n if (intf.dataType === 'application/x-canvas-datagrid') {\n intf.dataType = 'application/json+x-canvas-datagrid';\n }\n intf.data = intf.innerHTML;\n }\n });\n observer.observe(intf, {\n characterData: true,\n childList: true,\n attributes: true,\n subtree: true,\n });\n Array.prototype.forEach.call(\n document.querySelectorAll('style'),\n function (el) {\n observer.observe(el, {\n characterData: true,\n childList: true,\n attributes: true,\n subtree: true,\n });\n },\n );\n };\n return component;\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false, Event: false*/\n'use strict';\n\nexport default function (self) {\n var zIndexTop, hoverScrollTimeout, autoCompleteContext;\n function applyContextItemStyle(contextItemContainer) {\n self.createInlineStyle(\n contextItemContainer,\n 'canvas-datagrid-context-menu-item' + (self.mobile ? '-mobile' : ''),\n );\n contextItemContainer.addEventListener('mouseover', function () {\n self.createInlineStyle(\n contextItemContainer,\n 'canvas-datagrid-context-menu-item:hover',\n );\n });\n contextItemContainer.addEventListener('mouseout', function () {\n self.createInlineStyle(\n contextItemContainer,\n 'canvas-datagrid-context-menu-item',\n );\n });\n }\n function createContextMenu(ev, pos, items, parentContextMenu) {\n var container = document.createElement('div'),\n upArrow = document.createElement('div'),\n downArrow = document.createElement('div'),\n children = [],\n selectedIndex = -1,\n intf = {},\n rect;\n if (!Array.isArray(items)) {\n throw new Error('createContextMenu expects an array.');\n }\n function createItems() {\n items.forEach(function (item) {\n var contextItemContainer = document.createElement('div'),\n childMenuArrow;\n function removeChildContext(e) {\n if (\n e.relatedTarget === container ||\n item.contextMenu.container === e.relatedTarget ||\n childMenuArrow === e.relatedTarget ||\n contextItemContainer === e.relatedTarget ||\n item.contextMenu.container.contains(e.relatedTarget)\n ) {\n return;\n }\n item.contextMenu.dispose();\n children.splice(children.indexOf(item.contextMenu), 1);\n item.contextMenu = undefined;\n contextItemContainer.removeEventListener(\n 'mouseout',\n removeChildContext,\n );\n container.removeEventListener('mouseout', removeChildContext);\n contextItemContainer.setAttribute('contextOpen', '0');\n contextItemContainer.setAttribute('opening', '0');\n }\n function contextAddCallback(items) {\n // check yet again if the user hasn't moved off\n if (\n contextItemContainer.getAttribute('opening') !== '1' ||\n contextItemContainer.getAttribute('contextOpen') === '1'\n ) {\n return;\n }\n var cPos = contextItemContainer.getBoundingClientRect();\n cPos = {\n left:\n cPos.left +\n self.style.childContextMenuMarginLeft +\n container.offsetWidth,\n top: cPos.top + self.style.childContextMenuMarginTop,\n bottom: cPos.bottom,\n right: cPos.right,\n };\n item.contextMenu = createContextMenu(ev, cPos, items, intf);\n contextItemContainer.setAttribute('contextOpen', '1');\n contextItemContainer.addEventListener('mouseout', removeChildContext);\n container.addEventListener('mouseout', removeChildContext);\n children.push(item.contextMenu);\n }\n function createChildContext() {\n var i;\n if (contextItemContainer.getAttribute('contextOpen') === '1') {\n return;\n }\n contextItemContainer.setAttribute('opening', '1');\n if (typeof item.items === 'function') {\n i = item.items.apply(intf, [\n function (items) {\n contextAddCallback(items);\n },\n ]);\n if (i !== undefined && Array.isArray(i)) {\n contextAddCallback(i);\n }\n return;\n }\n contextAddCallback(item.items);\n }\n function addItem(item) {\n function addContent(content) {\n if (content === null) {\n return;\n }\n if (typeof content === 'function') {\n return addContent(content(ev));\n }\n if (typeof content === 'object') {\n contextItemContainer.appendChild(content);\n return;\n }\n applyContextItemStyle(contextItemContainer);\n contextItemContainer.innerHTML = content;\n return;\n }\n addContent(item.title);\n item.contextItemContainer = contextItemContainer;\n if (\n (item.items && item.items.length > 0) ||\n typeof item.items === 'function'\n ) {\n childMenuArrow = document.createElement('div');\n self.createInlineStyle(\n childMenuArrow,\n 'canvas-datagrid-context-child-arrow',\n );\n childMenuArrow.innerHTML = self.style.childContextMenuArrowHTML;\n contextItemContainer.appendChild(childMenuArrow);\n contextItemContainer.addEventListener(\n 'mouseover',\n createChildContext,\n );\n contextItemContainer.addEventListener('mouseout', function () {\n contextItemContainer.setAttribute('opening', '0');\n });\n }\n if (item.click) {\n contextItemContainer.addEventListener('click', function (ev) {\n item.click.apply(self, [ev]);\n });\n }\n }\n addItem(item);\n container.appendChild(contextItemContainer);\n });\n }\n function clickIndex(idx) {\n items[idx].contextItemContainer.dispatchEvent(new Event('click'));\n }\n function checkArrowVisibility() {\n if (container.scrollTop > 0) {\n self.parentDOMNode.appendChild(upArrow);\n } else if (upArrow.parentNode) {\n upArrow.parentNode.removeChild(upArrow);\n }\n if (\n container.scrollTop >=\n container.scrollHeight - container.offsetHeight &&\n downArrow.parentNode\n ) {\n downArrow.parentNode.removeChild(downArrow);\n } else if (\n container.scrollHeight - container.offsetHeight > 0 &&\n !(\n container.scrollTop >=\n container.scrollHeight - container.offsetHeight\n )\n ) {\n self.parentDOMNode.appendChild(downArrow);\n }\n }\n function fade(element) {\n var opacity = 1;\n var timer = setInterval(function () {\n if (opacity <= 0.1) {\n clearInterval(timer);\n element.style.display = 'none';\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n }\n }\n element.style.opacity = opacity;\n element.style.filter = 'alpha(opacity=' + opacity * 100 + ')';\n opacity -= opacity * 0.1;\n }, self.attributes.animationDurationHideContextMenu * 0.1);\n }\n function unfade(element) {\n var opacity = 0.1;\n element.style.display = 'block';\n var timer = setInterval(function () {\n if (opacity >= 1) {\n clearInterval(timer);\n }\n element.style.opacity = opacity;\n element.style.filter = 'alpha(opacity=' + opacity * 100 + ')';\n opacity += opacity * 0.1;\n }, self.attributes.animationDurationShowContextMenu * 0.1);\n }\n function startHoverScroll(type) {\n return function t() {\n var a = self.attributes.contextHoverScrollAmount;\n if (type === 'up' && container.scrollTop === 0) {\n return;\n }\n if (type === 'down' && container.scrollTop === container.scrollHeight) {\n return;\n }\n container.scrollTop += type === 'up' ? -a : a;\n hoverScrollTimeout = setTimeout(\n t,\n self.attributes.contextHoverScrollRateMs,\n type,\n );\n };\n }\n function endHoverScroll(type) {\n return function () {\n clearTimeout(hoverScrollTimeout);\n };\n }\n function init() {\n var loc = {},\n s = self.scrollOffset(self.canvas);\n if (zIndexTop === undefined) {\n zIndexTop = self.style.contextMenuZIndex;\n }\n createItems();\n self.createInlineStyle(\n container,\n 'canvas-datagrid-context-menu' + (self.mobile ? '-mobile' : ''),\n );\n loc.x = pos.left - s.left;\n loc.y = pos.top - s.top;\n loc.height = 0;\n zIndexTop += 1;\n container.style.opacity = 0;\n container.style.position = 'absolute';\n upArrow.style.color = self.style.contextMenuArrowColor;\n downArrow.style.color = self.style.contextMenuArrowColor;\n [upArrow, downArrow].forEach(function (el) {\n el.style.textAlign = 'center';\n el.style.position = 'absolute';\n el.style.zIndex = zIndexTop + 1;\n });\n container.style.zIndex = zIndexTop;\n if (parentContextMenu && parentContextMenu.inputDropdown) {\n container.style.maxHeight =\n window.innerHeight -\n loc.y -\n self.style.autocompleteBottomMargin +\n 'px';\n container.style.minWidth = pos.width + 'px';\n loc.y += pos.height;\n }\n if (self.mobile) {\n container.style.width = pos.width + 'px';\n }\n container.style.left = loc.x + 'px';\n container.style.top = loc.y + 'px';\n container.addEventListener('scroll', checkArrowVisibility);\n container.addEventListener('wheel', function (e) {\n if (self.hasFocus) {\n container.scrollTop += e.deltaY;\n container.scrollLeft += e.deltaX;\n }\n checkArrowVisibility();\n });\n upArrow.innerHTML = self.style.contextMenuArrowUpHTML;\n downArrow.innerHTML = self.style.contextMenuArrowDownHTML;\n container.appendChild(upArrow);\n document.body.appendChild(downArrow);\n document.body.appendChild(container);\n unfade(container);\n rect = container.getBoundingClientRect();\n // TODO: fix !(parentContextMenu && parentContextMenu.inputDropdown) state (autocomplete)\n if (rect.bottom > window.innerHeight) {\n if (!(parentContextMenu && parentContextMenu.inputDropdown)) {\n loc.y -=\n rect.bottom +\n self.style.contextMenuWindowMargin -\n window.innerHeight;\n }\n if (loc.y < 0) {\n loc.y = self.style.contextMenuWindowMargin;\n }\n if (\n container.offsetHeight >\n window.innerHeight - self.style.contextMenuWindowMargin\n ) {\n container.style.height =\n window.innerHeight - self.style.contextMenuWindowMargin * 2 + 'px';\n }\n }\n if (rect.right > window.innerWidth) {\n loc.x -=\n rect.right - window.innerWidth + self.style.contextMenuWindowMargin;\n }\n if (loc.x < 0) {\n loc.x = self.style.contextMenuWindowMargin;\n }\n if (loc.y < 0) {\n loc.y = self.style.contextMenuWindowMargin;\n }\n container.style.left = loc.x + 'px';\n container.style.top = loc.y + 'px';\n rect = container.getBoundingClientRect();\n upArrow.style.top = rect.top + 'px';\n downArrow.style.top =\n rect.top + rect.height - downArrow.offsetHeight + 'px';\n upArrow.style.left = rect.left + 'px';\n downArrow.style.left = rect.left + 'px';\n downArrow.style.width = container.offsetWidth + 'px';\n upArrow.style.width = container.offsetWidth + 'px';\n downArrow.addEventListener('mouseover', startHoverScroll('down'));\n downArrow.addEventListener('mouseout', endHoverScroll('down'));\n upArrow.addEventListener('mouseover', startHoverScroll('up'));\n upArrow.addEventListener('mouseout', endHoverScroll('up'));\n checkArrowVisibility();\n }\n intf.parentGrid = self.intf;\n intf.parentContextMenu = parentContextMenu;\n intf.container = container;\n init();\n intf.clickIndex = clickIndex;\n intf.rect = rect;\n intf.items = items;\n intf.upArrow = upArrow;\n intf.downArrow = downArrow;\n intf.dispose = function () {\n clearTimeout(hoverScrollTimeout);\n children.forEach(function (c) {\n c.dispose();\n });\n [downArrow, upArrow, container].forEach(function (el) {\n fade(el);\n });\n };\n Object.defineProperty(intf, 'selectedIndex', {\n get: function () {\n return selectedIndex;\n },\n set: function (value) {\n if (typeof value !== 'number' || isNaN(value || !isFinite(value))) {\n throw new Error('Context menu selected index must be a sane number.');\n }\n selectedIndex = value;\n if (selectedIndex > items.length - 1) {\n selectedIndex = items.length - 1;\n }\n if (selectedIndex < 0) {\n selectedIndex = 0;\n }\n items.forEach(function (item, index) {\n if (index === selectedIndex) {\n return self.createInlineStyle(\n item.contextItemContainer,\n 'canvas-datagrid-context-menu-item:hover',\n );\n }\n self.createInlineStyle(\n item.contextItemContainer,\n 'canvas-datagrid-context-menu-item',\n );\n });\n },\n });\n return intf;\n }\n function createFilterContextMenuItems(e) {\n var filterContainer = document.createElement('div'),\n filterLabel = document.createElement('div'),\n filterAutoCompleteButton = document.createElement('button'),\n filterInput = document.createElement('input'),\n n =\n e.cell && e.cell.header\n ? e.cell.header.title || e.cell.header.name\n : '',\n iRect;\n function checkRegExpErrorState() {\n filterInput.style.background = self.style.contextFilterInputBackground;\n filterInput.style.color = self.style.contextFilterInputColor;\n if (self.invalidFilterRegEx) {\n filterInput.style.background =\n self.style.contextFilterInvalidRegExpBackground;\n filterInput.style.color = self.style.contextFilterInvalidRegExpColor;\n }\n }\n function fillAutoComplete() {\n var count = 0;\n var items = {};\n var blanksItem = [];\n\n self.viewData.forEach(function (row) {\n var cellValue =\n row[e.cell.header.name] == null\n ? row[e.cell.header.name]\n : String(row[e.cell.header.name]).trim();\n var value = self.blankValues.includes(cellValue)\n ? self.attributes.blanksText\n : cellValue;\n\n if (items[value] || count > self.attributes.maxAutoCompleteItems) {\n return;\n }\n count += 1;\n items[value] = {\n title: self.formatters[e.cell.header.type || 'string']({\n cell: { value: value },\n }),\n click: function (e) {\n filterInput.value = value;\n e.stopPropagation();\n filterInput.dispatchEvent(new Event('keyup'));\n self.disposeAutocomplete();\n return;\n },\n };\n });\n\n if (Object.keys(items).indexOf(self.attributes.blanksText) !== -1) {\n blanksItem.push(items[self.attributes.blanksText]);\n delete items[self.attributes.blanksText];\n }\n\n return blanksItem.concat(\n Object.keys(items).map(function (key) {\n return items[key];\n }),\n );\n }\n\n function createAutoCompleteContext(ev) {\n if (ev && ['ArrowDown', 'ArrowUp', 'Enter', 'Tab'].includes(ev.key)) {\n return;\n }\n\n var autoCompleteItems = fillAutoComplete();\n\n iRect = filterInput.getBoundingClientRect();\n if (autoCompleteContext) {\n autoCompleteContext.dispose();\n autoCompleteContext = undefined;\n }\n autoCompleteContext = createContextMenu(\n e,\n {\n left: iRect.left,\n top: iRect.top,\n right: iRect.right,\n bottom: iRect.bottom,\n height: iRect.height,\n width: iRect.width,\n },\n autoCompleteItems,\n { inputDropdown: true },\n );\n autoCompleteContext.selectedIndex = 0;\n }\n self.createInlineStyle(filterLabel, 'canvas-datagrid-context-menu-label');\n self.createInlineStyle(\n filterAutoCompleteButton,\n 'canvas-datagrid-context-menu-filter-button',\n );\n self.createInlineStyle(\n filterInput,\n 'canvas-datagrid-context-menu-filter-input',\n );\n checkRegExpErrorState();\n filterInput.onclick = self.disposeAutocomplete;\n filterInput.addEventListener('keydown', function (e) {\n if (e.key === 'ArrowDown') {\n autoCompleteContext.selectedIndex += 1;\n }\n\n if (e.key === 'ArrowUp') {\n autoCompleteContext.selectedIndex -= 1;\n }\n\n if (e.key === 'Enter') {\n autoCompleteContext.clickIndex(autoCompleteContext.selectedIndex);\n self.disposeContextMenu();\n }\n\n if (e.key === 'Tab') {\n autoCompleteContext.clickIndex(autoCompleteContext.selectedIndex);\n e.preventDefault();\n }\n\n if (e.key === 'Escape') {\n self.disposeContextMenu();\n }\n });\n filterInput.addEventListener('keyup', function () {\n self.setFilter(e.cell.header.name, filterInput.value);\n });\n filterInput.addEventListener('keyup', createAutoCompleteContext);\n ['focus', 'blur', 'keydown', 'keyup', 'change'].forEach(function (en) {\n filterInput.addEventListener(en, checkRegExpErrorState);\n });\n filterInput.value = e.cell.header\n ? self.columnFilters[e.cell.header.name] || ''\n : '';\n filterLabel.innerHTML = self.attributes.filterOptionText.replace(/%s/g, n);\n filterAutoCompleteButton.onclick = function () {\n if (autoCompleteContext) {\n return self.disposeAutocomplete();\n }\n createAutoCompleteContext();\n };\n filterAutoCompleteButton.innerHTML = self.style.contextFilterButtonHTML;\n filterContainer.addEventListener('click', function (e) {\n return e.stopPropagation();\n });\n filterContainer.appendChild(filterLabel);\n filterContainer.appendChild(filterInput);\n filterContainer.appendChild(filterAutoCompleteButton);\n e.items.push({\n title: filterContainer,\n });\n if (Object.keys(self.columnFilters).length) {\n Object.keys(self.columnFilters).forEach(function (cf) {\n var h = self.getHeaderByName(cf);\n e.items.push({\n title: self.attributes.removeFilterOptionText.replace(\n /%s/g,\n h.title || h.name,\n ),\n click: function removeFilterClick(e) {\n e.preventDefault();\n self.setFilter(cf, '');\n self.controlInput.focus();\n },\n });\n });\n }\n }\n\n /**\n * Return a tuple if the user selected contiguous columns, otherwise `null`.\n * Info: Because the user may reorder the columns,\n * the schemaIndex of the first item may be greater than the schemaIndex of the second item,\n * but the columnIndex of the firs item must less than the columnIndex of the second item.\n * @param {any[]} schema from `self.getSchema()`\n * @returns {any[]} column schemas tuple (each schema has an additional field `schemaIndex`)\n */\n function getSelectedContiguousColumns(ev, schema) {\n const memoKey = '__contiguousColumns';\n if (Array.isArray(ev[memoKey]) || ev[memoKey] === null) return ev[memoKey];\n ev[memoKey] = null;\n\n if (!Array.isArray(self.selections) || self.selections.length === 0) return;\n const selection = self.selections[0];\n if (!selection || selection.length === 0) return;\n for (let rowIndex = 0; rowIndex < self.viewData.length; rowIndex++) {\n const row = self.viewData[rowIndex];\n if (!row) continue;\n const compare = self.selections[rowIndex];\n if (!compare) return;\n if (compare.length !== selection.length) return;\n for (let i = 0; i < selection.length; i++)\n if (selection[i] !== compare[i]) return;\n }\n selection.sort((a, b) => a - b);\n\n /** @type {number[][]} */\n const ranges = [];\n let begin = selection[0];\n let end = selection[0];\n for (let i = 1; i < selection.length; i++) {\n const orderIndex = selection[i];\n if (orderIndex === end + 1) {\n end = orderIndex;\n continue;\n }\n ranges.push([begin, end]);\n begin = orderIndex;\n end = orderIndex;\n }\n ranges.push([begin, end]);\n\n const currentOrderIndex = ev.cell.columnIndex;\n const matchedRange = ranges.find(\n (range) =>\n currentOrderIndex >= range[0] &&\n currentOrderIndex <= range[1] &&\n range[0] !== range[1],\n );\n if (!matchedRange) return;\n\n /** @type {number[]} orders[index] => columnIndex */\n const orders = self.orders.columns;\n if (!Array.isArray(orders)) return;\n\n const matchedSchema = matchedRange.map((orderIndex) => {\n const schemaIndex = orders[orderIndex];\n const thisSchema = schema[schemaIndex];\n return Object.assign({}, thisSchema, { orderIndex });\n });\n if (matchedSchema.findIndex((it) => !it) >= 0) return;\n return (ev[memoKey] = matchedSchema);\n }\n /**\n * @param {boolean} [allowOnlyOneRow]\n * @returns {number[]} a rowIndex tuple. It can contains one row index or two row indexes.\n */\n function getSelectedContiguousRows(allowOnlyOneRow) {\n let range = [];\n let prev = -2;\n let ok = true;\n self.selections.forEach(function (row, index) {\n if (!ok) return;\n if (prev < -1) {\n prev = index;\n range[0] = index;\n return;\n }\n if (index !== prev + 1 || !row || row.length === 0) {\n ok = false;\n return;\n }\n prev = index;\n range[1] = index;\n });\n if (ok) {\n if (range.length === 1) return allowOnlyOneRow ? range : null;\n return range;\n }\n }\n function addDefaultContextMenuItem(e) {\n const schema = self.getSchema();\n /**\n * A map between columnIndex and column data\n * @type {Map<string,any>}\n */\n let columns;\n const getColumnsMap = () => {\n if (!columns)\n columns = new Map(schema.map((_col) => [_col.columnIndex, _col]));\n return columns;\n };\n const isSorting =\n self.orderings.columns && self.orderings.columns.length > 0;\n\n const isNormalCell =\n !(\n e.cell.isBackground ||\n e.cell.isColumnHeaderCellCap ||\n e.cell.isScrollBar ||\n e.cell.isCorner ||\n e.cell.isRowHeader\n ) && e.cell.header;\n if (self.attributes.showFilter && isNormalCell) {\n createFilterContextMenuItems(e);\n }\n if (\n self.attributes.showCopy &&\n self.selections.reduce(function (p, r) {\n return p + r.length;\n }, 0) > 0\n ) {\n e.items.push({\n title: self.attributes.copyText,\n click: function () {\n document.execCommand('copy');\n self.disposeContextMenu();\n self.controlInput.focus();\n },\n });\n }\n if (self.attributes.showPaste && self.clipBoardData) {\n e.items.push({\n title: self.attributes.pasteText,\n click: function () {\n self.paste(self.clipBoardData, e.cell.columnIndex, e.cell.rowIndex);\n self.draw();\n },\n });\n }\n if (self.attributes.showColumnSelector) {\n e.items.push({\n title: self.attributes.columnSelectorText,\n items: function () {\n var d = [];\n self.getSchema().forEach(function (column) {\n function toggleColumnVisibility(e) {\n column.hidden = !column.hidden;\n self.dispatchEvent('togglecolumn', {\n column: column,\n hidden: column.hidden,\n });\n e.preventDefault();\n self.stopPropagation(e);\n self.disposeContextMenu();\n self.resize(true);\n self.setStorageData();\n }\n var el = document.createElement('div');\n applyContextItemStyle(el);\n el.addEventListener('touchstart', toggleColumnVisibility);\n el.addEventListener('click', toggleColumnVisibility);\n el.innerHTML =\n (column.hidden\n ? self.attributes.columnSelectorHiddenText\n : self.attributes.columnSelectorVisibleText) +\n (column.title || column.name);\n d.push({\n title: el,\n });\n });\n return d;\n },\n });\n if (e.cell && e.cell.header && e.cell.columnIndex > -1) {\n // This variable represents the order index because of the following codes from `draw.js`:\n // columnIndex: columnOrderIndex,\n const columnOrderIndex = e.cell.columnIndex;\n const columnIndex = self.orders.columns[columnOrderIndex];\n\n const contiguousColumns = getSelectedContiguousColumns(e, schema);\n let title = '';\n if (contiguousColumns) {\n title = contiguousColumns\n .map((col) => col.title || col.name)\n .join('-');\n } else {\n const column = schema[columnIndex];\n if (column) title = column.title || column.name;\n }\n e.items.push({\n title: self.attributes.hideColumnText.replace(/%s/gi, title),\n click: function (ev) {\n ev.preventDefault();\n self.stopPropagation(ev);\n self.disposeContextMenu();\n if (contiguousColumns) {\n self.hideColumns(\n contiguousColumns[0].orderIndex,\n contiguousColumns[1].orderIndex,\n );\n } else {\n self.hideColumns(columnOrderIndex);\n }\n },\n });\n }\n }\n if (\n self.attributes.saveAppearance &&\n self.attributes.showClearSettingsOption &&\n (Object.keys(self.sizes.rows).length > 0 ||\n Object.keys(self.sizes.columns).length > 0)\n ) {\n e.items.push({\n title: self.attributes.clearSettingsOptionText,\n click: function (e) {\n e.preventDefault();\n self.sizes.rows = {};\n self.sizes.columns = {};\n self.createRowOrders();\n self.createColumnOrders();\n self.storedSettings = undefined;\n self.dispatchEvent('resizecolumn', {\n columnWidth: self.style.cellWidth,\n });\n self.dispatchEvent('resizerow', {\n cellHeight: self.style.cellHeight,\n });\n self.setStorageData();\n self.resize(true);\n self.disposeContextMenu();\n self.controlInput.focus();\n },\n });\n }\n if (\n self.attributes.allowSorting &&\n self.attributes.showOrderByOption &&\n isNormalCell\n ) {\n e.items.push({\n title: self.attributes.showOrderByOptionTextAsc.replace(\n '%s',\n e.cell.header.title || e.cell.header.name,\n ),\n click: function (ev) {\n ev.preventDefault();\n self.order(e.cell.header.name, 'asc');\n self.controlInput.focus();\n },\n });\n e.items.push({\n title: self.attributes.showOrderByOptionTextDesc.replace(\n '%s',\n e.cell.header.title || e.cell.header.name,\n ),\n click: function (ev) {\n ev.preventDefault();\n self.order(e.cell.header.name, 'desc');\n self.disposeContextMenu();\n self.controlInput.focus();\n },\n });\n }\n\n //#region hide rows\n const canHideRows = !isSorting && e.cell.isRowHeader && e.cell.header;\n if (canHideRows) {\n const range = getSelectedContiguousRows(true);\n if (range) {\n const boundRowIndexes = range.map((viewRowIndex) =>\n self.getBoundRowIndexFromViewRowIndex(viewRowIndex),\n );\n let title;\n if (boundRowIndexes.length === 1) {\n if (typeof boundRowIndexes[0] === 'number')\n title = boundRowIndexes[0] + 1;\n else title = range[0] + 1;\n\n title = self.attributes.showHideRow.replace('%s', title);\n // hide one row\n e.items.push({\n title,\n click: function (ev) {\n ev.preventDefault();\n self.hideRows(boundRowIndexes[0], boundRowIndexes[0]);\n },\n });\n } else if (boundRowIndexes[0] <= boundRowIndexes[1]) {\n title = boundRowIndexes\n .map((it, index) => {\n if (typeof it === 'number') return it + 1;\n return range[index] + 1;\n })\n .join('-');\n title = self.attributes.showHideRows.replace('%s', title);\n // hide rows\n e.items.push({\n title,\n click: function (ev) {\n ev.preventDefault();\n self.hideRows(boundRowIndexes[0], boundRowIndexes[1]);\n },\n });\n }\n }\n }\n //#endregion hide rows\n\n //#region group/ungroup columns\n const groupAreaHeight = self.getColumnGroupAreaHeight();\n const groupAreaWidth = self.getRowGroupAreaWidth();\n const setCollapseStateForAllGroups = (allGroups, collapsed) => {\n if (allGroups.length === 0) return;\n for (let i = 0; i < allGroups.length; i++) {\n const groups = allGroups[i];\n for (let j = 0; j < groups.length; j++) {\n const group = groups[j];\n group.collapsed = collapsed;\n }\n }\n self.refresh();\n };\n if (e.pos && e.pos.y < groupAreaHeight) {\n e.items.push({\n title: self.attributes.showRemoveAllGroupColumns,\n click: function (ev) {\n ev.preventDefault();\n self.groupedColumns = [];\n self.refresh();\n },\n });\n e.items.push({\n title: self.attributes.showExpandAllGroupColumns,\n click: function (ev) {\n ev.preventDefault();\n setCollapseStateForAllGroups(self.groupedColumns, false);\n },\n });\n e.items.push({\n title: self.attributes.showCollapseAllGroupColumns,\n click: function (ev) {\n ev.preventDefault();\n setCollapseStateForAllGroups(self.groupedColumns, true);\n },\n });\n }\n if (e.pos && e.pos.x < groupAreaWidth) {\n e.items.push({\n title: self.attributes.showRemoveAllGroupRows,\n click: function (ev) {\n ev.preventDefault();\n self.groupedRows = [];\n self.refresh();\n },\n });\n e.items.push({\n title: self.attributes.showExpandAllGroupRows,\n click: function (ev) {\n ev.preventDefault();\n setCollapseStateForAllGroups(self.groupedRows, false);\n },\n });\n e.items.push({\n title: self.attributes.showCollapseAllGroupRows,\n click: function (ev) {\n ev.preventDefault();\n setCollapseStateForAllGroups(self.groupedRows, true);\n },\n });\n }\n\n const canGroupByColumns =\n self.attributes.allowGroupingColumns &&\n e.cell.isColumnHeader &&\n e.cell.header &&\n e.cell.header.index > 0;\n const canUngroupColumns =\n self.attributes.allowGroupingColumns && e.cell.isColumnHeader;\n const canGroupByRows =\n !isSorting &&\n self.attributes.allowGroupingRows &&\n e.cell.isRowHeader &&\n e.cell.header;\n const canUngroupRows =\n self.attributes.allowGroupingRows && e.cell.isRowHeader;\n\n if (canGroupByColumns) {\n /** @type {number[]} */\n const groupIndexes = [];\n /** @type {number} */\n const headerIndex = e.cell.header.index;\n let col = headerIndex;\n for (; col >= 0; col--) {\n if (!self.isColumnSelected(col)) break;\n groupIndexes[0] = col;\n }\n for (col = headerIndex; ; col++) {\n if (!self.isColumnSelected(col)) break;\n groupIndexes[1] = col;\n }\n if (\n col !== headerIndex &&\n groupIndexes.length === 2 &&\n groupIndexes[1] > groupIndexes[0] &&\n self.isNewGroupRangeValid(\n self.groupedColumns,\n groupIndexes[0],\n groupIndexes[1],\n )\n ) {\n const columns = getColumnsMap();\n const groupTitles = [];\n const groupNames = [];\n for (let i = 0; i < groupIndexes.length; i++) {\n const columnIndex = groupIndexes[i];\n const column = columns.get(columnIndex);\n if (column) {\n groupNames.push(column.name);\n groupTitles.push(column.title || column.name || column.index);\n }\n }\n if (groupNames[0] && groupNames[1]) {\n // show group options\n e.items.push({\n title: self.attributes.showGroupColumns.replace(\n '%s',\n groupTitles[0] + '-' + groupTitles[1],\n ),\n click: function (ev) {\n ev.preventDefault();\n self.groupColumns(groupNames[0], groupNames[1]);\n self.controlInput.focus();\n },\n });\n }\n }\n }\n if (canUngroupColumns) {\n const columnIndex = e.cell.columnIndex;\n const groups = self.getGroupsColumnBelongsTo(columnIndex);\n const columns = getColumnsMap();\n for (let i = 0; i < groups.length; i++) {\n const { from, to } = groups[i];\n const cell0 = columns.get(from);\n const cell1 = columns.get(to);\n if (cell0 && cell1) {\n const formatArgs =\n (cell0.title || cell0.name || cell0.index) +\n '-' +\n (cell1.title || cell1.name || cell1.index);\n e.items.push({\n title: self.attributes.showRemoveGroupColumns.replace(\n '%s',\n formatArgs,\n ),\n click: function (ev) {\n ev.preventDefault();\n self.removeGroupColumns(cell0.name, cell1.name);\n self.controlInput.focus();\n },\n });\n } else {\n console.warn(`Cannot find column ${from} or column ${to}`);\n }\n }\n }\n if (canGroupByRows) {\n const range = getSelectedContiguousRows(false) || [];\n const rangeTitle = range\n .map((rowIndex) => {\n const index = self.getBoundRowIndexFromViewRowIndex(rowIndex);\n if (typeof index === 'number') return index + 1;\n return rowIndex + 1;\n })\n .join('-');\n if (\n range.length === 2 &&\n self.isNewGroupRangeValid(self.groupedRows, range[0], range[1])\n ) {\n e.items.push({\n title: self.attributes.showGroupRows.replace('%s', rangeTitle),\n click: function (ev) {\n ev.preventDefault();\n self.groupRows(range[0], range[1]);\n },\n });\n }\n }\n if (canUngroupRows) {\n const rowIndex = e.cell.rowIndex;\n const groups = self.getGroupsRowBelongsTo(rowIndex);\n for (let i = 0; i < groups.length; i++) {\n const { from, to } = groups[i];\n const rangeTitle = [from, to]\n .map((rowIndex) => {\n const index = self.getBoundRowIndexFromViewRowIndex(rowIndex);\n if (typeof index === 'number') return index + 1;\n return rowIndex + 1;\n })\n .join('-');\n e.items.push({\n title: self.attributes.showRemoveGroupRows.replace('%s', rangeTitle),\n click: function (ev) {\n ev.preventDefault();\n self.removeGroupRows(from, to);\n self.controlInput.focus();\n },\n });\n }\n }\n //#endregion group/ungroup columns\n }\n self.disposeAutocomplete = function () {\n if (autoCompleteContext) {\n autoCompleteContext.dispose();\n autoCompleteContext = undefined;\n }\n };\n self.disposeContextMenu = function (event) {\n document.removeEventListener('click', self.disposeContextMenu);\n zIndexTop = self.style.contextMenuZIndex;\n self.disposeAutocomplete();\n if (self.contextMenu) {\n self.contextMenu.dispose();\n }\n self.contextMenu = undefined;\n if (event) {\n self.canvas.focus();\n self.mousedown(event);\n self.mouseup(event);\n }\n };\n self.contextmenuEvent = function (e, overridePos) {\n if (!self.hasFocus && e.target !== self.canvas) {\n return;\n }\n // don't create context menu for parents if current position is located in child grid\n const children = Object.keys(self.childGrids);\n for (let i = 0; i < children.length; i++) {\n const childGrid = self.childGrids[children[i]];\n const parentNode = childGrid && childGrid.parentNode;\n if (!parentNode) continue;\n const { offsetLeft, offsetWidth, offsetTop, offsetHeight } = parentNode;\n if ((e.x >= offsetLeft && e.x <= offsetLeft + offsetWidth) === false)\n continue;\n if ((e.y >= offsetTop && e.y <= offsetTop + offsetHeight) === false)\n continue;\n return; // in child grid\n }\n // don't create context menu for child if current position is located in parent grid\n if (self.isChildGrid && self.parentNode) {\n //#region check is current child grid closed\n const childGridsOfParent = self.parentGrid && self.parentGrid.childGrids;\n if (!childGridsOfParent || !Array.isArray(childGridsOfParent)) return;\n const matchedMe = childGridsOfParent.find((grid) => {\n const nodeA = grid.parentNode;\n const nodeB = self.parentNode;\n return (\n nodeA.offsetTop == nodeB.offsetTop &&\n nodeA.offsetLeft === nodeB.offsetLeft\n );\n });\n if (!matchedMe) return;\n //#endregion\n\n let x0 = self.parentNode.offsetLeft;\n let x1 = self.parentNode.offsetLeft + self.parentNode.offsetWidth;\n let y0 = self.parentNode.offsetTop;\n let y1 = self.parentNode.offsetTop + self.parentNode.offsetHeight;\n let node = self.parentNode.parentNode;\n while (node) {\n const { offsetLeft, offsetWidth, offsetTop, offsetHeight } = node;\n if (offsetLeft > x0) x0 = offsetLeft;\n if (offsetTop > y0) y0 = offsetTop;\n const newX1 = offsetLeft + offsetWidth;\n const newY1 = offsetTop + offsetHeight;\n if (newX1 < x1) x1 = newX1;\n if (newY1 < y1) y1 = newY1;\n if (node.nodeType !== 'canvas-datagrid-tree') break;\n node = node.parentNode;\n }\n if ((e.x >= x0 && e.x <= x1 && e.y >= y0 && e.y <= y1) === false) return;\n }\n function createDisposeEvent() {\n requestAnimationFrame(function () {\n document.addEventListener('click', self.disposeContextMenu);\n document.removeEventListener('mouseup', createDisposeEvent);\n });\n }\n var contextPosition,\n items = [],\n pos = overridePos || self.getLayerPos(e),\n ev = {\n NativeEvent: e,\n cell: self.getCellAt(pos.x, pos.y),\n pos,\n items: items,\n };\n if (!ev.cell.isGrid) {\n addDefaultContextMenuItem(ev);\n }\n if (e.type !== 'mousedown' && self.dispatchEvent('contextmenu', ev)) {\n return;\n }\n if (!ev.cell.isGrid) {\n if (self.contextMenu) {\n self.disposeContextMenu();\n }\n contextPosition = {\n left:\n pos.x +\n pos.rect.left +\n self.style.contextMenuMarginLeft +\n self.canvasOffsetLeft,\n top:\n pos.y +\n pos.rect.top +\n self.style.contextMenuMarginTop +\n self.canvasOffsetTop,\n right: ev.cell.width + ev.cell.x + pos.rect.left,\n bottom: ev.cell.height + ev.cell.y + pos.rect.top,\n height: ev.cell.height,\n width: ev.cell.width,\n };\n if (self.mobile) {\n contextPosition.left = self.style.mobileContextMenuMargin + 'px';\n contextPosition.width =\n self.width - self.style.mobileContextMenuMargin * 2 + 'px';\n }\n if (e.type == 'mousedown') {\n contextPosition.top += self.style.filterButtonMenuOffsetTop;\n }\n self.contextMenu = createContextMenu(ev, contextPosition, items);\n if (e.type == 'mousedown') {\n document.addEventListener('mouseup', createDisposeEvent);\n } else {\n createDisposeEvent();\n }\n e.preventDefault();\n }\n };\n return;\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n\n'use strict';\nexport default function (self) {\n self.defaults = {\n attributes: [\n ['allowColumnReordering', true],\n ['allowColumnResize', true],\n ['allowColumnResizeFromCell', false],\n ['allowFreezingRows', false],\n ['allowFreezingColumns', false],\n ['allowMovingSelection', true],\n ['allowRowHeaderResize', true],\n ['allowRowReordering', false],\n ['allowRowResize', true],\n ['allowRowResizeFromCell', false],\n ['allowSorting', true],\n ['allowGroupingRows', true],\n ['allowGroupingColumns', true],\n ['animationDurationShowContextMenu', 50],\n ['animationDurationHideContextMenu', 50],\n ['autoGenerateSchema', false],\n ['autoResizeColumns', false],\n ['autoResizeRows', false],\n ['autoScrollOnMousemove', false],\n ['autoScrollMargin', 5],\n ['blanksText', '(Blanks)'],\n ['borderDragBehavior', 'none'],\n ['borderResizeZone', 10],\n ['clearSettingsOptionText', 'Clear saved settings'],\n ['columnHeaderClickBehavior', 'sort'],\n ['columnSelectorHiddenText', ' '],\n ['columnSelectorText', 'Add/Remove columns'],\n ['columnSelectorVisibleText', '\\u2713'],\n ['contextHoverScrollAmount', 2],\n ['contextHoverScrollRateMs', 5],\n ['copyHeadersOnSelectAll', true],\n ['copyText', 'Copy'],\n ['debug', false],\n ['editable', true],\n ['ellipsisText', '...'],\n ['filterOptionText', 'Filter %s'],\n ['filterTextPrefix', '(filtered) '],\n ['filterFrozenRows', true],\n ['globalRowResize', false],\n ['hideColumnText', 'Hide %s'],\n ['showUnhideColumnsIndicator', false],\n ['showUnhideRowsIndicator', false],\n ['showHideRow', 'Hide row %s'],\n ['showHideRows', 'Hide rows %s'],\n ['hoverMode', 'cell'],\n ['keepFocusOnMouseOut', false],\n ['maxAutoCompleteItems', 200],\n ['multiLine', false],\n ['name', ''],\n ['pageUpDownOverlap', 1],\n ['pasteText', 'Paste'],\n ['persistantSelectionMode', false],\n ['removeFilterOptionText', 'Remove filter on %s'],\n ['reorderDeadZone', 3],\n ['resizeScrollZone', 20],\n ['rowGrabZoneSize', 5],\n ['columnGrabZoneSize', 30],\n ['saveAppearance', true],\n ['scrollAnimationPPSThreshold', 0.75],\n ['scrollPointerLock', false],\n ['scrollRepeatRate', 75],\n ['selectionFollowsActiveCell', false],\n ['selectionHandleBehavior', 'none'],\n ['selectionMode', 'cell'],\n ['selectionScrollIncrement', 20],\n ['selectionScrollZone', 20],\n ['showClearSettingsOption', true],\n ['showColumnHeaders', true],\n ['showColumnSelector', true],\n ['showCopy', false],\n ['showFilter', true],\n ['showFilterInCell', false],\n ['showNewRow', false],\n ['showOrderByOption', true],\n ['showOrderByOptionTextAsc', 'Order by %s ascending'],\n ['showOrderByOptionTextDesc', 'Order by %s descending'],\n //#region grouping\n ['showGroupColumns', 'Group columns %s'],\n ['showGroupRows', 'Group rows %s'],\n ['showRemoveGroupColumns', 'Remove group %s'],\n ['showRemoveGroupRows', 'Remove group %s'],\n ['showRemoveAllGroupColumns', 'Remove all column groups'],\n ['showRemoveAllGroupRows', 'Remove all row groups'],\n ['showExpandAllGroupColumns', 'Expand all column groups'],\n ['showExpandAllGroupRows', 'Expand all row groups'],\n ['showCollapseAllGroupColumns', 'Collapse all column groups'],\n ['showCollapseAllGroupRows', 'Collapse all row groups'],\n ['columnGroupIndicatorPosition', 'right'],\n ['rowGroupIndicatorPosition', 'bottom'],\n //#endregion grouping\n ['showPaste', false],\n ['showPerformance', false],\n ['showRowHeaders', true],\n ['showRowNumbers', true],\n ['showRowNumberGaps', true],\n ['singleSelectionMode', false],\n ['snapToRow', false],\n ['sortFrozenRows', true],\n ['touchContextMenuTimeMs', 800],\n ['touchDeadZone', 3],\n ['touchEasingMethod', 'easeOutQuad'],\n ['touchReleaseAcceleration', 1000],\n ['touchReleaseAnimationDurationMs', 2000],\n ['touchScrollZone', 20],\n ['touchSelectHandleZone', 20],\n ['touchZoomSensitivity', 0.005],\n ['touchZoomMin', 0.5],\n ['touchZoomMax', 1.75],\n ['maxPixelRatio', 2],\n ['tree', false],\n ['treeHorizontalScroll', false],\n ['rowTree', []],\n ['rowTreeColIndex', 0],\n ['columnTree', []],\n ['columnTreeRowStartIndex', 0],\n ['columnTreeRowEndIndex', 0],\n ],\n styles: [\n ['activeCellBackgroundColor', 'rgba(255, 255, 255, 1)'],\n ['activeCellBorderColor', 'rgba(110, 168, 255, 1)'],\n ['activeCellBorderWidth', 1],\n ['activeCellColor', 'rgba(0, 0, 0, 1)'],\n ['activeCellFont', '16px sans-serif'],\n ['activeCellHoverBackgroundColor', 'rgba(255, 255, 255, 1)'],\n ['activeCellHorizontalAlignment', 'left'],\n ['activeCellHoverColor', 'rgba(0, 0, 0, 1)'],\n ['activeCellOverlayBorderColor', 'rgba(66, 133, 244, 1)'],\n ['activeCellOverlayBorderWidth', 1],\n ['activeCellPaddingBottom', 5],\n ['activeCellPaddingLeft', 5],\n ['activeCellPaddingRight', 5],\n ['activeCellPaddingTop', 5],\n ['activeCellSelectedBackgroundColor', 'rgba(236, 243, 255, 1)'],\n ['activeCellSelectedColor', 'rgba(0, 0, 0, 1)'],\n ['activeCellVerticalAlignment', 'center'],\n ['activeColumnHeaderCellBackgroundColor', 'rgba(225, 225, 225, 1)'],\n ['activeColumnHeaderCellColor', 'rgba(0, 0, 0, 1)'],\n ['activeRowHeaderCellBackgroundColor', 'rgba(225, 225, 225, 1)'],\n ['activeRowHeaderCellColor', 'rgba(0, 0, 0, 1)'],\n ['autocompleteBottomMargin', 60],\n ['autosizeHeaderCellPadding', 8],\n ['autosizePadding', 5],\n ['buttonActiveBackgroundColor', 'rgba(255, 255, 255, 1)'],\n ['buttonActiveBorderColor', 'rgba(110, 168, 255, 1)'],\n ['buttonArrowColor', 'rgba(50, 50, 50, 1)'],\n ['buttonArrowDownHTML', '▼'],\n ['buttonZIndex', 10000],\n ['buttonBackgroundColor', 'rgba(255, 255, 255, 1)'],\n ['buttonBorderColor', 'rgba(172, 172, 172, 1)'],\n ['buttonHoverBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['buttonMenuWindowMargin', 30],\n ['buttonPadding', '3px'],\n ['cellAutoResizePadding', 13],\n ['cellBackgroundColor', 'rgba(255, 255, 255, 1)'],\n ['cellBorderColor', 'rgba(195, 199, 202, 1)'],\n ['cellBorderWidth', 1],\n ['cellColor', 'rgba(0, 0, 0, 1)'],\n ['cellFont', '16px sans-serif'],\n ['cellGridHeight', 250],\n ['cellHeight', 24],\n ['cellHeightWithChildGrid', 150],\n ['cellHorizontalAlignment', 'left'],\n ['cellHoverBackgroundColor', 'rgba(255, 255, 255, 1)'],\n ['cellHoverColor', 'rgba(0, 0, 0, 1)'],\n ['cellPaddingBottom', 5],\n ['cellPaddingLeft', 5],\n ['cellPaddingRight', 5],\n ['cellPaddingTop', 5],\n ['cellSelectedBackgroundColor', 'rgba(236, 243, 255, 1)'],\n ['cellSelectedColor', 'rgba(0, 0, 0, 1)'],\n ['cellTreeIconBorderColor', 'rgba(162, 174, 207, 1)'],\n ['cellTreeIconFillColor', 'rgba(240, 240, 240, 1)'],\n ['cellTreeIconHoverFillColor', 'rgba(198, 217, 233, 1)'],\n ['cellTreeIconLineColor', 'rgba(43, 53, 81, 1)'],\n ['cellTreeIconLineWidth', 1.5],\n ['cellTreeIconMarginLeft', 0],\n ['cellTreeIconMarginRight', 5],\n ['cellTreeIconMarginTop', 6],\n ['cellTreeIconWidth', 13],\n ['cellVerticalAlignment', 'center'],\n ['cellWidth', 250],\n ['cellWidthWithChildGrid', 250],\n ['cellWhiteSpace', 'nowrap'],\n ['cellLineHeight', 1],\n ['cellLineSpacing', 3],\n ['childContextMenuArrowColor', 'rgba(43, 48, 43, 1)'],\n ['childContextMenuArrowHTML', '►'],\n ['childContextMenuMarginLeft', -11],\n ['childContextMenuMarginTop', -6],\n ['columnGroupRowHeight', 25],\n ['columnHeaderCellBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['columnHeaderCellBorderColor', 'rgba(172, 172, 172, 1)'],\n ['columnHeaderCellBorderWidth', 1],\n ['columnHeaderCellCapBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['columnHeaderCellCapBorderColor', 'rgba(172, 172, 172, 1)'],\n ['columnHeaderCellCapBorderWidth', 1],\n ['columnHeaderCellColor', 'rgba(50, 50, 50, 1)'],\n ['columnHeaderCellFont', '16px sans-serif'],\n ['columnHeaderCellHeight', 25],\n ['columnHeaderCellHorizontalAlignment', 'left'],\n ['columnHeaderCellHoverBackgroundColor', 'rgba(235, 235, 235, 1)'],\n ['columnHeaderCellHoverColor', 'rgba(0, 0, 0, 1)'],\n ['columnHeaderCellPaddingBottom', 5],\n ['columnHeaderCellPaddingLeft', 5],\n ['columnHeaderCellPaddingRight', 5],\n ['columnHeaderCellPaddingTop', 5],\n ['columnHeaderCellVerticalAlignment', 'center'],\n ['columnHeaderOrderByArrowBorderColor', 'rgba(195, 199, 202, 1)'],\n ['columnHeaderOrderByArrowBorderWidth', 1],\n ['columnHeaderOrderByArrowColor', 'rgba(155, 155, 155, 1)'],\n ['columnHeaderOrderByArrowHeight', 8],\n ['columnHeaderOrderByArrowMarginLeft', 0],\n ['columnHeaderOrderByArrowMarginRight', 5],\n ['columnHeaderOrderByArrowMarginTop', 6],\n ['columnHeaderOrderByArrowWidth', 13],\n ['contextFilterButtonBorder', 'solid 1px rgba(158, 163, 169, 1)'],\n ['contextFilterButtonBorderRadius', '3px'],\n ['contextFilterButtonHTML', '▼'],\n ['contextFilterInputBackground', 'rgba(255,255,255,1)'],\n ['contextFilterInputBorder', 'solid 1px rgba(158, 163, 169, 1)'],\n ['contextFilterInputBorderRadius', '0'],\n ['contextFilterInputColor', 'rgba(0,0,0,1)'],\n ['contextFilterInputFontFamily', 'sans-serif'],\n ['contextFilterInputFontSize', '14px'],\n ['contextFilterInvalidRegExpBackground', 'rgba(180, 6, 1, 1)'],\n ['contextFilterInvalidRegExpColor', 'rgba(255, 255, 255, 1)'],\n ['contextMenuArrowColor', 'rgba(43, 48, 43, 1)'],\n ['contextMenuArrowDownHTML', '▼'],\n ['contextMenuArrowUpHTML', '▲'],\n ['contextMenuBackground', 'rgba(240, 240, 240, 1)'],\n ['contextMenuBorder', 'solid 1px rgba(158, 163, 169, 1)'],\n ['contextMenuBorderRadius', '3px'],\n ['contextMenuChildArrowFontSize', '12px'],\n ['contextMenuColor', 'rgba(43, 48, 43, 1)'],\n ['contextMenuCursor', 'default'],\n ['contextMenuFilterButtonFontFamily', 'sans-serif'],\n ['contextMenuFilterButtonFontSize', '10px'],\n ['contextMenuFilterInvalidExpresion', 'rgba(237, 155, 156, 1)'],\n ['contextMenuFontFamily', 'sans-serif'],\n ['contextMenuFontSize', '16px'],\n ['contextMenuHoverBackground', 'rgba(182, 205, 250, 1)'],\n ['contextMenuHoverColor', 'rgba(43, 48, 153, 1)'],\n ['contextMenuItemBorderRadius', '3px'],\n ['contextMenuItemMargin', '2px'],\n ['contextMenuLabelDisplay', 'inline-block'],\n ['contextMenuLabelMargin', '0 3px 0 0'],\n ['contextMenuLabelMaxWidth', '700px'],\n ['contextMenuLabelMinWidth', '75px'],\n ['contextMenuMarginLeft', 3],\n ['contextMenuMarginTop', -3],\n ['contextMenuOpacity', '0.98'],\n ['contextMenuPadding', '2px'],\n ['contextMenuWindowMargin', 30],\n ['contextMenuZIndex', 10000],\n ['cornerCellBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['cornerCellBorderColor', 'rgba(202, 202, 202, 1)'],\n ['debugBackgroundColor', 'rgba(0, 0, 0, .0)'],\n ['debugColor', 'rgba(255, 15, 24, 1)'],\n ['debugEntitiesColor', 'rgba(76, 231, 239, 1.00)'],\n ['debugFont', '11px sans-serif'],\n ['debugPerfChartBackground', 'rgba(29, 25, 26, 1.00)'],\n ['debugPerfChartTextColor', 'rgba(255, 255, 255, 0.8)'],\n ['debugPerformanceColor', 'rgba(252, 255, 37, 1.00)'],\n ['debugScrollHeightColor', 'rgba(248, 33, 103, 1.00)'],\n ['debugScrollWidthColor', 'rgba(66, 255, 27, 1.00)'],\n ['debugTouchPPSXColor', 'rgba(246, 102, 24, 1.00)'],\n ['debugTouchPPSYColor', 'rgba(186, 0, 255, 1.00)'],\n ['display', 'inline-block'],\n ['editCellBackgroundColor', 'white'],\n ['editCellBorder', 'solid 1px rgba(110, 168, 255, 1)'],\n ['editCellBoxShadow', '0 2px 5px rgba(0,0,0,0.4)'],\n ['editCellColor', 'black'],\n ['editCellFontFamily', 'sans-serif'],\n ['editCellFontSize', '16px'],\n ['editCellPaddingLeft', 4],\n ['editCellZIndex', 10000],\n ['filterButtonActiveBackgroundColor', 'rgba(225, 225, 225, 1)'],\n ['filterButtonArrowBorderColor', 'rgba(195, 199, 202, 1)'],\n ['filterButtonArrowBorderWidth', 1],\n ['filterButtonArrowClickRadius', 5],\n ['filterButtonArrowColor', 'rgba(50, 50, 50, 1)'],\n ['filterButtonArrowHeight', 5],\n ['filterButtonArrowWidth', 8],\n ['filterButtonBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['filterButtonBorderColor', 'rgba(172, 172, 172, 1)'],\n ['filterButtonBorderRadius', 3],\n ['filterButtonHeight', 20],\n ['filterButtonHoverBackgroundColor', 'rgba(235, 235, 235, 1)'],\n ['filterButtonMenuOffsetTop', 10],\n ['filterButtonWidth', 20],\n ['frozenMarkerHoverColor', 'rgba(236, 243, 255, 1)'],\n ['frozenMarkerHoverBorderColor', 'rgba(110, 168, 255, 1)'],\n ['frozenMarkerActiveColor', 'rgba(236, 243, 255, 1)'],\n ['frozenMarkerActiveBorderColor', 'rgba(110, 168, 255, 1)'],\n ['frozenMarkerColor', 'rgba(222, 222, 222, 1)'],\n ['frozenMarkerBorderColor', 'rgba(168, 168, 168, 1)'],\n ['frozenMarkerBorderWidth', 1],\n ['frozenMarkerWidth', 2],\n ['groupingAreaBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['gridBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['gridBorderCollapse', 'collapse'],\n ['gridBorderColor', 'rgba(202, 202, 202, 1)'],\n ['gridBorderWidth', 1],\n ['groupIndicatorColor', 'rgba(155, 155, 155, 1)'],\n ['groupIndicatorBackgroundColor', 'rgba(255, 255, 255, 1)'],\n ['height', 'auto'],\n ['maxHeight', 'inherit'],\n ['maxWidth', 'inherit'],\n ['minColumnWidth', 45],\n ['minHeight', 'inherit'],\n ['minRowHeight', 24],\n ['minWidth', 'inherit'],\n ['mobileContextMenuMargin', 10],\n ['mobileEditInputHeight', 30],\n ['mobileEditFontFamily', 'sans-serif'],\n ['mobileEditFontSize', '16px'],\n ['moveOverlayBorderWidth', 1],\n ['moveOverlayBorderColor', 'rgba(66, 133, 244, 1)'],\n ['moveOverlayBorderSegments', '12, 7'],\n ['name', 'default'],\n ['overflowY', 'auto'],\n ['overflowX', 'auto'],\n ['reorderMarkerBackgroundColor', 'rgba(0, 0, 0, 0.1)'],\n ['reorderMarkerBorderColor', 'rgba(0, 0, 0, 0.2)'],\n ['reorderMarkerBorderWidth', 1.25],\n ['reorderMarkerIndexBorderColor', 'rgba(66, 133, 244, 1)'],\n ['reorderMarkerIndexBorderWidth', 2.75],\n ['rowGroupColumnWidth', 25],\n ['rowHeaderCellBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['rowHeaderCellBorderColor', 'rgba(200, 200, 200, 1)'],\n ['rowHeaderCellBorderWidth', 1],\n ['rowHeaderCellColor', 'rgba(50, 50, 50, 1)'],\n ['rowHeaderCellFont', '16px sans-serif'],\n ['rowHeaderCellHeight', 25],\n ['rowHeaderCellHorizontalAlignment', 'left'],\n ['rowHeaderCellHoverBackgroundColor', 'rgba(235, 235, 235, 1)'],\n ['rowHeaderCellHoverColor', 'rgba(0, 0, 0, 1)'],\n ['rowHeaderCellPaddingBottom', 5],\n ['rowHeaderCellPaddingLeft', 5],\n ['rowHeaderCellPaddingRight', 5],\n ['rowHeaderCellPaddingTop', 5],\n ['rowHeaderCellRowNumberGapHeight', 5],\n ['rowHeaderCellRowNumberGapColor', 'rgba(50, 50, 50, 1)'],\n ['rowHeaderCellSelectedBackgroundColor', 'rgba(217, 217, 217, 1)'],\n ['rowHeaderCellSelectedColor', 'rgba(50, 50, 50, 1)'],\n ['rowHeaderCellVerticalAlignment', 'center'],\n ['rowHeaderCellWidth', 57],\n ['scrollBarActiveColor', 'rgba(125, 125, 125, 1)'],\n ['scrollBarBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['scrollBarBorderColor', 'rgba(202, 202, 202, 1)'],\n ['scrollBarBorderWidth', 0.5],\n ['scrollBarBoxBorderRadius', 4.125],\n ['scrollBarBoxColor', 'rgba(192, 192, 192, 1)'],\n ['scrollBarBoxMargin', 2],\n ['scrollBarBoxMinSize', 15],\n ['scrollBarBoxWidth', 8],\n ['scrollBarCornerBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['scrollBarCornerBorderColor', 'rgba(202, 202, 202, 1)'],\n ['scrollBarWidth', 11],\n ['selectionHandleBorderColor', 'rgba(255, 255, 255, 1)'],\n ['selectionHandleBorderWidth', 1.5],\n ['selectionHandleColor', 'rgba(66, 133, 244, 1)'],\n ['selectionHandleSize', 8],\n ['selectionHandleType', 'square'],\n ['selectionOverlayBorderColor', 'rgba(66, 133, 244, 1)'],\n ['selectionOverlayBorderWidth', 1],\n ['treeArrowBorderColor', 'rgba(195, 199, 202, 1)'],\n ['treeArrowBorderWidth', 1],\n ['treeArrowClickRadius', 5],\n ['treeArrowColor', 'rgba(155, 155, 155, 1)'],\n ['treeArrowHeight', 8],\n ['treeArrowMarginLeft', 0],\n ['treeArrowMarginRight', 5],\n ['treeArrowMarginTop', 6],\n ['treeArrowWidth', 13],\n ['treeGridHeight', 250],\n ['unhideIndicatorColor', 'rgba(0, 0, 0, 1)'],\n ['unhideIndicatorBackgroundColor', 'rgba(255, 255, 255, 1)'],\n ['unhideIndicatorBorderColor', 'rgba(174, 193, 232, 1)'],\n ['unhideIndicatorSize', 16],\n ['width', 'auto'],\n ],\n };\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nexport default function (self) {\n self.getClippingRect = function (ele) {\n var boundingRect = self.position(self.parentNode),\n eleRect = self.position(ele),\n s = self.scrollOffset(self.canvas),\n clipRect = {\n x: 0,\n y: 0,\n h: 0,\n w: 0,\n },\n parentRect = {\n x: -Infinity,\n y: -Infinity,\n h: Infinity,\n w: Infinity,\n },\n columnHeaderCellHeight = self.getColumnHeaderCellHeight(),\n rowHeaderCellWidth = self.getRowHeaderCellWidth();\n boundingRect.top -= s.top;\n boundingRect.left -= s.left;\n eleRect.top -= s.top;\n eleRect.left -= s.left;\n clipRect.h =\n boundingRect.top +\n boundingRect.height -\n ele.offsetTop -\n self.style.scrollBarWidth;\n clipRect.w =\n boundingRect.left +\n boundingRect.width -\n ele.offsetLeft -\n self.style.scrollBarWidth;\n clipRect.x = boundingRect.left + eleRect.left * -1 + rowHeaderCellWidth;\n clipRect.y = boundingRect.top + eleRect.top * -1 + columnHeaderCellHeight;\n return {\n x: clipRect.x > parentRect.x ? clipRect.x : parentRect.x,\n y: clipRect.y > parentRect.y ? clipRect.y : parentRect.y,\n h: clipRect.h < parentRect.h ? clipRect.h : parentRect.h,\n w: clipRect.w < parentRect.w ? clipRect.w : parentRect.w,\n };\n };\n self.clipElement = function (ele) {\n var clipRect = self.getClippingRect(ele);\n if (clipRect.w < 0) {\n clipRect.w = 0;\n }\n if (clipRect.h < 0) {\n clipRect.h = 0;\n }\n ele.style.clip =\n 'rect(' +\n clipRect.y +\n 'px,' +\n clipRect.w +\n 'px,' +\n clipRect.h +\n 'px,' +\n clipRect.x +\n 'px' +\n ')';\n // INFO https://developer.mozilla.org/en-US/docs/Web/CSS/clip\n // clip has been \"deprecated\" for clipPath. Of course nothing but chrome\n // supports clip path, so we'll keep using clip until someday clipPath becomes\n // more widely support. The code below works correctly, but setting clipPath and clip\n // at the same time has undesirable results.\n // ele.style.clipPath = 'polygon('\n // + clipRect.x + 'px ' + clipRect.y + 'px,'\n // + clipRect.x + 'px ' + clipRect.h + 'px,'\n // + clipRect.w + 'px ' + clipRect.h + 'px,'\n // + clipRect.w + 'px ' + clipRect.y + 'px'\n // + ')';\n };\n self.scrollOffset = function (e) {\n var x = 0,\n y = 0,\n scrollingElement = document.scrollingElement || {\n scrollLeft: 0,\n scrollTop: 0,\n };\n while (\n e.parentNode &&\n e.nodeName !== 'CANVAS-DATAGRID' &&\n e !== self.intf\n ) {\n if (\n e.nodeType !== 'canvas-datagrid-tree' &&\n e.nodeType !== 'canvas-datagrid-cell'\n ) {\n x -= e.scrollLeft;\n y -= e.scrollTop;\n }\n e = e.parentNode;\n }\n return {\n left: x - scrollingElement.scrollLeft,\n top: y - scrollingElement.scrollTop,\n };\n };\n self.resizeEditInput = function () {\n if (self.input && self.input.editCell) {\n var pos = self.canvas.getBoundingClientRect(),\n s = self.scrollOffset(self.intf),\n bm = self.style.gridBorderCollapse === 'collapse' ? 1 : 2,\n borderWidth = self.style.cellBorderWidth * bm,\n cell = self.getVisibleCellByIndex(\n self.input.editCell.columnIndex,\n self.input.editCell.rowIndex,\n ) || { x: -100, y: -100, height: 0, width: 0 };\n if (self.mobile) {\n self.input.style.left = '0';\n self.input.style.top =\n self.height -\n self.style.mobileEditInputHeight -\n borderWidth -\n 1 +\n 'px';\n self.input.style.height = self.style.mobileEditInputHeight + 'px';\n self.input.style.width = self.width - borderWidth - 1 + 'px';\n return;\n }\n let groupAreaOffsetY = self.getColumnGroupAreaHeight();\n let groupAreaOffsetX = self.getRowGroupAreaWidth();\n if (self.parentNode) {\n const { columnGroupsAreaHeight, rowGroupsAreaWidth } = self.parentNode;\n if (columnGroupsAreaHeight) groupAreaOffsetY += columnGroupsAreaHeight;\n if (rowGroupsAreaWidth) groupAreaOffsetX += rowGroupsAreaWidth;\n }\n self.input.style.left =\n pos.left +\n cell.x +\n self.canvasOffsetLeft -\n s.left +\n groupAreaOffsetX +\n 'px';\n self.input.style.top =\n pos.top +\n cell.y -\n self.style.cellBorderWidth +\n self.canvasOffsetTop -\n s.top +\n groupAreaOffsetY +\n 'px';\n self.input.style.height = cell.height - borderWidth + 'px';\n self.input.style.width = cell.width - self.style.cellPaddingLeft + 'px';\n self.clipElement(self.input);\n }\n };\n self.position = function (e, ignoreScrollOffset) {\n var x = 0,\n y = 0,\n s = e,\n h,\n w;\n let calculatedTree = false;\n while (e.offsetParent && e.nodeName !== 'CANVAS-DATAGRID') {\n const isTree = e.nodeType === 'canvas-datagrid-tree';\n if (!isTree || !calculatedTree) {\n x += e.offsetLeft;\n y += e.offsetTop;\n h = e.offsetHeight;\n w = e.offsetWidth;\n }\n if (isTree) calculatedTree = true;\n e = e.offsetParent;\n }\n if (ignoreScrollOffset) {\n return { left: x, top: y, height: h, width: w };\n }\n e = s;\n s = self.scrollOffset(e);\n return { left: x + s.left, top: y + s.top, height: h, width: w };\n };\n self.getLayerPos = function (e) {\n var rect = self.canvas.getBoundingClientRect(),\n pos = {\n x: e.clientX - rect.left,\n y: e.clientY - rect.top,\n };\n if (self.isChildGrid) {\n pos.x -= self.canvasOffsetLeft;\n pos.y -= self.canvasOffsetTop;\n if (self.parentNode.rowGroupsAreaWidth)\n pos.x -= self.parentNode.rowGroupsAreaWidth;\n if (self.parentNode.columnGroupsAreaHeight)\n pos.y -= self.parentNode.columnGroupsAreaHeight;\n }\n return {\n x: pos.x,\n y: pos.y,\n rect: rect,\n };\n };\n /**\n * Ends editing, optionally aborting the edit.\n * @memberof canvasDatagrid\n * @name endEdit\n * @method\n * @param {boolean} abort When true, abort the edit.\n */\n self.endEdit = function (abort) {\n var cell = self.input.editCell,\n y = cell.rowIndex;\n function abortEdit() {\n abort = true;\n }\n if (\n self.dispatchEvent('beforeendedit', {\n cell: cell,\n newValue: self.input.value,\n oldValue: cell.value,\n abort: abortEdit,\n input: self.input,\n })\n ) {\n return false;\n }\n if (self.input.value !== cell.value && !abort) {\n self.changes[y] = self.changes[y] || {};\n self.changes[y][cell.header.name] = self.input.value;\n if (!cell.data) {\n self.originalData[cell.boundRowIndex] = {};\n cell.data = self.originalData[cell.boundRowIndex];\n }\n cell.data[cell.header.name] = self.input.value;\n if (y === self.viewData.length) {\n if (\n self.dispatchEvent('newrow', {\n value: self.input.value,\n defaultValue: cell.value,\n aborted: abort,\n cell: cell,\n input: self.input,\n })\n ) {\n return false;\n }\n self.addRow(cell.data);\n self.createNewRowData();\n }\n self.draw(true);\n }\n if (self.input.parentNode) {\n self.input.parentNode.removeChild(self.input);\n }\n self.intf.focus();\n self.dispatchEvent('endedit', {\n cell: cell,\n value: self.input.value,\n aborted: abort,\n input: self.input,\n });\n self.input = undefined;\n return true;\n };\n /**\n * Begins editing at cell x, row y.\n * @memberof canvasDatagrid\n * @name beginEditAt\n * @method\n * @param {number} x The column index of the cell to edit.\n * @param {number} y The row index of the cell to edit.\n * @param {boolean} inEnterMode If true, starting to type in cell will replace the\n * cell's previous value instead of appending, and using the arrow keys will allow\n * the user to navigate to adjacent cells instead of moving the text cursor around\n * (default is false, and means user is in 'edit' mode).\n */\n self.beginEditAt = function (x, y, NativeEvent, inEnterMode = false) {\n if (!self.attributes.editable) {\n return;\n }\n if (self.input) {\n self.endEdit();\n }\n var cell = self.getVisibleCellByIndex(x, y),\n s = self.getSchema(),\n adjacentCells,\n enumItems,\n enu,\n option,\n valueInEnum;\n if (!(cell && cell.header)) {\n return;\n }\n //HACK for IE10, does not like literal enum\n enu = cell.header['enum'];\n if (\n self.dispatchEvent('beforebeginedit', {\n cell: cell,\n NativeEvent: NativeEvent,\n })\n ) {\n return false;\n }\n self.scrollIntoView(x, y);\n self.setActiveCell(x, y);\n adjacentCells = self.getAdjacentCells();\n if (enu) {\n self.input = document.createElement('select');\n } else {\n self.input = document.createElement(\n self.attributes.multiLine ? 'textarea' : 'input',\n );\n }\n cell = self.getVisibleCellByIndex(x, y);\n //HACK on mobile devices sometimes edit can begin without the cell being in view, I don't know how.\n if (!cell) {\n return;\n }\n if (enu) {\n // add enums\n if (typeof enu === 'function') {\n enumItems = enu.apply(self.intf, [{ cell: cell }]);\n } else if (Array.isArray(enu)) {\n enumItems = enu;\n }\n enumItems.forEach(function (e) {\n var i = document.createElement('option'),\n val,\n title;\n if (Array.isArray(e)) {\n val = e[0];\n title = e[1];\n } else {\n val = e;\n title = e;\n }\n if (val === cell.value) {\n valueInEnum = true;\n }\n i.value = val;\n i.innerHTML = title;\n self.input.appendChild(i);\n });\n if (!valueInEnum) {\n option = document.createElement('option');\n option.value = cell.value;\n option.innerHTML = cell.value;\n self.input.appendChild(option);\n }\n self.input.addEventListener('change', function () {\n self.endEdit();\n self.draw(true);\n });\n }\n // if the user has not prevented the default action, append to the body\n if (\n !self.dispatchEvent('appendeditinput', { cell: cell, input: self.input })\n ) {\n document.body.appendChild(self.input);\n }\n self.createInlineStyle(\n self.input,\n self.mobile\n ? 'canvas-datagrid-edit-mobile-input'\n : 'canvas-datagrid-edit-input',\n );\n self.input.style.position = 'absolute';\n self.input.editCell = cell;\n self.resizeEditInput();\n self.input.style.zIndex = self.style.editCellZIndex;\n self.input.style.fontSize =\n parseInt(self.style.editCellFontSize, 10) * self.scale + 'px';\n\n var cellValueIsEmpty = [null, undefined].indexOf(cell.value) !== -1;\n var shouldClearCellValue = cellValueIsEmpty || inEnterMode;\n\n self.input.value = shouldClearCellValue ? '' : cell.value;\n self.input.focus();\n self.input.addEventListener('click', self.stopPropagation);\n self.input.addEventListener('dblclick', self.stopPropagation);\n self.input.addEventListener('mouseup', self.stopPropagation);\n self.input.addEventListener('mousedown', self.stopPropagation);\n self.input.addEventListener('keydown', function (e) {\n var nx = cell.columnIndex,\n ny = cell.rowIndex;\n\n if (e.key === 'Escape') {\n self.endEdit(true); // end edit and abort the value change\n self.draw(true);\n } else if (e.key === 'Enter' && self.attributes.multiLine && e.altKey) {\n self.input.value = self.input.value + '\\n';\n self.input.scrollTop = self.input.scrollHeight;\n } else if (e.key === 'Enter') {\n self.endEdit();\n\n // Move to cell in next or previous row\n var nextRowIndex = e.shiftKey\n ? Math.max(0, ny - 1)\n : Math.min(ny + 1, self.viewData.length - 1);\n\n if (nextRowIndex !== ny) {\n self.scrollIntoView(nx, nextRowIndex);\n self.setActiveCell(nx, nextRowIndex);\n }\n\n self.draw(true);\n } else if (\n ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(e.key) &&\n inEnterMode\n ) {\n switch (e.key) {\n case 'ArrowUp':\n ny = Math.max(0, ny - 1);\n break;\n case 'ArrowDown':\n ny = Math.min(ny + 1, self.viewData.length - 1);\n break;\n case 'ArrowLeft':\n nx = Math.max(nx - 1, 0);\n break;\n case 'ArrowRight':\n nx = adjacentCells.right;\n break;\n }\n\n self.endEdit();\n\n self.scrollIntoView(nx, ny);\n self.setActiveCell(nx, ny);\n\n self.draw(true);\n } else if (e.key === 'Tab') {\n e.preventDefault();\n if (!self.endEdit()) {\n return;\n }\n if (e.shiftKey) {\n nx = adjacentCells.left;\n } else {\n nx = adjacentCells.right;\n }\n if (adjacentCells.left === x && e.shiftKey) {\n nx = adjacentCells.last;\n ny -= 1;\n }\n if (adjacentCells.right === x && !e.shiftKey) {\n nx = adjacentCells.first;\n ny += 1;\n }\n if (ny < 0) {\n ny = self.viewData.length - 1;\n }\n if (ny > self.viewData.length - 1) {\n ny = 0;\n }\n self.scrollIntoView(nx, ny);\n self.beginEditAt(nx, ny, e);\n }\n });\n\n self.dispatchEvent('beginedit', { cell: cell, input: self.input });\n };\n self.createInlineStyle = function (el, className) {\n var css = {\n 'canvas-datagrid-button-wrapper': {\n display: 'inline-block',\n padding: self.style.buttonPadding,\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: self.style.buttonBorderColor,\n cursor: 'pointer',\n background: self.style.buttonBackgroundColor,\n userSelect: 'none',\n },\n 'canvas-datagrid-button-wrapper:hover': {\n borderColor: self.style.buttonBorderColor,\n background: self.style.buttonHoverBackgroundColor,\n },\n 'canvas-datagrid-button-wrapper:active': {\n borderColor: self.style.buttonActiveBorderColor,\n background: self.style.buttonActiveBackgroundColor,\n },\n 'canvas-datagrid-button-icon': {\n width: '18px',\n height: '18px',\n display: 'inline-block',\n verticalAlign: 'middle',\n },\n 'canvas-datagrid-button-arrow': {\n display: 'inline-block',\n color: self.style.buttonArrowColor,\n fontSize: '9px',\n },\n 'canvas-datagrid-button-menu-item-mobile': {\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n color: 'inherit',\n background: 'inherit',\n margin: self.style.contextMenuItemMargin,\n borderRadius: self.style.contextMenuItemBorderRadius,\n verticalAlign: 'middle',\n },\n 'canvas-datagrid-button-menu-item': {\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n color: 'inherit',\n background: 'inherit',\n margin: self.style.contextMenuItemMargin,\n borderRadius: self.style.contextMenuItemBorderRadius,\n verticalAlign: 'middle',\n },\n 'canvas-datagrid-button-menu-item:hover': {\n background: self.style.contextMenuHoverBackground,\n color: self.style.contextMenuHoverColor,\n },\n 'canvas-datagrid-button-menu-label': {\n margin: self.style.contextMenuLabelMargin,\n display: self.style.contextMenuLabelDisplay,\n minWidth: self.style.contextMenuLabelMinWidth,\n maxWidth: self.style.contextMenuLabelMaxWidth,\n },\n 'canvas-datagrid-button-menu-mobile': {\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n background: self.style.contextMenuBackground,\n color: self.style.contextMenuColor,\n border: self.style.contextMenuBorder,\n padding: self.style.contextMenuPadding,\n borderRadius: self.style.contextMenuBorderRadius,\n opacity: self.style.contextMenuOpacity,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n },\n 'canvas-datagrid-button-menu': {\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n background: self.style.contextMenuBackground,\n color: self.style.contextMenuColor,\n border: self.style.contextMenuBorder,\n padding: self.style.contextMenuPadding,\n borderRadius: self.style.contextMenuBorderRadius,\n opacity: self.style.contextMenuOpacity,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n cursor: self.style.contextMenuCursor,\n },\n 'canvas-datagrid-context-menu-filter-input': {\n height: '19px',\n verticalAlign: 'bottom',\n marginLeft: '2px',\n padding: '0',\n background: self.style.contextFilterInputBackground,\n color: self.style.contextFilterInputColor,\n border: self.style.contextFilterInputBorder,\n borderRadius: self.style.contextFilterInputBorderRadius,\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextFilterInputFontFamily,\n fontSize: self.style.contextFilterInputFontSize,\n },\n 'canvas-datagrid-context-menu-filter-button': {\n height: '19px',\n verticalAlign: 'bottom',\n marginLeft: '2px',\n padding: '0',\n background: self.style.contextMenuBackground,\n color: self.style.contextMenuColor,\n border: self.style.contextFilterButtonBorder,\n borderRadius: self.style.contextFilterButtonBorderRadius,\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFilterButtonFontFamily,\n fontSize: self.style.contextMenuFilterButtonFontSize,\n },\n 'canvas-datagrid-context-child-arrow': {\n cssFloat: 'right',\n color: self.style.childContextMenuArrowColor,\n fontSize: self.style.contextMenuChildArrowFontSize,\n fontFamily: self.style.contextMenuFontFamily,\n verticalAlign: 'middle',\n },\n 'canvas-datagrid-autocomplete': {\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n background: self.style.contextMenuBackground,\n color: self.style.contextMenuColor,\n border: self.style.contextMenuBorder,\n padding: self.style.contextMenuPadding,\n borderRadius: self.style.contextMenuBorderRadius,\n opacity: self.style.contextMenuOpacity,\n position: 'absolute',\n zIndex: 9999,\n overflow: 'hidden',\n },\n 'canvas-datagrid-autocomplete-item': {\n background: self.style.contextMenuBackground,\n color: self.style.contextMenuColor,\n },\n 'canvas-datagrid-autocomplete-item:hover': {\n background: self.style.contextMenuHoverBackground,\n color: self.style.contextMenuHoverColor,\n },\n 'canvas-datagrid-canvas': {\n position: 'absolute',\n zIndex: '-1',\n },\n 'canvas-datagrid': {\n display: 'block',\n },\n 'canvas-datagrid-control-input': {\n position: 'fixed',\n top: '-5px',\n left: '-5px',\n border: 'none',\n opacity: '0',\n cursor: 'pointer',\n width: '1px',\n height: '1px',\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n },\n 'canvas-datagrid-edit-mobile-input': {\n boxSizing: 'content-box',\n outline: 'none',\n margin: '0',\n padding: '0 0 0 0',\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.mobileEditFontFamily,\n fontSize: self.style.mobileEditFontSize,\n border: self.style.editCellBorder,\n color: self.style.editCellColor,\n background: self.style.editCellBackgroundColor,\n appearance: 'none',\n webkitAppearance: 'none',\n mozAppearance: 'none',\n borderRadius: '0',\n },\n 'canvas-datagrid-edit-input': {\n boxSizing: 'content-box',\n outline: 'none',\n margin: '0',\n padding: '0 0 0 ' + self.style.editCellPaddingLeft + 'px',\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.editCellFontFamily,\n fontSize: self.style.editCellFontSize,\n boxShadow: self.style.editCellBoxShadow,\n border: self.style.editCellBorder,\n color: self.style.editCellColor,\n background: self.style.editCellBackgroundColor,\n appearance: 'none',\n webkitAppearance: 'none',\n mozAppearance: 'none',\n borderRadius: '0',\n },\n 'canvas-datagrid-context-menu-item-mobile': {\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n color: 'inherit',\n background: 'inherit',\n margin: self.style.contextMenuItemMargin,\n borderRadius: self.style.contextMenuItemBorderRadius,\n verticalAlign: 'middle',\n },\n 'canvas-datagrid-context-menu-item': {\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n color: 'inherit',\n background: 'inherit',\n margin: self.style.contextMenuItemMargin,\n borderRadius: self.style.contextMenuItemBorderRadius,\n verticalAlign: 'middle',\n },\n 'canvas-datagrid-context-menu-item:hover': {\n background: self.style.contextMenuHoverBackground,\n color: self.style.contextMenuHoverColor,\n },\n 'canvas-datagrid-context-menu-label': {\n margin: self.style.contextMenuLabelMargin,\n display: self.style.contextMenuLabelDisplay,\n minWidth: self.style.contextMenuLabelMinWidth,\n maxWidth: self.style.contextMenuLabelMaxWidth,\n },\n 'canvas-datagrid-context-menu-mobile': {\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n background: self.style.contextMenuBackground,\n color: self.style.contextMenuColor,\n border: self.style.contextMenuBorder,\n padding: self.style.contextMenuPadding,\n borderRadius: self.style.contextMenuBorderRadius,\n opacity: self.style.contextMenuOpacity,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n },\n 'canvas-datagrid-context-menu': {\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n background: self.style.contextMenuBackground,\n color: self.style.contextMenuColor,\n border: self.style.contextMenuBorder,\n padding: self.style.contextMenuPadding,\n borderRadius: self.style.contextMenuBorderRadius,\n opacity: self.style.contextMenuOpacity,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n cursor: self.style.contextMenuCursor,\n },\n 'canvas-datagrid-invalid-search-regExp': {\n background: self.style.contextMenuFilterInvalidExpresion,\n },\n };\n if (css[className]) {\n Object.keys(css[className]).map(function (prop) {\n el.style[prop] = css[className][prop];\n });\n }\n return;\n };\n self.appendTo = function (e) {\n self.parentNode = e;\n self.setDom();\n };\n self.setDom = function () {\n if (self.isChildGrid) {\n self.parentGrid = self.parentNode.parentGrid;\n self.ctx = self.parentGrid.context;\n self.canvas = self.parentGrid.canvas;\n self.controlInput = self.parentGrid.controlInput;\n self.eventParent = self.canvas;\n } else {\n self.controlInput = self.controlInput || document.createElement('input');\n self.controlInput.onblur = self.intf.blur;\n self.createInlineStyle(\n self.controlInput,\n 'canvas-datagrid-control-input',\n );\n self.isChildGrid = false;\n self.parentDOMNode = self.parentNode;\n self.parentIsCanvas = /^canvas$/i.test(self.parentDOMNode.tagName);\n if (self.parentIsCanvas) {\n self.canvas = self.parentDOMNode;\n } else {\n self.canvas = document.createElement('canvas');\n self.parentDOMNode.appendChild(self.canvas);\n }\n document.body.appendChild(self.controlInput);\n self.createInlineStyle(self.canvas, 'canvas-datagrid');\n self.ctx = self.canvas.getContext('2d');\n self.ctx.textBaseline = 'alphabetic';\n self.eventParent = self.canvas;\n }\n self.parentNodeStyle = self.canvas.style;\n self.controlInput.setAttribute('readonly', true);\n self.controlInput.addEventListener('blur', function (e) {\n if (e.target !== self.canvas) {\n self.hasFocus = false;\n }\n });\n self.eventParent.addEventListener('scroll', self.resize, false);\n self.eventParent.addEventListener('touchstart', self.touchstart, false);\n self.eventParent.addEventListener('mouseup', self.mouseup, false);\n self.eventParent.addEventListener('mousedown', self.mousedown, false);\n self.eventParent.addEventListener('dblclick', self.dblclick, false);\n self.eventParent.addEventListener('click', self.click, false);\n document.body.addEventListener('mousemove', self.mousemove);\n self[self.isChildGrid ? 'parentGrid' : 'eventParent'].addEventListener(\n 'wheel',\n self.scrollWheel,\n false,\n );\n self.canvas.addEventListener('contextmenu', self.contextmenuEvent, false);\n self.controlInput.addEventListener('copy', self.copy);\n self.controlInput.addEventListener('cut', self.cut);\n self.controlInput.addEventListener('paste', self.paste);\n self.controlInput.addEventListener('keypress', self.keypress, false);\n self.controlInput.addEventListener('keyup', self.keyup, false);\n self.controlInput.addEventListener('keydown', self.keydown, false);\n window.addEventListener('resize', self.resize);\n };\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals XMLSerializer: false, define: true, Blob: false, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nexport default function (self) {\n var perfCounters = [],\n cachedImagesDrawn = false,\n drawCount = 0,\n perfWindowSize = 300,\n entityCount = [],\n hiddenFrozenColumnCount = 0,\n scrollDebugCounters = [],\n touchPPSCounters = [];\n self.htmlImageCache = {};\n // more heavyweight version than fillArray defined in intf.js\n function fillArray(low, high, step, def) {\n step = step || 1;\n var i = [],\n x;\n for (x = low; x <= high; x += step) {\n i[x] = def === undefined ? x : typeof def === 'function' ? def(x) : def;\n }\n return i;\n }\n function drawPerfLine(w, h, x, y, perfArr, arrIndex, max, color, useAbs) {\n var i = w / perfArr.length,\n r = h / max;\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.beginPath();\n self.ctx.moveTo(x, y + h);\n perfArr.forEach(function (n) {\n var val = arrIndex === undefined ? n : n[arrIndex],\n cx,\n cy;\n if (useAbs) {\n val = Math.abs(val);\n }\n cx = x + i;\n cy = y + h - val * r;\n self.ctx.lineTo(cx, cy);\n x += i;\n });\n self.ctx.moveTo(x + w, y + h);\n self.ctx.strokeStyle = color;\n self.ctx.stroke();\n }\n function drawOnAllImagesLoaded() {\n var loaded = true;\n Object.keys(self.htmlImageCache).forEach(function (html) {\n if (!self.htmlImageCache[html].img.complete) {\n loaded = false;\n }\n });\n if (loaded && !cachedImagesDrawn) {\n cachedImagesDrawn = true;\n self.draw();\n }\n }\n function drawHtml(cell) {\n var img,\n v = cell.innerHTML || cell.formattedValue,\n cacheKey =\n v.toString() + cell.rowIndex.toString() + cell.columnIndex.toString(),\n x = Math.round(cell.x + self.canvasOffsetLeft),\n y = Math.round(cell.y + self.canvasOffsetTop);\n if (self.htmlImageCache[cacheKey]) {\n img = self.htmlImageCache[cacheKey].img;\n if (\n self.htmlImageCache[cacheKey].height !== cell.height ||\n self.htmlImageCache[cacheKey].width !== cell.width\n ) {\n // height and width of the cell has changed, invalidate cache\n self.htmlImageCache[cacheKey] = undefined;\n } else {\n if (!img.complete) {\n return;\n }\n return self.ctx.drawImage(img, x, y);\n }\n } else {\n cachedImagesDrawn = false;\n }\n img = new Image(cell.width, cell.height);\n self.htmlImageCache[cacheKey] = {\n img,\n width: cell.width,\n height: cell.height,\n };\n img.onload = function () {\n self.ctx.drawImage(img, x, y);\n drawOnAllImagesLoaded();\n };\n img.src =\n 'data:image/svg+xml;base64,' +\n btoa(\n '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"' +\n cell.width +\n '\" height=\"' +\n cell.height +\n '\">\\n' +\n '<foreignObject class=\"node\" x=\"0\" y=\"0\" width=\"100%\" height=\"100%\">\\n' +\n '<body xmlns=\"http://www.w3.org/1999/xhtml\" style=\"margin:0;padding:0;\">\\n' +\n v +\n '\\n' +\n '</body>' +\n '</foreignObject>\\n' +\n '</svg>\\n',\n );\n }\n /**\n * @param {number[]} coords [x0,y0, x1,y1, x2,y2, ...]\n * @param {boolean} [fill] fill the area that construct by these lines but not stroke\n */\n function drawLines(coords, fill) {\n if (coords.length < 4) return;\n self.ctx.beginPath();\n self.ctx.moveTo(\n coords[0] + self.canvasOffsetLeft,\n coords[1] + self.canvasOffsetTop,\n );\n for (let i = 2; i < coords.length; i += 2) {\n const x = coords[i] + self.canvasOffsetLeft;\n const y = coords[i + 1] + self.canvasOffsetTop;\n self.ctx.lineTo(x, y);\n }\n if (fill) self.ctx.fill();\n else self.ctx.stroke();\n }\n /**\n * @param {number} x based-X (left-top)\n * @param {number} y based-Y (left-top)\n * @param {number} width\n * @param {boolean} collapsed true: '+'; false: '-'\n */\n function drawGroupHandle(x, y, width, collapsed) {\n fillRect(x, y, width, width);\n strokeRect(x, y, width, width);\n const cx = x + width * 0.5;\n const cy = y + width * 0.5;\n drawLines([x + width * 0.2, cy, x + width * 0.78, cy]);\n if (collapsed) drawLines([cx, y + width * 0.22, cx, y + width * 0.8]);\n }\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} size\n * @param {string} dir Direction of the triangle, one of the 't','b','l' and 'r'\n * @param {boolean} [active]\n */\n function drawUnhideIndicator(x, y, size, dir, active) {\n const minPadding = size * 0.2;\n const maxPadding = size * 0.3;\n /** The long edge width of the triangle */\n const longEdge = size - 2 * minPadding;\n /** The median width of the triangle */\n const median = size - 2 * maxPadding;\n const halfLongEdge = longEdge * 0.5;\n let x0, y0;\n let coords, borderCoords;\n switch (dir) {\n case 'r':\n x0 = x + maxPadding;\n y0 = y + minPadding;\n borderCoords = [x, y, x + size, y, x + size, y + size, x, y + size];\n coords = [x0, y0, x0, y0 + longEdge, x0 + median, y0 + halfLongEdge];\n break;\n case 'l':\n x0 = x + size - maxPadding;\n y0 = y + minPadding;\n borderCoords = [x + size, y, x, y, x, y + size, x + size, y + size];\n coords = [x0, y0, x0, y0 + longEdge, x0 - median, y0 + halfLongEdge];\n break;\n case 't':\n x0 = x + minPadding;\n y0 = y + size - maxPadding;\n borderCoords = [x, y + size, x, y, x + size, y, x + size, y + size];\n coords = [x0, y0, x0 + longEdge, y0, x0 + halfLongEdge, y0 - median];\n break;\n case 'b':\n x0 = x + minPadding;\n y0 = y + maxPadding;\n borderCoords = [x, y, x, y + size, x + size, y + size, x + size, y];\n coords = [x0, y0, x0 + longEdge, y0, x0 + halfLongEdge, y0 + median];\n break;\n }\n\n if (active) {\n self.ctx.strokeStyle = self.style.unhideIndicatorBorderColor;\n self.ctx.lineWidth = 2;\n drawLines(borderCoords);\n\n self.ctx.fillStyle = self.style.unhideIndicatorBackgroundColor;\n let offset = dir === 'r' || dir === 'b' ? 1 : 0;\n if (dir === 'l' || dir === 'r')\n fillRect(x - offset, y, size + offset, size);\n else fillRect(x, y - offset, size, size + offset);\n }\n\n self.ctx.fillStyle = self.style.unhideIndicatorColor;\n drawLines(coords, true);\n }\n function drawOrderByArrow(x, y) {\n var mt = self.style.columnHeaderOrderByArrowMarginTop * self.scale,\n ml = self.style.columnHeaderOrderByArrowMarginLeft * self.scale,\n mr = self.style.columnHeaderOrderByArrowMarginRight * self.scale,\n aw = self.style.columnHeaderOrderByArrowWidth * self.scale,\n ah = self.style.columnHeaderOrderByArrowHeight * self.scale;\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.fillStyle = self.style.columnHeaderOrderByArrowColor;\n self.ctx.strokeStyle = self.style.columnHeaderOrderByArrowBorderColor;\n self.ctx.beginPath();\n x = x + ml;\n y = y + mt;\n if (self.orderDirection === 'asc') {\n self.ctx.lineTo(x, y + ah);\n self.ctx.lineTo(x + aw, y + ah);\n self.ctx.lineTo(x + aw * 0.5, y);\n self.ctx.lineTo(x, y + ah);\n } else {\n self.ctx.moveTo(x, y);\n self.ctx.lineTo(x + aw, y);\n self.ctx.lineTo(x + aw * 0.5, y + ah);\n self.ctx.moveTo(x, y);\n }\n self.ctx.stroke();\n self.ctx.fill();\n return ml + aw + mr;\n }\n function drawTreeArrow(cell, x, y) {\n var mt = self.style.treeArrowMarginTop * self.scale,\n mr = self.style.treeArrowMarginRight * self.scale,\n ml = self.style.treeArrowMarginLeft * self.scale,\n aw = self.style.treeArrowWidth * self.scale,\n ah = self.style.treeArrowHeight * self.scale;\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.fillStyle = self.style.treeArrowColor;\n self.ctx.strokeStyle = self.style.treeArrowBorderColor;\n self.ctx.beginPath();\n x = x + ml;\n y = y + mt;\n if (self.openChildren[cell.rowIndex]) {\n self.ctx.moveTo(x, y);\n self.ctx.lineTo(x + aw, y);\n self.ctx.lineTo(x + aw * 0.5, y + ah);\n self.ctx.moveTo(x, y);\n } else {\n self.ctx.lineTo(x, y);\n self.ctx.lineTo(x + ah, y + aw * 0.5);\n self.ctx.lineTo(x, y + aw);\n self.ctx.lineTo(x, y);\n }\n self.ctx.stroke();\n self.ctx.fill();\n return ml + aw + mr;\n }\n function drawCellTreeIcon(cell, tree, rowTree) {\n const parentCount = rowTree ? tree.parentCount : 0;\n const iconSize = self.style.cellTreeIconWidth * self.scale,\n marginTop = self.style.cellTreeIconMarginTop * self.scale,\n marginRight = self.style.cellTreeIconMarginRight * self.scale,\n marginLeft =\n self.style.cellTreeIconMarginLeft * self.scale +\n parentCount * (iconSize + cell.paddingLeft);\n\n let x = cell.x + cell.paddingLeft + self.canvasOffsetLeft + marginLeft,\n y = cell.y + self.canvasOffsetTop + marginTop;\n\n if (tree.icon) {\n self.ctx.beginPath();\n const oldFillStyle = self.ctx.fillStyle;\n const oldStrokeStyle = self.ctx.strokeStyle;\n\n if (cell.hovered && self.hovers.onCellTreeIcon) {\n self.ctx.fillStyle = self.style.cellTreeIconHoverFillColor;\n } else {\n self.ctx.fillStyle = self.style.cellTreeIconFillColor;\n }\n\n self.ctx.fillRect(x, y, iconSize, iconSize);\n self.ctx.strokeStyle = self.style.cellTreeIconBorderColor;\n self.ctx.rect(x, y, iconSize, iconSize);\n self.ctx.stroke();\n\n self.ctx.beginPath();\n if (tree.expand) {\n self.ctx.moveTo(x + 3, y + iconSize * 0.5);\n self.ctx.lineTo(x + iconSize - 3, y + iconSize * 0.5);\n } else {\n self.ctx.moveTo(x + 2, y + iconSize * 0.5);\n self.ctx.lineTo(x + iconSize - 2, y + iconSize * 0.5);\n self.ctx.moveTo(x + iconSize * 0.5, y + 2);\n self.ctx.lineTo(x + iconSize * 0.5, y + iconSize - 2);\n }\n self.ctx.lineWidth = self.style.cellTreeIconLineWidth;\n self.ctx.strokeStyle = self.style.cellTreeIconLineColor;\n self.ctx.stroke();\n\n self.ctx.strokeStyle = oldStrokeStyle;\n self.ctx.fillStyle = oldFillStyle;\n }\n\n return marginLeft + iconSize + marginRight;\n }\n function drawFilterButtonArrow(x, y) {\n var mt =\n ((self.style.filterButtonHeight - self.style.filterButtonArrowHeight) /\n 2) *\n self.scale,\n ml =\n ((self.style.filterButtonWidth - self.style.filterButtonArrowWidth) /\n 2) *\n self.scale,\n aw = self.style.filterButtonArrowWidth * self.scale,\n ah = self.style.filterButtonArrowHeight * self.scale;\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.fillStyle = self.style.filterButtonArrowColor;\n self.ctx.strokeStyle = self.style.filterButtonArrowBorderColor;\n self.ctx.beginPath();\n x = x + ml;\n y = y + mt;\n\n self.ctx.moveTo(x, y);\n self.ctx.lineTo(x + aw, y);\n self.ctx.lineTo(x + aw * 0.5, y + ah);\n self.ctx.moveTo(x, y);\n\n self.ctx.stroke();\n self.ctx.fill();\n return ml + aw;\n }\n function radiusRect(x, y, w, h, radius) {\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n var r = x + w,\n b = y + h;\n self.ctx.beginPath();\n self.ctx.moveTo(x + radius, y);\n self.ctx.lineTo(r - radius, y);\n self.ctx.quadraticCurveTo(r, y, r, y + radius);\n self.ctx.lineTo(r, y + h - radius);\n self.ctx.quadraticCurveTo(r, b, r - radius, b);\n self.ctx.lineTo(x + radius, b);\n self.ctx.quadraticCurveTo(x, b, x, b - radius);\n self.ctx.lineTo(x, y + radius);\n self.ctx.quadraticCurveTo(x, y, x + radius, y);\n }\n function fillRect(x, y, w, h) {\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.fillRect(x, y, w, h);\n }\n function strokeRect(x, y, w, h) {\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.strokeRect(x, y, w, h);\n }\n function fillText(text, x, y) {\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.fillText(text, x, y);\n }\n function fillCircle(x, y, r) {\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.beginPath();\n self.ctx.arc(x, y, r, 0, 2 * Math.PI);\n self.ctx.fill();\n }\n function strokeCircle(x, y, r) {\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.beginPath();\n self.ctx.arc(x, y, r, 0, 2 * Math.PI);\n self.ctx.stroke();\n }\n function clipFrozenArea(mode) {\n // 0 both, 1 rows, 2 cols\n // self.lastFrozenColumnPixel;\n // self.lastFrozenRowPixel;\n self.ctx.beginPath();\n if (mode === 0) {\n self.ctx.moveTo(self.lastFrozenColumnPixel, self.lastFrozenRowPixel);\n self.ctx.lineTo(self.lastFrozenColumnPixel, self.height);\n self.ctx.lineTo(self.width, self.height);\n self.ctx.lineTo(self.width, self.lastFrozenRowPixel);\n }\n if (mode === 1) {\n self.ctx.moveTo(0, self.lastFrozenRowPixel);\n self.ctx.lineTo(0, self.height);\n self.ctx.lineTo(self.width, self.height);\n self.ctx.lineTo(self.width, self.lastFrozenRowPixel);\n }\n if (mode === 2) {\n self.ctx.moveTo(self.lastFrozenColumnPixel, 0);\n self.ctx.lineTo(self.width, 0);\n self.ctx.lineTo(self.width, self.height);\n self.ctx.lineTo(self.lastFrozenColumnPixel, self.height);\n }\n self.ctx.clip();\n }\n function fillHandle(x, y, r) {\n if (self.style.selectionHandleType === 'circle') {\n return fillCircle(x, y, r * 0.5);\n }\n fillRect(x - r * 0.5, y - r * 0.5, r, r);\n }\n function strokeHandle(x, y, r) {\n if (self.style.selectionHandleType === 'circle') {\n return strokeCircle(x, y, r * 0.5);\n }\n strokeRect(x - r * 0.5, y - r * 0.5, r, r);\n }\n function addselectionHandle(c, pos) {\n var hw = self.style.selectionHandleSize,\n p = {\n tr: function () {\n fillHandle(c.x + c.width, c.y, hw);\n strokeHandle(c.x + c.width, c.y, hw);\n },\n br: function () {\n fillHandle(c.x + c.width, c.y + c.height, hw);\n strokeHandle(c.x + c.width, c.y + c.height, hw);\n },\n tl: function () {\n fillHandle(c.x, c.y, hw);\n strokeHandle(c.x, c.y, hw);\n },\n bl: function () {\n fillHandle(c.x, c.y + c.height, hw);\n strokeHandle(c.x, c.y + c.height, hw);\n },\n };\n p[pos]();\n }\n function addBorderLine(c, pos) {\n self.ctx.beginPath();\n var p = {\n t: function () {\n self.ctx.moveTo(\n c.x + self.canvasOffsetLeft,\n c.y + self.canvasOffsetTop,\n );\n self.ctx.lineTo(\n c.x + self.canvasOffsetLeft + c.width,\n c.y + self.canvasOffsetTop,\n );\n },\n r: function () {\n self.ctx.moveTo(\n c.x + self.canvasOffsetLeft + c.width,\n c.y + self.canvasOffsetTop,\n );\n self.ctx.lineTo(\n c.x + self.canvasOffsetLeft + c.width,\n c.y + self.canvasOffsetTop + c.height,\n );\n },\n b: function () {\n self.ctx.moveTo(\n c.x + self.canvasOffsetLeft,\n c.y + self.canvasOffsetTop + c.height,\n );\n self.ctx.lineTo(\n c.x + self.canvasOffsetLeft + c.width,\n c.y + self.canvasOffsetTop + c.height,\n );\n },\n l: function () {\n self.ctx.moveTo(\n c.x + self.canvasOffsetLeft,\n c.y + self.canvasOffsetTop,\n );\n self.ctx.lineTo(\n c.x + self.canvasOffsetLeft,\n c.y + self.canvasOffsetTop + c.height,\n );\n },\n };\n p[pos]();\n self.ctx.stroke();\n }\n function addEllipsis(text, width) {\n var c,\n w = 0;\n if (self.ellipsisCache[text] && self.ellipsisCache[text][width]) {\n return self.ellipsisCache[text][width];\n }\n //TODO Add ellipsis back when there is a fast way to do it\n w = self.ctx.measureText(text).width;\n self.ellipsisCache[text] = self.ellipsisCache[text] || {};\n c = { value: text, width: w };\n self.ellipsisCache[text][width] = c;\n return c;\n }\n function wrapText(cell, splitChar) {\n if (!cell.formattedValue) {\n return {\n lines: [{ width: 0, value: '' }],\n width: 0,\n height: cell.calculatedLineHeight,\n };\n }\n var max = 0,\n n = '\\n',\n x,\n word,\n words = cell.formattedValue.split(splitChar),\n textHeight = cell.calculatedLineHeight,\n lines = [],\n out = [],\n wrap = self.style.cellWhiteSpace !== 'nowrap',\n autoResize = self.attributes.autoResizeRows && wrap,\n elWidth,\n et = self.attributes.ellipsisText,\n elClipLength,\n plWidth,\n clippedVal,\n ogWordWidth,\n previousLine,\n line = {\n width: 0,\n value: '',\n },\n cHeight = wrap ? cell.paddedHeight : cell.calculatedLineHeight;\n lines.push(line);\n elWidth = self.ctx.measureText(' ' + et).width;\n for (x = 0; x < words.length; x += 1) {\n word = words[x];\n var curSplitChar = word[word.length - 1] === '-' ? '' : splitChar;\n var measure = self.ctx.measureText(word + curSplitChar);\n if (line.width + measure.width + elWidth < cell.paddedWidth) {\n line.value += word + curSplitChar;\n line.width += measure.width;\n continue;\n }\n // if there is a hyphenated word that is too long\n // split it and add the split set to the array\n // then back up and re-read new split set\n // this behavior seems right, it might not be\n if (/\\w-\\w/.test(word) && cell.paddedWidth < measure.width) {\n var arr = word.split('-');\n arr = arr.map((item, index) => {\n return index === arr.length - 1 ? item : item + '-';\n });\n words.splice(x, 1, ...arr);\n x -= 1;\n continue;\n }\n line = {\n width: measure.width,\n value: word + curSplitChar,\n };\n if (x === 0) {\n lines = [];\n lines.push(line);\n }\n textHeight += cell.calculatedLineHeight;\n if (textHeight > cHeight && !autoResize) {\n if (lines.length === 0) {\n break;\n }\n elClipLength = 1;\n previousLine = lines[lines.length - 1];\n if (previousLine.width < cell.paddedWidth && words.length === 1) {\n break;\n }\n clippedVal = previousLine.value + word;\n plWidth = self.ctx.measureText(clippedVal + et).width;\n var originText = clippedVal;\n if (plWidth > cell.paddedWidth) {\n var stepLength = parseInt(clippedVal.length / 2);\n var direction = -1;\n while (stepLength > 0) {\n clippedVal = originText.substr(\n 0,\n stepLength * direction + clippedVal.length,\n );\n plWidth = self.ctx.measureText(clippedVal + et).width;\n direction = plWidth > cell.paddedWidth ? -1 : 1;\n stepLength = parseInt(stepLength / 2);\n }\n }\n clippedVal =\n clippedVal + (originText.length != clippedVal.length ? et : '');\n previousLine.value = clippedVal;\n previousLine.width = plWidth;\n break;\n }\n if (x > 0) {\n lines.push(line);\n }\n }\n return {\n lines: lines,\n width: max,\n height: cell.calculatedLineHeight * lines.length,\n };\n }\n function drawText(cell, treeCellPadding = 0) {\n var ll = cell.text.lines.length,\n h = cell.fontHeight * cell.lineHeight,\n x,\n line,\n wrap = self.style.cellWhiteSpace !== 'nowrap',\n textHeight = 0;\n for (x = 0; x < cell.text.lines.length; x += 1) {\n line = cell.text.lines[x];\n var vPos =\n Math.max(\n (cell.height -\n (wrap ? cell.text.height : cell.calculatedLineHeight)) *\n 0.5,\n 0,\n ) + h,\n hPos =\n cell.paddingLeft +\n treeCellPadding +\n cell.treeArrowWidth +\n cell.orderByArrowWidth;\n if (cell.horizontalAlignment === 'right') {\n hPos =\n cell.paddingLeft + treeCellPadding + cell.paddedWidth - line.width;\n } else if (cell.horizontalAlignment === 'center') {\n hPos =\n cell.paddingLeft +\n treeCellPadding +\n (cell.paddedWidth + cell.paddingRight) / 2 -\n line.width / 2;\n }\n if (cell.verticalAlignment === 'top') {\n vPos = cell.calculatedLineHeight;\n } else if (cell.verticalAlignment === 'bottom') {\n vPos = cell.height - cell.paddingBottom - cell.text.height;\n }\n line.height = h + cell.lineSpacing;\n line.offsetLeft = hPos;\n line.offsetTop = vPos;\n line.x = cell.x + hPos;\n line.y = cell.y + textHeight + vPos;\n textHeight += line.height;\n fillText(line.value, line.x, line.y);\n }\n if (self.attributes.debug && cell.active) {\n requestAnimationFrame(function () {\n self.ctx.font = self.style.debugFont;\n self.ctx.fillStyle = self.style.debugColor;\n fillText(\n JSON.stringify(\n {\n x: cell.x,\n y: cell.y,\n h: cell.height,\n w: cell.width,\n pw: cell.paddedWidth,\n idx: cell.columnIndex,\n idx_ord: cell.sortColumnIndex,\n },\n null,\n '\\t',\n ),\n cell.x + 14,\n cell.y + 14,\n );\n fillText(\n JSON.stringify(\n cell.text.lines.map(function (l) {\n return { w: l.width, v: l.value.length };\n }),\n null,\n '\\t',\n ),\n cell.x + 14,\n cell.y + 30,\n );\n });\n }\n }\n function getFrozenColumnsWidth() {\n var w = 0,\n s = self.getSchema(),\n x = 0,\n n = Math.min(self.frozenColumn, s.length),\n collapsedGroups = self.getCollapsedColumnGroups(),\n column;\n hiddenFrozenColumnCount = 0;\n while (x < n) {\n column = s[x];\n if (column.hidden) {\n hiddenFrozenColumnCount += 1;\n } else {\n const isCollapsed =\n collapsedGroups.findIndex(\n (group) => x >= group.from && x <= group.to,\n ) >= 0;\n if (isCollapsed) {\n hiddenFrozenColumnCount += 1;\n } else {\n w += self.getColumnWidth(x);\n }\n }\n x += 1;\n }\n return w;\n }\n /**\n * Redraws the grid. No matter what the change, this is the only method required to refresh everything.\n * @memberof canvasDatagrid\n * @name draw\n * @method\n */\n // r = literal row index\n // rd = row data array\n // i = user order index\n // o = literal data index\n // y = y drawing cursor\n // x = x drawing cursor\n // s = visible schema array\n // cx = current x drawing cursor sub calculation var\n // cy = current y drawing cursor sub calculation var\n // a = static cell (like corner cell)\n // p = perf counter\n // l = data length\n // u = current cell\n // h = current height\n // w = current width\n self.draw = function (internal) {\n if (self.dispatchEvent('beforedraw', {})) {\n return;\n }\n if (!self.isChildGrid && (!self.height || !self.width)) {\n return;\n }\n if (self.isChildGrid && internal) {\n requestAnimationFrame(self.parentGrid.draw);\n return;\n }\n if (self.intf.visible === false) {\n return;\n }\n // initial values\n var checkScrollHeight,\n rowHeaderCell,\n p,\n cx,\n cy,\n treeGrid,\n rowOpen,\n rowHeight,\n cornerCell,\n y,\n x,\n c,\n h,\n w,\n schema,\n rowIndex,\n rowData,\n aCell,\n viewData = self.viewData || [],\n bc = self.style.gridBorderCollapse === 'collapse',\n selectionBorders = [],\n moveBorders = [],\n selectionHandles = [],\n rowHeaders = [],\n l = viewData.length,\n u = self.currentCell || {},\n columnHeaderCellHeight = self.getColumnHeaderCellHeight(),\n rowHeaderCellWidth = self.getRowHeaderCellWidth(),\n rowGroupsAreaWidth = self.getRowGroupAreaWidth(),\n columnGroupsAreaHeight = self.getColumnGroupAreaHeight(),\n /** key: boundRowIndex, value: `{y,h}` */\n rowGroupsRectInfo = {},\n /** value: `{y,h}` */\n rowGroupsFrozenInfo = {},\n /** key: columnIndex, value: `{x,w}` */\n columnGroupsRectInfo = {},\n collapsedColumnGroups = self.getCollapsedColumnGroups(),\n collapsedRowGroups = self.getCollapsedRowGroups(),\n cellHeight = self.style.cellHeight,\n currentRowIndexOffset = 0,\n /** @type {Array<{from:number,plus:number}>} */\n rowIndexOffsetByHiddenRows = self.hiddenRowRanges\n .map((range) => ({\n from: range[0],\n plus: range[1] - range[0] + 1,\n }))\n .sort((a, b) => a.from - b.from);\n drawCount += 1;\n p = performance.now();\n self.visibleRowHeights = [];\n // if data length has changed, there is no way to know\n if (viewData.length > self.orders.rows.length) {\n self.createRowOrders();\n }\n function saveRowGroupsRectInfo(cell) {\n let index = cell.boundRowIndex;\n if (index >= -1 === false)\n if (cell.rowIndex === -1) index = -1;\n else return;\n if (rowGroupsRectInfo[index]) return;\n rowGroupsRectInfo[index] = { y: cell.y, h: cell.height };\n }\n function saveColumnGroupsRectInfo(cell) {\n const index = cell.columnIndex;\n if (columnGroupsRectInfo[index]) return;\n columnGroupsRectInfo[index] = { x: cell.x, w: cell.width };\n }\n /**\n * @param {number} columnIndex\n * @returns {boolean}\n */\n function isColumnCollapsedByGroup(columnIndex) {\n return (\n collapsedColumnGroups.findIndex(\n (group) => columnIndex >= group.from && columnIndex <= group.to,\n ) >= 0\n );\n }\n\n function drawScrollBars() {\n var drawCorner,\n en = self.scrollBox.entities,\n m = self.style.scrollBarBoxMargin * 2;\n self.ctx.strokeStyle = self.style.scrollBarBorderColor;\n self.ctx.lineWidth = self.style.scrollBarBorderWidth;\n if (self.frozenColumn > 0) {\n en.horizontalBox.x =\n rowHeaderCellWidth +\n self.style.scrollBarBoxMargin +\n self.scrollCache.x[self.frozenColumn - 1] +\n (en.horizontalBar.width -\n self.scrollCache.x[self.frozenColumn - 1] -\n self.scrollBox.scrollBoxWidth) *\n (self.scrollBox.scrollLeft / self.scrollBox.scrollWidth);\n } else {\n en.horizontalBox.x =\n rowHeaderCellWidth +\n self.style.scrollBarBoxMargin +\n (en.horizontalBar.width - self.scrollBox.scrollBoxWidth) *\n (self.scrollBox.scrollLeft / self.scrollBox.scrollWidth);\n }\n en.verticalBox.y =\n columnHeaderCellHeight +\n self.style.scrollBarBoxMargin +\n self.scrollCache.y[self.frozenRow] +\n (en.verticalBar.height -\n self.scrollBox.scrollBoxHeight -\n self.scrollCache.y[self.frozenRow]) *\n (self.scrollBox.scrollTop / self.scrollBox.scrollHeight);\n if (self.scrollBox.horizontalBarVisible) {\n self.ctx.fillStyle = self.style.scrollBarBackgroundColor;\n fillRect(\n en.horizontalBar.x,\n en.horizontalBar.y,\n en.horizontalBar.width + m,\n en.horizontalBar.height,\n );\n strokeRect(\n en.horizontalBar.x,\n en.horizontalBar.y,\n en.horizontalBar.width + m,\n en.horizontalBar.height,\n );\n self.ctx.fillStyle = self.style.scrollBarBoxColor;\n if (self.scrollBox.horizontalBoxVisible) {\n if (/horizontal/.test(u.context)) {\n self.ctx.fillStyle = self.style.scrollBarActiveColor;\n }\n radiusRect(\n en.horizontalBox.x,\n en.horizontalBox.y,\n en.horizontalBox.width,\n en.horizontalBox.height,\n self.style.scrollBarBoxBorderRadius,\n );\n self.ctx.stroke();\n self.ctx.fill();\n }\n drawCorner = true;\n self.visibleCells.unshift(en.horizontalBar);\n self.visibleCells.unshift(en.horizontalBox);\n }\n if (self.scrollBox.verticalBarVisible) {\n self.ctx.fillStyle = self.style.scrollBarBackgroundColor;\n fillRect(\n en.verticalBar.x,\n en.verticalBar.y,\n en.verticalBar.width,\n en.verticalBar.height + m,\n );\n strokeRect(\n en.verticalBar.x,\n en.verticalBar.y,\n en.verticalBar.width,\n en.verticalBar.height + m,\n );\n if (self.scrollBox.verticalBoxVisible) {\n self.ctx.fillStyle = self.style.scrollBarBoxColor;\n if (/vertical/.test(u.context)) {\n self.ctx.fillStyle = self.style.scrollBarActiveColor;\n }\n radiusRect(\n en.verticalBox.x,\n en.verticalBox.y,\n en.verticalBox.width,\n en.verticalBox.height,\n self.style.scrollBarBoxBorderRadius,\n );\n self.ctx.stroke();\n self.ctx.fill();\n }\n drawCorner = true;\n self.visibleCells.unshift(en.verticalBar);\n self.visibleCells.unshift(en.verticalBox);\n }\n if (drawCorner) {\n //corner\n self.ctx.strokeStyle = self.style.scrollBarCornerBorderColor;\n self.ctx.fillStyle = self.style.scrollBarCornerBackgroundColor;\n radiusRect(\n en.corner.x,\n en.corner.y,\n en.corner.width,\n en.corner.height,\n 0,\n );\n self.ctx.stroke();\n self.ctx.fill();\n self.visibleCells.unshift(en.corner);\n }\n }\n function createHandlesOverlayArray(cell) {\n if (self.attributes.allowMovingSelection || self.mobile) {\n if (\n cell.selectionBorderTop &&\n cell.selectionBorderRight &&\n self.mobile\n ) {\n selectionHandles.push([cell, 'tr']);\n cell.selectionHandle = 'tr';\n }\n if (\n cell.selectionBorderTop &&\n cell.selectionBorderLeft &&\n self.mobile\n ) {\n selectionHandles.push([cell, 'tl']);\n cell.selectionHandle = 'tl';\n }\n if (\n cell.selectionBorderBottom &&\n cell.selectionBorderLeft &&\n self.mobile\n ) {\n selectionHandles.push([cell, 'bl']);\n cell.selectionHandle = 'bl';\n }\n if (\n cell.selectionBorderBottom &&\n cell.selectionBorderRight &&\n (self.attributes.selectionHandleBehavior !== 'none' || self.mobile)\n ) {\n selectionHandles.push([cell, 'br']);\n cell.selectionHandle = 'br';\n }\n }\n }\n function createBorderOverlayArray(\n cell,\n drawArray,\n propPrefix,\n offsetPoint,\n ) {\n offsetPoint = offsetPoint || { x: 0, y: 0 };\n cell.selectionBorder = '';\n if (\n !cell.isRowHeader &&\n self.selections[cell.rowIndex + -offsetPoint.y] &&\n self.selections[cell.rowIndex + -offsetPoint.y].indexOf(\n cell.columnIndex + -offsetPoint.x,\n ) !== -1\n ) {\n if (\n (!self.selections[cell.rowIndex - 1 + -offsetPoint.y] ||\n self.selections[cell.rowIndex - 1 + -offsetPoint.y].indexOf(\n cell.columnIndex + -offsetPoint.x,\n ) === -1 ||\n cell.rowIndex === 0) &&\n !cell.isHeader\n ) {\n drawArray.push([cell, 't']);\n cell[propPrefix + 'BorderTop'] = true;\n cell[propPrefix + 'Border'] += 't';\n }\n if (\n !self.selections[cell.rowIndex + 1 + -offsetPoint.y] ||\n self.selections[cell.rowIndex + 1 + -offsetPoint.y].indexOf(\n cell.columnIndex + -offsetPoint.x,\n ) === -1\n ) {\n drawArray.push([cell, 'b']);\n cell[propPrefix + 'BorderBottom'] = true;\n cell[propPrefix + 'Border'] += 'b';\n }\n if (\n !self.selections[cell.rowIndex + -offsetPoint.y] ||\n cell.columnIndex === 0 ||\n self.selections[cell.rowIndex + -offsetPoint.y].indexOf(\n cell.columnIndex - 1 + -offsetPoint.x,\n ) === -1\n ) {\n drawArray.push([cell, 'l']);\n cell[propPrefix + 'BorderLeft'] = true;\n cell[propPrefix + 'Border'] += 'l';\n }\n if (\n !self.selections[cell.rowIndex + -offsetPoint.y] ||\n cell.columnIndex === schema.length ||\n self.selections[cell.rowIndex + -offsetPoint.y].indexOf(\n cell.columnIndex + 1 + -offsetPoint.x,\n ) === -1\n ) {\n drawArray.push([cell, 'r']);\n cell[propPrefix + 'BorderRight'] = true;\n cell[propPrefix + 'Border'] += 'r';\n }\n }\n }\n function drawCell(rowData, rowOrderIndex, rowIndex) {\n return function drawEach(header, headerIndex, columnOrderIndex) {\n if (header.hidden) {\n return 0;\n }\n var cellStyle = header.style || 'cell',\n cellGridAttributes,\n cell,\n isHeader = /HeaderCell/.test(cellStyle),\n isCorner = /cornerCell/.test(cellStyle),\n isRowHeader = 'rowHeaderCell' === cellStyle,\n isColumnHeader = 'columnHeaderCell' === cellStyle,\n isFilterable =\n self.filterable.rows.includes(rowIndex) &&\n self.filterable.columns.includes(headerIndex),\n wrap = self.style.cellWhiteSpace !== 'nowrap',\n selected =\n self.selections[rowOrderIndex] &&\n self.selections[rowOrderIndex].indexOf(columnOrderIndex) !== -1,\n hovered =\n self.hovers.rowIndex === rowOrderIndex &&\n (self.attributes.hoverMode === 'row' ||\n self.hovers.columnIndex === columnOrderIndex),\n openedFilter =\n self.selectedFilterButton.rowIndex == rowIndex &&\n self.selectedFilterButton.columnIndex == headerIndex,\n active =\n self.activeCell.rowIndex === rowOrderIndex &&\n self.activeCell.columnIndex === columnOrderIndex,\n isColumnHeaderCellCap = cellStyle === 'columnHeaderCellCap',\n rawValue = rowData ? rowData[header.name] : undefined,\n isGrid = header.type === 'canvas-datagrid',\n activeHeader =\n (self.orders.rows[self.activeCell.rowIndex] === rowOrderIndex ||\n self.orders.columns[self.activeCell.columnIndex] ===\n headerIndex) &&\n (columnOrderIndex === -1 || rowOrderIndex === -1)\n ? isRowHeader\n ? 'activeRowHeaderCell'\n : 'activeColumnHeaderCell'\n : false,\n val,\n f = self.formatters[header.type || 'string'],\n orderByArrowSize = 0,\n treeArrowSize = 0,\n cellWidth = self.sizes.columns[headerIndex] || header.width,\n ev = {\n value: rawValue,\n row: rowData,\n header: header,\n };\n if (isColumnHeaderCellCap) {\n cellWidth = w - x;\n }\n // if no data or schema are defined, a width is provided to the stub column\n if (cellWidth === undefined) {\n cellWidth = self.style.cellWidth;\n }\n cellWidth = cellWidth * self.scale;\n if (x + cellWidth + self.style.cellBorderWidth < 0) {\n x += cellWidth + self.style.cellBorderWidth;\n }\n if (active && cellStyle !== 'cornerCell') {\n cellStyle = 'activeCell';\n }\n if (self.visibleRows.indexOf(rowIndex) === -1 && !isHeader) {\n self.visibleRows.push(rowIndex);\n }\n val = self.dispatchEvent('formatcellvalue', ev);\n cx = x;\n cy = y;\n if (cellStyle === 'cornerCell') {\n cx = 0;\n cy = 0;\n } else if (isRowHeader) {\n cx = 0;\n } else if (isHeader) {\n cy = 0;\n }\n cell = {\n type: isGrid ? 'canvas-datagrid-cell' : header.type,\n style: cellStyle,\n nodeType: 'canvas-datagrid-cell',\n x: cx,\n y: cy,\n fontHeight: (self.style[cellStyle + 'FontHeight'] || 0) * self.scale,\n horizontalAlignment: self.style[cellStyle + 'HorizontalAlignment'],\n verticalAlignment: self.style[cellStyle + 'VerticalAlignment'],\n paddingLeft:\n (self.style[cellStyle + 'PaddingLeft'] || 0) * self.scale,\n paddingTop: (self.style[cellStyle + 'PaddingTop'] || 0) * self.scale,\n paddingRight:\n (self.style[cellStyle + 'PaddingRight'] || 0) * self.scale,\n paddingBottom:\n (self.style[cellStyle + 'PaddingBottom'] || 0) * self.scale,\n whiteSpace: self.style.cellWhiteSpace,\n lineHeight: self.style.cellLineHeight,\n lineSpacing: self.style.cellLineSpacing,\n offsetTop: self.canvasOffsetTop + cy,\n offsetLeft: self.canvasOffsetLeft + cx,\n scrollTop: self.scrollBox.scrollTop,\n scrollLeft: self.scrollBox.scrollLeft,\n active: active || activeHeader,\n hovered: hovered,\n selected: selected,\n width: cellWidth,\n height: cellHeight,\n offsetWidth: cellWidth,\n offsetHeight: cellHeight,\n parentNode: self.intf.parentNode,\n offsetParent: self.intf.parentNode,\n data: rowData,\n isCorner: isCorner,\n isHeader: isHeader,\n isColumnHeader: isColumnHeader,\n isColumnHeaderCellCap: isColumnHeaderCellCap,\n isRowHeader: isRowHeader,\n isFilterable: isFilterable,\n openedFilter: openedFilter,\n rowOpen: rowOpen,\n header: header,\n\n columnIndex: columnOrderIndex,\n rowIndex: rowOrderIndex,\n\n viewRowIndex: rowOrderIndex,\n viewColumnIndex: columnOrderIndex,\n\n boundRowIndex: self.getBoundRowIndexFromViewRowIndex(rowOrderIndex),\n boundColumnIndex: self.getBoundColumnIndexFromViewColumnIndex(\n columnOrderIndex,\n ),\n\n sortColumnIndex: headerIndex,\n sortRowIndex: rowIndex,\n\n isGrid: isGrid,\n isNormal: !isGrid && !isCorner && !isHeader,\n gridId: (self.attributes.name || '') + rowIndex + ':' + headerIndex,\n parentGrid: self.intf,\n innerHTML: '',\n activeHeader: activeHeader,\n value:\n isHeader && !isRowHeader ? header.title || header.name : rawValue,\n isRowTree:\n rowOrderIndex >= 0 &&\n columnOrderIndex == self.cellTree.rowTreeColIndex &&\n self.cellTree.rows.length > 0 &&\n self.cellTree.rows[rowOrderIndex].icon,\n isColumnTree:\n columnOrderIndex >= 0 &&\n self.cellTree.columns[rowOrderIndex] &&\n self.cellTree.columns[rowOrderIndex][columnOrderIndex].icon,\n };\n cell.calculatedLineHeight =\n cell.fontHeight * cell.lineHeight + cell.lineSpacing;\n cell.paddedWidth = cell.width - cell.paddingRight - cell.paddingLeft;\n cell.paddedHeight = cell.height - cell.paddingTop - cell.paddingBottom;\n ev.cell = cell;\n cell.userHeight = cell.isHeader ? self.sizes.rows[-1] : rowHeight;\n cell.userWidth = cell.isHeader\n ? self.sizes.columns.cornerCell\n : self.sizes.columns[headerIndex];\n self.visibleCells.unshift(cell);\n saveRowGroupsRectInfo(cell);\n saveColumnGroupsRectInfo(cell);\n if (self.dispatchEvent('beforerendercell', ev)) {\n return;\n }\n self.ctx.fillStyle = self.style[cellStyle + 'BackgroundColor'];\n self.ctx.strokeStyle = self.style[cellStyle + 'BorderColor'];\n self.ctx.lineWidth = self.style[cellStyle + 'BorderWidth'];\n if (hovered) {\n self.ctx.fillStyle = self.style[cellStyle + 'HoverBackgroundColor'];\n self.ctx.strokeStyle = self.style[cellStyle + 'HoverBorderColor'];\n }\n if (selected) {\n self.ctx.fillStyle =\n self.style[cellStyle + 'SelectedBackgroundColor'];\n self.ctx.strokeStyle = self.style[cellStyle + 'SelectedBorderColor'];\n }\n if (activeHeader) {\n self.ctx.fillStyle = self.style[activeHeader + 'BackgroundColor'];\n }\n self.dispatchEvent('rendercell', ev);\n if (cell.isGrid) {\n if (cell.height !== rowHeight) {\n cell.height = rowHeight || self.style.cellHeightWithChildGrid;\n checkScrollHeight = true;\n }\n cell.width =\n self.sizes.columns[headerIndex] ||\n self.style.cellWidthWithChildGrid;\n }\n if (rowOpen && !cell.isRowHeader) {\n cell.height = self.sizes.rows[rowIndex] || self.style.cellHeight;\n }\n if (!cell.isGrid) {\n fillRect(cx, cy, cell.width, cell.height);\n strokeRect(cx, cy, cell.width, cell.height);\n }\n self.ctx.save();\n radiusRect(cell.x, cell.y, cell.width, cell.height, 0);\n self.ctx.clip();\n self.dispatchEvent('afterrendercell', ev);\n if (cell.height !== cellHeight && !(rowOpen && !cell.isRowHeader)) {\n self.sizes.rows[isHeader ? -1 : rowIndex] = cell.height;\n checkScrollHeight = true;\n }\n if (cell.width !== cellWidth) {\n self.sizes.columns[headerIndex] = cell.width;\n checkScrollHeight = true;\n }\n if (isRowHeader && self.attributes.tree) {\n if (!self.dispatchEvent('rendertreearrow', ev)) {\n treeArrowSize = drawTreeArrow(\n cell,\n self.style[cellStyle + 'PaddingLeft'],\n cy,\n 0,\n );\n }\n }\n if ((self.attributes.showRowNumbers && isRowHeader) || !isRowHeader) {\n if (cell.isGrid && !self.dispatchEvent('beforerendercellgrid', ev)) {\n if (!self.childGrids[cell.gridId]) {\n // HACK: this only allows setting of the child grids styles if data is set _after_\n // this is less than desirable. An interface needs to be made to effect the\n // style of all cell grids. One for individual grids already exists.\n cellGridAttributes = self.cellGridAttributes;\n cellGridAttributes.name = self.attributes.saveAppearance\n ? cell.gridId\n : undefined;\n cellGridAttributes.component = false;\n cellGridAttributes.parentNode = cell;\n cellGridAttributes.data = rawValue;\n ev.cellGridAttributes = cellGridAttributes;\n if (self.dispatchEvent('beforecreatecellgrid', ev)) {\n return;\n }\n self.childGrids[cell.gridId] = self.createGrid(\n cellGridAttributes,\n );\n self.sizes.rows[rowIndex] =\n self.sizes.rows[rowIndex] || self.style.cellGridHeight;\n checkScrollHeight = true;\n }\n cell.grid = self.childGrids[cell.gridId];\n cell.grid.parentNode = cell;\n cell.grid.visible = true;\n cell.grid.draw();\n self.dispatchEvent('rendercellgrid', ev);\n } else if (!cell.isGrid) {\n if (self.childGrids[cell.gridId]) {\n self.childGrids[cell.gridId].parentNode.offsetHeight = 0;\n }\n if (isHeader && self.orderBy === header.name) {\n if (!self.dispatchEvent('renderorderbyarrow', ev)) {\n orderByArrowSize = drawOrderByArrow(\n cx + self.style[cellStyle + 'PaddingLeft'],\n 0,\n );\n }\n }\n self.ctx.fillStyle = self.style[cellStyle + 'Color'];\n if (hovered) {\n self.ctx.fillStyle = self.style[cellStyle + 'HoverColor'];\n }\n if (selected) {\n self.ctx.fillStyle = self.style[cellStyle + 'SelectedColor'];\n }\n if (activeHeader) {\n self.ctx.fillStyle = self.style[activeHeader + 'Color'];\n }\n cell.treeArrowWidth = treeArrowSize;\n cell.orderByArrowWidth = orderByArrowSize;\n // create text ref to see if height needs to expand\n val = val !== undefined ? val : f ? f(ev) : '';\n if (val === undefined && !f) {\n val = '';\n console.warn(\n 'canvas-datagrid: Unknown format ' +\n header.type +\n ' add a cellFormater',\n );\n }\n cell.formattedValue = (val !== undefined && val !== null\n ? val\n : ''\n ).toString();\n if (\n self.columnFilters &&\n self.columnFilters[val] !== undefined &&\n isHeader\n ) {\n cell.formattedValue = self.attributes.filterTextPrefix + val;\n }\n self.ctx.font =\n self.style[cellStyle + 'FontHeight'] * self.scale +\n 'px ' +\n self.style[cellStyle + 'FontName'];\n if (!self.dispatchEvent('formattext', ev)) {\n cell.text = wrapText(cell, ' ');\n }\n if (!self.dispatchEvent('rendertext', ev)) {\n if (cell.innerHTML || header.type === 'html') {\n drawHtml(cell);\n } else {\n let treeCellPadding = 0,\n isDrawText = true;\n if (\n cell.columnIndex == self.cellTree.rowTreeColIndex &&\n !cell.isColumnHeader &&\n self.cellTree.rows.length > 0 &&\n Object.keys(self.cellTree.rows[cell.rowIndex]).length > 1\n )\n treeCellPadding = drawCellTreeIcon(\n cell,\n self.cellTree.rows[cell.rowIndex],\n true,\n );\n\n if (\n !cell.isRowHeader &&\n cell.rowIndex > 0 &&\n self.cellTree.columns[cell.rowIndex - 1] &&\n self.cellTree.columns[cell.rowIndex - 1][cell.columnIndex]\n .icon\n ) {\n for (let r = cell.rowIndex - 1; r >= 0; r--) {\n if (!self.cellTree.columns[r]) break;\n if (!self.cellTree.columns[r][cell.columnIndex].icon) break;\n if (!self.cellTree.columns[r][cell.columnIndex].expand) {\n isDrawText = false;\n break;\n }\n }\n }\n if (\n isDrawText &&\n !cell.isRowHeader &&\n self.cellTree.columns[cell.rowIndex] &&\n self.cellTree.columns[cell.rowIndex][cell.columnIndex].icon\n ) {\n if (\n self.viewData.length > 0 &&\n self.viewData[cell.rowIndex][cell.columnIndex].length > 0\n )\n treeCellPadding = drawCellTreeIcon(\n cell,\n self.cellTree.columns[cell.rowIndex][cell.columnIndex],\n false,\n );\n }\n if (isDrawText) drawText(cell, treeCellPadding);\n }\n\n if (wrap && cell.text && cell.text.height > rowHeight) {\n self.sizes.rows[isHeader ? -1 : rowIndex] = cell.text.height;\n checkScrollHeight = true;\n }\n }\n }\n }\n if (active) {\n aCell = cell;\n }\n createBorderOverlayArray(cell, selectionBorders, 'selection');\n // createBorderOverlayArray calculates data for createHandlesOverlayArray so it must go 2nd\n createHandlesOverlayArray(cell);\n if (self.movingSelection) {\n createBorderOverlayArray(cell, moveBorders, 'move', self.moveOffset);\n }\n self.ctx.restore();\n\n if (isFilterable) {\n drawFilterButton(cell);\n }\n\n // Gaps may occur in row numbers between consecutively rendered rows\n // when we are filtering. We draw attention to this by drawing a thick\n // border overlapping the two consecutive row headers. If sorting, visible\n // row numbers stay the same (i.e. they don't correspond to the underlying\n // data's row number), so we do not show row gaps in that case.\n const isSorting =\n self.orderings.columns && self.orderings.columns.length > 0;\n\n if (\n isRowHeader &&\n self.attributes.showRowNumbers &&\n self.attributes.showRowNumberGaps &&\n isSorting === false\n ) {\n const previousRowNumber = self.getBoundRowIndexFromViewRowIndex(\n rowOrderIndex - 1,\n );\n let hasRowGap =\n previousRowNumber !== undefined &&\n cell.boundRowIndex > 0 &&\n cell.boundRowIndex - previousRowNumber > 1;\n if (hasRowGap && collapsedRowGroups.length > 0) {\n hasRowGap =\n collapsedRowGroups.find(\n (group) =>\n group.from === previousRowNumber &&\n group.to === cell.boundRowIndex,\n ) >= 0;\n }\n // We don't treat the row index difference from hidden rows as the row gap.\n if (hasRowGap && self.hiddenRowRanges.length > 0) {\n for (let i = 0; i < self.hiddenRowRanges.length; i++) {\n const [beginRowIndex, endRowIndex] = self.hiddenRowRanges[i];\n if (\n cell.boundRowIndex === endRowIndex + 1 &&\n previousRowNumber === beginRowIndex - 1\n ) {\n hasRowGap = false;\n break;\n }\n }\n }\n\n if (hasRowGap) {\n const barHeight = self.style.rowHeaderCellRowNumberGapHeight;\n const barColor = self.style.rowHeaderCellRowNumberGapColor;\n\n self.ctx.save();\n\n self.ctx.fillStyle = barColor;\n\n fillRect(cell.x, cell.y - barHeight / 2, cell.width, barHeight);\n\n self.ctx.restore();\n }\n }\n\n //#region draw unhide indicator for column headers\n if (isColumnHeader && self.attributes.showUnhideColumnsIndicator) {\n const hovered = self.hovers.unhideIndicator;\n const size = self.style.unhideIndicatorSize;\n const cellX = x;\n const topY = cell.y + Math.max(0.5 * (cell.height - size), 0);\n\n const isActive = (orderIndex) =>\n hovered &&\n (hovered.dir === 'l' || hovered.dir === 'r') &&\n orderIndex >= hovered.orderIndex0 &&\n orderIndex <= hovered.orderIndex1;\n const isHiddenColumn = (columnIndex) =>\n columnIndex >= 0 &&\n schema[columnIndex] &&\n schema[columnIndex].hidden;\n\n let orderIndex0, orderIndex1;\n const drawIndicator = (leftX, dir, active) => {\n self.visibleUnhideIndicators.push({\n x: leftX - 1,\n y: topY - 1,\n x2: leftX + size + 2,\n y2: topY + size + 2,\n orderIndex0,\n orderIndex1,\n dir,\n });\n if (!active) {\n const line = cell.text && cell.text.lines && cell.text.lines[0];\n if (line) {\n const iconsWidth = orderByArrowSize + treeArrowSize;\n const lineX0 = iconsWidth > 0 ? iconsWidth : line.x;\n const lineX1 = line.x + line.width;\n if (leftX + size >= lineX0 && leftX <= lineX1) return;\n }\n }\n drawUnhideIndicator(leftX, topY, size, dir, active);\n }; // end of drawIndicator\n\n let orderIndexPtr = columnOrderIndex - 1;\n const prevColumnIndex = self.orders.columns[orderIndexPtr];\n if (isHiddenColumn(prevColumnIndex)) {\n const active = isActive(prevColumnIndex);\n orderIndex0 = orderIndexPtr;\n orderIndex1 = orderIndexPtr;\n while (--orderIndexPtr >= 0) {\n if (isHiddenColumn(self.orders.columns[orderIndexPtr]))\n orderIndex0 = orderIndexPtr;\n else break;\n }\n drawIndicator(cellX, 'r', active);\n }\n\n orderIndexPtr = columnOrderIndex + 1;\n const nextColumnIndex = self.orders.columns[orderIndexPtr];\n if (isHiddenColumn(nextColumnIndex)) {\n const active = isActive(nextColumnIndex);\n orderIndex0 = orderIndexPtr;\n orderIndex1 = orderIndexPtr;\n while (++orderIndexPtr < self.orders.columns.length) {\n if (isHiddenColumn(self.orders.columns[orderIndexPtr]))\n orderIndex1 = orderIndexPtr;\n else break;\n }\n const indicatorX = x + cell.width - size;\n drawIndicator(indicatorX, 'l', active);\n }\n }\n //#endregion draw unhide indicator for column headers\n\n //#region draw unhide indicator for row headers\n if (\n isRowHeader &&\n self.attributes.showUnhideRowsIndicator &&\n self.hiddenRowRanges.length > 0\n ) {\n // Leo's comment:\n // from the first row to the last row, `rowIndex` is from 0 to the count of rows\n // but `boundRowIndex` can be disordered if there are any ordered columns or filtered columns\n // Like this statement:\n // console.log(rowIndex, cell.boundRowIndex, cell.formattedValue);\n // can output the result like this:\n // 0 1 '2'\n // 1 3 '4'\n const hovered = self.hovers.unhideIndicator;\n const size = self.style.unhideIndicatorSize;\n const leftX = cell.x + cell.width - size - 2;\n const cellY = y;\n const topIndicators = {};\n const bottomIndicators = {};\n self.hiddenRowRanges.forEach((it) => {\n topIndicators[it[0] - 1] = it;\n bottomIndicators[it[1] + 1] = it;\n });\n\n const rowIndex = cell.rowIndex + currentRowIndexOffset;\n const isActive = () =>\n hovered &&\n (hovered.dir === 't' || hovered.dir === 'b') &&\n rowIndex >= hovered.orderIndex0 - 1 &&\n rowIndex <= hovered.orderIndex1 + 1;\n\n let orderIndex0, orderIndex1;\n const drawIndicator = (topY, dir, active) => {\n self.visibleUnhideIndicators.push({\n x: leftX - 1,\n y: topY - 1,\n x2: leftX + size + 2,\n y2: topY + size + 2,\n orderIndex0,\n orderIndex1,\n dir,\n });\n drawUnhideIndicator(leftX, topY, size, dir, active);\n }; // end of drawIndicator\n\n let matched = topIndicators[rowIndex];\n if (matched) {\n const indicatorY = cellY + cell.height - size;\n [orderIndex0, orderIndex1] = matched;\n drawIndicator(indicatorY, 't', isActive());\n }\n matched = bottomIndicators[rowIndex];\n if (matched) {\n const indicatorY = cellY;\n [orderIndex0, orderIndex1] = matched;\n drawIndicator(indicatorY, 'b', isActive());\n }\n }\n //#endregion draw unhide indicator for row headers\n\n x += cell.width + (bc ? 0 : self.style.cellBorderWidth);\n return cell.width;\n }; // end of drawEach\n }\n function drawFilterButton(cell, ev) {\n var posX = cell.x + cell.width - self.style.filterButtonWidth - 1;\n var posY = cell.y + cell.height - self.style.filterButtonHeight - 2;\n if (self.dispatchEvent('beforerenderfilterbutton', ev)) {\n return;\n }\n self.ctx.save();\n self.ctx.strokeStyle = self.style.filterButtonBorderColor;\n self.ctx.fillStyle = self.style.filterButtonBackgroundColor;\n if (cell.openedFilter) {\n self.ctx.fillStyle = self.style.filterButtonActiveBackgroundColor;\n } else if (cell.hovered && self.hovers.onFilterButton) {\n self.ctx.fillStyle = self.style.filterButtonHoverBackgroundColor;\n }\n radiusRect(\n posX,\n posY,\n self.style.filterButtonWidth,\n self.style.filterButtonHeight,\n self.style.filterButtonBorderRadius,\n );\n self.ctx.stroke();\n self.ctx.fill();\n drawFilterButtonArrow(posX, posY);\n self.ctx.clip();\n self.dispatchEvent('afterrenderfilterbutton', ev);\n self.ctx.restore();\n }\n function drawRowHeader(rowData, rowIndex, rowOrderIndex) {\n if (self.attributes.showRowHeaders) {\n x = 0;\n\n // When filtering we'd like to display the actual row numbers,\n // as it is in the unfiltered data, instead of simply the viewed\n // row index + 1. If rowIndex > viewData.length, it's a new row\n // added to the end, and we want to render that new row's number\n let filteredRowNumber;\n if (self.viewData && rowIndex < self.viewData.length)\n filteredRowNumber =\n self.getBoundRowIndexFromViewRowIndex(rowIndex) + 1;\n else\n filteredRowNumber = self.originalData\n ? self.originalData.length + 1\n : rowOrderIndex + 1;\n\n let rowHeaderValue =\n self.hasActiveFilters() || self.hasCollapsedRowGroup()\n ? filteredRowNumber\n : rowIndex + 1;\n rowHeaderValue += currentRowIndexOffset;\n\n const rowHeaderCell = { rowHeaderCell: rowHeaderValue };\n const headerDescription = {\n name: 'rowHeaderCell',\n width: self.sizes.columns[-1] || self.style.rowHeaderCellWidth,\n style: 'rowHeaderCell',\n type: 'string',\n data: rowHeaderValue,\n index: -1,\n };\n rowOpen = self.openChildren[rowIndex];\n drawCell(rowHeaderCell, rowOrderIndex, rowIndex)(\n headerDescription,\n -1,\n -1,\n );\n\n if (\n rowIndexOffsetByHiddenRows[0] &&\n rowHeaderValue >= rowIndexOffsetByHiddenRows[0].from\n ) {\n const { plus } = rowIndexOffsetByHiddenRows.shift();\n currentRowIndexOffset += plus;\n }\n }\n }\n function drawHeaders() {\n var d,\n g = schema.length,\n i,\n o,\n columnHeaderCell,\n header,\n nonFrozenHeaderWidth;\n function drawHeaderColumnRange(start, end) {\n end = Math.min(end, g);\n for (o = start; o < end; o += 1) {\n i = self.orders.columns[o];\n header = schema[i];\n if (!header.hidden && !isColumnCollapsedByGroup(o)) {\n d = {\n title: header.title,\n name: header.name,\n width: header.width || self.style.cellWidth,\n style: 'columnHeaderCell',\n type: 'string',\n index: o,\n order: i,\n };\n columnHeaderCell = {\n columnHeaderCell: header.title || header.name,\n };\n x += drawCell(columnHeaderCell, -1, -1)(d, i, o);\n if (x > self.width + self.scrollBox.scrollLeft) {\n break;\n }\n }\n }\n }\n rowHeaders.forEach(function (rArgs, rhIndex) {\n y = rArgs[3];\n cellHeight = rArgs[4];\n if (rhIndex === self.frozenRow) {\n self.ctx.save();\n radiusRect(\n 0,\n self.lastFrozenRowPixel,\n self.width,\n self.height - self.lastFrozenRowPixel,\n 0,\n );\n self.ctx.clip();\n }\n drawRowHeader(rArgs[0], rArgs[1], rArgs[2]);\n });\n self.ctx.restore();\n if (self.attributes.showColumnHeaders) {\n x =\n -self.scrollBox.scrollLeft +\n self.scrollPixelLeft +\n self.style.columnHeaderCellBorderWidth;\n if (self.attributes.showRowHeaders) {\n x += rowHeaderCellWidth;\n }\n y = 0;\n // cell height might have changed during drawing\n cellHeight = self.getColumnHeaderCellHeight();\n drawHeaderColumnRange(self.scrollIndexLeft, g);\n nonFrozenHeaderWidth = x;\n x = self.style.columnHeaderCellBorderWidth;\n if (self.attributes.showRowHeaders) {\n x += rowHeaderCellWidth;\n }\n drawHeaderColumnRange(0, self.frozenColumn);\n // fill in the space right of the headers\n x = nonFrozenHeaderWidth;\n if (x < w) {\n c = {\n name: '',\n width: self.style.scrollBarWidth,\n style: 'columnHeaderCellCap',\n isColumnHeaderCell: true,\n isColumnHeaderCellCap: true,\n type: 'string',\n index: schema.length,\n };\n drawCell({ endCap: '' }, -1, -1)(c, -1, -1);\n }\n // fill in the space right of the headers\n if (self.attributes.showRowHeaders) {\n cornerCell = { cornerCell: '' };\n x = 0;\n c = {\n name: 'cornerCell',\n width: self.style.rowHeaderCellWidth,\n style: 'cornerCell',\n type: 'string',\n index: -1,\n };\n drawCell(cornerCell, -1, -1)(c, -1, -1);\n }\n }\n }\n function drawRow(rowOrderIndex, rowIndex) {\n var headerIndex,\n treeHeight,\n rowSansTreeHeight,\n columnOrderIndex,\n g = schema.length;\n if (y - cellHeight * 2 > h) {\n return false;\n }\n rowData = viewData[rowOrderIndex];\n rowOpen = self.openChildren[rowOrderIndex];\n rowSansTreeHeight =\n (self.sizes.rows[rowOrderIndex] || self.style.cellHeight) * self.scale;\n treeHeight = (rowOpen ? self.sizes.trees[rowOrderIndex] : 0) * self.scale;\n rowHeight = rowSansTreeHeight + treeHeight;\n if (y < -rowHeight) {\n return false;\n }\n if (self.attributes.showRowHeaders) {\n x += rowHeaderCellWidth;\n }\n cellHeight = rowHeight;\n //draw normal columns\n for (\n columnOrderIndex = self.scrollIndexLeft;\n columnOrderIndex < g;\n columnOrderIndex += 1\n ) {\n if (!isColumnCollapsedByGroup(columnOrderIndex)) {\n headerIndex = self.orders.columns[columnOrderIndex];\n x += drawCell(rowData, rowOrderIndex, rowIndex)(\n schema[headerIndex],\n headerIndex,\n columnOrderIndex,\n );\n }\n if (x > self.width) {\n self.scrollIndexRight = columnOrderIndex;\n self.scrollPixelRight = x;\n break;\n }\n }\n //draw frozen columns\n x = 0;\n if (self.attributes.showRowHeaders) {\n x += rowHeaderCellWidth;\n }\n for (\n columnOrderIndex = 0;\n columnOrderIndex < self.frozenColumn;\n columnOrderIndex += 1\n ) {\n if (!isColumnCollapsedByGroup(columnOrderIndex)) {\n headerIndex = self.orders.columns[columnOrderIndex];\n x += drawCell(rowData, rowOrderIndex, rowIndex)(\n schema[headerIndex],\n headerIndex,\n columnOrderIndex,\n );\n }\n if (x > self.width) {\n break;\n }\n }\n self.lastFrozenColumnPixel = x;\n // cell height might have changed during drawing\n cellHeight = rowHeight;\n x =\n -self.scrollBox.scrollLeft +\n self.scrollPixelLeft +\n self.style.cellBorderWidth;\n // don't draw a tree for the new row\n treeGrid = self.childGrids[rowOrderIndex];\n if (rowOrderIndex !== viewData.length && rowOpen) {\n treeGrid.visible = true;\n treeGrid.parentNode = {\n offsetTop: y + rowSansTreeHeight + self.canvasOffsetTop,\n offsetLeft: rowHeaderCellWidth - 1 + self.canvasOffsetLeft,\n offsetHeight: treeHeight,\n offsetWidth:\n self.width - rowHeaderCellWidth - self.style.scrollBarWidth - 1,\n offsetParent: self.intf.parentNode,\n parentNode: self.intf.parentNode,\n style: self.style,\n nodeType: 'canvas-datagrid-tree',\n scrollTop: self.scrollBox.scrollTop,\n scrollLeft: self.scrollBox.scrollLeft,\n rowIndex: rowOrderIndex,\n columnGroupsAreaHeight: columnGroupsAreaHeight,\n rowGroupsAreaWidth: rowGroupsAreaWidth,\n };\n if (self.intf.parentNode) {\n const {\n columnGroupsAreaHeight,\n rowGroupsAreaWidth,\n } = self.intf.parentNode;\n treeGrid.parentNode.columnGroupsAreaHeight +=\n columnGroupsAreaHeight || 0;\n treeGrid.parentNode.rowGroupsAreaWidth += rowGroupsAreaWidth || 0;\n }\n self.visibleCells.unshift({\n rowIndex: rowOrderIndex,\n columnIndex: 0,\n y: treeGrid.parentNode.offsetTop,\n x: treeGrid.parentNode.offsetLeft,\n height: treeGrid.height,\n width: treeGrid.width,\n style: 'tree-grid',\n type: treeGrid.parentNode.nodeType,\n });\n treeGrid.draw();\n } else if (treeGrid) {\n treeGrid.parentNode.offsetHeight = 0;\n delete self.sizes.trees[rowOrderIndex];\n }\n rowHeaders.push([rowData, rowOrderIndex, rowIndex, y, rowHeight]);\n self.visibleRowHeights[rowOrderIndex] = rowHeight;\n y += cellHeight + (bc ? 0 : self.style.cellBorderWidth);\n return true;\n }\n function initDraw() {\n self.visibleRows = [];\n schema = self.getSchema();\n self.visibleCells = [];\n self.visibleGroups = [];\n self.visibleUnhideIndicators = [];\n self.canvasOffsetTop = self.isChildGrid ? self.parentNode.offsetTop : 0.5;\n self.canvasOffsetLeft = self.isChildGrid\n ? self.parentNode.offsetLeft\n : -0.5;\n h = self.height;\n w = self.width;\n\n // patch for first row being hidden\n const firstRowIndexOffset = rowIndexOffsetByHiddenRows[0];\n if (firstRowIndexOffset && firstRowIndexOffset.from === 0) {\n currentRowIndexOffset = firstRowIndexOffset.plus;\n rowIndexOffsetByHiddenRows.shift();\n }\n }\n function drawBackground() {\n radiusRect(0, 0, w, h, 0);\n self.ctx.clip();\n self.ctx.fillStyle = self.style.gridBackgroundColor;\n fillRect(0, 0, w, h);\n }\n function initGroupArea() {\n self.ctx.translate(rowGroupsAreaWidth, columnGroupsAreaHeight);\n }\n function drawGroupArea() {\n const mx = rowGroupsAreaWidth;\n const my = columnGroupsAreaHeight;\n const frozenColumnsWidth = getFrozenColumnsWidth();\n const frozenRowsHeight =\n rowGroupsFrozenInfo.y + rowGroupsFrozenInfo.h - columnHeaderCellHeight;\n const onTheLeft = self.attributes.columnGroupIndicatorPosition === 'left';\n const onTheTop = self.attributes.rowGroupIndicatorPosition === 'top';\n\n /** @type {CanvasRenderingContext2D} */\n const ctx = self.ctx;\n ctx.save();\n ctx.fillStyle = self.style.groupingAreaBackgroundColor;\n fillRect(0, -my, w, my);\n fillRect(-mx, -my, mx, h);\n ctx.restore();\n\n //#region Columns Grouping\n /** it extends `self.groupedRows` */\n const groupedColumns = [];\n for (let row = 0; row < self.groupedColumns.length; row++) {\n const groups = self.groupedColumns[row];\n for (let j = 0; j < groups.length; j++) {\n groupedColumns.push(Object.assign({ row }, groups[j]));\n }\n }\n if (groupedColumns.length > 0) {\n const rowHeight = self.style.columnGroupRowHeight;\n const toggleHandleSize = rowHeight * 0.5;\n const toggleHandlePadding = (rowHeight - toggleHandleSize) * 0.5;\n\n for (let i = 0; i < groupedColumns.length; i++) {\n const group = groupedColumns[i];\n const { row, collapsed } = group;\n\n const topY = -my + row * rowHeight;\n const centerY = topY + rowHeight * 0.5;\n const bottomY = topY + rowHeight - toggleHandlePadding;\n const leftmostX =\n rowHeaderCellWidth - toggleHandleSize - toggleHandlePadding;\n\n const drawGroupHandleAtX = (x) =>\n drawGroupHandle(\n x,\n topY + toggleHandlePadding,\n toggleHandleSize,\n group.collapsed,\n );\n const pushToVisibleGroups = (leftX, rightX) =>\n self.visibleGroups.push({\n type: 'c',\n collapsed,\n from: group.from,\n to: group.to,\n row,\n x: leftX + mx,\n y: topY + my,\n x2: rightX + mx,\n y2: bottomY + my,\n });\n\n //#region check the relationship between this group and frozen columns\n const crossTheFrozen =\n group.from < self.frozenColumn && group.to >= self.frozenColumn;\n const notInFrozen = group.from >= self.frozenColumn;\n //#endregion\n\n if (collapsed) {\n let leftX = leftmostX + toggleHandleSize;\n // This group is not sticking on the first column\n if (group.from > 0) {\n let colIndex = group.to + 1;\n let col = columnGroupsRectInfo[colIndex];\n if (!col) {\n colIndex = group.from - 1;\n col = columnGroupsRectInfo[colIndex];\n if (!col) continue; // don't draw this group indicator because it is invisible\n leftX = col.x + col.w - toggleHandleSize * 0.5;\n } else {\n leftX = col.x + toggleHandlePadding;\n }\n if (colIndex >= self.frozenColumn) {\n const compare =\n frozenColumnsWidth + rowHeaderCellWidth - toggleHandlePadding;\n // don't draw this group indicator because it is hidden by frozen columns\n if (leftX < compare) continue;\n }\n }\n const rightX = leftX + toggleHandleSize;\n ctx.save();\n ctx.strokeStyle = self.style.groupIndicatorColor;\n ctx.fillStyle = self.style.groupIndicatorBackgroundColor;\n drawGroupHandleAtX(leftX);\n ctx.restore();\n pushToVisibleGroups(leftX, rightX);\n } // end of collapsed group\n\n /** @type {number} pointer for loop */\n let ptr;\n let left = columnGroupsRectInfo[group.from];\n let right = columnGroupsRectInfo[group.to];\n\n let containsBegining = true;\n let containsEnd = true;\n ptr = group.from;\n while (!left && ptr < group.to) {\n left = columnGroupsRectInfo[++ptr];\n containsBegining = false;\n }\n ptr = group.to;\n while (!right && ptr > group.from) {\n right = columnGroupsRectInfo[--ptr];\n containsEnd = false;\n }\n if (!left || !right) continue;\n let rightX = right.x + right.w;\n let leftX = left.x;\n if (crossTheFrozen) {\n const rightCompare = columnGroupsRectInfo[self.frozenColumn - 1];\n if (rightCompare) {\n let compareX = rightCompare.x + rightCompare.w;\n if (!onTheLeft) compareX += toggleHandleSize;\n if (compareX >= rightX) {\n right = rightCompare;\n rightX = right.x + right.w;\n containsEnd = false;\n }\n }\n }\n\n let minLeftX =\n rowHeaderCellWidth + (notInFrozen ? frozenColumnsWidth : 0);\n if (rightX + (onTheLeft ? 0 : toggleHandleSize) < minLeftX) continue;\n\n rightX -= toggleHandlePadding;\n leftX += toggleHandlePadding;\n\n ctx.save();\n ctx.strokeStyle = self.style.groupIndicatorColor;\n ctx.fillStyle = self.style.groupIndicatorBackgroundColor;\n const lineCoords = [];\n\n if (onTheLeft) {\n // avoid lines from two groups be overlapping\n minLeftX += toggleHandlePadding * 2;\n if (leftX < minLeftX) leftX = minLeftX;\n if (group.from === 0) leftX -= toggleHandlePadding * 2;\n if (rightX >= leftX) {\n lineCoords.push(leftX, centerY, rightX, centerY);\n if (containsEnd) lineCoords.push(rightX, bottomY);\n } else {\n rightX = leftX;\n }\n\n leftX -= toggleHandleSize;\n drawGroupHandleAtX(leftX);\n // add more clickable area into `visibleGroups`\n rightX += toggleHandlePadding - 1;\n } else {\n // handle on the right\n if (leftX < minLeftX) leftX = minLeftX;\n if (group.from === 0) leftX -= toggleHandlePadding * 2;\n if (containsEnd) {\n if (group.to === self.frozenColumn - 1) {\n rightX -= toggleHandleSize;\n } else {\n rightX += toggleHandlePadding * 2;\n }\n drawGroupHandleAtX(rightX);\n }\n if (leftX > rightX) {\n leftX = rightX;\n } else {\n if (group.from === 0) {\n containsBegining = true;\n leftX = leftmostX + toggleHandleSize;\n }\n if (containsBegining) lineCoords.push(leftX, bottomY);\n lineCoords.push(leftX, centerY, rightX, centerY);\n }\n\n // add more clickable area into `visibleGroups`\n leftX -= toggleHandlePadding + 1;\n if (containsEnd) rightX += toggleHandleSize;\n }\n drawLines(lineCoords);\n ctx.restore();\n pushToVisibleGroups(leftX, rightX);\n }\n }\n //#endregion Columns Grouping\n\n //#region Rows Grouping\n /** it extends `self.groupedRows` */\n const groupedRows = [];\n for (let col = 0; col < self.groupedRows.length; col++) {\n const groups = self.groupedRows[col];\n for (let j = 0; j < groups.length; j++) {\n groupedRows.push(Object.assign({ col }, groups[j]));\n }\n }\n if (groupedRows.length > 0) {\n const colWidth = self.style.rowGroupColumnWidth;\n const toggleHandleSize = colWidth * 0.5;\n const toggleHandlePadding = (colWidth - toggleHandleSize) * 0.5;\n\n for (let i = 0; i < groupedRows.length; i++) {\n const group = groupedRows[i];\n const { col, collapsed } = group;\n\n const leftX = -mx + col * colWidth;\n const centerX = leftX + colWidth * 0.5;\n const rightX = leftX + colWidth - toggleHandlePadding;\n const topmostY =\n columnHeaderCellHeight - toggleHandleSize - toggleHandlePadding;\n\n const drawGroupHandleAtY = (y) =>\n drawGroupHandle(\n leftX + toggleHandlePadding,\n y,\n toggleHandleSize,\n group.collapsed,\n );\n const pushToVisibleGroups = (topY, bottomY) =>\n self.visibleGroups.push({\n type: 'r',\n collapsed,\n from: group.from,\n to: group.to,\n col,\n x: leftX + mx,\n y: topY + my,\n x2: rightX + mx,\n y2: bottomY + my,\n });\n\n //#region check the relationship between this group and frozen columns\n const crossTheFrozen =\n group.from < self.frozenRow && group.to >= self.frozenRow;\n const notInFrozen = group.from >= self.frozenRow;\n //#endregion\n\n if (collapsed) {\n let topY = topmostY + toggleHandleSize;\n // This group is not sticking on the first column\n if (group.from > 0) {\n let rowIndex = group.to + 1;\n let row = rowGroupsRectInfo[rowIndex];\n if (!row) {\n rowIndex = group.from - 1;\n row = rowGroupsRectInfo[rowIndex];\n if (!row) continue; // don't draw this group indicator because it is invisible\n topY = row.y + row.h - toggleHandleSize * 0.5;\n } else {\n topY = row.y;\n }\n if (rowIndex >= self.frozenRow) {\n const compare =\n frozenRowsHeight +\n columnHeaderCellHeight -\n toggleHandlePadding;\n // don't draw this group indicator because it is hidden by frozen columns\n if (topY < compare) continue;\n }\n }\n const bottomY = topY + toggleHandleSize;\n ctx.save();\n ctx.strokeStyle = self.style.groupIndicatorColor;\n ctx.fillStyle = self.style.groupIndicatorBackgroundColor;\n drawGroupHandleAtY(topY);\n ctx.restore();\n pushToVisibleGroups(topY, bottomY);\n } // end of collapsed group\n\n /** @type {number} pointer for loop */\n let ptr;\n let top = rowGroupsRectInfo[group.from];\n let bottom = rowGroupsRectInfo[group.to];\n\n let containsBegining = true;\n let containsEnd = true;\n ptr = group.from;\n while (!top && ptr < group.to) {\n top = rowGroupsRectInfo[++ptr];\n containsBegining = false;\n }\n ptr = group.to;\n while (!bottom && ptr > group.from) {\n bottom = rowGroupsRectInfo[--ptr];\n containsEnd = false;\n }\n if (!top || !bottom) continue;\n let bottomY = bottom.y + bottom.h;\n let topY = top.y;\n if (crossTheFrozen) {\n const bottomCompare = rowGroupsRectInfo[self.frozenRow - 1];\n if (bottomCompare) {\n let compareY = bottomCompare.y + bottomCompare.h;\n if (!onTheTop) compareY += toggleHandleSize;\n if (compareY >= bottomY) {\n bottom = bottomCompare;\n bottomY = bottom.y + bottom.h;\n containsEnd = false;\n }\n }\n }\n\n let minTopY =\n columnHeaderCellHeight + (notInFrozen ? frozenRowsHeight : 0);\n if (bottomY + (onTheTop ? 0 : toggleHandleSize) < minTopY) continue;\n\n bottomY -= toggleHandlePadding;\n topY += toggleHandlePadding;\n\n ctx.save();\n ctx.strokeStyle = self.style.groupIndicatorColor;\n ctx.fillStyle = self.style.groupIndicatorBackgroundColor;\n const lineCoords = [];\n\n if (onTheTop) {\n // avoid lines from two groups be overlapping\n minTopY += toggleHandlePadding * 2;\n if (topY < minTopY) topY = minTopY;\n if (group.from === 0) topY -= toggleHandlePadding * 2;\n if (bottomY >= topY) {\n lineCoords.push(centerX, topY, centerX, bottomY);\n if (containsEnd) lineCoords.push(rightX, bottomY);\n } else {\n bottomY = topY;\n }\n\n topY -= toggleHandleSize;\n drawGroupHandleAtY(topY);\n\n // add more clickable area into `visibleGroups`\n bottomY += toggleHandlePadding - 1;\n } else {\n // handle on the bottom\n if (topY < minTopY) topY = minTopY;\n if (group.from === 0) topY -= toggleHandlePadding * 2;\n if (containsEnd) {\n if (group.to === self.frozenRow - 1) {\n bottomY -= toggleHandleSize;\n } else {\n // bottomY += toggleHandlePadding * 2;\n }\n drawGroupHandleAtY(bottomY);\n }\n if (topY > bottomY) {\n topY = bottomY;\n } else {\n if (group.from === 0) {\n containsBegining = true;\n topY = topmostY + toggleHandleSize;\n }\n if (containsBegining) lineCoords.push(rightX, topY);\n lineCoords.push(centerX, topY, centerX, bottomY);\n // add more clickable area into `visibleGroups`\n topY -= toggleHandlePadding + 1;\n }\n // add more clickable area into `visibleGroups`\n if (containsEnd) bottomY += toggleHandleSize;\n }\n drawLines(lineCoords);\n ctx.restore();\n pushToVisibleGroups(topY, bottomY);\n }\n }\n //#endregion Rows Grouping\n }\n function drawFrozenRows() {\n var rowOrderIndex,\n ln = Math.min(viewData.length, self.frozenRow);\n x =\n -self.scrollBox.scrollLeft +\n self.scrollPixelLeft +\n self.style.cellBorderWidth;\n y = columnHeaderCellHeight;\n for (rowIndex = 0; rowIndex < ln; rowIndex += 1) {\n rowOrderIndex = self.orders.rows[rowIndex];\n if (!drawRow(rowOrderIndex, rowIndex)) {\n break;\n }\n }\n if (self.attributes.allowFreezingRows) {\n // HACK great, another stupid magic number.\n // Background will appear as a 0.5px artifact behind the row freeze bar without this hack\n y +=\n self.style.frozenMarkerBorderWidth +\n self.style.frozenMarkerWidth -\n 0.4999999999;\n }\n self.lastFrozenRowPixel = y;\n }\n function drawRows() {\n self.ctx.save();\n if (self.frozenRow > 0) {\n radiusRect(\n 0,\n self.lastFrozenRowPixel,\n self.width,\n self.height - self.lastFrozenRowPixel,\n 0,\n );\n self.ctx.clip();\n }\n var columnOrderIndex,\n rowOrderIndex,\n headerIndex,\n g = schema.length;\n x =\n -self.scrollBox.scrollLeft +\n self.scrollPixelLeft +\n self.style.cellBorderWidth;\n if (!self.attributes.snapToRow) {\n y +=\n -self.scrollBox.scrollTop +\n self.scrollPixelTop +\n self.style.cellBorderWidth;\n }\n for (\n rowIndex = self.frozenRow + self.scrollIndexTop;\n rowIndex < l;\n rowIndex += 1\n ) {\n rowOrderIndex = self.orders.rows[rowIndex];\n self.scrollIndexBottom = rowIndex;\n self.scrollPixelBottom = y;\n if (\n self.cellTree.rows.length > 0 &&\n Object.keys(self.cellTree.rows[rowOrderIndex]).length > 0 &&\n self.cellTree.rows[rowOrderIndex].hide\n )\n continue;\n if (!drawRow(rowOrderIndex, rowIndex)) {\n break;\n }\n }\n if (self.attributes.showNewRow) {\n if (self.attributes.showRowHeaders) {\n x += rowHeaderCellWidth;\n }\n rowHeight = cellHeight = self.style.cellHeight;\n rowOpen = false;\n for (\n columnOrderIndex = self.scrollIndexLeft;\n columnOrderIndex < g;\n columnOrderIndex += 1\n ) {\n if (!isColumnCollapsedByGroup(columnOrderIndex)) {\n headerIndex = self.orders.columns[columnOrderIndex];\n x += drawCell(self.newRow, viewData.length, viewData.length)(\n schema[headerIndex],\n headerIndex,\n columnOrderIndex,\n );\n }\n if (x > self.width + self.scrollBox.scrollLeft) {\n break;\n }\n }\n rowHeaders.push([\n self.newRow,\n viewData.length,\n viewData.length,\n y,\n rowHeight,\n ]);\n }\n self.ctx.restore();\n }\n function drawMoveMarkers() {\n if (!self.movingSelection) {\n return;\n }\n self.ctx.lineWidth = self.style.moveOverlayBorderWidth;\n self.ctx.strokeStyle = self.style.moveOverlayBorderColor;\n self.ctx.setLineDash(self.style.moveOverlayBorderSegments);\n moveBorders.forEach(function (c) {\n addBorderLine(c[0], c[1]);\n });\n self.ctx.setLineDash([]);\n }\n function drawReorderMarkers() {\n if (!self.reorderObject) {\n return;\n }\n var b = {\n height: self.reorderObject.height,\n width: self.reorderObject.width,\n x: self.reorderObject.x + self.reorderObject.dragOffset.x,\n y: self.reorderObject.y + self.reorderObject.dragOffset.y,\n },\n m = {\n width: w,\n height: h,\n x: 0,\n y: 0,\n };\n self.ctx.fillStyle = self.style.reorderMarkerBackgroundColor;\n self.ctx.lineWidth = self.style.reorderMarkerBorderWidth;\n self.ctx.strokeStyle = self.style.reorderMarkerBorderColor;\n if (self.dragMode === 'row-reorder') {\n for (var k = 0; k < self.selections.length; k++) {\n if (!self.selections[k] || k == self.reorderObject.rowIndex) continue;\n b.height += self.getRowHeight(k);\n }\n b.width = w;\n b.x = 0;\n m.width = w;\n m.height = self.currentCell.height;\n m.y = self.currentCell.y;\n fillRect(b.x, b.y, b.width, b.height);\n strokeRect(b.x, b.y, b.width, b.height);\n self.ctx.lineWidth = self.style.reorderMarkerIndexBorderWidth;\n self.ctx.strokeStyle = self.style.reorderMarkerIndexBorderColor;\n if (\n self.currentCell.rowIndex !== self.reorderObject.rowIndex &&\n self.currentCell.rowIndex > -1 &&\n self.currentCell.rowIndex < l\n ) {\n addBorderLine(\n m,\n self.reorderTarget.sortRowIndex > self.reorderObject.sortRowIndex\n ? 'b'\n : 't',\n );\n }\n } else if (self.dragMode === 'column-reorder' && self.reorderObject) {\n var selectedColumns = self.selections[0];\n for (var k = 1; k < selectedColumns.length; k++) {\n b.width += self.getColumnWidth(\n self.orders.columns[selectedColumns[k]],\n );\n }\n b.height = h;\n b.y = 0;\n m.height = h;\n m.width = self.currentCell.width;\n m.y = 0;\n m.x = self.currentCell.x;\n fillRect(b.x, b.y, b.width, b.height);\n strokeRect(b.x, b.y, b.width, b.height);\n self.ctx.lineWidth = self.style.reorderMarkerIndexBorderWidth;\n self.ctx.strokeStyle = self.style.reorderMarkerIndexBorderColor;\n if (\n self.currentCell.sortColumnIndex !==\n self.reorderObject.sortColumnIndex &&\n self.currentCell.sortColumnIndex > -1 &&\n self.currentCell.sortColumnIndex < schema.length\n ) {\n addBorderLine(\n m,\n self.reorderTarget.columnIndex > self.reorderObject.columnIndex\n ? 'r'\n : 'l',\n );\n }\n }\n }\n function drawBorder() {\n self.ctx.lineWidth = self.style.gridBorderWidth;\n self.ctx.strokeStyle = self.style.gridBorderColor;\n strokeRect(0, 0, self.width, self.height);\n }\n function drawSelectionBorders() {\n self.ctx.lineWidth = self.style.selectionOverlayBorderWidth;\n self.ctx.strokeStyle = self.style.selectionOverlayBorderColor;\n function dsb(c) {\n addBorderLine(c[0], c[1]);\n }\n selectionBorders\n .filter(function (c) {\n return (\n c[0].rowIndex < self.frozenRow &&\n c[0].columnIndex < self.frozenColumn\n );\n })\n .forEach(dsb);\n self.ctx.save();\n clipFrozenArea(0);\n selectionBorders\n .filter(function (c) {\n return (\n c[0].rowIndex >= self.frozenRow &&\n c[0].columnIndex >= self.frozenColumn\n );\n })\n .forEach(dsb);\n self.ctx.restore();\n self.ctx.save();\n clipFrozenArea(1);\n selectionBorders\n .filter(function (c) {\n return (\n c[0].rowIndex >= self.frozenRow &&\n c[0].columnIndex < self.frozenColumn\n );\n })\n .forEach(dsb);\n self.ctx.restore();\n self.ctx.save();\n clipFrozenArea(2);\n selectionBorders\n .filter(function (c) {\n return (\n c[0].rowIndex < self.frozenRow &&\n c[0].columnIndex >= self.frozenColumn\n );\n })\n .forEach(dsb);\n self.ctx.restore();\n }\n function drawSelectionHandles() {\n if (self.mobile || self.attributes.allowMovingSelection) {\n self.ctx.lineWidth = self.style.selectionHandleBorderWidth;\n self.ctx.strokeStyle = self.style.selectionHandleBorderColor;\n self.ctx.fillStyle = self.style.selectionHandleColor;\n selectionHandles.forEach(function (c) {\n addselectionHandle(c[0], c[1]);\n var az = self.attributes.touchSelectHandleZone / 2,\n ax =\n c[0].x + (c[1] === 'tl' || c[1] === 'bl' ? 0 : c[0].width) - az,\n ay =\n c[0].y + (c[1] === 'bl' || c[1] === 'br' ? c[0].height : 0) - az;\n self.visibleCells.unshift({\n x: ax,\n y: ay,\n height: self.style.selectionHandleSize + az,\n width: self.style.selectionHandleSize + az,\n style: 'selection-handle-' + c[1],\n });\n });\n }\n }\n function drawActiveCell() {\n if (!aCell) {\n return;\n }\n self.ctx.save();\n var cl =\n self.activeCell.columnIndex + 1 > self.frozenColumn ||\n self.activeCell.rowIndex + 1 > self.frozenRow,\n acx = cl ? self.lastFrozenColumnPixel : 0,\n acy = cl ? self.lastFrozenRowPixel : 0,\n acw = cl ? self.width - self.lastFrozenColumnPixel : self.width,\n ach = cl ? self.height - self.lastFrozenRowPixel : self.height;\n radiusRect(acx, acy, acw, ach, 0);\n self.ctx.clip();\n if (self.attributes.selectionMode === 'row') {\n if (self.activeCell && self.activeCell.rowIndex === aCell.rowIndex) {\n self.ctx.lineWidth = self.style.activeCellOverlayBorderWidth;\n self.ctx.strokeStyle = self.style.activeCellOverlayBorderColor;\n strokeRect(\n 1,\n aCell.y,\n self.getHeaderWidth() + rowHeaderCellWidth,\n self.visibleRowHeights[aCell.rowIndex],\n );\n }\n } else {\n self.ctx.lineWidth = self.style.activeCellOverlayBorderWidth;\n self.ctx.strokeStyle = self.style.activeCellOverlayBorderColor;\n strokeRect(aCell.x, aCell.y, aCell.width, aCell.height);\n }\n self.ctx.restore();\n }\n function drawFrozenMarkers() {\n if (self.dragStartObject !== undefined) return;\n var my = self.lastFrozenRowPixel - self.style.frozenMarkerWidth,\n mx = self.lastFrozenColumnPixel - self.style.frozenMarkerBorderWidth,\n xHover =\n self.currentCell && self.currentCell.style === 'frozen-row-marker',\n yHover =\n self.currentCell && self.currentCell.style === 'frozen-column-marker';\n self.ctx.lineWidth = self.style.frozenMarkerBorderWidth;\n if (self.attributes.allowFreezingColumns) {\n self.ctx.fillStyle = yHover\n ? self.style.frozenMarkerHoverColor\n : self.style.frozenMarkerColor;\n self.ctx.strokeStyle = yHover\n ? self.style.frozenMarkerHoverBorderColor\n : self.style.frozenMarkerBorderColor;\n fillRect(mx, 0, self.style.frozenMarkerWidth, self.height);\n strokeRect(mx, 0, self.style.frozenMarkerWidth, self.height);\n self.visibleCells.unshift({\n x: mx,\n y: 0,\n height: self.height,\n width:\n self.style.frozenMarkerWidth + self.style.frozenMarkerBorderWidth,\n style: 'frozen-column-marker',\n });\n }\n if (self.attributes.allowFreezingRows) {\n self.ctx.fillStyle = xHover\n ? self.style.frozenMarkerHoverColor\n : self.style.frozenMarkerColor;\n self.ctx.strokeStyle = xHover\n ? self.style.frozenMarkerHoverBorderColor\n : self.style.frozenMarkerBorderColor;\n fillRect(0, my, self.width, self.style.frozenMarkerWidth);\n strokeRect(0, my, self.width, self.style.frozenMarkerWidth);\n const height =\n self.style.frozenMarkerWidth + self.style.frozenMarkerBorderWidth;\n self.visibleCells.unshift({\n x: 0,\n y: my,\n height,\n width: self.width,\n style: 'frozen-row-marker',\n });\n rowGroupsFrozenInfo = { y: my, h: height };\n }\n if (self.freezeMarkerPosition) {\n self.ctx.fillStyle = self.style.frozenMarkerActiveColor;\n self.ctx.strokeStyle = self.style.frozenMarkerActiveBorderColor;\n if (self.dragMode === 'frozen-column-marker') {\n fillRect(\n self.freezeMarkerPosition.x,\n 0,\n self.style.frozenMarkerWidth,\n self.height,\n );\n strokeRect(\n self.freezeMarkerPosition.x,\n 0,\n self.style.frozenMarkerWidth,\n self.height,\n );\n } else {\n fillRect(\n 0,\n self.freezeMarkerPosition.y,\n self.width,\n self.style.frozenMarkerWidth,\n );\n strokeRect(\n 0,\n self.freezeMarkerPosition.y,\n self.width,\n self.style.frozenMarkerWidth,\n );\n }\n }\n }\n function drawPerfLines() {\n if (!self.attributes.showPerformance) {\n return;\n }\n var pw = 250,\n px =\n self.width -\n pw -\n self.style.scrollBarWidth -\n self.style.scrollBarBorderWidth * 2,\n py = columnHeaderCellHeight,\n ph = 100;\n if (scrollDebugCounters.length === 0) {\n scrollDebugCounters = fillArray(0, perfWindowSize, 1, function () {\n return [0, 0];\n });\n }\n if (touchPPSCounters.length === 0) {\n touchPPSCounters = fillArray(0, perfWindowSize, 1, function () {\n return [0, 0];\n });\n }\n if (entityCount.length === 0) {\n entityCount = fillArray(0, perfWindowSize, 1, 0);\n }\n self.ctx.lineWidth = 0.5;\n function dpl(name, perfArr, arrIndex, max, color, useAbs, rowIndex) {\n var v;\n drawPerfLine(pw, ph, px, py, perfArr, arrIndex, max, color, useAbs);\n self.ctx.fillStyle = color;\n fillRect(3 + px, py + 9 + rowIndex * 11, 8, 8);\n self.ctx.fillStyle = self.style.debugPerfChartTextColor;\n v = arrIndex !== undefined ? perfArr[0][arrIndex] : perfArr[0];\n fillText(\n name + ' ' + (isNaN(v) ? 0 : v).toFixed(3),\n 14 + px,\n py + 16 + rowIndex * 11,\n );\n }\n self.ctx.textAlign = 'left';\n self.ctx.font = self.style.debugFont;\n self.ctx.fillStyle = self.style.debugPerfChartBackground;\n fillRect(px, py, pw, ph);\n [\n [\n 'Scroll Height',\n scrollDebugCounters,\n 0,\n self.scrollBox.scrollHeight,\n self.style.debugScrollHeightColor,\n false,\n ],\n [\n 'Scroll Width',\n scrollDebugCounters,\n 1,\n self.scrollBox.scrollWidth,\n self.style.debugScrollWidthColor,\n false,\n ],\n [\n 'Performance',\n perfCounters,\n undefined,\n 200,\n self.style.debugPerformanceColor,\n false,\n ],\n [\n 'Entities',\n entityCount,\n undefined,\n 1500,\n self.style.debugEntitiesColor,\n false,\n ],\n [\n 'TouchPPSX',\n touchPPSCounters,\n 0,\n 1000,\n self.style.debugTouchPPSXColor,\n true,\n ],\n [\n 'TouchPPSY',\n touchPPSCounters,\n 1,\n 1000,\n self.style.debugTouchPPSYColor,\n true,\n ],\n ].forEach(function (i, index) {\n i.push(index);\n dpl.apply(null, i);\n });\n self.ctx.fillStyle = self.style.debugPerfChartBackground;\n entityCount.pop();\n entityCount.unshift(self.visibleCells.length);\n scrollDebugCounters.pop();\n scrollDebugCounters.unshift([\n self.scrollBox.scrollTop,\n self.scrollBox.scrollLeft,\n ]);\n touchPPSCounters.pop();\n touchPPSCounters.unshift([self.yPPS, self.xPPS]);\n }\n function drawDebug() {\n self.ctx.save();\n var d;\n if (self.attributes.showPerformance || self.attributes.debug) {\n if (perfCounters.length === 0) {\n perfCounters = fillArray(0, perfWindowSize, 1, 0);\n }\n perfCounters.pop();\n perfCounters.unshift(performance.now() - p);\n }\n if (!self.attributes.debug) {\n self.ctx.restore();\n return;\n }\n self.ctx.font = self.style.debugFont;\n d = {};\n d.perf = (\n perfCounters.reduce(function (a, b) {\n return a + b;\n }, 0) / Math.min(drawCount, perfCounters.length)\n ).toFixed(1);\n d.perfDelta = perfCounters[0].toFixed(1);\n d.frozenColumnsWidth = getFrozenColumnsWidth();\n d.htmlImages = Object.keys(self.htmlImageCache).length;\n d.reorderObject =\n 'x: ' +\n (self.reorderObject || { columnIndex: 0 }).columnIndex +\n ', y: ' +\n (self.reorderObject || { rowIndex: 0 }).rowIndex;\n d.reorderTarget =\n 'x: ' +\n (self.reorderTarget || { columnIndex: 0 }).columnIndex +\n ', y: ' +\n (self.reorderTarget || { rowIndex: 0 }).rowIndex;\n d.scale = self.scale;\n d.startScale = self.startScale;\n d.scaleDelta = self.scaleDelta;\n d.zoomDeltaStart = self.zoomDeltaStart;\n d.touchLength = self.touchLength;\n d.touches =\n 'y0: ' +\n (self.touchPosition || { y: 0 }).y +\n ' y1: ' +\n (self.touchPosition1 || { y: 0 }).y;\n d.scrollBox = self.scrollBox.toString();\n d.scrollIndex =\n 'x: ' + self.scrollIndexLeft + ', y: ' + self.scrollIndexTop;\n d.scrollPixel =\n 'x: ' + self.scrollPixelLeft + ', y: ' + self.scrollPixelTop;\n d.canvasOffset =\n 'x: ' + self.canvasOffsetLeft + ', y: ' + self.canvasOffsetTop;\n d.touchDelta = 'x: ' + self.touchDelta.x + ', y: ' + self.touchDelta.y;\n d.touchAnimateTo =\n 'x: ' + self.touchAnimateTo.x + ', y: ' + self.touchAnimateTo.y;\n d.scrollAnimation =\n 'x: ' + self.scrollAnimation.x + ', y: ' + self.scrollAnimation.y;\n d.touchPPS = 'x: ' + self.xPPS + ', y: ' + self.yPPS;\n d.touchPPST = 'x: ' + self.xPPST + ', y: ' + self.yPPST;\n d.touchDuration = self.touchDuration;\n d.pointerLockPosition = self.pointerLockPosition\n ? self.pointerLockPosition.x + ', ' + self.pointerLockPosition.y\n : '';\n d.size = 'w: ' + self.width + ', h: ' + self.height;\n d.mouse = 'x: ' + self.mouse.x + ', y: ' + self.mouse.y;\n d.touch = !self.touchStart\n ? ''\n : 'x: ' + self.touchStart.x + ', y: ' + self.touchStart.y;\n d.entities = self.visibleCells.length;\n d.hasFocus = self.hasFocus;\n d.dragMode = self.dragMode;\n if (self.currentCell) {\n d.columnIndex = self.currentCell.columnIndex;\n d.rowIndex = self.currentCell.rowIndex;\n d.sortColumnIndex = self.currentCell.sortColumnIndex;\n d.sortRowIndex = self.currentCell.sortRowIndex;\n d.context = self.currentCell.context;\n d.dragContext = self.currentCell.dragContext;\n d.style = self.currentCell.style;\n d.type = self.currentCell.type;\n }\n self.ctx.textAlign = 'right';\n self.ctx.fillStyle = self.style.debugBackgroundColor;\n fillRect(0, 0, self.width, self.height);\n Object.keys(d).forEach(function (key, index) {\n var m = key + ': ' + d[key],\n lh = 14;\n self.ctx.fillStyle = self.style.debugColor;\n fillText(\n m,\n w - 20,\n (self.attributes.showPerformance ? 140 : 24) + index * lh,\n );\n });\n self.ctx.restore();\n }\n self.ctx.save();\n initDraw();\n drawBackground();\n initGroupArea();\n drawFrozenRows();\n drawRows();\n drawActiveCell();\n drawHeaders();\n drawFrozenMarkers();\n drawSelectionHandles();\n drawReorderMarkers();\n drawMoveMarkers();\n drawBorder();\n drawSelectionBorders();\n drawScrollBars();\n if (checkScrollHeight) {\n self.resize(true);\n }\n drawGroupArea();\n drawDebug();\n drawPerfLines();\n if (self.dispatchEvent('afterdraw', {})) {\n return;\n }\n self.ctx.restore();\n };\n}\n","/*jslint browser: true, unparam: true, todo: true, plusplus: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nimport isPrintableKeyEvent from 'is-printable-key-event';\nimport { isSupportedHtml, parseData } from './util';\n\nexport default function (self) {\n var wheeling;\n self.stopPropagation = function (e) {\n e.stopPropagation();\n };\n /**\n * Adds an event listener to the given event.\n * @memberof canvasDatagrid\n * @name addEventListener\n * @method\n * @param {string} ev The name of the event to subscribe to.\n * @param {function} fn The event procedure to execute when the event is raised.\n */\n self.addEventListener = function (ev, fn) {\n self.events[ev] = self.events[ev] || [];\n self.events[ev].unshift(fn);\n };\n /**\n * Removes the given listener function from the given event. Must be an actual reference to the function that was bound.\n * @memberof canvasDatagrid\n * @name removeEventListener\n * @method\n * @param {string} ev The name of the event to unsubscribe from.\n * @param {function} fn The event procedure to execute when the event is raised.\n */\n self.removeEventListener = function (ev, fn) {\n (self.events[ev] || []).forEach(function removeEachListener(sfn, idx) {\n if (fn === sfn) {\n self.events[ev].splice(idx, 1);\n }\n });\n };\n /**\n * Fires the given event, passing an event object to the event subscribers.\n * @memberof canvasDatagrid\n * @name dispatchEvent\n * @method\n * @param {number} ev The name of the event to dispatch.\n * @param {number} e The event object.\n */\n self.dispatchEvent = function (ev, e) {\n e = ev.type ? ev : e || {};\n ev = ev.type || ev;\n var defaultPrevented;\n function preventDefault() {\n defaultPrevented = true;\n }\n if (!self.events[ev]) {\n return;\n }\n self.events[ev].forEach(function dispatchEachEvent(fn) {\n e.ctx = self.ctx;\n e.preventDefault = preventDefault;\n fn.apply(self.intf, [e]);\n });\n return defaultPrevented;\n };\n self.getRatio = function () {\n return Math.min(\n self.attributes.maxPixelRatio,\n (window.devicePixelRatio || 1) /\n (self.ctx.webkitBackingStorePixelRatio ||\n self.ctx.mozBackingStorePixelRatio ||\n self.ctx.msBackingStorePixelRatio ||\n self.ctx.oBackingStorePixelRatio ||\n self.ctx.backingStorePixelRatio ||\n 1),\n );\n };\n /**\n * @returns {number} dataWidth\n */\n self.refreshScrollCacheX = function () {\n const s = self.getSchema();\n self.scrollCache.x = [];\n\n /** @type {number} it will be used in `reduceSchema` only */\n let frozenWidth = 0;\n\n const collapsedColumnGroups = self.getCollapsedColumnGroups();\n const isColumnCollapsed = (columnIndex) =>\n collapsedColumnGroups.findIndex(\n (group) => columnIndex >= group.from && columnIndex <= group.to,\n ) >= 0;\n\n const dataWidth =\n s.reduce(function reduceSchema(accumulator, column, columnIndex) {\n // intentional redefintion of column. This causes scrollCache to be in the correct order\n const schemaIndex = self.orders.columns[columnIndex];\n const columnWidth = self.getColumnWidth(schemaIndex);\n column = s[schemaIndex];\n if (!column.hidden && !isColumnCollapsed(columnIndex))\n accumulator += columnWidth;\n if (columnIndex < self.frozenColumn) {\n self.scrollCache.x[columnIndex] = accumulator;\n frozenWidth = accumulator;\n } else {\n self.scrollCache.x[columnIndex] = Math.max(\n frozenWidth + columnWidth,\n accumulator,\n );\n }\n return accumulator;\n }, 0) || 0;\n return dataWidth;\n };\n self.resize = function (drawAfterResize) {\n if (!self.canvas) {\n return;\n }\n var x,\n v = {\n x: 0,\n y: 0,\n height: 0,\n width: 0,\n style: 'vertical-scroll-bar',\n },\n n = {\n x: 0,\n y: 0,\n height: 0,\n width: 0,\n style: 'horizontal-scroll-bar',\n },\n vb = {\n x: 0,\n y: 0,\n height: 0,\n width: 0,\n style: 'vertical-scroll-box',\n },\n nb = {\n x: 0,\n y: 0,\n height: 0,\n width: 0,\n style: 'horizontal-scroll-box',\n },\n co = {\n x: 0,\n y: 0,\n height: 0,\n width: 0,\n isCorner: true,\n isScrollBoxCorner: true,\n style: 'scroll-box-corner',\n },\n m = self.style.scrollBarBoxMargin * 2,\n b = self.style.scrollBarBorderWidth * 2,\n d = self.style.scrollBarBoxMargin * 0.5,\n sbw = self.style.scrollBarWidth + self.style.scrollBarBorderWidth * 2,\n ratio = self.getRatio(),\n bm = self.style.gridBorderCollapse === 'collapse' ? 1 : 2,\n cellBorder = self.style.cellBorderWidth * bm,\n columnHeaderCellBorder = self.style.columnHeaderCellBorderWidth * bm,\n dataHeight = 0,\n dataWidth = 0,\n dims,\n l = (self.viewData || []).length,\n columnHeaderCellHeight = self.getColumnHeaderCellHeight(),\n rowHeaderCellWidth = self.getRowHeaderCellWidth(),\n topGroupAreaHeight = self.getColumnGroupAreaHeight(),\n leftGroupAreaWidth = self.getRowGroupAreaWidth(),\n ch = self.style.cellHeight;\n // sets actual DOM canvas element\n function checkScrollBoxVisibility() {\n self.scrollBox.horizontalBarVisible =\n (self.style.width !== 'auto' &&\n dataWidth > self.scrollBox.width &&\n self.style.overflowX !== 'hidden') ||\n self.style.overflowX === 'scroll';\n self.scrollBox.horizontalBoxVisible = dataWidth > self.scrollBox.width;\n self.scrollBox.verticalBarVisible =\n (self.style.height !== 'auto' &&\n dataHeight > self.scrollBox.height &&\n self.style.overflowY !== 'hidden') ||\n self.style.overflowY === 'scroll';\n self.scrollBox.verticalBoxVisible = dataHeight > self.scrollBox.height;\n }\n function setScrollBoxSize() {\n self.scrollBox.width =\n self.width - rowHeaderCellWidth - leftGroupAreaWidth;\n self.scrollBox.height =\n self.height - columnHeaderCellHeight - topGroupAreaHeight;\n }\n function setCanvasSize() {\n if (self.isChildGrid) {\n return;\n }\n dims = {\n // HACK +1 ? maybe it's a magic cell border? Required to line up properly in auto height mode.\n height:\n columnHeaderCellHeight +\n topGroupAreaHeight +\n dataHeight +\n cellBorder +\n 1,\n width: dataWidth + rowHeaderCellWidth + cellBorder + leftGroupAreaWidth,\n };\n ['width', 'height'].forEach(function (dim) {\n //TODO: support inherit\n if (\n ['auto', undefined].indexOf(self.style[dim]) !== -1 &&\n ['auto', undefined].indexOf(self.appliedInlineStyles[dim]) !== -1\n ) {\n self.parentNodeStyle[dim] = dims[dim] + 'px';\n } else if (\n ['auto', undefined].indexOf(self.style[dim]) == -1 &&\n ['auto', undefined].indexOf(self.appliedInlineStyles[dim]) == -1\n ) {\n self.parentNodeStyle[dim] = self.style[dim];\n if (self.isComponent) {\n self.canvas.style[dim] = self.style[dim];\n }\n }\n });\n }\n dataWidth = self.refreshScrollCacheX();\n self.scrollCache.y = [];\n for (x = 0; x < l; x += 1) {\n self.scrollCache.y[x] = dataHeight;\n dataHeight +=\n ((self.sizes.rows[x] || ch) + (self.sizes.trees[x] || 0)) * self.scale +\n // HACK? if an expanded tree row is frozen it is necessary to add the tree row's height a second time.\n (self.frozenRow > x ? self.sizes.trees[x] || 0 : 0);\n }\n if (l > 1) {\n self.scrollCache.y[x] = dataHeight;\n }\n if (self.attributes.showNewRow) {\n dataHeight += ch;\n }\n if (self.attributes.snapToRow) {\n dataHeight += self.style.cellHeight;\n }\n setCanvasSize();\n if (self.isChildGrid) {\n self.width = self.parentNode.offsetWidth;\n self.height = self.parentNode.offsetHeight;\n } else if (\n self.height !== self.canvas.offsetHeight ||\n self.width !== self.canvas.offsetWidth\n ) {\n self.height = self.canvas.offsetHeight;\n self.width = self.canvas.offsetWidth;\n self.canvasOffsetLeft = self.args.canvasOffsetLeft || 0;\n self.canvasOffsetTop = self.args.canvasOffsetTop || 0;\n }\n /// calculate scroll bar dimensions\n // non-controversial\n self.scrollBox.top =\n columnHeaderCellHeight + topGroupAreaHeight + columnHeaderCellBorder;\n self.scrollBox.left = rowHeaderCellWidth + leftGroupAreaWidth;\n // width and height of scroll box\n setScrollBoxSize();\n // is the data larger than the scroll box\n checkScrollBoxVisibility();\n // if the scroll box is visible, make room for it by expanding the size of the element\n // if the other dimension is set to auto\n if (self.scrollBox.horizontalBarVisible) {\n if (self.style.height === 'auto' && !self.isChildGrid) {\n self.height += sbw;\n }\n dataHeight += sbw;\n setCanvasSize();\n setScrollBoxSize();\n checkScrollBoxVisibility();\n }\n if (self.scrollBox.verticalBarVisible) {\n if (self.style.width === 'auto' && !self.isChildGrid) {\n self.width += sbw;\n }\n dataWidth += sbw;\n setCanvasSize();\n setScrollBoxSize();\n checkScrollBoxVisibility();\n }\n // set again after bar visibility checks\n setScrollBoxSize();\n self.scrollBox.scrollWidth = dataWidth - self.scrollBox.width;\n self.scrollBox.scrollHeight = dataHeight - self.scrollBox.height;\n if (self.frozenColumn > 0) {\n self.scrollBox.widthBoxRatio =\n (self.scrollBox.width - self.scrollCache.x[self.frozenColumn - 1]) /\n dataWidth;\n } else {\n self.scrollBox.widthBoxRatio = self.scrollBox.width / dataWidth;\n }\n self.scrollBox.scrollBoxWidth =\n self.scrollBox.width * self.scrollBox.widthBoxRatio -\n self.style.scrollBarWidth -\n b -\n d;\n // TODO: This heightBoxRatio number is terribly wrong.\n // They should be a result of the size of the grid/canvas?\n // it being off causes the scroll bar to \"slide\" under\n // the dragged mouse.\n // https://github.com/TonyGermaneri/canvas-datagrid/issues/97\n self.scrollBox.heightBoxRatio =\n (self.scrollBox.height -\n columnHeaderCellHeight -\n topGroupAreaHeight -\n self.scrollCache.y[self.frozenRow]) /\n dataHeight;\n self.scrollBox.scrollBoxHeight =\n self.scrollBox.height * self.scrollBox.heightBoxRatio -\n self.style.scrollBarWidth -\n b -\n d;\n self.scrollBox.scrollBoxWidth = Math.max(\n self.scrollBox.scrollBoxWidth,\n self.style.scrollBarBoxMinSize,\n );\n self.scrollBox.scrollBoxHeight = Math.max(\n self.scrollBox.scrollBoxHeight,\n self.style.scrollBarBoxMinSize,\n );\n // horizontal\n n.x += rowHeaderCellWidth;\n n.y += self.height - self.style.scrollBarWidth - d - topGroupAreaHeight;\n n.width =\n self.width -\n self.style.scrollBarWidth -\n rowHeaderCellWidth -\n leftGroupAreaWidth -\n d -\n m;\n n.height = self.style.scrollBarWidth + self.style.scrollBarBorderWidth + d;\n // horizontal box\n nb.y = n.y + self.style.scrollBarBoxMargin;\n nb.width = self.scrollBox.scrollBoxWidth;\n nb.height = self.style.scrollBarBoxWidth;\n // vertical\n v.x +=\n self.width -\n leftGroupAreaWidth -\n self.style.scrollBarWidth -\n self.style.scrollBarBorderWidth -\n d;\n v.y += columnHeaderCellHeight + self.scrollCache.y[self.frozenRow];\n v.width = self.style.scrollBarWidth + self.style.scrollBarBorderWidth + d;\n v.height =\n self.height -\n columnHeaderCellHeight -\n topGroupAreaHeight -\n self.style.scrollBarWidth -\n d -\n m;\n // vertical box\n vb.x = v.x + self.style.scrollBarBoxMargin;\n vb.y += self.scrollCache.y[self.frozenRow];\n vb.width = self.style.scrollBarBoxWidth;\n vb.height = self.scrollBox.scrollBoxHeight;\n // corner\n co.x = n.x + n.width + m;\n co.y = v.y + v.height + m;\n co.width = self.style.scrollBarWidth + self.style.scrollBarBorderWidth;\n co.height = self.style.scrollBarWidth + self.style.scrollBarBorderWidth;\n self.scrollBox.entities = {\n horizontalBar: n,\n horizontalBox: nb,\n verticalBar: v,\n verticalBox: vb,\n corner: co,\n };\n self.scrollBox.bar = {\n v: v,\n h: n,\n };\n self.scrollBox.box = {\n v: vb,\n h: nb,\n };\n /// calculate page and dom elements\n self.page = Math.max(\n 1,\n self.visibleRows.length - 3 - self.attributes.pageUpDownOverlap,\n );\n // set canvas drawing related items\n if (!self.isChildGrid) {\n self.canvas.width = self.width * ratio;\n self.canvas.height = self.height * ratio;\n self.ctx.scale(ratio, ratio);\n }\n // resize any open dom elements (input/textarea)\n self.resizeEditInput();\n self.scroll(true);\n if (drawAfterResize) {\n self.draw(true);\n }\n self.dispatchEvent('resize', {});\n return true;\n };\n self.scroll = function (dontDraw) {\n var s = self.getSchema(),\n l = (self.viewData || []).length,\n ch = self.style.cellHeight;\n // go too far in leaps, then get focused\n self.scrollIndexTop = Math.floor(\n l * (self.scrollBox.scrollTop / self.scrollBox.scrollHeight) - 100,\n );\n self.scrollIndexTop = Math.max(self.scrollIndexTop, 0);\n self.scrollPixelTop = self.scrollCache.y[self.scrollIndexTop];\n // sometimes the grid is rendered but the height is zero\n if (self.scrollBox.scrollHeight === 0) {\n self.scrollIndexTop = 0;\n }\n self.scrollPixelTop = 0;\n self.scrollIndexLeft = self.frozenColumn;\n self.scrollPixelLeft = 0;\n while (\n self.scrollPixelTop < self.scrollBox.scrollTop &&\n self.scrollIndexTop < self.viewData.length\n ) {\n // start on index +1 since index 0 was used in \"go too far\" section above\n self.scrollIndexTop += 1;\n self.scrollPixelTop = self.scrollCache.y[self.scrollIndexTop];\n }\n while (\n self.scrollPixelLeft < self.scrollBox.scrollLeft + 1 &&\n self.scrollIndexLeft < s.length\n ) {\n self.scrollPixelLeft = self.scrollCache.x[self.scrollIndexLeft];\n self.scrollIndexLeft += 1;\n }\n if (s.length > 0) {\n self.scrollIndexLeft = Math.max(self.scrollIndexLeft - 1, 0);\n self.scrollPixelLeft -= self.getColumnWidth(\n self.orders.columns[self.scrollIndexLeft],\n );\n }\n if ((self.viewData || []).length > 0) {\n self.scrollIndexTop = Math.max(self.scrollIndexTop - 1, 0);\n self.scrollPixelTop = Math.max(\n self.scrollPixelTop -\n (self.viewData[self.scrollIndexTop]\n ? (self.sizes.rows[self.scrollIndexTop] || ch) +\n (self.sizes.trees[self.scrollIndexTop] || 0)\n : ch) *\n self.scale,\n 0,\n );\n }\n self.ellipsisCache = {};\n if (!dontDraw) {\n self.draw(true);\n }\n //TODO: figure out why this has to be delayed for child grids\n //BUG: wheeling event on 3rd level hierarchy fails to move input box\n requestAnimationFrame(self.resizeEditInput);\n self.dispatchEvent('scroll', {\n top: self.scrollBox.scrollTop,\n left: self.scrollBox.scrollLeft,\n });\n };\n self.mousemove = function (e, overridePos) {\n if (self.contextMenu || self.input) {\n return;\n }\n\n // Cancel dragging action if user ventures outside grid\n if (self.draggingItem && e.which === 0) {\n self.stopFreezeMove(e);\n self.mouseup(e);\n return;\n }\n\n self.mouse = overridePos || self.getLayerPos(e);\n var ctrl =\n (e.ctrlKey || e.metaKey || self.attributes.persistantSelectionMode) &&\n !self.attributes.singleSelectionMode,\n i,\n s = self.getSchema(),\n dragBounds,\n sBounds,\n x = self.mouse.x,\n y = self.mouse.y,\n cell = self.getCellAt(x, y),\n delta,\n ev = { NativeEvent: e, cell: cell, x: x, y: y },\n previousCell = self.currentCell;\n clearTimeout(self.scrollTimer);\n if (!self.isInGrid({ x: x, y: y })) {\n self.hasFocus = false;\n }\n if (self.dispatchEvent('mousemove', ev)) {\n return;\n }\n if (cell && self.currentCell) {\n self.rowBoundaryCrossed = self.currentCell.rowIndex !== cell.rowIndex;\n self.columnBoundaryCrossed =\n self.currentCell.columnIndex !== cell.columnIndex;\n self.cellBoundaryCrossed =\n self.rowBoundaryCrossed || self.columnBoundaryCrossed;\n ['row', 'column', 'cell'].forEach(function (prefix) {\n if (self[prefix + 'BoundaryCrossed']) {\n ev.cell = previousCell;\n self.dispatchEvent(prefix + 'mouseout', ev);\n ev.cell = cell;\n self.dispatchEvent(prefix + 'mouseover', ev);\n }\n });\n }\n self.currentCell = cell;\n\n if (\n !self.draggingItem && // It is not in dragging mode (avoid changing hovers frequent)\n cell &&\n (cell.context === 'cell' || cell.context === self.cursorGrab)\n ) {\n const indicator = self.getUnhideIndicator(self.mouse.x, self.mouse.y);\n if (indicator) {\n self.cursor = 'pointer';\n self.hovers = { unhideIndicator: indicator };\n self.draw();\n return;\n }\n }\n\n self.hovers = {};\n if (!self.draggingItem && cell) {\n self.dragItem = cell;\n self.dragMode = cell.dragContext;\n self.cursor = cell.context;\n if (cell.context === 'cell') {\n self.cursor = 'default';\n self.hovers = {\n rowIndex: cell.rowIndex,\n columnIndex: cell.columnIndex,\n onFilterButton: false,\n onCellTreeIcon: false,\n };\n if (\n cell.isFilterable &&\n x >\n cell.x +\n cell.width +\n self.canvasOffsetLeft -\n self.style.filterButtonWidth &&\n x < cell.x + cell.width + self.canvasOffsetLeft &&\n y >\n cell.y +\n cell.height +\n self.canvasOffsetTop -\n self.style.filterButtonHeight &&\n y < cell.y + cell.height + self.canvasOffsetTop\n ) {\n self.hovers.onFilterButton = true;\n self.draw();\n }\n if (cell.isRowTree || cell.isColumnTree) {\n const pc = cell.isRowTree\n ? self.cellTree.rows[cell.rowIndex].parentCount\n : 0;\n const rc = self.style.cellTreeIconWidth * self.scale,\n rx =\n cell.x +\n cell.paddingLeft +\n self.canvasOffsetLeft +\n self.style.cellTreeIconMarginLeft +\n pc * (rc + cell.paddingLeft),\n ry =\n cell.y +\n self.canvasOffsetTop +\n self.style.cellTreeIconMarginTop * self.scale;\n if (x >= rx && x <= rx + rc && y >= ry && y < ry + rc) {\n self.hovers.onCellTreeIcon = true;\n self.draw();\n }\n }\n }\n if (self.selecting || self.reorderObject) {\n delta = {\n x: Math.abs(self.dragStart.x - x),\n y: Math.abs(self.dragStart.y - y),\n };\n if (self.dragStartObject.columnIndex !== -1 && e.shiftKey) {\n self.dragStartObject = {\n rowIndex: self.activeCell.rowIndex,\n columnIndex: self.activeCell.columnIndex,\n };\n }\n dragBounds = {\n top: Math.min(self.dragStartObject.rowIndex, cell.rowIndex),\n left: Math.min(self.dragStartObject.columnIndex, cell.columnIndex),\n bottom: Math.max(self.dragStartObject.rowIndex, cell.rowIndex),\n right: Math.max(self.dragStartObject.columnIndex, cell.columnIndex),\n };\n if (self.dragStartObject.columnIndex === -1) {\n sBounds = self.getSelectionBounds();\n dragBounds.left = -1;\n dragBounds.right = s.length - 1;\n dragBounds.top = Math.min(sBounds.top, cell.rowIndex);\n dragBounds.bottom = Math.max(sBounds.bottom, cell.rowIndex);\n if (dragBounds.top < 0) dragBounds.top = 0;\n }\n\n if (self.dragStartObject.rowIndex === -1) {\n sBounds = self.getSelectionBounds();\n dragBounds.left =\n cell.columnIndex === undefined\n ? sBounds.left\n : Math.min(sBounds.left, cell.columnIndex);\n dragBounds.right =\n cell.columnIndex === undefined\n ? sBounds.right\n : Math.max(sBounds.right, cell.columnIndex);\n dragBounds.top = -1;\n dragBounds.bottom = self.viewData.length - 1;\n if (dragBounds.left < 0) dragBounds.left = 0;\n }\n\n if (\n self.dragStartObject.rowIndex !== cell.rowIndex ||\n self.dragStartObject.columnIndex !== cell.columnIndex\n ) {\n self.ignoreNextClick = true;\n }\n if (\n self.cellBoundaryCrossed ||\n (delta.x === 0 && delta.y === 0) ||\n self.attributes.selectionMode === 'row'\n ) {\n if (\n cell.rowIndex !== undefined &&\n (self.attributes.selectionMode === 'row' ||\n self.dragStartObject.columnIndex === -1) &&\n self.rowBoundaryCrossed\n ) {\n if (self.dragStartObject.rowIndex < cell.rowIndex) {\n dragBounds.top = self.dragStartObject.rowIndex;\n dragBounds.bottom = cell.rowIndex;\n } else {\n dragBounds.top = cell.rowIndex;\n dragBounds.bottom = self.dragStartObject.rowIndex;\n }\n } else if (\n cell.rowIndex !== undefined &&\n (self.attributes.selectionMode === 'column' ||\n self.dragStartObject.rowIndex === -1) &&\n self.columnBoundaryCrossed\n ) {\n if (self.dragStartObject.columnIndex < cell.columnIndex) {\n dragBounds.left = self.dragStartObject.columnIndex;\n dragBounds.right = cell.columnIndex;\n } else {\n dragBounds.left = cell.columnIndex;\n dragBounds.right = self.dragStartObject.columnIndex;\n }\n } else if (self.attributes.selectionMode !== 'row') {\n if (cell.hovered && self.hovers.onFilterButton) {\n if (cell.openedFilter) {\n cell.openedFilter = false;\n self.selectedFilterButton = {\n columnIndex: -1,\n rowIndex: -1,\n };\n } else {\n self.selectedFilterButton.rowIndex = cell.rowIndex;\n self.selectedFilterButton.columnIndex = cell.columnIndex;\n self.contextmenuEvent(e, {\n x: cell.x + cell.width - self.style.filterButtonWidth,\n y: cell.y + cell.height,\n rect: { left: 0, top: 0 },\n });\n }\n self.draw();\n return;\n } else if (\n cell.hovered &&\n self.hovers.onCellTreeIcon &&\n e.type == 'mousedown'\n ) {\n self.toggleCollapseTree(cell.rowIndex, cell.columnIndex);\n return;\n } else {\n self.selectedFilterButton = {\n columnIndex: -1,\n rowIndex: -1,\n };\n if (self.hovers.onFilterButton) return;\n if (self.hovers.onCellTreeIcon) return;\n if (!self.dragAddToSelection && cell.rowIndex !== undefined) {\n if (\n self.selections[cell.rowIndex] &&\n self.selections[cell.rowIndex].indexOf(cell.columnIndex) !==\n -1\n ) {\n self.selections[cell.rowIndex].splice(\n self.selections[cell.rowIndex].indexOf(cell.columnIndex),\n 1,\n );\n }\n } else {\n self.selections[cell.rowIndex] =\n self.selections[cell.rowIndex] || [];\n if (\n self.selections[cell.rowIndex].indexOf(cell.columnIndex) ===\n -1\n ) {\n self.selections[cell.rowIndex].push(cell.columnIndex);\n var event = {\n selections: self.selections,\n selectedData: self.getSelectedData(),\n selectedCells: self.getSelectedCells(),\n selectionBounds: self.getSelectionBounds(),\n };\n self.dispatchEvent('selectionchanged', event);\n }\n }\n }\n }\n }\n if (\n (!self.selectionBounds ||\n dragBounds.top !== self.selectionBounds.top ||\n dragBounds.left !== self.selectionBounds.left ||\n dragBounds.bottom !== self.selectionBounds.bottom ||\n dragBounds.right !== self.selectionBounds.right) &&\n !ctrl\n ) {\n if (!(cell.hovered && self.hovers.onFilterButton)) {\n self.selections = [];\n }\n if (dragBounds.top === -1) {\n dragBounds.top = 0;\n }\n sBounds = dragBounds;\n if (self.attributes.selectionMode === 'row') {\n for (i = sBounds.top; i <= sBounds.bottom; i += 1) {\n self.selectRow(i, true, null, true);\n }\n } else {\n self.selectArea(sBounds, true);\n if (sBounds.left == -1 && sBounds.top !== sBounds.bottom)\n self.isMultiRowsSelected = true;\n }\n }\n\n if (self.attributes.autoScrollOnMousemove) {\n var movedVertically = delta.y > self.attributes.autoScrollMargin;\n var movedHorizontally = delta.x > self.attributes.autoScrollMargin;\n\n if (movedVertically && !movedHorizontally)\n self.autoScrollZone(e, -1, y, ctrl);\n else if (movedHorizontally && !movedVertically)\n self.autoScrollZone(e, x, -1, ctrl);\n else if (movedHorizontally && movedVertically)\n self.autoScrollZone(e, x, y, ctrl);\n } else {\n self.autoScrollZone(e, x, y, ctrl);\n }\n }\n }\n const columnGroup = self.getColumnGroupAt(self.mouse.x, self.mouse.y);\n if (columnGroup) self.cursor = 'pointer';\n\n const rowGroup = self.getRowGroupAt(self.mouse.x, self.mouse.y);\n if (rowGroup) self.cursor = 'pointer';\n\n self.cellBoundaryCrossed = false;\n self.rowBoundaryCrossed = false;\n self.columnBoundaryCrossed = false;\n self.draw(true);\n };\n self.click = function (e, overridePos) {\n var i,\n startingBounds = JSON.stringify(self.getSelectionBounds()),\n ctrl =\n (e.ctrlKey || e.metaKey || self.attributes.persistantSelectionMode) &&\n !self.attributes.singleSelectionMode,\n pos = overridePos || self.getLayerPos(e);\n self.currentCell = self.getCellAt(pos.x, pos.y);\n if (self.currentCell.grid !== undefined) {\n return;\n }\n function checkSelectionChange() {\n var ev,\n sb = self.getSelectionBounds();\n\n if (startingBounds === JSON.stringify(sb)) {\n return;\n }\n ev = {\n selections: self.selections,\n selectionBounds: self.getSelectionBounds(),\n selectedCells: self.getSelectedCells(),\n };\n Object.defineProperty(ev, 'selectedData', {\n get: function () {\n return self.getSelectedData();\n },\n });\n self.dispatchEvent('selectionchanged', ev);\n }\n if (self.input) {\n self.endEdit();\n }\n if (self.ignoreNextClick) {\n self.ignoreNextClick = false;\n return;\n }\n i = self.currentCell;\n if (\n self.dispatchEvent('click', { NativeEvent: e, cell: self.currentCell })\n ) {\n return;\n }\n\n const unhideIndicator = self.getUnhideIndicator(pos.x, pos.y);\n if (unhideIndicator) {\n const { dir, orderIndex0, orderIndex1 } = unhideIndicator;\n if (dir === 'l' || dir === 'r')\n self.unhideColumns(orderIndex0, orderIndex1);\n else self.unhideRows(orderIndex0, orderIndex1);\n return;\n }\n\n let group = self.getColumnGroupAt(pos.x, pos.y);\n if (!group) group = self.getRowGroupAt(pos.x, pos.y);\n if (group) {\n if (self.toggleGroup(group)) {\n self.setStorageData();\n self.refresh();\n return;\n }\n }\n\n if (!self.hasFocus) {\n return;\n }\n\n const leftOffset = self.getRowGroupAreaWidth();\n const topOffset = self.getColumnGroupAreaHeight();\n const xInGrid = pos.x - leftOffset;\n const yInGrid = pos.y - topOffset;\n if (\n ['rowHeaderCell', 'columnHeaderCell'].indexOf(self.currentCell.style) ===\n -1 &&\n !ctrl\n ) {\n if (!self.hovers.onFilterButton) {\n self.setActiveCell(i.columnIndex, i.rowIndex);\n }\n }\n if (self.currentCell.context === 'cell') {\n if (self.currentCell.style === 'cornerCell') {\n self.selectAll();\n self.draw();\n checkSelectionChange();\n return;\n }\n if (self.currentCell.style === 'columnHeaderCell') {\n if (self.attributes.columnHeaderClickBehavior === 'sort') {\n if (self.orderBy === i.header.name) {\n self.orderDirection =\n self.orderDirection === 'asc' ? 'desc' : 'asc';\n } else {\n self.orderDirection = 'asc';\n }\n self.order(i.header.name, self.orderDirection);\n checkSelectionChange();\n return;\n }\n }\n self.selections[i.rowIndex] = self.selections[i.rowIndex] || [];\n if (\n self.attributes.selectionMode === 'row' ||\n self.currentCell.style === 'rowHeaderCell'\n ) {\n if (\n self.currentCell.style === 'rowHeaderCell' &&\n self.attributes.tree &&\n xInGrid > 0 &&\n xInGrid - self.currentCell.x <\n self.style.treeArrowWidth +\n self.style.treeArrowMarginLeft +\n self.style.treeArrowMarginRight +\n self.style.treeArrowClickRadius &&\n yInGrid - self.currentCell.y <\n self.style.treeArrowHeight +\n self.style.treeArrowMarginTop +\n self.style.treeArrowClickRadius &&\n yInGrid > 0\n ) {\n self.toggleTree(i.rowIndex);\n return;\n }\n }\n if (e.shiftKey && !ctrl) {\n self.selectionBounds = self.getSelectionBounds();\n self.selectArea(undefined, false);\n }\n }\n checkSelectionChange();\n self.draw(true);\n };\n self.dragResizeColumn = function (e) {\n var pos, x, y;\n pos = self.getLayerPos(e);\n x = self.resizingStartingWidth + pos.x - self.dragStart.x;\n y = self.resizingStartingHeight + pos.y - self.dragStart.y;\n if (x < self.style.minColumnWidth) {\n x = self.style.minColumnWidth;\n }\n if (y < self.style.minRowHeight) {\n y = self.style.minRowHeight;\n }\n if (\n self.dispatchEvent('resizecolumn', {\n x: x,\n y: y,\n draggingItem: self.draggingItem,\n })\n ) {\n return false;\n }\n if (\n self.scrollBox.scrollLeft >\n self.scrollBox.scrollWidth - self.attributes.resizeScrollZone &&\n self.dragMode === 'ew-resize'\n ) {\n self.resize(true);\n }\n if (self.dragMode === 'ew-resize') {\n self.sizes.columns[\n self.draggingItem.header.style === 'rowHeaderCell'\n ? 'cornerCell'\n : self.draggingItem.sortColumnIndex\n ] = x;\n if (\n ['rowHeaderCell', 'cornerCell'].indexOf(\n self.draggingItem.header.style,\n ) !== -1\n ) {\n self.resize(true);\n }\n self.resizeChildGrids();\n return;\n }\n if (self.dragMode === 'ns-resize') {\n if (self.draggingItem.rowOpen) {\n self.sizes.trees[self.draggingItem.rowIndex] = y;\n } else if (self.attributes.globalRowResize) {\n self.style.cellHeight = y;\n } else {\n self.sizes.rows[self.draggingItem.rowIndex] = y;\n }\n self.dispatchEvent('resizerow', { row: y });\n self.resizeChildGrids();\n return;\n }\n self.ellipsisCache = {};\n };\n self.stopDragResize = function (event) {\n const pos = self.getLayerPos(event);\n\n if (self.dragMode === 'ew-resize') {\n const hasMoved = !!(pos.x - self.dragStart.x);\n // Check that dragItem is selected or part of selection.\n const dragItemIsSelected = self.isColumnSelected(\n self.dragItem.columnIndex,\n );\n\n if (hasMoved && dragItemIsSelected) {\n const width = Math.max(\n self.resizingStartingWidth + pos.x - self.dragStart.x,\n self.style.minColumnWidth,\n );\n // If the column is selected, resize it to width plus any other selected columns.\n self.fitSelectedColumns(width);\n }\n }\n\n self.resize();\n document.body.removeEventListener(\n 'mousemove',\n self.dragResizeColumn,\n false,\n );\n document.body.removeEventListener('mouseup', self.stopDragResize, false);\n self.setStorageData();\n self.draw(true);\n self.ignoreNextClick = true;\n };\n self.scrollGrid = function (e) {\n var pos = self.getLayerPos(e);\n if (\n self.attributes.scrollPointerLock &&\n self.pointerLockPosition &&\n ['horizontal-scroll-box', 'vertical-scroll-box'].indexOf(\n self.scrollStartMode,\n ) !== -1\n ) {\n self.pointerLockPosition.x += e.movementX;\n self.pointerLockPosition.y += e.movementY;\n self.pointerLockPosition.x = Math.min(\n self.width - self.style.scrollBarWidth,\n Math.max(0, self.pointerLockPosition.x),\n );\n self.pointerLockPosition.y = Math.min(\n self.height - self.style.scrollBarWidth,\n Math.max(0, self.pointerLockPosition.y),\n );\n pos = self.pointerLockPosition;\n }\n self.scrollMode = self.getCellAt(pos.x, pos.y).context;\n if (\n self.scrollMode === 'horizontal-scroll-box' &&\n self.scrollStartMode !== 'horizontal-scroll-box'\n ) {\n self.scrollStartMode = 'horizontal-scroll-box';\n self.dragStart = pos;\n self.scrollStart.left = self.scrollBox.scrollLeft;\n clearTimeout(self.scrollTimer);\n return;\n }\n if (\n self.scrollMode === 'vertical-scroll-box' &&\n self.scrollStartMode !== 'vertical-scroll-box'\n ) {\n self.scrollStartMode = 'vertical-scroll-box';\n self.dragStart = pos;\n self.scrollStart.top = self.scrollBox.scrollTop;\n clearTimeout(self.scrollTimer);\n return;\n }\n if (\n self.scrollStartMode === 'vertical-scroll-box' &&\n self.scrollMode !== 'vertical-scroll-box'\n ) {\n self.scrollMode = 'vertical-scroll-box';\n }\n if (\n self.scrollStartMode === 'horizontal-scroll-box' &&\n self.scrollMode !== 'horizontal-scroll-box'\n ) {\n self.scrollMode = 'horizontal-scroll-box';\n }\n clearTimeout(self.scrollTimer);\n if (self.scrollModes.indexOf(self.scrollMode) === -1) {\n return;\n }\n if (self.scrollMode === 'vertical-scroll-box') {\n self.scrollBox.scrollTop =\n self.scrollStart.top +\n (pos.y - self.dragStart.y) / self.scrollBox.heightBoxRatio;\n } else if (self.scrollMode === 'vertical-scroll-top') {\n self.scrollBox.scrollTop -= self.page * self.style.cellHeight;\n self.scrollTimer = setTimeout(\n self.scrollGrid,\n self.attributes.scrollRepeatRate,\n e,\n );\n } else if (self.scrollMode === 'vertical-scroll-bottom') {\n self.scrollBox.scrollTop += self.page * self.style.cellHeight;\n self.scrollTimer = setTimeout(\n self.scrollGrid,\n self.attributes.scrollRepeatRate,\n e,\n );\n }\n if (self.scrollMode === 'horizontal-scroll-box') {\n self.scrollBox.scrollLeft =\n self.scrollStart.left +\n (pos.x - self.dragStart.x) / self.scrollBox.widthBoxRatio;\n } else if (self.scrollMode === 'horizontal-scroll-right') {\n self.scrollBox.scrollLeft += self.attributes.selectionScrollIncrement;\n self.scrollTimer = setTimeout(\n self.scrollGrid,\n self.attributes.scrollRepeatRate,\n e,\n );\n } else if (self.scrollMode === 'horizontal-scroll-left') {\n self.scrollBox.scrollLeft -= self.attributes.selectionScrollIncrement;\n self.scrollTimer = setTimeout(\n self.scrollGrid,\n self.attributes.scrollRepeatRate,\n e,\n );\n }\n };\n self.stopScrollGrid = function () {\n clearTimeout(self.scrollTimer);\n if (document.exitPointerLock) {\n document.exitPointerLock();\n }\n document.removeEventListener('mousemove', self.scrollGrid, false);\n };\n self.dragReorder = function (e) {\n var pos,\n x,\n y,\n columReorder = self.dragMode === 'column-reorder',\n rowReorder = self.dragMode === 'row-reorder';\n pos = self.getLayerPos(e);\n x = pos.x - self.dragStart.x;\n y = pos.y - self.dragStart.y;\n if (!self.attributes.allowColumnReordering && columReorder) {\n return;\n }\n if (!self.attributes.allowRowReordering && rowReorder) {\n return;\n }\n if ((e.ctrlKey || e.metaKey || e.shiftKey) && self.reorderObject) {\n if (\n self.dragMode === 'column-reorder' &&\n !self.isMultiColumnsSelected(self.draggingItem.header.index)\n ) {\n self.selectColumn(self.draggingItem.header.index, false, false);\n }\n }\n if (\n self.dispatchEvent('reordering', {\n NativeEvent: e,\n source: self.dragStartObject,\n target: self.currentCell,\n dragMode: self.dragMode,\n })\n ) {\n return;\n }\n if (\n Math.abs(x) > self.attributes.reorderDeadZone ||\n Math.abs(y) > self.attributes.reorderDeadZone\n ) {\n self.reorderObject = self.draggingItem;\n if (self.isMultiRowsSelected)\n self.reorderObject = self.getVisibleCellByIndex(\n -1,\n self.activeCell.rowIndex,\n );\n if (!self.reorderObject) return;\n self.reorderTarget = self.currentCell;\n self.reorderObject.dragOffset = {\n x: x,\n y: y,\n };\n self.autoScrollZone(\n e,\n columReorder ? pos.x : -1,\n rowReorder ? pos.y : -1,\n false,\n );\n }\n };\n self.stopDragReorder = function (e) {\n var oIndex,\n tIndex,\n odata = [],\n cr = {\n 'row-reorder': self.orders.rows,\n 'column-reorder': self.orders.columns,\n },\n i = {\n 'row-reorder': 'rowIndex',\n 'column-reorder': 'sortColumnIndex',\n }[self.dragMode];\n document.body.removeEventListener('mousemove', self.dragReorder, false);\n document.body.removeEventListener('mouseup', self.stopDragReorder, false);\n if (\n self.reorderObject &&\n self.reorderTarget &&\n ((self.dragMode === 'column-reorder' &&\n self.reorderTarget.sortColumnIndex > -1 &&\n self.reorderTarget.sortColumnIndex < self.getSchema().length) ||\n (self.dragMode === 'row-reorder' &&\n self.reorderTarget.rowIndex > -1 &&\n self.reorderTarget.rowIndex < self.viewData.length)) &&\n self.reorderObject[i] !== self.reorderTarget[i] &&\n !self.dispatchEvent('reorder', {\n NativeEvent: e,\n source: self.reorderObject,\n target: self.reorderTarget,\n dragMode: self.dragMode,\n })\n ) {\n self.ignoreNextClick = true;\n oIndex = cr[self.dragMode].indexOf(self.reorderObject[i]);\n tIndex = cr[self.dragMode].indexOf(self.reorderTarget[i]);\n if (self.dragMode === 'column-reorder') {\n var sortColumnIndices = [];\n var seletedColumnIndices = [];\n if (self.selections[0]) {\n self.selections[0].forEach(function (value) {\n sortColumnIndices.push(self.orders.columns[value]);\n });\n }\n var deleteCount = sortColumnIndices.length;\n cr[self.dragMode].splice(oIndex, deleteCount);\n if (tIndex > oIndex) tIndex = tIndex - (deleteCount - 1);\n for (var i = 0; i < sortColumnIndices.length; i++) {\n seletedColumnIndices.push(tIndex + i);\n cr[self.dragMode].splice(tIndex + i, 0, sortColumnIndices[i]);\n }\n self.orders.columns = cr[self.dragMode];\n self.viewData.forEach(function (row, rowIndex) {\n self.selections[rowIndex] = seletedColumnIndices;\n });\n } else {\n var selectedRows = [];\n self.selections.forEach(function (row, rowIndex) {\n if (row) {\n selectedRows.push(row);\n odata.push(self.viewData[rowIndex]);\n }\n });\n self.viewData.splice(oIndex, odata.length);\n self.selections = [];\n if (tIndex > oIndex) tIndex = tIndex - (odata.length - 1);\n self.activeCell.rowIndex = tIndex;\n for (var i = 0; i < odata.length; i++) {\n self.viewData.splice(tIndex + i, 0, odata[i]);\n self.selections[tIndex + i] = selectedRows[i];\n }\n }\n self.resize();\n self.setStorageData();\n }\n self.reorderObject = undefined;\n self.reorderTarget = undefined;\n self.draw(true);\n };\n self.dragMove = function (e) {\n if (\n self.dispatchEvent('moving', { NativeEvent: e, cell: self.currentCell })\n ) {\n return;\n }\n var pos = self.getLayerPos(e);\n self.moveOffset = {\n x: self.currentCell.columnIndex - self.dragStartObject.columnIndex,\n y: self.currentCell.rowIndex - self.dragStartObject.rowIndex,\n };\n if (\n Math.abs(pos.x) > self.attributes.reorderDeadZone ||\n Math.abs(pos.y) > self.attributes.reorderDeadZone\n ) {\n setTimeout(function () {\n self.autoScrollZone(e, pos.x, pos.y, false);\n }, 1);\n }\n };\n self.stopDragMove = function (e) {\n document.body.removeEventListener('mousemove', self.dragMove, false);\n document.body.removeEventListener('mouseup', self.stopDragMove, false);\n var b = self.getSelectionBounds();\n if (\n self.dispatchEvent('endmove', { NativeEvent: e, cell: self.currentCell })\n ) {\n self.movingSelection = undefined;\n self.moveOffset = undefined;\n self.draw(true);\n return;\n }\n if (self.moveOffset) {\n self.moveTo(\n self.movingSelection,\n b.left + self.moveOffset.x,\n b.top + self.moveOffset.y,\n );\n self.moveSelection(self.moveOffset.x, self.moveOffset.y);\n }\n self.movingSelection = undefined;\n self.moveOffset = undefined;\n self.draw(true);\n };\n self.freezeMove = function (e) {\n if (\n self.dispatchEvent('freezemoving', {\n NativeEvent: e,\n cell: self.currentCell,\n })\n ) {\n return;\n }\n var pos = self.getLayerPos(e),\n bm = self.style.gridBorderCollapse === 'collapse' ? 1 : 2,\n columnHeaderCellBorder = self.style.columnHeaderCellBorderWidth * bm,\n columnHeaderCellHeight = self.getColumnHeaderCellHeight(),\n rowHeaderCellWidth = self.getRowHeaderCellWidth();\n\n self.ignoreNextClick = true;\n self.freezeMarkerPosition = pos;\n pos.x -= self.getRowGroupAreaWidth();\n pos.y -= self.getColumnGroupAreaHeight();\n if (\n self.currentCell &&\n self.currentCell.rowIndex !== undefined &&\n self.dragMode === 'frozen-row-marker'\n ) {\n self.scrollBox.scrollTop = 0;\n self.frozenRow = self.currentCell.rowIndex + 1;\n self.scrollBox.bar.v.y =\n columnHeaderCellHeight +\n columnHeaderCellBorder +\n self.scrollCache.y[self.frozenRow];\n self.scrollBox.box.v.y =\n columnHeaderCellHeight +\n columnHeaderCellBorder +\n self.scrollCache.y[self.frozenRow];\n var dataHeight = self.scrollCache.y[self.scrollCache.y.length - 1];\n self.scrollBox.heightBoxRatio =\n (self.scrollBox.height -\n columnHeaderCellHeight -\n self.scrollCache.y[self.frozenRow]) /\n dataHeight;\n self.scrollBox.scrollBoxHeight =\n self.scrollBox.height * self.scrollBox.heightBoxRatio -\n self.style.scrollBarWidth;\n self.scrollBox.scrollBoxHeight = Math.max(\n self.scrollBox.scrollBoxHeight,\n self.style.scrollBarBoxMinSize,\n );\n self.scrollBox.box.v.height = self.scrollBox.scrollBoxHeight;\n }\n if (\n self.currentCell &&\n self.currentCell.columnIndex !== undefined &&\n self.dragMode === 'frozen-column-marker'\n ) {\n const dataWidth = self.refreshScrollCacheX();\n self.scrollBox.scrollLeft = 0;\n self.frozenColumn = self.currentCell.columnIndex + 1;\n self.scrollBox.bar.h.x =\n rowHeaderCellWidth + self.scrollCache.x[self.frozenColumn - 1];\n self.scrollBox.box.h.x =\n rowHeaderCellWidth + self.scrollCache.x[self.frozenColumn - 1];\n // var dataWidth = self.scrollCache.x[self.scrollCache.x.length - 1];\n self.scrollBox.widthBoxRatio =\n (self.scrollBox.width - self.scrollCache.x[self.frozenColumn - 1]) /\n dataWidth;\n self.scrollBox.scrollBoxWidth =\n self.scrollBox.width * self.scrollBox.widthBoxRatio -\n self.style.scrollBarWidth;\n self.scrollBox.scrollBoxWidth = Math.max(\n self.scrollBox.scrollBoxWidth,\n self.style.scrollBarBoxMinSize,\n );\n self.scrollBox.box.h.width = self.scrollBox.scrollBoxWidth;\n }\n if (\n Math.abs(pos.x) > self.attributes.reorderDeadZone ||\n Math.abs(pos.y) > self.attributes.reorderDeadZone\n ) {\n setTimeout(function () {\n self.autoScrollZone(e, pos.x, pos.y, false);\n }, 1);\n }\n };\n self.stopFreezeMove = function (e) {\n document.body.removeEventListener('mousemove', self.freezeMove, false);\n document.body.removeEventListener('mouseup', self.stopFreezeMove, false);\n self.freezeMarkerPosition = undefined;\n if (\n self.dispatchEvent('endfreezemove', {\n NativeEvent: e,\n cell: self.currentCell,\n })\n ) {\n self.frozenRow = self.startFreezeMove.x;\n self.frozenColumn = self.startFreezeMove.y;\n self.draw(true);\n return;\n }\n self.draw(true);\n };\n self.mousedown = function (e, overridePos) {\n self.lastMouseDownTarget = e.target;\n if (\n self.dispatchEvent('mousedown', {\n NativeEvent: e,\n cell: self.currentCell,\n })\n ) {\n return;\n }\n if (!self.hasFocus) {\n return;\n }\n if (e.button === 2 || self.input) {\n return;\n }\n var ctrl = e.ctrlKey || e.metaKey,\n move = /-move/.test(self.dragMode),\n freeze = /frozen-row-marker|frozen-column-marker/.test(self.dragMode),\n resize = /-resize/.test(self.dragMode);\n const onUnhideIndicator = self.hovers && self.hovers.unhideIndicator;\n self.dragStart = overridePos || self.getLayerPos(e);\n self.scrollStart = {\n left: self.scrollBox.scrollLeft,\n top: self.scrollBox.scrollTop,\n };\n self.dragStartObject = self.getCellAt(self.dragStart.x, self.dragStart.y);\n self.dragAddToSelection = !self.dragStartObject.selected;\n if (\n !ctrl &&\n !e.shiftKey &&\n !/(vertical|horizontal)-scroll-(bar|box)/.test(\n self.dragStartObject.context,\n ) &&\n self.currentCell &&\n !self.currentCell.isColumnHeader &&\n !move &&\n !freeze &&\n !resize\n ) {\n if (\n !(self.dragMode == 'row-reorder' && self.isMultiRowsSelected) &&\n !(self.currentCell.hovered && self.hovers.onFilterButton)\n ) {\n self.selections = [];\n }\n }\n if (self.dragStartObject.isGrid) {\n return;\n }\n if (\n self.scrollModes.indexOf(self.dragStartObject.context) !== -1 &&\n !onUnhideIndicator\n ) {\n self.scrollMode = self.dragStartObject.context;\n self.scrollStartMode = self.dragStartObject.context;\n self.scrollGrid(e);\n if (\n self.attributes.scrollPointerLock &&\n ['horizontal-scroll-box', 'vertical-scroll-box'].indexOf(\n self.scrollStartMode,\n ) !== -1\n ) {\n self.pointerLockPosition = {\n x: self.dragStart.x,\n y: self.dragStart.y,\n };\n self.canvas.requestPointerLock();\n }\n document.addEventListener('mousemove', self.scrollGrid, false);\n document.addEventListener('mouseup', self.stopScrollGrid, false);\n self.ignoreNextClick = true;\n return;\n }\n if (self.dragMode === 'cell') {\n self.selecting = true;\n if (\n (self.attributes.selectionMode === 'row' ||\n self.dragStartObject.columnIndex === -1) &&\n self.dragStartObject.rowIndex > -1\n ) {\n self.selectRow(self.dragStartObject.rowIndex, ctrl, null);\n } else if (\n (self.attributes.selectionMode === 'column' ||\n self.dragStartObject.rowIndex === -1) &&\n self.dragStartObject.columnIndex > -1\n ) {\n self.selectColumn(self.currentCell.header.index, ctrl, e.shiftKey);\n } else if (self.attributes.selectionMode !== 'row') {\n self.mousemove(e);\n }\n return;\n }\n if (move) {\n self.draggingItem = self.dragItem;\n self.movingSelection = self.selections.concat([]);\n self.dragging = self.dragStartObject;\n if (\n self.dispatchEvent('beginmove', {\n NativeEvent: e,\n cell: self.currentCell,\n })\n ) {\n return;\n }\n document.body.addEventListener('mousemove', self.dragMove, false);\n document.body.addEventListener('mouseup', self.stopDragMove, false);\n return self.mousemove(e);\n }\n if (freeze) {\n self.draggingItem = self.dragItem;\n self.startFreezeMove = {\n x: self.frozenRow,\n y: self.frozenColumn,\n };\n if (self.dispatchEvent('beginfreezemove', { NativeEvent: e })) {\n return;\n }\n document.body.addEventListener('mousemove', self.freezeMove, false);\n document.body.addEventListener('mouseup', self.stopFreezeMove, false);\n return self.mousemove(e);\n }\n if (resize && !onUnhideIndicator) {\n self.draggingItem = self.dragItem;\n if (self.draggingItem.rowOpen) {\n self.resizingStartingHeight =\n self.sizes.trees[self.draggingItem.rowIndex];\n } else {\n self.resizingStartingHeight =\n self.sizes.rows[self.draggingItem.rowIndex] || self.style.cellHeight;\n }\n self.resizingStartingWidth =\n self.sizes.columns[\n self.draggingItem.header.style === 'rowHeaderCell'\n ? 'cornerCell'\n : self.draggingItem.sortColumnIndex\n ] || self.draggingItem.width;\n document.body.addEventListener('mousemove', self.dragResizeColumn, false);\n document.body.addEventListener('mouseup', self.stopDragResize, false);\n return;\n }\n if (['row-reorder', 'column-reorder'].indexOf(self.dragMode) !== -1) {\n self.draggingItem = self.dragStartObject;\n if (\n self.dragMode === 'column-reorder' &&\n !self.isMultiColumnsSelected(self.currentCell.header.index)\n ) {\n self.selectColumn(self.currentCell.header.index, ctrl, e.shiftKey);\n } else if (self.dragMode === 'row-reorder' && !self.isMultiRowsSelected) {\n self.selectRow(self.dragStartObject.rowIndex, ctrl, null);\n }\n document.body.addEventListener('mousemove', self.dragReorder, false);\n document.body.addEventListener('mouseup', self.stopDragReorder, false);\n return;\n }\n };\n self.mouseup = function (e) {\n clearTimeout(self.scrollTimer);\n self.cellBoundaryCrossed = true;\n self.rowBoundaryCrossed = true;\n self.columnBoundaryCrossed = true;\n self.selecting = undefined;\n self.draggingItem = undefined;\n self.dragStartObject = undefined;\n if (\n self.dispatchEvent('mouseup', { NativeEvent: e, cell: self.currentCell })\n ) {\n return;\n }\n if (!self.hasFocus && e.target !== self.canvas) {\n return;\n }\n if (self.currentCell && self.currentCell.grid !== undefined) {\n return;\n }\n if (self.contextMenu || self.input) {\n return;\n }\n if (self.dragStart && self.isInGrid(self.dragStart)) {\n self.controlInput.focus();\n }\n e.preventDefault();\n };\n // gets the horizontal adjacent cells as well as first/last based on column visibility\n self.getAdjacentCells = function () {\n var x,\n i,\n s = self.getSchema(),\n o = {};\n for (x = 0; x < s.length; x += 1) {\n i = self.orders.columns[x];\n if (!s[i].hidden) {\n if (o.first === undefined) {\n o.first = x;\n o.left = x;\n }\n o.last = x;\n if (x > self.activeCell.columnIndex && o.right === undefined) {\n o.right = x;\n }\n if (x < self.activeCell.columnIndex) {\n o.left = x;\n }\n }\n }\n if (o.right === undefined) {\n o.right = o.last;\n }\n return o;\n };\n self.keydown = function (e) {\n var i,\n ev,\n adjacentCells = self.getAdjacentCells(),\n x = Math.max(self.activeCell.columnIndex, 0),\n y = Math.max(self.activeCell.rowIndex, 0),\n ctrl = e.ctrlKey || e.metaKey,\n last = self.viewData.length - 1,\n s = self.getSchema(),\n cols = s.length - 1;\n\n var defaultPrevented = self.dispatchEvent('keydown', {\n NativeEvent: e,\n cell: self.currentCell,\n });\n\n if (defaultPrevented) {\n return;\n }\n\n if (!self.attributes.keepFocusOnMouseOut && !self.hasFocus) {\n return;\n }\n\n // If a user starts typing content, switch to \"Enter\" mode\n if (isPrintableKeyEvent(e) && !ctrl) {\n return self.beginEditAt(x, y, e, true);\n }\n\n if (self.attributes.showNewRow) {\n last += 1;\n }\n\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n\n if (e.key === 'Escape') {\n self.selectNone();\n } else if (ctrl && e.key === 'a') {\n self.selectAll();\n } else if (['Backspace', 'Delete'].includes(e.key)) {\n self.deleteSelectedData();\n } else if (e.key === 'ArrowDown') {\n y += 1;\n } else if (e.key === 'ArrowUp') {\n y -= 1;\n } else if (\n (e.key === 'ArrowLeft' && !ctrl) ||\n (e.shiftKey && e.key === 'Tab')\n ) {\n x = adjacentCells.left;\n } else if (\n (e.key === 'ArrowRight' && !ctrl) ||\n (!e.shiftKey && e.key === 'Tab')\n ) {\n x = adjacentCells.right;\n } else if (e.key === 'PageUp') {\n y -= self.page;\n e.preventDefault();\n } else if (e.key === 'PageDown') {\n y += self.page;\n e.preventDefault();\n } else if (e.key === 'Home' || (ctrl && e.key === 'ArrowUp')) {\n y = 0;\n } else if (e.key === 'End' || (ctrl && e.key === 'ArrowDown')) {\n y = self.viewData.length - 1;\n } else if (ctrl && e.key === 'ArrowRight') {\n x = adjacentCells.last;\n } else if (ctrl && e.key === 'ArrowLeft') {\n x = adjacentCells.first;\n }\n\n if (e.key === 'Enter') {\n e.preventDefault();\n return self.beginEditAt(x, y, e);\n }\n if (x < 0 || Number.isNaN(x)) {\n x = adjacentCells.first;\n }\n if (y > last) {\n y = last;\n }\n if (y < 0 || Number.isNaN(y)) {\n y = 0;\n }\n if (x > cols) {\n x = adjacentCells.last;\n }\n\n // TODO - most likely some column order related bugs in key based selection\n // Arrows\n var isArrowKey = [\n 'ArrowLeft',\n 'ArrowUp',\n 'ArrowRight',\n 'ArrowDown',\n ].includes(e.key);\n\n // Shrinking and expanding selection using shift and arrow keys\n if (e.shiftKey && isArrowKey) {\n const firstSelectedRowIndex = self.selections.findIndex((el) => !!el);\n const firstSelectedRow = self.selections[firstSelectedRowIndex];\n const firstSelectedColumnIndex = firstSelectedRow[0];\n const lastSelectedColumn = firstSelectedRow[firstSelectedRow.length - 1];\n const yAtTop = y === 0;\n const yAtBottom = y === last;\n const xAtLeft = x === 0;\n const xAtRight = x === cols;\n\n if (e.key === 'ArrowUp') {\n if (y + 1 > firstSelectedRowIndex && !yAtTop) {\n self.selections.pop();\n } else if (y < firstSelectedRowIndex) {\n self.selections[y] = self.selections[y] || [];\n self.selections[y].push(x);\n } else if (yAtTop && self.activeCell.rowIndex !== 0) {\n self.selections.pop();\n }\n }\n\n if (e.key === 'ArrowDown') {\n if (y > firstSelectedRowIndex && y === self.selections.length) {\n self.selections[y] = self.selections[y] || [];\n self.selections[y].push(x);\n } else if (y >= firstSelectedRowIndex && !yAtBottom) {\n delete self.selections[y - 1];\n } else if (yAtBottom && self.activeCell.rowIndex !== last) {\n delete self.selections[y - 1];\n }\n }\n\n for (const selection of self.selections) {\n if (e.key === 'ArrowRight' && selection) {\n if (x > lastSelectedColumn) {\n selection.push(x);\n } else if (x <= lastSelectedColumn && !xAtRight) {\n selection.shift();\n } else if (xAtRight && self.activeCell.columnIndex !== cols) {\n selection.shift();\n }\n }\n\n if (e.key === 'ArrowLeft' && selection) {\n if (x < firstSelectedColumnIndex) {\n selection.unshift(x);\n } else if (x >= firstSelectedColumnIndex && !xAtLeft) {\n selection.pop();\n } else if (xAtLeft && self.activeCell.columnIndex !== 0) {\n selection.pop();\n }\n }\n }\n\n self.selectionBounds = self.getSelectionBounds();\n self.selectArea(undefined, ctrl);\n\n self.draw(true);\n }\n\n if (x !== self.activeCell.columnIndex || y !== self.activeCell.rowIndex) {\n self.scrollIntoView(\n x !== self.activeCell.columnIndex ? x : undefined,\n y !== self.activeCell.rowIndex && !Number.isNaN(y) ? y : undefined,\n );\n\n self.setActiveCell(x, y);\n if (!e.shiftKey && self.attributes.selectionFollowsActiveCell) {\n if (!ctrl) {\n self.selections = [];\n }\n self.selections[y] = self.selections[y] || [];\n self.selections[y].push(x);\n ev = {\n selectedData: self.getSelectedData(),\n selections: self.selections,\n selectionBounds: self.getSelectionBounds(),\n selectedCells: self.getSelectedCells(),\n };\n Object.defineProperty(ev, 'selectedData', {\n get: function () {\n return self.getSelectedData();\n },\n });\n self.dispatchEvent('selectionchanged', ev);\n }\n self.draw(true);\n }\n };\n self.keyup = function (e) {\n if (\n self.dispatchEvent('keyup', { NativeEvent: e, cell: self.currentCell })\n ) {\n return;\n }\n if (!self.hasFocus) {\n return;\n }\n };\n self.keypress = function (e) {\n if (!self.hasFocus) {\n return;\n }\n if (\n self.dispatchEvent('keypress', { NativeEvent: e, cell: self.currentCell })\n ) {\n return;\n }\n };\n self.dblclick = function (e) {\n if (\n self.dispatchEvent('dblclick', { NativeEvent: e, cell: self.currentCell })\n ) {\n return;\n }\n if (!self.hasFocus) {\n return;\n }\n if (\n self.currentCell.context === 'ew-resize' &&\n self.currentCell.style === 'columnHeaderCell'\n ) {\n // Check that double-clicked cell is selected or part of selection.\n const currentCellIsSelected = self.isColumnSelected(\n self.currentCell.columnIndex,\n );\n\n if (currentCellIsSelected) {\n // There might be more\n self.fitSelectedColumns();\n } else {\n self.fitColumnToValues(self.currentCell.header.name);\n }\n } else if (\n self.currentCell.context === 'ew-resize' &&\n self.currentCell.style === 'cornerCell'\n ) {\n self.autosize();\n } else if (\n ['cell', 'activeCell'].includes(self.currentCell.style) &&\n !self.hovers.onFilterButton &&\n !self.hovers.onCellTreeIcon\n ) {\n if (self.currentCell.isRowTree || self.currentCell.isColumnTree) {\n self.cellTreeExpandCollapse(\n self.currentCell.rowIndex,\n self.currentCell.columnIndex,\n );\n self.draw();\n } else {\n self.beginEditAt(\n self.currentCell.columnIndex,\n self.currentCell.rowIndex,\n );\n }\n }\n };\n self.scrollWheel = function (e) {\n var l,\n t,\n ev = e,\n deltaX = e.deltaX === undefined ? e.NativeEvent.deltaX : e.deltaX,\n deltaY = e.deltaY === undefined ? e.NativeEvent.deltaY : e.deltaY,\n deltaMode =\n e.deltaMode === undefined ? e.NativeEvent.deltaMode : e.deltaMode;\n var e = e.NativeEvent || e;\n if (wheeling) {\n ev.preventDefault(e);\n return;\n }\n if (self.dispatchEvent('wheel', { NativeEvent: e })) {\n return;\n }\n self.touchHaltAnimation = true;\n l = self.scrollBox.scrollLeft;\n t = self.scrollBox.scrollTop;\n if (self.hasFocus) {\n //BUG Issue 42: https://github.com/TonyGermaneri/canvas-datagrid/issues/42\n //https://stackoverflow.com/questions/20110224/what-is-the-height-of-a-line-in-a-wheel-event-deltamode-dom-delta-line\n if (deltaMode === 1) {\n // line mode = 17 pixels per line\n deltaY = deltaY * 17;\n }\n if (\n (self.scrollBox.scrollTop < self.scrollBox.scrollHeight &&\n deltaY > 0) ||\n (self.scrollBox.scrollLeft < self.scrollBox.scrollWidth &&\n deltaX > 0) ||\n (self.scrollBox.scrollTop > 0 && deltaY < 0) ||\n (self.scrollBox.scrollLeft > 0 && deltaX < 0)\n ) {\n ev.preventDefault(e);\n }\n wheeling = setTimeout(function () {\n wheeling = undefined;\n self.scrollBox.scrollTo(deltaX + l, deltaY + t);\n }, 1);\n }\n };\n self.pasteData = function (\n pasteValue,\n mimeType,\n startRowIndex,\n startColIndex,\n ) {\n if (mimeType === 'text/html' && !isSupportedHtml(pasteValue)) {\n console.warn(\n 'Unrecognized HTML format. HTML must be a simple table, e.g.: <table><tr><td>data</td></tr></table>.',\n );\n console.warn(\n 'Data with the mime type text/html not in this format will not be imported as row data.',\n );\n\n return;\n }\n var schema = self.getSchema();\n var rows = parseData(pasteValue, mimeType);\n\n // selected cell. This mimics Excel's paste functionality, and works\n // as a poor-man's fill-down.\n if (rows.length === 1 && rows[0].length === 1) {\n var cellData = rows[0][0].value.map((item) => item.value).join();\n\n self.forEachSelectedCell(function (data, rowIndex, colName) {\n data[rowIndex][colName] = cellData;\n });\n } else {\n var selections = [];\n for (var rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n // Rows may have been moved by user, so get the actual row index\n // (instead of the row index at which the row is rendered):\n var realRowIndex = self.orders.rows[startRowIndex + rowIndex];\n var cells = rows[rowIndex];\n\n var existingRowData = self.viewData[realRowIndex];\n var newRowData = Object.assign({}, existingRowData);\n\n selections[realRowIndex] = [];\n\n for (var colIndex = 0; colIndex < cells.length; colIndex++) {\n var column = schema[startColIndex + colIndex];\n\n if (!column) {\n console.warn('Paste data exceeded grid bounds. Skipping.');\n continue;\n }\n\n var columnName = column.name;\n var cellData = cells[colIndex].value\n .map((item) => item.value)\n .join('');\n\n if (cellData === undefined || cellData === null) {\n newRowData[columnName] = existingRowData[columnName];\n continue;\n }\n\n selections[realRowIndex].push(startColIndex + colIndex);\n\n newRowData[columnName] = cellData;\n }\n\n self.originalData[self.boundRowIndexMap.get(realRowIndex)] = newRowData;\n // Update view date here to avoid a full refresh of `viewData`.\n // To stay in line with Excel and Google Sheet behaviour,\n // don't perform a full refresh (and filter/sort results)\n // as this would make any pasted values disappear and/or suddenly change position.\n self.viewData[realRowIndex] = newRowData;\n }\n self.selections = selections;\n }\n\n // selections is a sparse array, so we condense:\n var affectedCells = [];\n\n self.selections.forEach(function (row, rowIndex) {\n if (rowIndex === undefined) return;\n\n row.forEach(function (columnIndex) {\n affectedCells.push([\n rowIndex,\n columnIndex,\n self.getBoundRowIndexFromViewRowIndex(rowIndex),\n self.getBoundColumnIndexFromViewColumnIndex(columnIndex),\n ]);\n });\n });\n\n self.dispatchEvent('afterpaste', {\n cells: affectedCells,\n });\n\n return rows.length;\n };\n self.getNextVisibleColumnIndex = function (visibleColumnIndex) {\n var x,\n s = self.getVisibleSchema();\n for (x = 0; x < s.length; x += 1) {\n if (s[x].columnIndex === visibleColumnIndex) {\n return s[x + 1].columnIndex;\n }\n }\n return -1;\n };\n self.getVisibleColumnIndexOf = function (columnIndex) {\n var x,\n s = self.getVisibleSchema();\n for (x = 0; x < s.length; x += 1) {\n if (s[x].columnIndex === columnIndex) {\n return x;\n }\n }\n return -1;\n };\n self.paste = function (event) {\n if (!self.attributes.editable) {\n return;\n }\n\n var defaultPrevented = self.dispatchEvent('beforepaste', {\n NativeEvent: event,\n });\n\n if (defaultPrevented) {\n return;\n }\n\n var clipboardItems = new Map(\n Array.from(event.clipboardData.items).map((item) => [item.type, item]),\n );\n\n // Supported MIME types, in order of preference:\n var supportedMimeTypes = ['text/html', 'text/csv', 'text/plain'];\n\n // The clipboard will often contain the same data in multiple formats,\n // which can be used depending on the context in which it's pasted. Here\n // we'll prefere more structured (HTML/CSV) over less structured, when\n // available, so we try to find those first:\n var pasteableItems = supportedMimeTypes\n .map((mimeType) => clipboardItems.get(mimeType))\n .filter((item) => !!item); // filter out not-found MIME types (= undefined)\n\n if (pasteableItems.length === 0) {\n console.warn(\n 'Cannot find supported clipboard data type. Supported types are:',\n supportedMimeTypes.join(', '),\n );\n return;\n }\n\n var itemToPaste = pasteableItems[0];\n\n let startCell = [];\n for (\n let rowIndex = 0, len = self.selections.length;\n rowIndex < len;\n rowIndex++\n ) {\n const row = self.selections[rowIndex];\n if (row) {\n if (row[0] === undefined) return;\n startCell = [rowIndex, row[0] < 0 ? row[1] : row[0]];\n break;\n }\n }\n\n // itemToPaste is cleared once accessed (getData or getAsString),\n // so we need to store the type here, before reading its value:\n var pasteType = itemToPaste.type;\n\n itemToPaste.getAsString(function (pasteValue) {\n self.pasteData(pasteValue, pasteType, startCell[0], startCell[1]);\n\n self.draw();\n });\n };\n self.cut = function (event) {\n if (self.dispatchEvent('cut', { NativeEvent: event })) {\n return;\n }\n\n // Expecting instance of `ClipboardEvent` with `clipboardData` attribute\n if (!self.hasFocus || !event.clipboardData) {\n return;\n }\n\n self.copySelectedCellsToClipboard(event.clipboardData);\n\n const affectedCells = self.clearSelectedCells();\n\n self.dispatchEvent('aftercut', {\n cells: affectedCells,\n });\n\n requestAnimationFrame(() => self.draw());\n event.preventDefault();\n };\n self.copy = function (event) {\n if (self.dispatchEvent('copy', { NativeEvent: event })) {\n return;\n }\n\n // Expecting instance of `ClipboardEvent` with `clipboardData` attribute\n if (!self.hasFocus || !event.clipboardData) {\n return;\n }\n\n self.copySelectedCellsToClipboard(event.clipboardData);\n\n event.preventDefault();\n };\n return;\n}\n","'use strict';\n\nconst isSupportedHtml = function (pasteValue) {\n // We need to match new lines in the HTML, .* won't match new line characters.\n // `s` regex modifier can't be used with `ecmaVersion === 2017`.\n // As a workaround using [\\s\\S]*. Fix when we upgrade `ecmaVersion`.\n const genericDiv = /(?:^(<meta[^>]*>)?[\\s\\S]*<div[^>]*>)/;\n const genericSpan = /(?:^(<meta[^>]*>)?[\\s\\S]*<span[^>]*>)/;\n const genericTable = /(?:^(<meta[^>]*>)?[\\s\\S]*<table[^>]*>)/; // Matches Google Sheets format clipboard data format too.\n const excelTable = /(?:<!--StartFragment-->[\\s\\S]*<tr[^>]*>)/;\n const excelTableRow = /(?:<!--StartFragment-->[\\s\\S]*<td[^>]*>)/;\n\n return [\n genericDiv,\n genericTable,\n genericSpan,\n excelTable,\n excelTableRow,\n ].some((expression) => expression.test(pasteValue));\n};\n\n// Explanation of nodeType here: https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst IGNORE_NODETYPES = [8, 3]; // '#text' and '#comment'\n\nconst isHtmlTable = function (pasteValue) {\n return /(?:<table[^>]*>)|(?:<tr[^]*>)/.test(pasteValue);\n};\n\nconst sanitizeElementData = function (element) {\n // It is not entirely clear if this check on nodeType is required.\n let elementData = element.nodeType === 1 ? element.innerText : element.data;\n\n return String(elementData).replace(/\\s+/g, ' ').trim();\n};\n\nconst parseHtmlText = function (data) {\n const doc = new DOMParser().parseFromString(data, 'text/html');\n const element = doc.querySelector('div') || doc.querySelector('span');\n const elementData = sanitizeElementData(element);\n\n return elementData\n .split('\\n')\n .map((item) => item.split('\\t').map((value) => ({ value: [{ value }] })));\n};\n\nconst parseHtmlTable = function (data) {\n const doc = new DOMParser().parseFromString(data, 'text/html');\n const trs = doc.querySelectorAll('table tr');\n const rows = [];\n\n for (const tr of trs) {\n const row = [];\n\n for (const childNode of tr.childNodes) {\n if (IGNORE_NODETYPES.includes(childNode.nodeType)) continue;\n\n const col = { value: [] };\n const value = sanitizeElementData(childNode);\n\n if (value) col.value.push({ value });\n\n row.push(col);\n }\n\n rows.push(row);\n }\n\n return rows;\n};\n\nconst parseText = function (data) {\n return data\n .split('\\n')\n .map((item) => item.split('\\t').map((value) => ({ value: [{ value }] })));\n};\n\nconst parseData = function (data, mimeType) {\n if (mimeType === 'text/html' && isHtmlTable(data)) {\n return parseHtmlTable(data);\n } else if (mimeType === 'text/html') {\n return parseHtmlText(data);\n }\n\n // Default data format is string, so split on new line,\n // and then enclose in an array (a row with one cell):\n return parseText(data);\n};\n\nconst htmlSafe = function (value) {\n if (typeof value !== 'string') return value;\n\n return value.replace(/</g, '<').replace(/>/g, '>');\n};\n\nconst createTextString = function (selectedData, isNeat) {\n // Selected like [[0, 1], [0, 1]] of [[0, 3]] is neat; Selected like [[0, 1], [1, 2]] is untidy.\n // If not isNeat we just return a simple string of concatenated values.\n if (!isNeat)\n return selectedData.map((row) => Object.values(row).join('')).join('');\n\n // If isNeat, we can create tab separated mutti-line text.\n return selectedData.map((row) => Object.values(row).join('\\t')).join('\\n');\n};\n\nconst createHTMLString = function (selectedData, isNeat) {\n if (!isNeat) return createTextString(selectedData, isNeat);\n\n // If isNeat, we can create a HTML table with the selected data.\n let htmlString = '<table>';\n htmlString += selectedData\n .map(\n (row) =>\n '<tr>' +\n Object.values(row)\n .map((value) => ['<td>', htmlSafe(value), '</td>'].join(''))\n .join('') +\n '</tr>',\n )\n .join('');\n htmlString += '</table>';\n\n return htmlString;\n};\n\nexport {\n createTextString,\n createHTMLString,\n isSupportedHtml,\n htmlSafe,\n parseData,\n parseHtmlTable,\n parseHtmlText,\n parseText,\n sanitizeElementData,\n};\n","'use strict';\n\n/**\n * Merge a new hidden row range into existed ranges array\n * @param {any[]} hiddenRowRanges tuples: Array<[bgeinRowIndex, endRowIndex]>\n * @param {number[]} newRange tuple: [beginRowIndex, endRowIndex]\n * @returns {boolean}\n */\nconst mergeHiddenRowRanges = function (hiddenRowRanges, newRange) {\n const [beginRowIndex, endRowIndex] = newRange;\n if (endRowIndex < beginRowIndex) return false;\n let inserted = false;\n for (let i = 0; i < hiddenRowRanges.length; i++) {\n const range = hiddenRowRanges[i];\n if (beginRowIndex > range[1] + 1) continue;\n if (beginRowIndex <= range[0] && endRowIndex >= range[0]) {\n hiddenRowRanges[i] = [beginRowIndex, Math.max(endRowIndex, range[1])];\n inserted = true;\n break;\n }\n if (beginRowIndex >= range[0]) {\n hiddenRowRanges[i] = [range[0], Math.max(endRowIndex, range[1])];\n inserted = true;\n break;\n }\n }\n if (!inserted) hiddenRowRanges.push([beginRowIndex, endRowIndex]);\n // merge intersections after sorting ranges\n hiddenRowRanges.sort((a, b) => a[0] - b[0]);\n for (let i = 0; i < hiddenRowRanges.length - 1; i++) {\n const range = hiddenRowRanges[i];\n const nextRange = hiddenRowRanges[i + 1];\n if (nextRange[0] <= range[1] + 1) {\n hiddenRowRanges[i] = [range[0], Math.max(range[1], nextRange[1])];\n hiddenRowRanges.splice(i + 1, 1);\n i--;\n }\n }\n return true;\n};\n\nexport { mergeHiddenRowRanges };\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals HTMLElement: false, Reflect: false, define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nimport { createHTMLString, createTextString } from './events/util';\n\nexport default function (self, ctor) {\n self.scale = 1;\n self.orders = {\n rows: [],\n columns: [],\n };\n self.appliedInlineStyles = {};\n self.cellGridAttributes = {};\n self.treeGridAttributes = {};\n self.visibleRowHeights = [];\n self.hasFocus = false;\n self.activeCell = {\n columnIndex: 0,\n rowIndex: 0,\n };\n self.innerHTML = '';\n self.storageName = 'canvasDataGrid';\n self.invalidSearchExpClass = 'canvas-datagrid-invalid-search-regExp';\n self.localStyleLibraryStorageKey = 'canvas-datagrid-user-style-library';\n self.dataType = 'application/x-canvas-datagrid';\n self.orderBy = null;\n self.orderDirection = 'asc';\n self.orderings = {\n columns: [],\n add: function (orderBy, orderDirection, sortFunction) {\n self.orderings.columns = self.orderings.columns.filter(function (col) {\n return col.orderBy !== orderBy;\n });\n self.orderings.columns.push({\n orderBy: orderBy,\n orderDirection: orderDirection,\n sortFunction: sortFunction,\n });\n },\n sort: function () {\n console.warn(\n 'grid.orderings.sort has been deprecated. Please use grid.refresh().',\n );\n\n self.orderings.columns.forEach(function (col) {\n self.viewData.sort(col.sortFunction(col.orderBy, col.orderDirection));\n });\n },\n };\n self.columnFilters = {};\n self.filters = {};\n self.frozenRow = 0;\n self.frozenColumn = 0;\n self.ellipsisCache = {};\n self.scrollCache = { x: [], y: [] };\n self.scrollBox = {};\n self.visibleRows = [];\n self.visibleCells = [];\n /**\n * Each item of this array contains these properties:\n * - `x`, `y`, `x2`, `y2`\n * - `orderIndex0`, `orderIndex1`: The closed interval of the hiding rows/columns.\n * - `dir`: The directon of the unhide indicator. 'l' and 'r' for columns, 't' and 'b' for rows\n */\n self.visibleUnhideIndicators = [];\n /**\n * Each item is a tuple conatins two numbers:\n * its type difination: Array<[beginRowIndex, endRowIndex]>\n * Each tuple represents a closed Interval\n */\n self.hiddenRowRanges = [];\n /**\n * This array stored all groups information with context for drawing,\n * it is generated by drawing functions,\n * and be used for searching groups when users operate on the spreadsheet\n * Each item of this array contains these properties:\n * - `type`: its available values: 'c' and 'r'. indicates the type of this item, 'c' for column group\n * and 'r' for row group.\n * - `x`,`y`: the left-top point of this group's rendering area.\n * - `x2`, `y2`: the right-bottom of this group's rendering area.\n * - `collapsed`: this value indicates the collapsed status of this group.\n * - `from`, `to`: The column index range of this group (We use this value for searching the group)\n * - `row`: The row index for column groups (We use this value for searching the group)\n */\n self.visibleGroups = [];\n self.sizes = {\n rows: {},\n columns: {},\n trees: {},\n };\n self.selections = [];\n self.filterable = {\n rows: [],\n columns: [],\n };\n self.selectedFilterButton = {\n columnIndex: -1,\n rowIndex: -1,\n };\n self.cellTree = {\n rows: [],\n columns: {},\n tempSchema: {},\n rowTreeColIndex: 0,\n columnTreeRowStartIndex: 0,\n columnTreeRowEndIndex: 0,\n origin: {\n rows: [],\n columns: {},\n },\n };\n self.hovers = {};\n self.attributes = {};\n self.style = {};\n self.formatters = {};\n self.sorters = {};\n self.parsers = {};\n self.schemaHashes = {};\n self.events = {};\n self.changes = [];\n self.scrollIndexTop = 0;\n self.scrollPixelTop = 0;\n self.scrollIndexLeft = 0;\n self.scrollPixelLeft = 0;\n self.childGrids = {};\n self.openChildren = {};\n\n /**\n * Array for grouped columns\n * Each item in this array is an array and it represents some grouping in one row\n * A grouping descriptor has three properties:\n * - `from`: The column index of the first column\n * - `to`: The column index of the last column\n * - `collapsed`: Is this group be collapsed\n * @example [[{ from: 1, to: 2, collapsed: false }]]\n */\n self.groupedColumns = [];\n\n /**\n * Array for grouped rows\n * Each item in this array is an array and it represents some grouping in one column\n * A grouping descriptor has three properties:\n * - `from`: The row index of the first row\n * - `to`: The row index of the last row\n * - `collapsed`: Is this group be collapsed\n * @example [[{ from: 1, to: 2, collapsed: false }]]\n */\n self.groupedRows = [];\n\n self.scrollModes = [\n 'vertical-scroll-box',\n 'vertical-scroll-top',\n 'vertical-scroll-bottom',\n 'horizontal-scroll-box',\n 'horizontal-scroll-right',\n 'horizontal-scroll-left',\n ];\n self.componentL1Events = {};\n self.eventNames = [\n 'afterdraw',\n 'afterrendercell',\n 'afterrenderfilterbutton',\n 'aftercreategroup',\n 'attributechanged',\n 'beforebeginedit',\n 'beforecreatecellgrid',\n 'beforedraw',\n 'beforeendedit',\n 'beforerendercell',\n 'beforerendercellgrid',\n 'beforerenderfilterbutton',\n 'beginedit',\n 'cellmouseout',\n 'cellmouseover',\n 'click',\n 'collapsetree',\n 'contextmenu',\n 'copy',\n 'datachanged',\n 'dblclick',\n 'endedit',\n 'expandtree',\n 'formatcellvalue',\n 'keydown',\n 'keypress',\n 'keyup',\n 'mousedown',\n 'mousemove',\n 'mouseup',\n 'newrow',\n 'ordercolumn',\n 'rendercell',\n 'rendercellgrid',\n 'renderorderbyarrow',\n 'rendertext',\n 'rendertreearrow',\n 'reorder',\n 'reordering',\n 'resize',\n 'resizecolumn',\n 'resizerow',\n 'schemachanged',\n 'scroll',\n 'selectionchanged',\n 'stylechanged',\n 'touchcancel',\n 'touchend',\n 'touchmove',\n 'touchstart',\n 'wheel',\n ];\n self.mouse = { x: 0, y: 0 };\n self.getSelectedData = function (expandToRow) {\n const selectedData = [];\n const schema = self.getSchema();\n const viewDataLength = self.viewData.length;\n\n if (viewDataLength === 0) {\n return [];\n }\n\n // self.selections is a sparse array, so `viewRowIndex` here\n // will equal the row index as where it's rendered,\n // not as where it is in the original data array.\n self.selections.forEach(function (row, viewRowIndex) {\n if (!row) {\n return;\n }\n\n if (viewRowIndex === viewDataLength) {\n return;\n }\n\n if (row.length === 0) {\n selectedData[viewRowIndex] = null;\n return;\n }\n\n selectedData[viewRowIndex] = {};\n\n row.forEach(function (col) {\n if (col === -1 || !schema[col]) {\n return;\n }\n\n const orderedIndex = self.orders.columns[col];\n\n if (!expandToRow && schema[orderedIndex].hidden) {\n return;\n }\n\n if (self.viewData[viewRowIndex]) {\n selectedData[viewRowIndex][schema[orderedIndex].name] =\n self.viewData[viewRowIndex][schema[orderedIndex].name];\n }\n });\n });\n\n return selectedData;\n };\n self.getSelectedCells = function (expandToRow) {\n const selectedCells = [];\n const schema = self.getSchema();\n const viewDataLength = self.viewData.length;\n\n if (viewDataLength === 0) {\n return [];\n }\n\n for (const [viewRowIndex, row] of self.selections.entries()) {\n if (!row || row.length === 0) continue;\n\n for (const [, viewColumnIndex] of row.entries()) {\n if (viewColumnIndex === -1 || !schema[viewColumnIndex]) {\n continue;\n }\n\n const boundColumnIndex = self.getBoundColumnIndexFromViewColumnIndex(\n viewColumnIndex,\n );\n\n if (!expandToRow && schema[boundColumnIndex].hidden) {\n continue;\n }\n\n if (self.viewData[viewRowIndex]) {\n const header = schema[boundColumnIndex];\n const value = self.viewData[viewRowIndex][header.name];\n const boundRowIndex = self.getBoundRowIndexFromViewRowIndex(\n viewRowIndex,\n );\n\n const cell = {\n value,\n header,\n boundRowIndex,\n boundColumnIndex,\n viewRowIndex,\n viewColumnIndex,\n };\n\n selectedCells.push(cell);\n }\n }\n }\n\n return selectedCells;\n };\n self.copySelectedCellsToClipboard = function (clipboardData) {\n const selectedData = [];\n const schema = self.getSchema();\n let firstRowAsString;\n let isNeat = true; // Selected like [[0, 1], [0, 1]] of [[0, 3]] is neat; Selected like [[0, 1], [1, 2]] is untidy\n\n for (const [rowIndex, row] of self.selections.entries()) {\n // If no cells are selected for a particular rowIndex the selections array will contain an empty element for that rowIndex.\n if (!row) continue;\n\n // Convert to string for easy comparison to the first row.\n const rowAsString = row.join(',').toString();\n const rowDict = {};\n\n if (!firstRowAsString) firstRowAsString = row.join(',').toString();\n if (isNeat && rowAsString !== firstRowAsString) isNeat = false;\n\n const boundRowIndex = self.getBoundRowIndexFromViewRowIndex(rowIndex);\n\n for (let columnIndex of row) {\n // If the whole row is selected the columnIndex for the rowHeader is -1.\n if (columnIndex < 0) continue;\n\n const boundColumnIndex = self.getBoundColumnIndexFromViewColumnIndex(\n columnIndex,\n );\n const columnName = schema[boundColumnIndex].name;\n\n const value = self.originalData[boundRowIndex][columnName];\n\n rowDict[columnName] = value;\n }\n selectedData.push(rowDict);\n }\n\n if (selectedData.length > 0) {\n const textString = createTextString(selectedData, isNeat);\n const htmlString = createHTMLString(selectedData, isNeat);\n\n const copiedData = {\n 'text/plain': textString,\n 'text/html': htmlString,\n 'text/csv': textString,\n 'application/json': JSON.stringify(selectedData),\n };\n\n for (const [mimeType, data] of Object.entries(copiedData)) {\n clipboardData.setData(mimeType, data);\n }\n }\n };\n self.clearSelectedCells = function () {\n const schema = self.getSchema();\n const affectedCells = [];\n\n for (const [rowIndex, row] of self.selections.entries()) {\n // If no cells are selected for a particular rowIndex the selections array will contain an empty element for that rowIndex.\n if (!row) continue;\n\n const boundRowIndex = self.getBoundRowIndexFromViewRowIndex(rowIndex);\n\n for (let columnIndex of row) {\n // If the whole row is selected the columnIndex for the rowHeader is -1.\n if (columnIndex < 0) continue;\n\n const boundColumnIndex = self.getBoundColumnIndexFromViewColumnIndex(\n columnIndex,\n );\n const columnName = schema[boundColumnIndex].name;\n\n self.originalData[boundRowIndex][columnName] = '';\n\n affectedCells.push([\n rowIndex,\n columnIndex,\n boundRowIndex,\n boundColumnIndex,\n ]);\n }\n }\n\n return affectedCells;\n };\n self.getBoundRowIndexFromViewRowIndex = function (viewRowIndex) {\n if (self.boundRowIndexMap && self.boundRowIndexMap.has(viewRowIndex)) {\n return self.boundRowIndexMap.get(viewRowIndex);\n }\n\n return undefined;\n };\n self.getBoundColumnIndexFromViewColumnIndex = function (viewColumnIndex) {\n return self.orders.columns[viewColumnIndex];\n };\n /**\n * Get the height of the area about column groups for rendering and handling events.\n */\n self.getColumnGroupAreaHeight = function () {\n if (!self.attributes.allowGroupingColumns) {\n return 0;\n }\n const groups = self.groupedColumns.length;\n const base = self.style.columnGroupRowHeight * self.scale;\n return base * groups;\n };\n /**\n * Get the width of the area about row groups for rendering and handling events.\n */\n self.getRowGroupAreaWidth = function () {\n if (!self.attributes.allowGroupingRows) {\n return 0;\n }\n const groups = self.groupedRows.length;\n const base = self.style.rowGroupColumnWidth * self.scale;\n return base * groups;\n };\n self.getCollapsedColumnGroups = function () {\n const result = [];\n for (let rowIndex = 0; rowIndex < self.groupedColumns.length; rowIndex++) {\n const groups = self.groupedColumns[rowIndex];\n for (let groupIndex = 0; groupIndex < groups.length; groupIndex++) {\n const group = groups[groupIndex];\n if (group.collapsed) result.push(group);\n }\n }\n return result;\n };\n self.getCollapsedRowGroups = function () {\n const result = [];\n for (let rowIndex = 0; rowIndex < self.groupedRows.length; rowIndex++) {\n const groups = self.groupedRows[rowIndex];\n for (let groupIndex = 0; groupIndex < groups.length; groupIndex++) {\n const group = groups[groupIndex];\n if (group.collapsed) result.push(group);\n }\n }\n return result;\n };\n /**\n * Toggle the collapse status of a group (expanded/collapsed)\n * @param {{type:string,from:number,to:number}} group\n */\n self.toggleGroup = function (group) {\n if (group.type === 'c') {\n const { from, to } = group;\n /** @type {{from:number,to:number,collapsed:boolean}} */\n let matchedGroup;\n /** @type {Array<Array<{from:number,to:number,collapsed:boolean}>>} */\n const allGroups = self.groupedColumns;\n for (let i = 0; i < allGroups.length; i++) {\n const groups = allGroups[i];\n for (let gi = 0; gi < groups.length; gi++) {\n const group = groups[gi];\n if (group.from === from && group.to === to) {\n matchedGroup = group;\n break;\n }\n }\n if (matchedGroup) break;\n }\n if (!matchedGroup) return;\n const nextCollapsed = !matchedGroup.collapsed;\n matchedGroup.collapsed = nextCollapsed;\n return true;\n }\n if (group.type === 'r') {\n const { from, to } = group;\n /** @type {{from:number,to:number,collapsed:boolean}} */\n let matchedGroup;\n /** @type {Array<Array<{from:number,to:number,collapsed:boolean}>>} */\n const allGroups = self.groupedRows;\n for (let i = 0; i < allGroups.length; i++) {\n const groups = allGroups[i];\n for (let gi = 0; gi < groups.length; gi++) {\n const group = groups[gi];\n if (group.from === from && group.to === to) {\n matchedGroup = group;\n break;\n }\n }\n if (matchedGroup) break;\n }\n if (!matchedGroup) return;\n const nextCollapsed = !matchedGroup.collapsed;\n matchedGroup.collapsed = nextCollapsed;\n return true;\n }\n return false;\n };\n self.isNewGroupRangeValid = function (groupsArray, from, to) {\n for (let i = 0; i < groupsArray.length; i++) {\n const groups = groupsArray[i];\n for (let gIndex = 0; gIndex < groups.length; gIndex++) {\n const group = groups[gIndex];\n if (from === group.to + 1) return false;\n if (from > group.to) continue;\n\n if (from === group.from) {\n if (to === group.to) return false;\n if (to > group.to) return true;\n break; // check smaller range\n }\n if (from > group.from) {\n if (to > group.to) return false;\n break; // check smaller range\n }\n if (to < group.to) return false;\n return true;\n }\n }\n return true;\n };\n self.getColumnHeaderCellHeight = function () {\n if (!self.attributes.showColumnHeaders) {\n return 0;\n }\n return (\n (self.sizes.rows[-1] || self.style.columnHeaderCellHeight) * self.scale\n );\n };\n self.getRowHeaderCellWidth = function () {\n if (!self.attributes.showRowHeaders) {\n return 0;\n }\n return (\n (self.sizes.columns[-1] || self.style.rowHeaderCellWidth) * self.scale\n );\n };\n self.setStorageData = function () {\n if (!self.attributes.saveAppearance || !self.attributes.name) {\n return;\n }\n var visibility = {};\n self.getSchema().forEach(function (column) {\n visibility[column.name] = !column.hidden;\n });\n localStorage.setItem(\n self.storageName + '-' + self.attributes.name,\n JSON.stringify({\n sizes: {\n rows: self.sizes.rows,\n columns: self.sizes.columns,\n },\n orders: {\n rows: self.orders.rows,\n columns: self.orders.columns,\n },\n orderBy: self.orderBy,\n orderDirection: self.orderDirection,\n visibility: visibility,\n }),\n );\n };\n self.getSchema = function () {\n return self.schema || self.tempSchema || [];\n };\n function fillArray(low, high) {\n var i = [],\n x;\n for (x = low; x <= high; x += 1) {\n i[x] = x;\n }\n return i;\n }\n self.createColumnOrders = function () {\n var s = self.getSchema();\n self.orders.columns = fillArray(0, s.length - 1);\n };\n self.createRowOrders = function () {\n self.orders.rows = fillArray(0, self.originalData.length - 1);\n };\n self.fitSelectedColumns = function (width) {\n const selectedColumns = self.selections[0];\n const schema = self.getSchema();\n\n for (const selectedColumn of selectedColumns) {\n // Make sure the column is not the row header and that the whole column has in fact been selected.\n if (selectedColumn >= 0 && self.isColumnSelected(selectedColumn)) {\n if (isNaN(width)) {\n const column = schema[self.orders.columns[selectedColumn]];\n self.fitColumnToValues(column.name);\n } else {\n self.sizes.columns[selectedColumn] = width;\n self.dispatchEvent('resizecolumn', {\n x: width,\n y: self.resizingStartingHeight,\n draggingItem: self.currentCell,\n });\n }\n }\n }\n };\n self.getVisibleSchema = function () {\n return self.getSchema().filter(function (col) {\n return !col.hidden;\n });\n };\n self.applyDefaultValue = function (row, header, rowIndex) {\n var d = header.defaultValue || '';\n if (typeof d === 'function') {\n d = d.apply(self.intf, [header, rowIndex]);\n }\n row[header.name] = d;\n };\n self.createNewRowData = function () {\n self.newRow = {};\n\n // The third argument of applyDefaultValue is the row index\n // of the row for which to apply the default value. In this\n // case, we're creating a new row but not yet appending it\n // to self.originalData, so no row index exists\n const newRowIndex = undefined;\n\n self.getSchema().forEach(function forEachHeader(header) {\n self.applyDefaultValue(self.newRow, header, newRowIndex);\n });\n };\n self.getSchemaNameHash = function (key) {\n var n = 0;\n while (self.schemaHashes[key]) {\n n += 1;\n key = key + n;\n }\n return key;\n };\n self.filter = function (type) {\n var f = self.filters[type];\n if (!f && type !== undefined) {\n console.warn(\n 'Cannot find filter for type %s, falling back to substring match.',\n type,\n );\n f = self.filters.string;\n }\n return f;\n };\n self.hasActiveFilters = function () {\n return self.columnFilters && Object.keys(self.columnFilters).length > 0;\n };\n self.hasCollapsedRowGroup = function () {\n for (let i = 0; i < self.groupedRows.length; i++) {\n const groups = self.groupedRows[i];\n for (let j = 0; j < groups.length; j++) {\n const g = groups[j];\n if (g.collapsed) return true;\n }\n }\n return false;\n };\n self.getFilteredAndSortedViewData = function (originalData) {\n // We make a copy of originalData here in order be able to\n // filter and sort rows without modifying the original array.\n // Each row is turned into a (row, rowIndex) tuple\n // so that when we apply filters, we can refer back to the\n // row's original row number in originalData. This becomes\n // useful when emitting cell events.\n let newViewData = originalData.map((row, originalRowIndex) => [\n row,\n originalRowIndex,\n ]);\n\n // Remove hidden rows here. So we can keep the bound indexes correct\n if (self.hiddenRowRanges.length > 0) {\n const ranges = self.hiddenRowRanges.sort((a, b) => b[1] - a[1]);\n for (let i = 0; i < ranges.length; i++) {\n const [beginRowIndex, endRowIndex] = ranges[i];\n const countOfRows = endRowIndex - beginRowIndex + 1;\n newViewData.splice(beginRowIndex, countOfRows);\n }\n }\n\n // Apply filtering\n for (const [headerName, filterText] of Object.entries(self.columnFilters)) {\n const header = self.getHeaderByName(headerName);\n\n if (!header) {\n continue;\n }\n\n const currentFilterFunction =\n header.filter || self.filter(header.type || 'string');\n\n newViewData = newViewData.filter(function ([row, originalRowIndex]) {\n if (\n self.attributes.allowFreezingRows &&\n !self.attributes.filterFrozenRows &&\n originalRowIndex < self.frozenRow\n )\n return true;\n\n return currentFilterFunction(row[headerName], filterText);\n });\n }\n\n //#region Hide rows from collapsed group\n /** @type {number[][]} */\n let collapsedGroups = [];\n for (let i = 0; i < self.groupedRows.length; i++) {\n const rows = self.groupedRows[i];\n for (let j = 0; j < rows.length; j++) {\n const r = rows[j];\n if (!r.collapsed) continue;\n collapsedGroups.push([r.from, r.to]);\n }\n }\n if (collapsedGroups.length > 0) {\n //#region merge groups\n collapsedGroups.sort((a, b) => a[0] - b[0]);\n let newLen = 0;\n const len = collapsedGroups.length;\n for (let i = 0; i < len; i++) {\n const r = collapsedGroups[i];\n if (i === len - 1) {\n collapsedGroups[newLen++] = r;\n break;\n }\n const to = r[1];\n const [from2, to2] = collapsedGroups[i + 1];\n if (from2 > to + 1) {\n collapsedGroups[newLen++] = r;\n continue;\n }\n collapsedGroups[i + 1] = r;\n if (to2 > to) collapsedGroups[i + 1][1] = to2;\n }\n collapsedGroups = collapsedGroups.slice(0, newLen);\n //#endregion merge groups\n\n //#region omit rows by groups\n let g = collapsedGroups.shift();\n for (let start = 0; start < newViewData.length; start++) {\n const it = newViewData[start][1];\n if (it < g[0]) continue;\n let end = start + 1;\n for (; end < newViewData.length; end++) {\n const it2 = newViewData[end][1];\n if (it2 > g[1]) break;\n }\n newViewData.splice(start, end - start);\n g = collapsedGroups.shift();\n if (!g) break;\n start--;\n }\n //#endregion omit rows by groups\n }\n //#endregion Hide rows from collapsed group\n\n // Apply sorting\n for (const column of self.orderings.columns) {\n const sortFn = column.sortFunction(column.orderBy, column.orderDirection);\n\n newViewData.sort(([rowA], [rowB, rowIndexB]) => {\n if (\n self.attributes.allowFreezingRows &&\n !self.attributes.sortFrozenRows &&\n rowIndexB < self.frozenRow\n )\n return 0;\n return sortFn(rowA, rowB);\n });\n }\n\n return {\n viewData: newViewData.map(([row]) => row),\n boundRowIndexMap: new Map(\n newViewData.map(([_row, originalRowIndex], viewRowIndex) => [\n viewRowIndex,\n originalRowIndex,\n ]),\n ),\n };\n };\n self.refresh = function () {\n const { viewData, boundRowIndexMap } = self.getFilteredAndSortedViewData(\n self.originalData,\n );\n\n self.viewData = viewData;\n self.boundRowIndexMap = boundRowIndexMap;\n\n self.resize();\n self.draw(true);\n };\n self.getBestGuessDataType = function (columnName, data) {\n var t,\n x,\n l = data.length;\n for (x = 0; x < l; x += 1) {\n if (\n data[x] !== undefined &&\n data[x] !== null &&\n [null, undefined].indexOf(data[x][columnName]) !== -1\n ) {\n t = typeof data[x];\n return t === 'object' ? 'string' : t;\n }\n }\n return 'string';\n };\n self.drawChildGrids = function () {\n Object.keys(self.childGrids).forEach(function (gridKey) {\n self.childGrids[gridKey].draw();\n });\n };\n self.resizeChildGrids = function () {\n Object.keys(self.childGrids).forEach(function (gridKey) {\n self.childGrids[gridKey].resize();\n });\n };\n self.autoScrollZone = function (e, x, y, ctrl) {\n var setTimer,\n rowHeaderCellWidth = self.getRowHeaderCellWidth(),\n columnHeaderCellHeight = self.getColumnHeaderCellHeight();\n if (x !== -1) {\n if (x > self.width - self.attributes.selectionScrollZone) {\n self.scrollBox.scrollLeft += self.attributes.selectionScrollIncrement;\n setTimer = true;\n }\n if (x - self.attributes.selectionScrollZone - rowHeaderCellWidth < 0) {\n self.scrollBox.scrollLeft -= self.attributes.selectionScrollIncrement;\n setTimer = true;\n }\n }\n if (y !== -1) {\n if (y > self.height - self.attributes.selectionScrollZone) {\n self.scrollBox.scrollTop += self.attributes.selectionScrollIncrement;\n setTimer = true;\n }\n if (\n y - self.attributes.selectionScrollZone - columnHeaderCellHeight <\n 0\n ) {\n self.scrollBox.scrollTop -= self.attributes.selectionScrollIncrement;\n setTimer = true;\n }\n }\n if (\n setTimer &&\n !ctrl &&\n self.currentCell &&\n self.currentCell.columnIndex !== -1\n ) {\n self.scrollTimer = setTimeout(\n self.mousemove,\n self.attributes.scrollRepeatRate,\n e,\n );\n }\n };\n self.validateColumn = function (c, s) {\n if (!c.name) {\n throw new Error('A column must contain at least a name.');\n }\n if (\n s.filter(function (i) {\n return i.name === c.name;\n }).length > 0\n ) {\n throw new Error(\n 'A column with the name ' +\n c.name +\n ' already exists and cannot be added again.',\n );\n }\n return true;\n };\n self.setDefaults = function (obj1, obj2, key, def) {\n obj1[key] = obj2[key] === undefined ? def : obj2[key];\n };\n self.setAttributes = function () {\n self.defaults.attributes.forEach(function eachAttribute(i) {\n self.setDefaults(self.attributes, self.args, i[0], i[1]);\n });\n };\n self.setStyle = function () {\n self.defaults.styles.forEach(function eachStyle(i) {\n self.setDefaults(self.style, self.args.style || {}, i[0], i[1]);\n });\n };\n self.autosize = function (colName) {\n self.getVisibleSchema().forEach(function (col, colIndex) {\n if (col.name === colName || colName === undefined) {\n self.sizes.columns[colIndex] = Math.max(\n self.findColumnMaxTextLength(col.name),\n self.style.minColumnWidth,\n );\n }\n });\n self.sizes.columns[-1] = self.findColumnMaxTextLength('cornerCell');\n };\n self.dispose = function () {\n if (!self.isChildGrid && self.canvas && self.canvas.parentNode) {\n self.canvas.parentNode.removeChild(self.canvas);\n }\n if (!self.isChildGrid) {\n document.body.removeChild(self.controlInput);\n }\n self.eventParent.removeEventListener('mouseup', self.mouseup, false);\n self.eventParent.removeEventListener('mousedown', self.mousedown, false);\n self.eventParent.removeEventListener('dblclick', self.dblclick, false);\n self.eventParent.removeEventListener('click', self.click, false);\n self.eventParent.removeEventListener('mousemove', self.mousemove);\n self.eventParent.removeEventListener('wheel', self.scrollWheel, false);\n self.canvas.removeEventListener('contextmenu', self.contextmenu, false);\n self.canvas.removeEventListener('copy', self.copy);\n self.controlInput.removeEventListener('copy', self.copy);\n self.controlInput.removeEventListener('cut', self.cut);\n self.controlInput.removeEventListener('paste', self.paste);\n self.controlInput.removeEventListener('keypress', self.keypress, false);\n self.controlInput.removeEventListener('keyup', self.keyup, false);\n self.controlInput.removeEventListener('keydown', self.keydown, false);\n document.body.removeEventListener('mousemove', self.mousemove);\n window.removeEventListener('resize', self.resize);\n if (self.observer && self.observer.disconnect) {\n self.observer.disconnect();\n }\n };\n self.tryLoadStoredSettings = function () {\n var s;\n self.reloadStoredValues();\n if (\n self.storedSettings &&\n typeof self.storedSettings.orders === 'object' &&\n self.storedSettings.orders !== null\n ) {\n if (\n self.storedSettings.orders.rows.length >= (self.viewData || []).length\n ) {\n self.orders.rows = self.storedSettings.orders.rows;\n }\n s = self.getSchema();\n if (self.storedSettings.orders.columns.length === s.length) {\n self.orders.columns = self.storedSettings.orders.columns;\n }\n self.orderBy =\n self.storedSettings.orderBy === undefined\n ? s[0].name\n : self.storedSettings.orderBy;\n self.orderDirection =\n self.storedSettings.orderDirection === undefined\n ? 'asc'\n : self.storedSettings.orderDirection;\n if (\n self.storedSettings.orderBy !== undefined &&\n self.getHeaderByName(self.orderBy) &&\n self.orderDirection\n ) {\n self.order(self.orderBy, self.orderDirection);\n }\n }\n };\n self.toggleCollapseTree = function (rowIndex, columnIndex, type) {\n let tempData = [];\n let collapsedCount = 0;\n if (\n columnIndex == self.cellTree.rowTreeColIndex &&\n (rowIndex > 0 || (rowIndex == 0 && self.cellTree.rows[0].icon))\n ) {\n let ctr = self.cellTree.rows;\n switch (type) {\n case 'Expand':\n ctr[rowIndex].expand = true;\n self.cellTree.origin.rows[ctr[rowIndex].index].expand = true;\n break;\n\n case 'Collapse':\n ctr[rowIndex].expand = false;\n self.cellTree.origin.rows[ctr[rowIndex].index].expand = false;\n break;\n\n default:\n ctr[rowIndex].expand = !ctr[rowIndex].expand;\n self.cellTree.origin.rows[ctr[rowIndex].index].expand =\n ctr[rowIndex].expand;\n }\n for (\n let ri = ctr[rowIndex].index + 1;\n ri <= ctr[rowIndex].lastchild;\n ri++\n ) {\n let orTree = self.cellTree.origin.rows[ri];\n if (ctr[rowIndex].expand) {\n orTree.hide = false;\n if (orTree.icon && !orTree.expand) ri = orTree.lastchild;\n } else {\n orTree.hide = true;\n }\n }\n } else if (self.cellTree.columns[rowIndex]) {\n let ctc = self.cellTree.columns[rowIndex];\n\n switch (type) {\n case 'Expand':\n ctc[columnIndex].expand = true;\n break;\n\n case 'Collapse':\n ctc[columnIndex].expand = false;\n break;\n\n default:\n ctc[columnIndex].expand = !ctc[columnIndex].expand;\n }\n for (\n let ci = ctc[columnIndex].index + 1;\n ci <= ctc[columnIndex].lastchild;\n ci++\n ) {\n if (ctc[columnIndex].expand)\n self.cellTree.tempSchema[ci].hidden = false;\n else self.cellTree.tempSchema[ci].hidden = true;\n }\n let rc = 0,\n _ri;\n\n if (ctc[columnIndex].expand) {\n while (rc < ctc[columnIndex].child) {\n _ri = rowIndex + rc + 1;\n\n for (\n let _ci = ctc[columnIndex].index;\n _ci <= ctc[columnIndex].lastchild;\n _ci++\n ) {\n if (\n self.cellTree.origin.columns[_ri] &&\n self.cellTree.origin.columns[_ri][_ci].icon &&\n !self.cellTree.origin.columns[_ri][_ci].expand\n ) {\n for (\n let si = _ci + 1;\n si <= self.cellTree.origin.columns[_ri][_ci].lastchild;\n si++\n ) {\n self.cellTree.tempSchema[si].hidden = true;\n }\n }\n }\n\n rc++;\n }\n }\n }\n let otherData = {};\n let collapsed = [];\n self.cellTree.rows = [];\n self.cellTree.columns = {};\n for (let k in self.cellTree.origin.rows) {\n let tempRow = [];\n let tree = self.cellTree.origin.rows[k];\n if (!tree.hide) {\n let colTrees = [];\n let collapsedColCount = 0;\n if (k < self.cellTree.columnTreeRowStartIndex) {\n tempData.push(self.originalData[k]);\n } else {\n if (k > self.cellTree.columnTreeRowEndIndex) {\n otherData[k] = self.viewData[k];\n collapsedCount++;\n } else {\n for (let l = 0; l < self.originalData[k].length; l++) {\n if (!self.cellTree.tempSchema[l].hidden) {\n if (l < self.cellTree.rowTreeColIndex) {\n if (!Object.prototype.hasOwnProperty.call(otherData, k))\n otherData[k] = [];\n otherData[k].push(self.viewData[k][l]);\n }\n tempRow.push(self.originalData[k][l]);\n if (\n Object.prototype.hasOwnProperty.call(\n self.cellTree.origin.columns,\n k,\n )\n )\n colTrees.push(self.cellTree.origin.columns[k][l]);\n } else collapsedColCount++;\n }\n tempRow.push(\n ...Array(collapsedColCount)\n .fill()\n .map(function () {\n return '';\n }),\n );\n if (colTrees.length) {\n colTrees.push(\n ...Array(collapsedColCount)\n .fill()\n .map(() => {\n return {};\n }),\n );\n self.cellTree.columns[k] = colTrees;\n }\n tempData.push(tempRow);\n }\n }\n self.cellTree.rows.push(tree);\n } else {\n for (let l = 0; l < self.cellTree.rowTreeColIndex; l++) {\n tempRow.push(self.viewData[k][l]);\n }\n otherData[k] = tempRow;\n collapsed.push(\n Array(self.viewData[0].length)\n .fill()\n .map(function () {\n return '';\n }),\n );\n collapsedCount++;\n }\n }\n if (collapsedCount) {\n self.cellTree.rows.push(\n ...Array(collapsedCount)\n .fill()\n .map((u, index) => {\n return { index: self.cellTree.rows.length + index };\n }),\n );\n tempData.push(...collapsed);\n }\n for (let k in otherData) {\n if (k > self.cellTree.columnTreeRowEndIndex) tempData[k] = otherData[k];\n else\n for (let l in otherData[k]) {\n tempData[k][l] = otherData[k][l];\n }\n }\n self.viewData = tempData;\n };\n self.cellTreeExpandCollapse = function (rowIndex, columnIndex, type) {\n if (\n columnIndex == self.cellTree.rowTreeColIndex &&\n (rowIndex > 0 || (rowIndex == 0 && self.cellTree.rows[0].icon))\n ) {\n const ctr = self.cellTree.rows;\n switch (type) {\n case 'Expand':\n ctr[rowIndex].expand = true;\n break;\n case 'Collapse':\n ctr[rowIndex].expand = false;\n break;\n default:\n ctr[rowIndex].expand = !ctr[rowIndex].expand;\n }\n for (let ri = rowIndex + 1; ri <= ctr[rowIndex].lastchild; ri++) {\n if (ctr[rowIndex].expand) {\n ctr[ri].hide = false;\n if (ctr[ri].icon && !ctr[ri].expand) ri = ctr[ri].lastchild;\n } else {\n ctr[ri].hide = true;\n }\n }\n } else if (self.cellTree.columns[rowIndex]) {\n const ctc = self.cellTree.columns[rowIndex];\n switch (type) {\n case 'Expand':\n ctc[columnIndex].expand = true;\n break;\n case 'Collapse':\n ctc[columnIndex].expand = false;\n break;\n default:\n ctc[columnIndex].expand = !ctc[columnIndex].expand;\n }\n\n for (let ci = columnIndex + 1; ci <= ctc[columnIndex].lastchild; ci++) {\n if (ctc[columnIndex].expand) self.tempSchema[ci].hidden = false;\n else self.tempSchema[ci].hidden = true;\n }\n\n let rc = 0,\n ri;\n if (ctc[columnIndex].expand) {\n while (rc < ctc[columnIndex].child) {\n ri = rowIndex + rc + 1;\n for (let ci = columnIndex; ci <= ctc[columnIndex].lastchild; ci++) {\n if (\n self.cellTree.columns[ri] &&\n self.cellTree.columns[ri][ci].icon &&\n !self.cellTree.columns[ri][ci].expand\n ) {\n for (\n let si = ci + 1;\n si <= self.cellTree.columns[ri][ci].lastchild;\n si++\n )\n self.tempSchema[si].hidden = true;\n }\n }\n rc++;\n }\n }\n }\n };\n\n self.initCellTreeSettings = function () {\n if (self.viewData === undefined) return;\n if (self.attributes.rowTree.length > 0 && self.viewData.length > 0) {\n self.cellTree.rows = Array(self.viewData.length)\n .fill()\n .map((u, index) => ({ index: index }));\n self.cellTree.rowTreeColIndex = self.attributes.rowTreeColIndex;\n let invalidRowTree = false;\n for (let rt of self.attributes.rowTree) {\n if (self.cellTree.rows.length <= rt.end) {\n invalidRowTree = true;\n break;\n }\n\n for (let ri = rt.begin; ri <= rt.end; ri++) {\n if (ri == rt.begin) {\n self.cellTree.rows[ri].icon = true;\n self.cellTree.rows[ri].lastchild = rt.end;\n self.cellTree.rows[ri].expand = true;\n if (!self.cellTree.rows[ri].parentCount)\n self.cellTree.rows[ri].parentCount = 0;\n } else {\n self.cellTree.rows[ri].hide = false;\n self.cellTree.rows[ri].parentIndex = rt.begin;\n if (self.cellTree.rows[ri] && self.cellTree.rows[ri].parentCount)\n self.cellTree.rows[ri].parentCount += 1;\n else self.cellTree.rows[ri].parentCount = 1;\n }\n }\n }\n if (invalidRowTree) self.cellTree.rows = {};\n }\n if (self.attributes.columnTree.length > 0 && self.viewData.length > 0) {\n self.cellTree.columnTreeRowStartIndex =\n self.attributes.columnTreeRowStartIndex;\n self.cellTree.columnTreeRowEndIndex =\n self.attributes.columnTreeRowEndIndex;\n let dataColumnLength = Object.keys(self.viewData[0]).length;\n let invalidColumnTree = false;\n for (let ct of self.attributes.columnTree) {\n if (dataColumnLength <= ct.end) {\n invalidColumnTree = true;\n break;\n }\n\n if (!self.cellTree.columns[ct.row])\n self.cellTree.columns[ct.row] = Array(dataColumnLength)\n .fill()\n .map((u, index) => ({ index: index }));\n\n for (let i = ct.begin; i <= ct.end; i++) {\n const ctc = self.cellTree.columns[ct.row][i];\n if (i == ct.begin) {\n ctc.icon = true;\n ctc.lastchild = ct.end;\n ctc.length = ct.end - ct.begin;\n ctc.expand = true;\n if (ct.child) ctc.child = ct.child;\n else ctc.child = 0;\n }\n }\n }\n self.cellTree.tempSchema = Array(dataColumnLength)\n .fill()\n .map(function () {\n return { hidden: false };\n });\n if (invalidColumnTree) self.cellTree.columns = {};\n }\n self.cellTree.origin = {\n rows: self.cellTree.rows,\n columns: self.cellTree.columns,\n };\n };\n\n self.unhideColumns = function (orderIndex0, orderIndex1) {\n const orders = self.orders.columns;\n const schema = self.getSchema();\n for (let i = orderIndex0; i <= orderIndex1; i++) {\n const columnIndex = orders[i];\n const s = schema[columnIndex];\n if (s && s.hidden) s.hidden = false;\n }\n self.refresh();\n };\n\n self.getDomRoot = function () {\n return self.shadowRoot ? self.shadowRoot.host : self.parentNode;\n };\n self.getFontName = function (fontStyle) {\n return fontStyle.replace(/\\d+\\.?\\d*px/, '');\n };\n self.getFontHeight = function (fontStyle) {\n return parseFloat(fontStyle, 10);\n };\n self.parseStyleValue = function (key) {\n if (/Font/.test(key)) {\n self.style[key + 'Height'] = self.getFontHeight(self.style[key]);\n self.style[key + 'Name'] = self.getFontName(self.style[key]);\n return;\n }\n // when inheriting styles from already instantiated grids, don't parse already parsed values.\n if (\n key === 'moveOverlayBorderSegments' &&\n typeof self.style[key] === 'string'\n ) {\n self.style[key] = self.style[key].split(',').map(function (i) {\n return parseInt(i, 10);\n });\n }\n };\n self.initProp = function (propName) {\n if (!self.args[propName]) {\n return;\n }\n Object.keys(self.args[propName]).forEach(function (key) {\n self[propName][key] = self.args[propName][key];\n });\n };\n self.getStyleProperty = function (key) {\n if (self.styleKeys.indexOf(key) === -1) {\n return self.parentNodeStyle[key];\n }\n return self.style[key];\n };\n self.setStyleProperty = function (key, value, supressDrawAndEvent) {\n var isDim =\n [\n 'height',\n 'width',\n 'minHeight',\n 'minWidth',\n 'maxHeight',\n 'maxWidth',\n ].indexOf(key) !== -1;\n if (self.styleKeys.indexOf(key) === -1) {\n self.parentNodeStyle[key] = value;\n } else {\n if (/-/.test(key)) {\n key = self.dehyphenateProperty(key);\n }\n self.style[key] = value;\n self.parseStyleValue(key);\n }\n if (isDim) {\n self.resize();\n }\n if (!supressDrawAndEvent) {\n self.draw(true);\n self.dispatchEvent('stylechanged', { name: 'style', value: value });\n }\n };\n self.reloadStoredValues = function () {\n if (self.attributes.name && self.attributes.saveAppearance) {\n try {\n self.storedSettings = localStorage.getItem(\n self.storageName + '-' + self.attributes.name,\n );\n } catch (e) {\n console.warn('Error loading stored values. ' + e.message);\n self.storedSettings = undefined;\n }\n if (self.storedSettings) {\n try {\n self.storedSettings = JSON.parse(self.storedSettings);\n } catch (e) {\n console.warn('could not read settings from localStore', e);\n self.storedSettings = undefined;\n }\n }\n if (self.storedSettings) {\n if (\n typeof self.storedSettings.sizes === 'object' &&\n self.storedSettings.sizes !== null\n ) {\n self.sizes.rows = self.storedSettings.sizes.rows;\n self.sizes.columns = self.storedSettings.sizes.columns;\n ['trees', 'columns', 'rows'].forEach(function (i) {\n if (!self.sizes[i]) {\n self.sizes[i] = {};\n }\n });\n }\n if (typeof self.storedSettings.visibility === 'object') {\n self.getSchema().forEach(function (column) {\n if (\n self.storedSettings.visibility &&\n self.storedSettings.visibility[column.name] !== undefined\n ) {\n column.hidden = !self.storedSettings.visibility[column.name];\n }\n });\n }\n }\n }\n };\n self.init = function () {\n if (self.initialized) {\n return;\n }\n function addStyleKeyIfNoneExists(key) {\n if (self.styleKeys.indexOf(key) === -1) {\n self.styleKeys.push(key);\n }\n }\n var publicStyleKeyIntf = {};\n self.setAttributes();\n self.setStyle();\n self.initScrollBox();\n self.setDom();\n self.nodeType = 'canvas-datagrid';\n self.ie = /Trident/.test(window.navigator.userAgent);\n self.edge = /Edge/.test(window.navigator.userAgent);\n self.webKit = /WebKit/.test(window.navigator.userAgent);\n self.moz = /Gecko/.test(window.navigator.userAgent);\n self.mobile = /Mobile/i.test(window.navigator.userAgent);\n self.blankValues = [undefined, null, ''];\n self.cursorGrab = 'grab';\n self.cursorGrabing = 'grabbing';\n self.cursorGrab = self.webKit ? '-webkit-grab' : self.cursorGrab;\n self.cursorGrabing = self.moz ? '-webkit-grabbing' : self.cursorGrabbing;\n self.pointerLockPosition = { x: 0, y: 0 };\n Object.keys(self.style).forEach(self.parseStyleValue);\n self.intf.moveSelection = self.moveSelection;\n self.intf.deleteSelectedData = self.deleteSelectedData;\n self.intf.moveTo = self.moveTo;\n self.intf.addEventListener = self.addEventListener;\n self.intf.removeEventListener = self.removeEventListener;\n self.intf.dispatchEvent = self.dispatchEvent;\n /**\n * Releases grid resources and removes grid elements.\n * @memberof canvasDatagrid\n * @name dispose\n * @method\n */\n self.intf.dispose = self.dispose;\n /**\n * Appends the grid to another element later. Not implemented.\n * @memberof canvasDatagrid\n * @name appendTo\n * @method\n * @param {number} el The element to append the grid to.\n */\n self.intf.appendTo = self.appendTo;\n self.intf.getVisibleCellByIndex = self.getVisibleCellByIndex;\n self.intf.filters = self.filters;\n self.intf.sorters = self.sorters;\n self.intf.autosize = self.autosize;\n self.intf.beginEditAt = self.beginEditAt;\n self.intf.endEdit = self.endEdit;\n self.intf.setActiveCell = self.setActiveCell;\n self.intf.forEachSelectedCell = self.forEachSelectedCell;\n self.intf.scrollIntoView = self.scrollIntoView;\n self.intf.clearChangeLog = self.clearChangeLog;\n self.intf.gotoCell = self.gotoCell;\n self.intf.gotoRow = self.gotoRow;\n self.intf.addButton = self.addButton;\n self.intf.toggleCellCollapseTree = self.toggleCellCollapseTree;\n self.intf.expandCollapseCellTree = self.expandCollapseCellTree;\n self.intf.getHeaderByName = self.getHeaderByName;\n self.intf.findColumnScrollLeft = self.findColumnScrollLeft;\n self.intf.findRowScrollTop = self.findRowScrollTop;\n self.intf.fitColumnToValues = self.fitColumnToValues;\n self.intf.findColumnMaxTextLength = self.findColumnMaxTextLength;\n self.intf.disposeContextMenu = self.disposeContextMenu;\n self.intf.getCellAt = self.getCellAt;\n self.intf.groupColumns = self.groupColumns;\n self.intf.groupRows = self.groupRows;\n self.intf.removeGroupColumns = self.removeGroupColumns;\n self.intf.removeGroupRows = self.removeGroupRows;\n self.intf.toggleGroupColumns = self.toggleGroupColumns;\n self.intf.toggleGroupRows = self.toggleGroupRows;\n self.intf.getGroupsColumnBelongsTo = self.getGroupsColumnBelongsTo;\n self.intf.getGroupsRowBelongsTo = self.getGroupsRowBelongsTo;\n self.intf.isCellVisible = self.isCellVisible;\n self.intf.isRowVisible = self.isRowVisible;\n self.intf.isColumnVisible = self.isColumnVisible;\n self.intf.order = self.order;\n self.intf.draw = self.draw;\n self.intf.refresh = self.refresh;\n self.intf.isComponent = self.isComponent;\n self.intf.selectArea = self.selectArea;\n self.intf.clipElement = self.clipElement;\n self.intf.getSchemaFromData = self.getSchemaFromData;\n self.intf.setFilter = self.setFilter;\n self.intf.selectRow = self.selectRow;\n self.intf.parentGrid = self.parentGrid;\n self.intf.toggleTree = self.toggleTree;\n self.intf.expandTree = self.expandTree;\n self.intf.collapseTree = self.collapseTree;\n self.intf.canvas = self.canvas;\n self.intf.context = self.ctx;\n self.intf.insertRow = self.insertRow;\n self.intf.deleteRow = self.deleteRow;\n self.intf.addRow = self.addRow;\n self.intf.insertColumn = self.insertColumn;\n self.intf.deleteColumn = self.deleteColumn;\n self.intf.addColumn = self.addColumn;\n self.intf.getClippingRect = self.getClippingRect;\n self.intf.setRowHeight = self.setRowHeight;\n self.intf.setColumnWidth = self.setColumnWidth;\n self.intf.resetColumnWidths = self.resetColumnWidths;\n self.intf.resetRowHeights = self.resetRowHeights;\n self.intf.resize = self.resize;\n self.intf.selectColumn = self.selectColumn;\n self.intf.selectRow = self.selectRow;\n self.intf.selectAll = self.selectAll;\n self.intf.selectNone = self.selectNone;\n self.intf.drawChildGrids = self.drawChildGrids;\n self.intf.assertPxColor = self.assertPxColor;\n self.intf.clearPxColorAssertions = self.clearPxColorAssertions;\n self.intf.integerToAlpha = self.integerToAlpha;\n self.intf.copy = self.copy;\n self.intf.cut = self.cut;\n self.intf.paste = self.paste;\n self.intf.setStyleProperty = self.setStyleProperty;\n self.intf.hideColumns = self.hideColumns;\n self.intf.hideRows = self.hideRows;\n self.intf.unhideRows = self.unhideRows;\n Object.defineProperty(self.intf, 'defaults', {\n get: function () {\n return {\n styles: self.defaults.styles.reduce(function (a, i) {\n a[i[0]] = i[1];\n return a;\n }, {}),\n attributes: self.defaults.attributes.reduce(function (a, i) {\n a[i[0]] = i[1];\n return a;\n }, {}),\n };\n },\n });\n self.styleKeys = Object.keys(self.intf.defaults.styles);\n self.styleKeys\n .map(function (i) {\n return self.hyphenateProperty(i, false);\n })\n .forEach(addStyleKeyIfNoneExists);\n self.styleKeys\n .map(function (i) {\n return self.hyphenateProperty(i, true);\n })\n .forEach(addStyleKeyIfNoneExists);\n self.DOMStyles = window.getComputedStyle(document.body, null);\n self.styleKeys.concat(Object.keys(self.DOMStyles)).forEach(function (key) {\n // unless this line is here, Object.keys() will not work on <instance>.style\n publicStyleKeyIntf[key] = undefined;\n Object.defineProperty(publicStyleKeyIntf, key, {\n get: function () {\n return self.getStyleProperty(key);\n },\n set: function (value) {\n if (self.initialized) {\n self.appliedInlineStyles[key] = value;\n }\n self.setStyleProperty(key, value);\n },\n });\n });\n Object.defineProperty(self.intf, 'shadowRoot', {\n get: function () {\n return self.shadowRoot;\n },\n });\n Object.defineProperty(self.intf, 'activeCell', {\n get: function () {\n return self.activeCell;\n },\n });\n Object.defineProperty(self.intf, 'hasFocus', {\n get: function () {\n return self.hasFocus;\n },\n });\n Object.defineProperty(self.intf, 'hasActiveFilters', {\n get: function () {\n return self.hasActiveFilters();\n },\n });\n Object.defineProperty(self.intf, 'style', {\n get: function () {\n return publicStyleKeyIntf;\n },\n set: function (valueObject) {\n Object.keys(valueObject).forEach(function (key) {\n self.setStyleProperty(key, valueObject[key], true);\n });\n self.draw(true);\n self.dispatchEvent('stylechanged', {\n name: 'style',\n value: valueObject,\n });\n },\n });\n Object.defineProperty(self.intf, 'attributes', { value: {} });\n Object.keys(self.attributes).forEach(function (key) {\n Object.defineProperty(self.intf.attributes, key, {\n get: function () {\n return self.attributes[key];\n },\n set: function (value) {\n self.attributes[key] = value;\n if (key === 'name') {\n self.tryLoadStoredSettings();\n }\n if (\n key === 'rowTree' ||\n key === 'columnTree' ||\n key === 'columnTreeRowEndIndex'\n ) {\n self.initCellTreeSettings();\n }\n self.draw(true);\n self.dispatchEvent('attributechanged', {\n name: key,\n value: value[key],\n });\n },\n });\n });\n self.filters.string = function (value, filterFor) {\n if (filterFor === self.attributes.blanksText) {\n return self.blankValues.includes(\n value == null ? value : String(value).trim(),\n );\n }\n\n value = String(value);\n var filterRegExp,\n regEnd = /\\/(i|g|m)*$/,\n pattern = regEnd.exec(filterFor),\n flags = pattern ? pattern[0].substring(1) : '',\n flagLength = flags.length;\n self.invalidFilterRegEx = undefined;\n if (filterFor.substring(0, 1) === '/' && pattern) {\n try {\n filterRegExp = new RegExp(\n filterFor.substring(1, filterFor.length - (flagLength + 1)),\n flags,\n );\n } catch (e) {\n self.invalidFilterRegEx = e;\n return;\n }\n return filterRegExp.test(value);\n }\n return value.toString\n ? value\n .toString()\n .toLocaleUpperCase()\n .indexOf(filterFor.toLocaleUpperCase()) !== -1\n : false;\n };\n self.filters.number = function (value, filterFor) {\n if (filterFor === self.attributes.blanksText) {\n return self.blankValues.includes(\n value == null ? value : String(value).trim(),\n );\n }\n\n if (!filterFor) {\n return true;\n }\n return value === filterFor;\n };\n ['formatters', 'filters', 'sorters'].forEach(self.initProp);\n self.applyComponentStyle(false, self.intf);\n self.reloadStoredValues();\n if (self.args.data) {\n self.intf.data = self.args.data;\n }\n if (self.intf.innerText || self.intf.textContent) {\n if (self.intf.dataType === 'application/x-canvas-datagrid') {\n self.intf.dataType = 'application/json+x-canvas-datagrid';\n }\n self.intf.data = self.intf.innerText || self.intf.textContent;\n }\n if (self.args.schema) {\n self.intf.schema = self.args.schema;\n }\n if (self.isChildGrid || !self.isComponent) {\n requestAnimationFrame(function () {\n self.resize(true);\n });\n } else {\n self.resize(true);\n }\n self.initialized = true;\n return self;\n };\n /**\n * Removes focus from the grid.\n * @memberof canvasDatagrid\n * @name blur\n * @method\n */\n self.intf.blur = function (e) {\n self.hasFocus = false;\n };\n /**\n * Focuses on the grid.\n * @memberof canvasDatagrid\n * @name focus\n * @method\n */\n self.intf.focus = function () {\n self.hasFocus = true;\n self.controlInput.focus();\n };\n if (self.shadowRoot || self.isChildGrid) {\n Object.defineProperty(self.intf, 'height', {\n get: function () {\n if (self.shadowRoot) {\n return self.shadowRoot.height;\n }\n return self.parentNode.height;\n },\n set: function (value) {\n if (self.shadowRoot) {\n self.shadowRoot.height = value;\n } else {\n self.parentNode.height = value;\n }\n self.resize(true);\n },\n });\n Object.defineProperty(self.intf, 'width', {\n get: function () {\n if (self.shadowRoot) {\n return self.shadowRoot.width;\n }\n return self.parentNode.width;\n },\n set: function (value) {\n if (self.shadowRoot) {\n self.shadowRoot.width = value;\n } else {\n self.parentNode.width = value;\n }\n self.resize(true);\n },\n });\n Object.defineProperty(self.intf, 'parentNode', {\n get: function () {\n return self.parentNode;\n },\n set: function (value) {\n if (!self.isChildGrid) {\n throw new TypeError(\n 'Cannot set property parentNode which has only a getter',\n );\n }\n self.parentNode = value;\n },\n });\n }\n Object.defineProperty(self.intf, 'visibleRowHeights', {\n get: function () {\n return self.visibleRowHeights;\n },\n });\n Object.defineProperty(self.intf, 'openChildren', {\n get: function () {\n return self.openChildren;\n },\n });\n Object.defineProperty(self.intf, 'childGrids', {\n get: function () {\n return Object.keys(self.childGrids).map(function (gridId) {\n return self.childGrids[gridId];\n });\n },\n });\n Object.defineProperty(self.intf, 'isChildGrid', {\n get: function () {\n return self.isChildGrid;\n },\n });\n Object.defineProperty(self, 'cursor', {\n get: function () {\n return self.parentNodeStyle.cursor;\n },\n set: function (value) {\n if (value === 'cell') {\n value = 'default';\n }\n if (self.currentCursor !== value) {\n self.parentNodeStyle.cursor = value;\n self.currentCursor = value;\n }\n },\n });\n Object.defineProperty(self.intf, 'orderDirection', {\n get: function () {\n return self.orderDirection;\n },\n set: function (value) {\n if (value !== 'desc') {\n value = 'asc';\n }\n self.orderDirection = value;\n self.order(self.orderBy, self.orderDirection);\n },\n });\n Object.defineProperty(self.intf, 'orderBy', {\n get: function () {\n return self.orderBy;\n },\n set: function (value) {\n if (\n self.getSchema().find(function (col) {\n return col.name === value;\n }) === undefined\n ) {\n throw new Error('Cannot sort by unknown column name.');\n }\n self.orderBy = value;\n self.order(self.orderBy, self.orderDirection);\n },\n });\n if (self.isComponent) {\n Object.defineProperty(self.intf, 'offsetHeight', {\n get: function () {\n return self.canvas.offsetHeight;\n },\n });\n Object.defineProperty(self.intf, 'offsetWidth', {\n get: function () {\n return self.canvas.offsetWidth;\n },\n });\n }\n Object.defineProperty(self.intf, 'scrollHeight', {\n get: function () {\n return self.scrollBox.scrollHeight;\n },\n });\n Object.defineProperty(self.intf, 'scrollWidth', {\n get: function () {\n return self.scrollBox.scrollWidth;\n },\n });\n Object.defineProperty(self.intf, 'scrollTop', {\n get: function () {\n return self.scrollBox.scrollTop;\n },\n set: function (value) {\n self.scrollBox.scrollTop = value;\n },\n });\n Object.defineProperty(self.intf, 'scrollLeft', {\n get: function () {\n return self.scrollBox.scrollLeft;\n },\n set: function (value) {\n self.scrollBox.scrollLeft = value;\n },\n });\n Object.defineProperty(self.intf, 'sizes', {\n get: function () {\n return self.sizes;\n },\n });\n Object.defineProperty(self.intf, 'parentDOMNode', {\n get: function () {\n return self.parentDOMNode;\n },\n });\n Object.defineProperty(self.intf, 'input', {\n get: function () {\n return self.input;\n },\n });\n Object.defineProperty(self.intf, 'controlInput', {\n get: function () {\n return self.controlInput;\n },\n });\n Object.defineProperty(self.intf, 'currentCell', {\n get: function () {\n return self.currentCell;\n },\n });\n Object.defineProperty(self.intf, 'visibleCells', {\n get: function () {\n return self.visibleCells;\n },\n });\n Object.defineProperty(self.intf, 'visibleRows', {\n get: function () {\n return self.visibleRows;\n },\n });\n Object.defineProperty(self.intf, 'selections', {\n get: function () {\n return self.selections;\n },\n });\n Object.defineProperty(self.intf, 'dragMode', {\n get: function () {\n return self.dragMode;\n },\n });\n Object.defineProperty(self.intf, 'changes', {\n get: function () {\n return self.changes;\n },\n });\n self.intf.formatters = self.formatters;\n Object.defineProperty(self.intf, 'dataType', {\n get: function () {\n return self.dataType;\n },\n set: function (value) {\n if (!self.parsers[value]) {\n throw new Error('No parser for MIME type ' + value);\n }\n self.dataType = value;\n },\n });\n self.eventNames.forEach(function (eventName) {\n Object.defineProperty(self.intf, 'on' + eventName, {\n get: function () {\n return self.componentL1Events[eventName];\n },\n set: function (value) {\n self.events[eventName] = [];\n self.componentL1Events[eventName] = value;\n if (!value) {\n return;\n }\n self.addEventListener(eventName, value);\n },\n });\n });\n Object.defineProperty(self.intf, 'frozenRow', {\n get: function () {\n return self.frozenRow;\n },\n set: function (val) {\n if (isNaN(val)) {\n throw new TypeError('Expected value for frozenRow to be a number.');\n }\n if (self.visibleRows.length < val) {\n throw new RangeError(\n 'Cannot set a value larger than the number of visible rows.',\n );\n }\n self.frozenRow = val;\n },\n });\n Object.defineProperty(self.intf, 'frozenColumn', {\n get: function () {\n return self.frozenColumn;\n },\n set: function (val) {\n if (isNaN(val)) {\n throw new TypeError('Expected value for frozenRow to be a number.');\n }\n if (self.getVisibleSchema().length < val) {\n throw new RangeError(\n 'Cannot set a value larger than the number of visible columns.',\n );\n }\n self.frozenColumn = val;\n },\n });\n Object.defineProperty(self.intf, 'scrollIndexRect', {\n get: function () {\n return {\n top: self.scrollIndexTop,\n right: self.scrollIndexRight,\n bottom: self.scrollIndexBottom,\n left: self.scrollIndexLeft,\n };\n },\n });\n Object.defineProperty(self.intf, 'scrollPixelRect', {\n get: function () {\n return {\n top: self.scrollPixelTop,\n right: self.scrollPixelRight,\n bottom: self.scrollPixelBottom,\n left: self.scrollPixelLeft,\n };\n },\n });\n Object.defineProperty(self.intf, 'rowOrder', {\n get: function () {\n return self.orders.rows;\n },\n set: function (val) {\n if (!Array.isArray(val)) {\n throw new TypeError('Value must be an array.');\n }\n if (!self.originalData || val.length < self.originalData.length) {\n throw new RangeError(\n 'Array length must be equal to or greater than number of rows.',\n );\n }\n self.orders.rows = val;\n },\n });\n Object.defineProperty(self.intf, 'columnOrder', {\n get: function () {\n return self.orders.columns;\n },\n set: function (val) {\n if (!Array.isArray(val)) {\n throw new TypeError('Value must be an array.');\n }\n if (val.length < self.getSchema().length) {\n throw new RangeError(\n 'Array length must be equal to or greater than number of columns.',\n );\n }\n self.orders.columns = val;\n },\n });\n Object.defineProperty(self.intf, 'selectionBounds', {\n get: function () {\n return self.getSelectionBounds();\n },\n });\n Object.defineProperty(self.intf, 'selectedRows', {\n get: function () {\n return self.getSelectedData(true);\n },\n });\n Object.defineProperty(self.intf, 'selectedCells', {\n get: function () {\n return self.getSelectedData();\n },\n });\n Object.defineProperty(self.intf, 'visibleSchema', {\n get: function () {\n return self.getVisibleSchema().map(function eachDataRow(col) {\n return col;\n });\n },\n });\n Object.defineProperty(self.intf, 'treeGridAttributes', {\n get: function () {\n return self.treeGridAttributes;\n },\n set: function setTreeGridAttributes(value) {\n self.treeGridAttributes = value;\n },\n });\n Object.defineProperty(self.intf, 'cellGridAttributes', {\n get: function () {\n return self.cellGridAttributes;\n },\n set: function setCellGridAttributes(value) {\n self.cellGridAttributes = value;\n },\n });\n Object.defineProperty(self.intf, 'ctx', {\n get: function () {\n return self.ctx;\n },\n });\n Object.defineProperty(self.intf, 'schema', {\n get: function schemaGetter() {\n return self.getSchema();\n },\n set: function schemaSetter(value) {\n if (value === undefined) {\n // Issue #89 - allow schema to be set to initialized state\n self.schema = undefined;\n self.tempSchema = undefined;\n self.dispatchEvent('schemachanged', { schema: undefined });\n return;\n }\n if (!Array.isArray(value) || typeof value[0] !== 'object') {\n throw new Error('Schema must be an array of objects.');\n }\n if (value[0].name === undefined) {\n throw new Error(\n 'Expected schema to contain an object with at least a name property.',\n );\n }\n self.schema = value.map(function eachSchemaColumn(column, index) {\n column.width = column.width || self.style.cellWidth;\n column.filter = column.filter || self.filter(column.type);\n column.type = column.type || 'string';\n column.index = index;\n column.columnIndex = index;\n column.rowIndex = -1;\n return column;\n });\n self.tempSchema = undefined;\n self.createNewRowData();\n self.createColumnOrders();\n self.tryLoadStoredSettings();\n if (\n self.storedSettings &&\n typeof self.storedSettings.visibility === 'object'\n ) {\n self.schema.forEach(function hideEachSchemaColumn(column, index) {\n if (\n self.storedSettings &&\n self.storedSettings.visibility[column.name] !== undefined\n ) {\n column.hidden = !self.storedSettings.visibility[column.name];\n }\n });\n }\n self.resize(true);\n self.dispatchEvent('schemachanged', { schema: self.schema });\n },\n });\n /**\n * Gets an array of currently registered MIME types.\n * @memberof canvasDatagrid\n * @name getDataTypes\n * @method\n */\n self.intf.getTypes = function () {\n return Object.keys(self.parsers);\n };\n self.parseInnerHtml = function (data) {\n if (!data || /^ +$/.test(data)) {\n return [];\n }\n try {\n data = JSON.parse(data);\n } catch (e) {\n console.warn(\n Error(\n 'Cannot parse application/json+x-canvas-datagrid formated data. ' +\n e.message +\n ' \\nNote: canvas-datagrid.innerHTML is for string data only. ' +\n 'Use the canvas-datagrid.data property to set object data.',\n ),\n );\n }\n return data;\n };\n self.parsers['application/json+x-canvas-datagrid'] = function (\n data,\n callback,\n ) {\n self.parsers['application/x-canvas-datagrid'](\n self.parseInnerHtml(data),\n function (data, schema) {\n return callback(data, schema);\n },\n );\n };\n self.parsers['application/x-canvas-datagrid'] = function (data, callback) {\n return callback(data);\n };\n self.intf.parsers = self.parsers;\n // send to dataType ETL function to extract from input data\n // and transform into native [{}, {}] format\n self.etl = function (data, callback) {\n if (!self.intf.parsers[self.dataType]) {\n throw new Error('Unsupported data type.');\n }\n self.intf.parsers[self.dataType](data, function (data, schema) {\n // set the unfiltered/sorted data array\n self.originalData = data;\n self.viewData = Array.from(self.originalData);\n\n if (Array.isArray(schema)) {\n self.schema = schema;\n }\n // Issue #89 - allow schema to be auto-created every time data is set\n if (self.attributes.autoGenerateSchema) {\n self.schema = self.getSchemaFromData(data);\n }\n if (!self.schema) {\n self.tempSchema = self.getSchemaFromData(data);\n }\n if (self.getSchema()) {\n self.createColumnOrders();\n }\n // apply filter, sort, etc to incoming dataset, set viewData:\n self.refresh();\n // empty data was set\n if (!self.schema && (self.originalData || []).length === 0) {\n self.tempSchema = [{ name: '' }];\n }\n self.fitColumnToValues('cornerCell', true);\n if (\n (self.tempSchema && !self.schema) ||\n self.attributes.autoGenerateSchema\n ) {\n self.createColumnOrders();\n self.dispatchEvent('schemachanged', { schema: self.tempSchema });\n }\n callback();\n });\n };\n Object.defineProperty(self.intf, 'viewData', {\n get: function () {\n return self.viewData;\n },\n });\n Object.defineProperty(self.intf, 'boundData', {\n get: function () {\n return self.originalData;\n },\n });\n Object.defineProperty(self.intf, 'data', {\n get: function dataGetter() {\n return self.originalData;\n },\n set: function dataSetter(value) {\n self.etl(value, function () {\n self.changes = [];\n self.createNewRowData();\n if (\n self.attributes.autoResizeColumns &&\n self.originalData.length > 0 &&\n self.storedSettings === undefined\n ) {\n self.autosize();\n }\n // set the header column to fit the numbers in it\n self.fitColumnToValues('cornerCell', true);\n self.createRowOrders();\n self.tryLoadStoredSettings();\n self.dispatchEvent('datachanged', { data: self.originalData });\n self.initCellTreeSettings();\n self.resize(true);\n });\n },\n });\n self.initScrollBox = function () {\n var sHeight = 0,\n sWidth = 0,\n scrollTop = 0,\n scrollLeft = 0,\n scrollHeight = 0,\n scrollWidth = 0,\n scrollBoxHeight = 20,\n scrollBoxWidth = 20;\n function setScrollTop(value, preventScrollEvent) {\n if (isNaN(value)) {\n throw new Error('ScrollTop value must be a number');\n }\n if (value < 0) {\n value = 0;\n }\n if (value > scrollHeight) {\n value = scrollHeight;\n }\n if (scrollHeight < 0) {\n value = 0;\n }\n scrollTop = value;\n if (!preventScrollEvent) {\n self.scroll();\n }\n if (self.button) {\n self.moveButtonPos();\n }\n }\n function setScrollLeft(value, preventScrollEvent) {\n if (isNaN(value)) {\n throw new Error('ScrollLeft value must be a number');\n }\n if (value < 0) {\n value = 0;\n }\n if (value > scrollWidth) {\n value = scrollWidth;\n }\n if (scrollWidth < 0) {\n value = 0;\n }\n scrollLeft = value;\n if (!preventScrollEvent) {\n self.scroll();\n }\n if (self.button) {\n self.moveButtonPos();\n }\n }\n self.scrollBox.toString = function () {\n return (\n '{\"width\": ' +\n scrollWidth.toFixed(2) +\n ', \"height\": ' +\n scrollHeight.toFixed(2) +\n ', \"left\": ' +\n scrollLeft.toFixed(2) +\n ', \"top\": ' +\n scrollTop.toFixed(2) +\n ', \"widthRatio\": ' +\n self.scrollBox.widthBoxRatio.toFixed(5) +\n ', \"heightRatio\": ' +\n self.scrollBox.heightBoxRatio.toFixed(5) +\n '}'\n );\n };\n self.scrollBox.scrollTo = function (x, y, supressDrawEvent) {\n setScrollLeft(x, true);\n setScrollTop(y, supressDrawEvent);\n };\n Object.defineProperty(self.scrollBox, 'scrollBoxHeight', {\n get: function () {\n return scrollBoxHeight;\n },\n set: function (value) {\n scrollBoxHeight = value;\n },\n });\n Object.defineProperty(self.scrollBox, 'scrollBoxWidth', {\n get: function () {\n return scrollBoxWidth;\n },\n set: function (value) {\n scrollBoxWidth = value;\n },\n });\n Object.defineProperty(self.scrollBox, 'height', {\n get: function () {\n return sHeight;\n },\n set: function (value) {\n sHeight = value;\n },\n });\n Object.defineProperty(self.scrollBox, 'width', {\n get: function () {\n return sWidth;\n },\n set: function (value) {\n sWidth = value;\n },\n });\n Object.defineProperty(self.scrollBox, 'scrollTop', {\n get: function () {\n return scrollTop;\n },\n set: setScrollTop,\n });\n Object.defineProperty(self.scrollBox, 'scrollLeft', {\n get: function () {\n return scrollLeft;\n },\n set: setScrollLeft,\n });\n Object.defineProperty(self.scrollBox, 'scrollHeight', {\n get: function () {\n return scrollHeight;\n },\n set: function (value) {\n if (scrollTop > value) {\n scrollTop = Math.max(value, 0);\n }\n scrollHeight = value;\n },\n });\n Object.defineProperty(self.scrollBox, 'scrollWidth', {\n get: function () {\n return scrollWidth;\n },\n set: function (value) {\n if (scrollLeft > value) {\n scrollLeft = Math.max(value, 0);\n }\n scrollWidth = value;\n },\n });\n };\n return;\n}\n","/*jslint browser: true, unparam: true, todo: true, evil: true*/\n/*globals Reflect: false, HTMLElement: true, define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nimport component from './component';\nimport defaults from './defaults';\nimport draw from './draw';\nimport events from './events';\nimport touch from './touch';\nimport intf from './intf';\nimport contextMenu from './contextMenu';\nimport button from './button';\nimport dom from './dom';\nimport publicMethods from './publicMethods';\n\nvar webComponent = component();\n\nvar modules = [\n defaults,\n draw,\n events,\n touch,\n intf,\n contextMenu,\n button,\n dom,\n publicMethods,\n];\n\nfunction Grid(args) {\n args = args || {};\n var self = {};\n self.isComponent = args.component === undefined;\n self.isChildGrid =\n args.parentNode &&\n /canvas-datagrid-(cell|tree)/.test(args.parentNode.nodeType);\n if (self.isChildGrid) {\n self.intf = {};\n } else {\n self.intf = self.isComponent\n ? eval('Reflect.construct(HTMLElement, [], new.target)')\n : document.createElement('canvas');\n }\n self.args = args;\n self.intf.args = args;\n self.applyComponentStyle = webComponent.applyComponentStyle;\n self.hyphenateProperty = webComponent.hyphenateProperty;\n self.dehyphenateProperty = webComponent.dehyphenateProperty;\n self.createGrid = function grid(args) {\n args.component = false;\n return new Grid(args);\n };\n\n modules.forEach(function (module) {\n module(self);\n });\n\n if (self.isChildGrid) {\n self.shadowRoot = args.parentNode.shadowRoot;\n self.parentNode = args.parentNode;\n } else {\n self.shadowRoot = self.intf.attachShadow({ mode: 'open' });\n self.parentNode = self.shadowRoot;\n }\n self.init();\n return self.intf;\n}\nif (window.HTMLElement) {\n Grid.prototype = Object.create(window.HTMLElement.prototype);\n}\n// export web component\nif (window.customElements) {\n Grid.observedAttributes = webComponent.getObservableAttributes();\n Grid.prototype.disconnectedCallback = webComponent.disconnectedCallback;\n Grid.prototype.attributeChangedCallback =\n webComponent.attributeChangedCallback;\n Grid.prototype.connectedCallback = webComponent.connectedCallback;\n Grid.prototype.adoptedCallback = webComponent.adoptedCallback;\n window.customElements.define('canvas-datagrid', Grid);\n}\n\n// export global\nif (\n window &&\n !window.canvasDatagrid &&\n !window.require &&\n // Present to exclude global declarations from ES Module bundles\n !window.EXCLUDE_GLOBAL\n) {\n window.canvasDatagrid = function (args) {\n return new Grid(args);\n };\n}\n\n// export amd loader\nexport default function canvasDatagrid(args) {\n args = args || {};\n var i,\n tKeys = [\n 'style',\n 'formatters',\n 'sorters',\n 'filters',\n 'treeGridAttributes',\n 'cellGridAttributes',\n 'data',\n 'schema',\n ];\n if (window.customElements) {\n i = document.createElement('canvas-datagrid');\n Object.keys(args).forEach(function (argKey) {\n // set data and parentNode after everything else\n if (argKey === 'data') {\n return;\n }\n if (argKey === 'parentNode') {\n return;\n }\n // top level keys in args\n if (tKeys.indexOf(argKey) !== -1) {\n tKeys.forEach(function (tKey) {\n if (args[tKey] === undefined || tKey !== argKey) {\n return;\n }\n if (['formatters', 'sorters', 'filters'].indexOf(argKey) !== -1) {\n if (typeof args[tKey] === 'object' && args[tKey] !== null) {\n Object.keys(args[tKey]).forEach(function (sKey) {\n i[tKey][sKey] = args[tKey][sKey];\n });\n }\n } else {\n i[tKey] = args[tKey];\n }\n });\n return;\n }\n // all others are attribute level keys\n i.attributes[argKey] = args[argKey];\n });\n if (args.data) {\n i.data = args.data;\n }\n // add to the dom very last to avoid redraws\n if (args.parentNode) {\n args.parentNode.appendChild(i);\n }\n return i;\n }\n args.component = false;\n i = new Grid(args);\n if (args.parentNode && args.parentNode.appendChild) {\n args.parentNode.appendChild(i);\n }\n return i;\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nimport { mergeHiddenRowRanges } from './groups/util';\n\nexport default function (self) {\n /**\n * Converts a integer into a letter A - ZZZZZ...\n * @memberof canvasDatagrid\n * @name integerToAlpha\n * @method\n * @param {column} n The number to convert.\n */\n self.integerToAlpha = function (n) {\n var ordA = 'a'.charCodeAt(0),\n ordZ = 'z'.charCodeAt(0),\n len = ordZ - ordA + 1,\n s = '';\n while (n >= 0) {\n s = String.fromCharCode((n % len) + ordA) + s;\n n = Math.floor(n / len) - 1;\n }\n return s;\n };\n /**\n * Inserts a new column before the specified index into the schema.\n * @tutorial schema\n * @memberof canvasDatagrid\n * @name insertColumn\n * @method\n * @param {column} c The column to insert into the schema.\n * @param {number} index The index of the column to insert before.\n */\n self.insertColumn = function (c, index) {\n var s = self.getSchema();\n if (s.length < index) {\n throw new Error('Index is beyond the length of the schema.');\n }\n self.validateColumn(c, s);\n s.splice(index, 0, c);\n\n self.originalData.forEach(function (row, rowIndex) {\n self.applyDefaultValue(row, c, rowIndex);\n });\n self.intf.schema = s;\n\n self.refresh();\n };\n /**\n * Deletes a column from the schema at the specified index.\n * @memberof canvasDatagrid\n * @name deleteColumn\n * @tutorial schema\n * @method\n * @param {number} index The index of the column to delete.\n */\n self.deleteColumn = function (index) {\n var schema = self.getSchema();\n\n // remove data matching this column name from data\n self.originalData.forEach(function (row) {\n delete row[schema[index].name];\n });\n\n schema.splice(index, 1);\n self.intf.schema = schema;\n\n self.refresh();\n };\n /**\n * Adds a new column into the schema.\n * @tutorial schema\n * @memberof canvasDatagrid\n * @name addColumn\n * @method\n * @param {column} c The column to add to the schema.\n */\n self.addColumn = function (c) {\n var s = self.getSchema();\n self.validateColumn(c, s);\n s.push(c);\n self.originalData.forEach(function (row, rowIndex) {\n self.applyDefaultValue(row, c, rowIndex);\n });\n self.intf.schema = s;\n\n self.refresh();\n };\n /**\n * Deletes a row from the dataset at the specified index.\n * @memberof canvasDatagrid\n * @name deleteRow\n * @method\n * @param {number} index The index of the row to delete.\n */\n self.deleteRow = function (index) {\n self.originalData.splice(index, 1);\n self.setFilter();\n self.resize(true);\n };\n /**\n * Inserts a new row into the dataset before the specified index.\n * @memberof canvasDatagrid\n * @name insertRow\n * @method\n * @param {object} d data.\n * @param {number} index The index of the row to insert before.\n */\n self.insertRow = function (d, index) {\n if (self.originalData.length < index) {\n throw new Error('Index is beyond the length of the dataset.');\n }\n self.originalData.splice(index, 0, d);\n self.getSchema().forEach(function (c) {\n if (d[c.name] === undefined) {\n self.applyDefaultValue(self.originalData[index], c, index);\n }\n });\n\n // setFilter calls .refresh(), so we need not call it again:\n self.setFilter();\n\n self.resize(true);\n };\n /**\n * Adds a new row into the dataset.\n * @memberof canvasDatagrid\n * @name addRow\n * @method\n * @param {object} d data.\n */\n self.addRow = function (d) {\n self.originalData.push(d);\n self.getSchema().forEach(function (c) {\n if (d[c.name] === undefined) {\n self.applyDefaultValue(\n self.originalData[self.originalData.length - 1],\n c,\n self.originalData.length - 1,\n );\n }\n });\n\n // setFilter calls .refresh(), so we need not call it again:\n self.setFilter();\n\n self.resize(true);\n };\n /**\n * Sets the height of a given row by index number.\n * @memberof canvasDatagrid\n * @name setRowHeight\n * @method\n * @param {number} rowIndex The index of the row to set.\n * @param {number} height Height to set the row to.\n */\n self.setRowHeight = function (rowIndex, height) {\n self.sizes.rows[rowIndex] = height;\n self.draw(true);\n };\n /**\n * Sets the width of a given column by index number.\n * @memberof canvasDatagrid\n * @name setColumnWidth\n * @method\n * @param {number} colIndex The index of the column to set.\n * @param {number} width Width to set the column to.\n */\n self.setColumnWidth = function (colIndex, width) {\n self.sizes.columns[colIndex] = width;\n self.draw(true);\n };\n /**\n * Removes any changes to the width of the columns due to user or api interaction, setting them back to the schema or style default.\n * @memberof canvasDatagrid\n * @name resetColumnWidths\n * @tutorial schema\n * @method\n */\n self.resetColumnWidths = function () {\n self.sizes.columns = {};\n self.draw(true);\n };\n /**\n * Removes any changes to the height of the rows due to user or api interaction, setting them back to the schema or style default.\n * @memberof canvasDatagrid\n * @name resetRowHeights\n * @tutorial schema\n * @method\n */\n self.resetRowHeights = function () {\n self.sizes.rows = {};\n self.draw(true);\n };\n /**\n * Sets the value of the filter.\n * @memberof canvasDatagrid\n * @name setFilter\n * @method\n * @param {string} column Name of the column to filter.\n * @param {string} value The value to filter for.\n */\n self.setFilter = function (column, value) {\n if (column === undefined && value === undefined) {\n self.columnFilters = {};\n } else if (column && (value === '' || value === undefined)) {\n delete self.columnFilters[column];\n } else {\n self.columnFilters[column] = value;\n if (self.attributes.showFilterInCell) {\n self.filterable.rows.push(0);\n self.orders.columns.forEach(function (value, index) {\n self.filterable.columns.push(index);\n });\n }\n }\n if (!Object.keys(self.columnFilters).length) {\n self.filterable = {\n rows: [],\n columns: [],\n };\n }\n self.refresh();\n };\n /**\n * Returns the number of pixels to scroll down to line up with row rowIndex.\n * @memberof canvasDatagrid\n * @name findRowScrollTop\n * @method\n * @param {number} rowIndex The row index of the row to scroll find.\n */\n self.findRowScrollTop = function (rowIndex) {\n if (self.scrollCache.y[rowIndex] === undefined) {\n throw new RangeError(\n `Row index ${rowIndex} out of range: ${self.scrollCache.y.length}.`,\n );\n }\n return self.scrollCache.y[rowIndex];\n };\n /**\n * Returns the number of pixels to scroll to the left to line up with column columnIndex.\n * @memberof canvasDatagrid\n * @name findColumnScrollLeft\n * @method\n * @param {number} columnIndex The column index of the column to find.\n */\n self.findColumnScrollLeft = function (columnIndex) {\n var i = Math.max(columnIndex - 1, 0);\n if (self.scrollCache.x[i] === undefined) {\n throw new Error('Column index out of range.');\n }\n return (\n self.scrollCache.x[i] -\n self.getColumnWidth(self.orders.columns[columnIndex])\n );\n };\n /**\n * Scrolls to the cell at columnIndex x, and rowIndex y. If you define both rowIndex and columnIndex additional calculations can be made to center the cell using the target cell's height and width. Defining only one rowIndex or only columnIndex will result in simpler calculations.\n * @memberof canvasDatagrid\n * @name gotoCell\n * @method\n * @param {number} x The column index of the cell to scroll to.\n * @param {number} y The row index of the cell to scroll to.\n * @param {number} [offsetX=0] Percentage offset the cell should be from the left edge (not including headers). The default is 0, meaning the cell will appear at the left edge. Valid values are 0 through 1. 1 = Left, 0 = Right, 0.5 = Center.\n * @param {number} [offsetY=0] Percentage offset the cell should be from the top edge (not including headers). The default is 0, meaning the cell will appear at the top edge. Valid values are 0 through 1. 1 = Bottom, 0 = Top, 0.5 = Center.\n */\n self.gotoCell = function (x, y, offsetX, offsetY) {\n var targetX = x === undefined ? undefined : self.findColumnScrollLeft(x),\n targetY = y === undefined ? undefined : self.findRowScrollTop(y),\n cell,\n sbw =\n self.scrollBox.width -\n (self.scrollBox.verticalBarVisible ? self.style.scrollBarWidth : 0),\n sbh =\n self.scrollBox.height -\n (self.scrollBox.horizontalBarVisible ? self.style.scrollBarWidth : 0);\n offsetX = offsetX === undefined ? 0 : offsetX;\n offsetY = offsetY === undefined ? 0 : offsetY;\n targetX -= sbw * offsetX;\n targetY -= sbh * offsetY;\n if (x !== undefined && y !== undefined) {\n self.scrollBox.scrollTo(targetX, targetY);\n requestAnimationFrame(function () {\n cell = self.getVisibleCellByIndex(x, y);\n // HACK: just don't offset if the target cell cannot be seen\n // TODO: offset does not work on very small grids, not sure why\n if (!cell) {\n return;\n }\n targetX += cell.width * offsetX;\n targetY += cell.height * offsetY;\n self.scrollBox.scrollTo(targetX, targetY);\n });\n } else if (x !== undefined) {\n self.scrollBox.scrollLeft = targetX;\n } else if (y !== undefined) {\n self.scrollBox.scrollTop = targetY;\n }\n };\n /**\n * Scrolls the row y.\n * @memberof canvasDatagrid\n * @name gotoRow\n * @method\n * @param {number} y The row index of the cell to scroll to.\n */\n self.gotoRow = function (y) {\n self.gotoCell(0, y);\n };\n /**\n * Add a button into the cell.\n * @memberof canvasDatagrid\n * @name addButton\n * @method\n * @param {number} columnIndex The column index of the cell to to add a button.\n * @param {number} rowIndex The row index of the cell to to add a button.\n * @param {object} offset Offset how far go away from cell.\n * @param {object} items a list of items to add into button menu.\n * @param {string} imgSrc icon path to add into button.\n */\n self.addButton = function (columnIndex, rowIndex, offset, items, imgSrc) {\n var cells = self.visibleCells.filter(function (c) {\n return c.sortColumnIndex === columnIndex && c.sortRowIndex === rowIndex;\n });\n\n self.attachButton(\n {\n top: cells[0].y + cells[0].height + offset.y,\n left: cells[0].x + cells[0].width + offset.x,\n },\n items,\n imgSrc,\n );\n };\n\n /**\n * Expand/Collapse CellTree.\n * @memberof canvasDatagrid\n * @name toggleCellCollapseTree\n * @method\n * @param {array} treeData The array of cellTree to expand or collapse.\n */\n\n self.toggleCellCollapseTree = function (treeData) {\n for (let type in treeData) {\n for (let t of treeData[type])\n if (t.length > 0) self.toggleCollapseTree(t[0], t[1], type);\n }\n self.draw();\n };\n\n /**\n * Expand/Collapse CellTree.\n * @memberof canvasDatagrid\n * @name expandCollapseCellTree\n * @method\n * @param {array} treeData The array of cellTree to expand or collapse.\n */\n\n self.expandCollapseCellTree = function (treeData) {\n for (let type in treeData) {\n for (let t of treeData[type])\n if (t.length > 0) self.cellTreeExpandCollapse(t[0], t[1], type);\n }\n self.draw();\n };\n\n /**\n * Scrolls the cell at cell x, row y into view if it is not already.\n * @memberof canvasDatagrid\n * @name scrollIntoView\n * @method\n * @param {number} x The column index of the cell to scroll into view.\n * @param {number} y The row index of the cell to scroll into view.\n * @param {number} [offsetX=0] Percentage offset the cell should be from the left edge (not including headers). The default is 0, meaning the cell will appear at the left edge. Valid values are 0 through 1. 1 = Left, 0 = Right, 0.5 = Center.\n * @param {number} [offsetY=0] Percentage offset the cell should be from the top edge (not including headers). The default is 0, meaning the cell will appear at the top edge. Valid values are 0 through 1. 1 = Bottom, 0 = Top, 0.5 = Center.\n */\n self.scrollIntoView = function (x, y, offsetX, offsetY) {\n const matched = self.visibleCells.filter(function (cell) {\n return (\n (cell.rowIndex === y || y === undefined) &&\n (cell.columnIndex === x || x === undefined) &&\n cell.x > 0 &&\n cell.y > 0 &&\n cell.x + cell.width < self.width &&\n cell.y + cell.height < self.height\n );\n });\n if (matched.length === 1 && x !== undefined && y !== undefined) {\n // goto specific cell and its part be hidden by header\n if (\n matched[0].x < self.getRowHeaderCellWidth() ||\n matched[0].y < self.getColumnHeaderCellHeight()\n )\n matched.length = 0;\n }\n if (matched.length === 0) {\n self.gotoCell(x, y, offsetX, offsetY);\n }\n };\n /**\n * Sets the active cell. Requires redrawing.\n * @memberof canvasDatagrid\n * @name setActiveCell\n * @method\n * @param {number} x The column index of the cell to set active.\n * @param {number} y The row index of the cell to set active.\n */\n self.setActiveCell = function (x, y) {\n if (x < 0) {\n x = 0;\n }\n if (y < 0) {\n y = 0;\n }\n self.activeCell = {\n rowIndex: y,\n columnIndex: x,\n };\n };\n /**\n * Removes the selection.\n * @memberof canvasDatagrid\n * @name selectNone\n * @param {boolean} dontDraw Suppress the draw method after the selection change.\n * @method\n */\n self.selectNone = function (dontDraw) {\n self.selections = [];\n self.dispatchEvent('selectionchanged', {\n selectedData: self.getSelectedData(),\n selections: self.selections,\n selectionBounds: self.selectionBounds,\n selectedCells: self.getSelectedCells(),\n });\n if (dontDraw) {\n return;\n }\n self.draw();\n };\n /**\n * Selects every visible cell.\n * @memberof canvasDatagrid\n * @name selectAll\n * @param {boolean} dontDraw Suppress the draw method after the selection change.\n * @method\n */\n self.selectAll = function (dontDraw) {\n self.selectArea({\n top: 0,\n left: -1,\n right: self.getSchema().length - 1,\n bottom: self.viewData.length - 1,\n });\n if (dontDraw) {\n return;\n }\n self.draw();\n };\n /**\n * Returns true if indices of columns next to the selected columnIndex is selected on every row.\n * @memberof canvasDatagrid\n * @name isMultiColumnsSelected\n * @method\n * @param {number} columnIndex The column index to check.\n */\n self.isMultiColumnsSelected = function (columnIndex) {\n var multiColIsSelected = true;\n self.viewData.forEach(function (row, rowIndex) {\n var columnIndices = self.selections[rowIndex];\n if (\n !columnIndices ||\n columnIndices.length <= 1 ||\n columnIndices.indexOf(columnIndex) === -1\n ) {\n multiColIsSelected = false;\n } else if (columnIndices.length > 1) {\n if (columnIndices[0] != columnIndex) multiColIsSelected = false;\n else {\n for (var i = 0; i < columnIndices.length - 1; i++) {\n if (columnIndices[i] + 1 != columnIndices[i + 1]) {\n multiColIsSelected = false;\n break;\n }\n }\n }\n }\n });\n return multiColIsSelected;\n };\n /**\n * Returns true if the selected columnIndex is selected on every row.\n * @memberof canvasDatagrid\n * @name isColumnSelected\n * @method\n * @param {number} columnIndex The column index to check.\n */\n self.isColumnSelected = function (columnIndex) {\n var colIsSelected = true;\n self.viewData.forEach(function (row, rowIndex) {\n if (\n !self.selections[rowIndex] ||\n self.selections[rowIndex].indexOf(columnIndex) === -1\n ) {\n colIsSelected = false;\n }\n });\n return colIsSelected;\n };\n /**\n * Runs the defined method on each selected cell.\n * @memberof canvasDatagrid\n * @name forEachSelectedCell\n * @method\n * @param {number} fn The function to execute. The signature of the function is: (data, rowIndex, columnName).\n * @param {number} expandToRow When true the data in the array is expanded to the entire row.\n */\n self.forEachSelectedCell = function (fn, expandToRow) {\n var d = [],\n s = expandToRow ? self.getSchema() : self.getVisibleSchema(),\n l = self.viewData.length;\n self.selections.forEach(function (row, index) {\n if (index === l) {\n return;\n }\n if (row.length === 0) {\n d[index] = null;\n return;\n }\n d[index] = {};\n row.forEach(function (col) {\n if (col === -1 || !s[col]) {\n return;\n }\n fn(self.viewData, index, s[col].name);\n });\n });\n };\n /**\n * Selects a column.\n * @memberof canvasDatagrid\n * @name selectColumn\n * @method\n * @param {number} columnIndex The column index to select.\n * @param {boolean} toggleSelectMode When true, behaves as if you were holding control/command when you clicked the column.\n * @param {boolean} shift When true, behaves as if you were holding shift when you clicked the column.\n * @param {boolean} supressSelectionchangedEvent When true, prevents the selectionchanged event from firing.\n */\n self.selectColumn = function (columnIndex, ctrl, shift, supressEvent) {\n var s, e, x;\n function addCol(i) {\n self.viewData.forEach(function (row, rowIndex) {\n self.selections[rowIndex] = self.selections[rowIndex] || [];\n if (self.selections[rowIndex].indexOf(i) === -1) {\n self.selections[rowIndex].push(i);\n }\n });\n }\n function removeCol(i) {\n self.viewData.forEach(function (row, rowIndex) {\n self.selections[rowIndex] = self.selections[rowIndex] || [];\n if (self.selections[rowIndex].indexOf(i) !== -1) {\n self.selections[rowIndex].splice(\n self.selections[rowIndex].indexOf(i),\n 1,\n );\n }\n });\n }\n if (shift) {\n if (!self.activeCell) {\n return;\n }\n s = Math.min(self.activeCell.columnIndex, columnIndex);\n e = Math.max(self.activeCell.columnIndex, columnIndex);\n for (x = s; e > x; x += 1) {\n addCol(x);\n }\n }\n if (!ctrl && !shift) {\n self.selections = [];\n self.activeCell.columnIndex = columnIndex;\n self.activeCell.rowIndex = self.scrollIndexTop;\n }\n if (ctrl && self.isColumnSelected(columnIndex)) {\n removeCol(columnIndex);\n } else {\n addCol(columnIndex);\n }\n if (supressEvent) {\n return;\n }\n self.dispatchEvent('selectionchanged', {\n selectedData: self.getSelectedData(),\n selections: self.selections,\n selectionBounds: self.getSelectionBounds(),\n selectedCells: self.getSelectedCells(),\n });\n };\n /**\n * Selects a row.\n * @memberof canvasDatagrid\n * @name selectRow\n * @method\n * @param {number} rowIndex The row index to select.\n * @param {boolean} ctrl When true, behaves as if you were holding control/command when you clicked the row.\n * @param {boolean} shift When true, behaves as if you were holding shift when you clicked the row.\n * @param {boolean} supressSelectionchangedEvent When true, prevents the selectionchanged event from firing.\n */\n self.selectRow = function (rowIndex, ctrl, shift, supressEvent) {\n var x,\n st,\n en,\n s = self.getVisibleSchema();\n self.isMultiRowsSelected = false;\n function de() {\n if (supressEvent) {\n return;\n }\n self.dispatchEvent('selectionchanged', {\n selectedData: self.getSelectedData(),\n selections: self.selections,\n selectionBounds: self.selectionBounds,\n selectedCells: self.getSelectedCells(),\n });\n }\n function addRow(ri) {\n self.selections[ri] = [];\n self.selections[ri].push(-1);\n s.forEach(function (col, index) {\n self.selections[ri].push(self.orders.columns.indexOf(col.index));\n });\n }\n if (self.dragAddToSelection === false || self.dragObject === undefined) {\n if (\n self.selections[rowIndex] &&\n self.selections[rowIndex].length - 1 === s.length\n ) {\n if (ctrl) {\n self.selections[rowIndex] = [];\n de();\n return;\n }\n }\n }\n if (self.dragAddToSelection === true || self.dragObject === undefined) {\n if (shift && self.dragObject === undefined) {\n if (!self.activeCell) {\n return;\n }\n st = Math.min(self.activeCell.rowIndex, rowIndex);\n en = Math.max(self.activeCell.rowIndex, rowIndex);\n for (x = st; en >= x; x += 1) {\n addRow(x);\n }\n } else {\n addRow(rowIndex);\n }\n }\n de();\n };\n /**\n * Collapse a tree grid by row index.\n * @memberof canvasDatagrid\n * @name collapseTree\n * @method\n * @param {number} index The index of the row to collapse.\n */\n self.collapseTree = function (rowIndex) {\n self.dispatchEvent('collapsetree', {\n childGrid: self.childGrids[rowIndex],\n data: self.viewData[rowIndex],\n rowIndex: rowIndex,\n });\n self.openChildren[rowIndex].blur();\n self.openChildren[rowIndex].dispose();\n delete self.openChildren[rowIndex];\n delete self.sizes.trees[rowIndex];\n delete self.childGrids[rowIndex];\n self.dispatchEvent('resizerow', {\n cellHeight: self.style.cellHeight,\n });\n self.resize(true);\n self.draw(true);\n };\n /**\n * Expands a tree grid by row index.\n * @memberof canvasDatagrid\n * @name expandTree\n * @method\n * @param {number} index The index of the row to expand.\n */\n self.expandTree = function (rowIndex) {\n var trArgs = self.args.treeGridAttributes || {},\n columnHeaderCellHeight = self.getColumnHeaderCellHeight(),\n rowHeaderCellWidth =\n self.sizes.columns.cornerCell || self.style.rowHeaderCellWidth,\n h = self.sizes.trees[rowIndex] || self.style.treeGridHeight,\n treeGrid;\n if (!self.childGrids[rowIndex]) {\n trArgs.debug = self.attributes.debug;\n trArgs.name = self.attributes.saveAppearance\n ? self.attributes.name + 'tree' + rowIndex\n : undefined;\n trArgs.style = trArgs.style || self.style;\n trArgs.parentNode = {\n parentGrid: self.intf,\n nodeType: 'canvas-datagrid-tree',\n offsetHeight: h,\n offsetWidth: self.width - rowHeaderCellWidth,\n header: { width: self.width - rowHeaderCellWidth },\n offsetLeft: rowHeaderCellWidth,\n offsetTop: columnHeaderCellHeight,\n offsetParent: self.intf.parentNode,\n parentNode: self.intf.parentNode,\n style: 'tree',\n data: self.viewData[rowIndex],\n };\n treeGrid = self.createGrid(trArgs);\n self.childGrids[rowIndex] = treeGrid;\n }\n treeGrid = self.childGrids[rowIndex];\n treeGrid.visible = true;\n self.dispatchEvent('expandtree', {\n treeGrid: treeGrid,\n data: self.viewData[rowIndex],\n rowIndex: rowIndex,\n });\n self.openChildren[rowIndex] = treeGrid;\n self.sizes.trees[rowIndex] = h;\n self.dispatchEvent('resizerow', { height: self.style.cellHeight });\n self.resize(true);\n };\n /**\n * Toggles tree grid open and close by row index.\n * @memberof canvasDatagrid\n * @name toggleTree\n * @method\n * @param {number} index The index of the row to toggle.\n */\n self.toggleTree = function (rowIndex) {\n var i = self.openChildren[rowIndex];\n if (i) {\n return self.collapseTree(rowIndex);\n }\n self.expandTree(rowIndex);\n };\n /**\n * Returns a header from the schema by name.\n * @memberof canvasDatagrid\n * @name getHeaderByName\n * @tutorial schema\n * @method\n * @returns {header} header with the selected name, or undefined.\n * @param {string} name The name of the column to resize.\n */\n self.getHeaderByName = function (name) {\n var x,\n i = self.getSchema();\n for (x = 0; x < i.length; x += 1) {\n if (i[x].name === name) {\n return i[x];\n }\n }\n };\n /**\n * Hide column/columns\n * @memberof canvasDatagrid\n * @name hideColumns\n * @param {number} beginColumnOrderIndex\n * @param {number} [endColumnOrderIndex]\n */\n self.hideColumns = function (beginColumnOrderIndex, endColumnOrderIndex) {\n const schema = self.getSchema();\n const orders = self.orders.columns;\n let count = 0;\n if (typeof endColumnOrderIndex !== 'number')\n endColumnOrderIndex = beginColumnOrderIndex;\n for (\n let orderIndex = beginColumnOrderIndex;\n orderIndex <= endColumnOrderIndex;\n orderIndex++\n ) {\n const columnIndex = orders[orderIndex];\n if (columnIndex >= 0 && !schema[columnIndex].hidden) {\n count++;\n schema[columnIndex].hidden = true;\n }\n }\n if (count > 0) {\n self.setStorageData();\n setTimeout(function () {\n self.resize(true);\n }, 10);\n }\n };\n /**\n * Hide rows\n * @memberof canvasDatagrid\n * @name hideRows\n * @param {number} beginRowIndex\n * @param {number} endRowIndex\n */\n self.hideRows = function (beginRowIndex, endRowIndex) {\n if (\n mergeHiddenRowRanges(self.hiddenRowRanges, [beginRowIndex, endRowIndex])\n )\n self.refresh();\n };\n /**\n * Unhide rows\n * @memberof canvasDatagrid\n * @name unhideRows\n * @param {number} beginRowIndex\n * @param {number} endRowIndex\n */\n self.unhideRows = function (beginRowIndex, endRowIndex) {\n self.hiddenRowRanges = self.hiddenRowRanges.filter(\n (range) => range[0] !== beginRowIndex || range[1] !== endRowIndex,\n );\n self.refresh();\n };\n /**\n * Resizes a column to fit the longest value in the column. Call without a value to resize all columns.\n * Warning, can be slow on very large record sets (1m records ~3-5 seconds on an i7).\n * @memberof canvasDatagrid\n * @name fitColumnToValues\n * @method\n * @param {string} name The name of the column to resize.\n */\n self.fitColumnToValues = function (name, internal) {\n if (!self.canvas) {\n return;\n }\n\n const columnIndex =\n name === 'cornerCell' ? -1 : self.getHeaderByName(name).index;\n\n const newSize = Math.max(\n self.findColumnMaxTextLength(name),\n self.style.minColumnWidth,\n );\n\n self.sizes.columns[columnIndex] = newSize;\n\n self.dispatchEvent('resizecolumn', {\n x: newSize,\n y: self.resizingStartingHeight,\n draggingItem: self.currentCell,\n });\n\n if (!internal) {\n self.resize();\n self.draw(true);\n }\n };\n /**\n * Checks if a cell is currently visible.\n * @memberof canvasDatagrid\n * @name isCellVisible\n * @overload\n * @method\n * @returns {boolean} when true, the cell is visible, when false the cell is not currently drawn.\n * @param {number} columnIndex The column index of the cell to check.\n * @param {number} rowIndex The row index of the cell to check.\n */\n self.isCellVisible = function (cell, rowIndex) {\n // overload\n if (rowIndex !== undefined) {\n return (\n self.visibleCells.filter(function (c) {\n return c.columnIndex === cell && c.rowIndex === rowIndex;\n }).length > 0\n );\n }\n var x,\n l = self.visibleCells.length;\n for (x = 0; x < l; x += 1) {\n if (\n cell.x === self.visibleCells[x].x &&\n cell.y === self.visibleCells[x].y\n ) {\n return true;\n }\n }\n return false;\n };\n /**\n * Sets the order of the data.\n * @memberof canvasDatagrid\n * @name order\n * @method\n * @param {number} columnName Name of the column to be sorted.\n * @param {string} direction `asc` for ascending or `desc` for descending.\n * @param {function} [sortFunction] When defined, override the default sorting method defined in the column's schema and use this one.\n * @param {bool} [dontSetStorageData] Don't store this setting for future use.\n */\n self.order = function (\n columnName,\n direction,\n sortFunction,\n dontSetStorageData,\n ) {\n var f,\n c = self.getSchema().filter(function (col) {\n return col.name === columnName;\n });\n if (\n self.dispatchEvent('beforesortcolumn', {\n name: columnName,\n direction: direction,\n })\n ) {\n return;\n }\n self.orderBy = columnName;\n self.orderDirection = direction;\n if (!self.viewData || self.viewData.length === 0) {\n return;\n }\n if (c.length === 0) {\n throw new Error('Cannot sort. No such column name');\n }\n f = sortFunction || c[0].sorter || self.sorters[c[0].type];\n if (!f && c[0].type !== undefined) {\n console.warn(\n 'Cannot sort type \"%s\" falling back to string sort.',\n c[0].type,\n );\n }\n self.orderings.add(\n columnName,\n direction,\n typeof f === 'function' ? f : self.sorters.string,\n );\n self.refresh();\n self.dispatchEvent('sortcolumn', {\n name: columnName,\n direction: direction,\n });\n\n if (dontSetStorageData) {\n return;\n }\n self.setStorageData();\n };\n\n /**\n * Add grouping\n * @param {'columns'|'rows'} groupFor\n * @param {number} from\n * @param {number} to\n */\n function addGroup(groupFor, from, to) {\n let newRow = false;\n const allGroups =\n groupFor === 'rows' ? self.groupedRows : self.groupedColumns;\n for (let i = allGroups.length - 1; i >= 0; i--) {\n const groups = allGroups[i];\n const min = groups[0].from,\n max = groups[groups.length - 1].to;\n if (from <= min && to >= max) {\n if (from === min && to === max && groups.length === 1) return; // nothings happened\n // new group wrap this row\n continue;\n }\n for (let gi = 0; gi < groups.length; gi++) {\n const g = groups[gi];\n if (from > g.to) continue;\n if (from >= g.from) {\n if (to > g.to) {\n if (from === g.from) {\n allGroups.splice(i, 0, [{ from, to, collapsed: false }]);\n self.refresh();\n return;\n }\n throw new Error(`Can't group these ${groupFor}`);\n }\n if (to === g.to) {\n if (from === g.from) return; // nothings happened\n }\n newRow = true;\n break;\n }\n if (to >= g.from) {\n if (to < g.to) throw new Error(`Can't group these ${groupFor}`);\n allGroups.splice(i, 0, [{ from, to, collapsed: false }]);\n } else {\n groups.splice(gi, 0, { from, to, collapsed: false });\n }\n self.refresh();\n return;\n }\n if (newRow) continue;\n groups.push({ from, to, collapsed: false });\n self.refresh();\n return;\n }\n if (newRow) allGroups.push([{ from, to, collapsed: false }]);\n else allGroups.unshift([{ from, to, collapsed: false }]);\n self.refresh();\n }\n /**\n * Remove grouping\n * @param {Array<Array<{from:number,to:number,collapsed:boolean}>>} allGroups\n * @param {number} from\n * @param {number} to\n */\n function removeGroup(allGroups, from, to) {\n for (let i = 0; i < allGroups.length; i++) {\n const groups = allGroups[i];\n for (let gi = 0; gi < groups.length; gi++) {\n const group = groups[gi];\n if (group.from === from && group.to === to) {\n if (groups.length <= 1) allGroups.splice(i, 1);\n else groups.splice(gi, 1);\n self.refresh();\n return;\n }\n }\n }\n }\n /**\n * Grouping columns\n * @memberof canvasDatagrid\n * @name groupColumns\n * @method\n * @param {number|string} firstColumnName Name of the first column to be grouped.\n * @param {number|string} lastColumnName Name of the last column to be grouped.\n */\n self.groupColumns = function (firstColumnName, lastColumnName) {\n /** @type {Array<{name: string,columnIndex:number}>} */\n const schema = self.getSchema();\n let firstOne, lastOne;\n for (let i = 0; i < schema.length; i++) {\n const it = schema[i];\n if (firstOne && lastOne) break;\n if (it.name === firstColumnName) {\n firstOne = it;\n continue;\n }\n if (it.name === lastColumnName) {\n lastOne = it;\n continue;\n }\n }\n if (!firstOne) throw new Error(`No such column name for first column`);\n if (!lastOne) throw new Error(`No such column name for last column`);\n if (lastOne.columnIndex > firstOne.columnIndex !== true)\n throw new Error(`Can't group these columns`);\n\n const from = firstOne.columnIndex;\n const to = lastOne.columnIndex;\n const ev = { group: { type: 'columns', from, to } };\n try {\n addGroup('columns', from, to);\n } catch (error) {\n ev.error = error;\n }\n self.dispatchEvent('aftercreategroup', ev);\n };\n /**\n * Grouping columns\n * @memberof canvasDatagrid\n * @name groupRows\n * @method\n * @param {number} rowIndexFrom The row index which is the beginning of the group\n * @param {number} rowIndexTo The row index which is the end of the group\n */\n self.groupRows = function (rowIndexFrom, rowIndexTo) {\n if (!Number.isInteger(rowIndexFrom) || rowIndexFrom < 0)\n throw new Error(`No such row for the beginning of the group`);\n\n const dataLength = self.viewData.length;\n if (\n !Number.isInteger(rowIndexFrom) ||\n rowIndexTo <= rowIndexFrom ||\n rowIndexTo >= dataLength\n )\n throw new Error(`No such row for the end of the group`);\n const ev = {\n group: {\n type: 'rows',\n from: rowIndexFrom,\n to: rowIndexTo,\n },\n };\n try {\n addGroup('rows', rowIndexFrom, rowIndexTo);\n } catch (error) {\n ev.error = error;\n }\n self.dispatchEvent('aftercreategroup', ev);\n };\n /**\n * Remove grouping columns\n * @memberof canvasDatagrid\n * @name removeGroupColumns\n * @method\n * @param {number|string} firstColumnName Name of the first column to be grouped.\n * @param {number|string} lastColumnName Name of the last column to be grouped.\n */\n self.removeGroupColumns = function (firstColumnName, lastColumnName) {\n /** @type {Array<{name:string,columnIndex:number}>} */\n const schema = self.getSchema();\n let firstOne, lastOne;\n for (let i = 0; i < schema.length; i++) {\n const it = schema[i];\n if (firstOne && lastOne) break;\n if (it.name === firstColumnName) {\n firstOne = it;\n continue;\n }\n if (it.name === lastColumnName) {\n lastOne = it;\n continue;\n }\n }\n if (!firstOne) throw new Error(`No such column name for first column`);\n if (!lastOne) throw new Error(`No such column name for last column`);\n const from = firstOne.columnIndex;\n const to = lastOne.columnIndex;\n removeGroup(self.groupedColumns, from, to);\n };\n /**\n * Remove grouping columns\n * @memberof canvasDatagrid\n * @name removeGroupRows\n * @method\n * @param {number} rowIndexFrom The row index which is the beginning of the group\n * @param {number} rowIndexTo The row index which is the end of the group\n */\n self.removeGroupRows = function (rowIndexFrom, rowIndexTo) {\n removeGroup(self.groupedRows, rowIndexFrom, rowIndexTo);\n };\n /**\n * Toggle(expand/collapsed) grouping columns\n * @memberof canvasDatagrid\n * @name toggleGroupColumns\n * @method\n * @param {number|string} firstColumnName Name of the first column to be grouped.\n * @param {number|string} lastColumnName Name of the last column to be grouped.\n */\n self.toggleGroupColumns = function (firstColumnName, lastColumnName) {\n /** @type {Array<{name:string,columnIndex:number}>} */\n const schema = self.getSchema();\n let firstOne, lastOne;\n for (let i = 0; i < schema.length; i++) {\n const it = schema[i];\n if (firstOne && lastOne) break;\n if (it.name === firstColumnName) {\n firstOne = it;\n continue;\n }\n if (it.name === lastColumnName) {\n lastOne = it;\n continue;\n }\n }\n if (!firstOne || !lastOne) return;\n const from = firstOne.columnIndex;\n const to = lastOne.columnIndex;\n if (self.toggleGroup({ type: 'c', from, to })) {\n self.disposeContextMenu();\n self.setStorageData();\n self.refresh();\n }\n };\n /**\n * Toggle(expand/collapsed) grouping rows\n * @memberof canvasDatagrid\n * @name toggleGroupRows\n * @method\n * @param {number} rowIndexFrom The row index which is the beginning of the group\n * @param {number} rowIndexTo The row index which is the end of the group\n */\n self.toggleGroupRows = function (rowIndexFrom, rowIndexTo) {\n if (self.toggleGroup({ type: 'r', from: rowIndexFrom, to: rowIndexTo })) {\n self.disposeContextMenu();\n self.setStorageData();\n self.refresh();\n }\n };\n\n self.isInGrid = function (e) {\n if (e.x < 0 || e.x > self.width || e.y < 0 || e.y > self.height) {\n return false;\n }\n return true;\n };\n /**\n * Moves the current selection relative to the its current position. Note: this method does not move the selected data, just the selection itself.\n * @memberof canvasDatagrid\n * @name moveSelection\n * @method\n * @param {number} offsetX The number of columns to offset the selection.\n * @param {number} offsetY The number of rows to offset the selection.\n */\n self.moveSelection = function (offsetX, offsetY) {\n var sel = [];\n self.selections.forEach(function (row, rowIndex) {\n sel[rowIndex + offsetY] = [];\n row.forEach(function (colIndex) {\n sel[rowIndex + offsetY].push(colIndex + offsetX);\n });\n });\n self.selections = sel;\n };\n /**\n * Deletes currently selected data.\n * @memberof canvasDatagrid\n * @name deleteSelectedData\n * @method\n * @param {boolean} dontDraw Suppress the draw method after the selection change.\n */\n self.deleteSelectedData = function (dontDraw) {\n const affectedCells = self.clearSelectedCells();\n\n self.dispatchEvent('afterdelete', {\n cells: affectedCells,\n });\n\n if (dontDraw) {\n return;\n }\n\n requestAnimationFrame(() => self.draw());\n };\n /**\n * Moves data in the provided selection to another position in the grid. Moving data off the edge of the schema (columns/x) will truncate data.\n * @memberof canvasDatagrid\n * @name moveTo\n * @method\n * @param {array} sel 2D array representing selected rows and columns. `canvasDatagrid.selections` is in this format and can be used here.\n * @param {number} x The column index to start inserting the selection at.\n * @param {number} y The row index to start inserting the selection at.\n */\n self.moveTo = function (sel, x, y) {\n var selectedData = self.getSelectedData(),\n visibleSchema = self.getVisibleSchema(),\n selectionLength = sel.length,\n xi,\n maxRowLength = -Infinity,\n minXi = Infinity,\n yi = y - 1;\n\n sel.forEach(function (row, rowIndex) {\n if (rowIndex === selectionLength) {\n return;\n }\n if (row.length === 0) {\n return;\n }\n minXi = Math.min(self.getVisibleColumnIndexOf(x), minXi);\n maxRowLength = Math.max(maxRowLength, row.length);\n row.forEach(function (colIndex) {\n // intentional redef of colIndex\n colIndex = self.getVisibleColumnIndexOf(colIndex);\n if (!visibleSchema[colIndex]) {\n return;\n }\n // TODO:\n if (!self.data) {\n self.data = {};\n }\n if (!self.data[rowIndex]) {\n self.data[rowIndex] = {};\n }\n // TODO:\n self.data[rowIndex][visibleSchema[colIndex].name] = null;\n });\n });\n\n sel.forEach(function (row, index) {\n var lastSourceIndex;\n yi += 1;\n xi = self.getVisibleColumnIndexOf(x);\n row.forEach(function (colIndex, cidx) {\n colIndex = self.getVisibleColumnIndexOf(colIndex);\n if (cidx > 0) {\n // this confusing bit of nonsense figures out\n // if the selection has skipped cells\n xi += colIndex - lastSourceIndex;\n }\n lastSourceIndex = colIndex;\n if (\n colIndex === -1 ||\n !visibleSchema[xi] ||\n !visibleSchema[colIndex] ||\n // TODO:\n self.data.length - 1 < yi ||\n yi < 0\n ) {\n return;\n }\n // TODO:\n if (!self.data[yi]) {\n self.data[yi] = {};\n }\n // TODO:\n self.data[yi][visibleSchema[xi].name] =\n selectedData[index][visibleSchema[colIndex].name];\n });\n });\n };\n /**\n * Get the column group info given column belongs to\n * @memberof canvasDatagrid\n * @name getGroupsColumnBelongsTo\n * @method\n * @param {number} columnIndex Column index.\n * @returns {Array<{from:number,to:number,collapsed:boolean}>}\n */\n self.getGroupsColumnBelongsTo = function (columnIndex) {\n if (!self.attributes.allowGroupingColumns) return [];\n const result = [];\n for (let i = 0; i < self.groupedColumns.length; i++) {\n const groups = self.groupedColumns[i];\n for (let j = 0; j < groups.length; j++) {\n const group = groups[j];\n if (columnIndex >= group.from && columnIndex <= group.to) {\n result.push(group);\n break;\n }\n }\n }\n return result;\n };\n /**\n * Get the row group info given row belongs to\n * @memberof canvasDatagrid\n * @name getGroupsRowBelongsTo\n * @method\n * @param {number} rowIndex Row index.\n * @returns {Array<{from:number,to:number,collapsed:boolean}>}\n */\n self.getGroupsRowBelongsTo = function (rowIndex) {\n if (!self.attributes.allowGroupingRows) return [];\n const result = [];\n for (let i = 0; i < self.groupedRows.length; i++) {\n const groups = self.groupedRows[i];\n for (let j = 0; j < groups.length; j++) {\n const group = groups[j];\n if (rowIndex >= group.from && rowIndex <= group.to) {\n result.push(group);\n break;\n }\n }\n }\n return result;\n };\n\n /**\n * Checks if a given column is visible.\n * @memberof canvasDatagrid\n * @name isColumnVisible\n * @method\n * @returns {boolean} When true, the column is visible.\n * @param {number} columnIndex Column index.\n */\n self.isColumnVisible = function (columnIndex) {\n return (\n self.visibleCells.filter(function (c) {\n return c.columnIndex === columnIndex;\n }).length > 0\n );\n };\n /**\n * Checks if a given row is visible.\n * @memberof canvasDatagrid\n * @name isRowVisible\n * @method\n * @returns {boolean} When true, the row is visible.\n * @param {number} rowIndex Row index.\n */\n self.isRowVisible = function (rowIndex) {\n return (\n self.visibleCells.filter(function (c) {\n return c.rowIndex === rowIndex;\n }).length > 0\n );\n };\n /**\n * Gets the cell at columnIndex and rowIndex.\n * @memberof canvasDatagrid\n * @name getVisibleCellByIndex\n * @method\n * @returns {cell} cell at the selected location.\n * @param {number} x Column index.\n * @param {number} y Row index.\n */\n self.getVisibleCellByIndex = function (x, y) {\n return self.visibleCells.filter(function (c) {\n return c.columnIndex === x && c.rowIndex === y;\n })[0];\n };\n /**\n * Get an unhide indicator at grid pixel coordinate x and y.\n * @memberof canvasDatagrid\n * @name getUnhideIndicator\n * @method\n * @param {number} x Number of pixels from the left.\n * @param {number} y Number of pixels from the top.\n */\n self.getUnhideIndicator = function (x, y) {\n const indicators = self.visibleUnhideIndicators;\n if (indicators.length <= 0) return;\n for (let i = 0; i < indicators.length; i++) {\n const indicator = indicators[i];\n if (\n x >= indicator.x &&\n y >= indicator.y &&\n x <= indicator.x2 &&\n y <= indicator.y2\n )\n return indicator;\n }\n };\n /**\n * Get a column group at grid pixel coordinate x and y.\n * @memberof canvasDatagrid\n * @name getColumnGroupAt\n * @method\n * @param {number} x Number of pixels from the left.\n * @param {number} y Number of pixels from the top.\n */\n self.getColumnGroupAt = function (x, y) {\n const groups = self.groupedColumns.length;\n if (groups <= 0) return;\n const yZero = self.getColumnGroupAreaHeight();\n if (y >= yZero) return;\n for (let i = 0; i < self.visibleGroups.length; i++) {\n const g = self.visibleGroups[i];\n if (g.type !== 'c') continue;\n if (x >= g.x && y >= g.y && x <= g.x2 && y <= g.y2) return g;\n }\n };\n /**\n * Get a row group at grid pixel coordinate x and y.\n * @memberof canvasDatagrid\n * @name getRowGroupAt\n * @method\n * @param {number} x Number of pixels from the left.\n * @param {number} y Number of pixels from the top.\n */\n self.getRowGroupAt = function (x, y) {\n const groups = self.groupedRows.length;\n if (groups <= 0) return;\n const xZero = self.getRowGroupAreaWidth();\n if (x >= xZero) return;\n for (let i = 0; i < self.visibleGroups.length; i++) {\n const g = self.visibleGroups[i];\n if (g.type !== 'r') continue;\n if (x >= g.x && y >= g.y && x <= g.x2 && y <= g.y2) return g;\n }\n };\n /**\n * Gets the cell at grid pixel coordinate x and y. Author's note. This function ties drawing and events together. This is a very complex function and is core to the component.\n * @memberof canvasDatagrid\n * @name getCellAt\n * @method\n * @returns {cell} cell at the selected location.\n * @param {number} x Number of pixels from the left.\n * @param {number} y Number of pixels from the top.\n */\n self.getCellAt = function (x, y, useTouchScrollZones) {\n function getBorder(entitiy) {\n if (\n entitiy.x + entitiy.width - self.attributes.borderResizeZone * 0.4 <\n x &&\n entitiy.x + entitiy.width + self.attributes.borderResizeZone * 0.6 > x\n ) {\n return 'r';\n }\n if (\n entitiy.x - self.attributes.borderResizeZone * 0.4 < x &&\n entitiy.x + self.attributes.borderResizeZone * 0.6 > x\n ) {\n return 'l';\n }\n if (\n entitiy.y + entitiy.height - self.attributes.borderResizeZone * 0.4 <\n y &&\n entitiy.y + entitiy.height + self.attributes.borderResizeZone * 0.6 > y\n ) {\n return 'b';\n }\n if (\n entitiy.y - self.attributes.borderResizeZone * 0.4 < y &&\n entitiy.y + self.attributes.borderResizeZone * 0.6 > y\n ) {\n return 't';\n }\n }\n if (!self.visibleCells) {\n return;\n }\n x -= self.getRowGroupAreaWidth();\n y -= self.getColumnGroupAreaHeight();\n var border,\n tsz = useTouchScrollZones ? self.attributes.touchScrollZone : 0,\n moveMode = self.attributes.borderDragBehavior === 'move',\n i,\n l = self.visibleCells.length,\n moveBorder,\n xBorderBehavior = moveMode ? self.cursorGrab : 'ew-resize',\n yBorderBehavior = moveMode ? self.cursorGrab : 'ns-resize',\n cell,\n entitiy;\n if (!self.visibleCells || !self.visibleCells.length) {\n return;\n }\n self.hasFocus = true;\n if (!(y < self.height && y > 0 && x < self.width && x > 0)) {\n self.hasFocus = false;\n return {\n dragContext: 'inherit',\n context: 'inherit',\n };\n }\n for (i = 0; i < l; i += 1) {\n cell = self.visibleCells[i];\n // interactive dimensions of the cell. used for touch \"over size\" zones\n entitiy = {\n x: cell.x,\n y: cell.y,\n height: cell.height,\n width: cell.width,\n };\n if (\n useTouchScrollZones &&\n /(vertical|horizontal)-scroll-/.test(cell.style)\n ) {\n entitiy.x -= tsz;\n entitiy.y -= tsz;\n entitiy.height += tsz;\n entitiy.width += tsz;\n }\n if (\n entitiy.x - self.style.cellBorderWidth < x &&\n entitiy.x + entitiy.width + self.style.cellBorderWidth > x &&\n entitiy.y - self.style.cellBorderWidth < y &&\n entitiy.y + entitiy.height + self.style.cellBorderWidth > y\n ) {\n if (/frozen-row-marker/.test(cell.style)) {\n cell.dragContext = cell.style;\n cell.context = 'row-resize';\n return cell;\n }\n if (/frozen-column-marker/.test(cell.style)) {\n cell.dragContext = cell.style;\n cell.context = 'col-resize';\n return cell;\n }\n if (/selection-handle-/.test(cell.style)) {\n cell.dragContext = cell.style;\n cell.context = 'crosshair';\n return cell;\n }\n if (/vertical-scroll-(bar|box)/.test(cell.style)) {\n cell.dragContext = 'vertical-scroll-box';\n cell.context = 'vertical-scroll-box';\n cell.isScrollBar = true;\n cell.isVerticalScrollBar = true;\n if (y > self.scrollBox.box.v.y + self.scrollBox.scrollBoxHeight) {\n cell.dragContext = 'vertical-scroll-bottom';\n cell.context = 'vertical-scroll-bottom';\n } else if (y < self.scrollBox.box.v.y) {\n cell.dragContext = 'vertical-scroll-top';\n cell.context = 'vertical-scroll-top';\n }\n self.cursor = 'default';\n return cell;\n }\n if (/horizontal-scroll-(bar|box)/.test(cell.style)) {\n cell.dragContext = 'horizontal-scroll-box';\n cell.context = 'horizontal-scroll-box';\n cell.isScrollBar = true;\n cell.isHorizontalScrollBar = true;\n if (x > self.scrollBox.box.h.x + self.scrollBox.scrollBoxWidth) {\n cell.dragContext = 'horizontal-scroll-right';\n cell.context = 'horizontal-scroll-right';\n } else if (x < self.scrollBox.box.h.x) {\n cell.dragContext = 'horizontal-scroll-left';\n cell.context = 'horizontal-scroll-left';\n }\n self.cursor = 'default';\n return cell;\n }\n border = getBorder(entitiy);\n // check if the border of this cell is the border of the selection and if so show move cursor in move mode\n moveBorder =\n moveMode &&\n cell.selectionBorder &&\n cell.selectionBorder.indexOf(border) !== -1;\n if (\n ['l', 'r'].indexOf(border) !== -1 &&\n (self.attributes.allowColumnResize || moveBorder) &&\n ((self.attributes.allowColumnResizeFromCell && cell.isNormal) ||\n !cell.isNormal ||\n moveBorder) &&\n ((self.attributes.allowRowHeaderResize &&\n (cell.isRowHeader || cell.isCorner)) ||\n !(cell.isRowHeader && cell.isCorner))\n ) {\n if (\n (cell.isColumnHeader ||\n cell.isCorner ||\n (self.attributes.allowColumnResizeFromCell && cell.isNormal)) &&\n border === 'r'\n ) {\n cell.context = 'ew-resize';\n cell.dragContext = 'ew-resize';\n return cell;\n }\n if (!(cell.isColumnHeader || cell.isCorner) && moveBorder) {\n cell.context = xBorderBehavior;\n cell.dragContext = border + '-move';\n return cell;\n }\n }\n if (\n ['t', 'b'].indexOf(border) !== -1 &&\n cell.rowIndex > -1 &&\n (self.attributes.allowRowResize || moveBorder) &&\n ((self.attributes.allowRowResizeFromCell && cell.isNormal) ||\n !cell.isNormal ||\n moveBorder) &&\n !cell.isColumnHeader\n ) {\n if (\n (cell.isRowHeader ||\n cell.isCorner ||\n (self.attributes.allowRowResizeFromCell && cell.isNormal)) &&\n border === 'b'\n ) {\n cell.context = 'ns-resize';\n cell.dragContext = 'ns-resize';\n return cell;\n }\n if (!(cell.isRowHeader || cell.isCorner) && moveBorder) {\n cell.context = yBorderBehavior;\n cell.dragContext = border + '-move';\n return cell;\n }\n }\n if (cell.style === 'columnHeaderCell') {\n if (\n cell.x +\n cell.width -\n self.attributes.columnGrabZoneSize -\n self.style.cellBorderWidth >\n x ||\n !self.attributes.allowRowReordering\n ) {\n cell.dragContext = 'cell';\n cell.context = 'cell';\n } else {\n cell.context = self.cursorGrab;\n cell.dragContext = 'column-reorder';\n }\n return cell;\n }\n if (cell.style === 'rowHeaderCell') {\n if (\n self.attributes.rowGrabZoneSize +\n (cell.y - self.style.cellBorderWidth) <\n y ||\n !self.attributes.allowRowReordering\n ) {\n cell.dragContext = 'cell';\n cell.context = 'cell';\n } else {\n cell.context = self.cursorGrab;\n cell.dragContext = 'row-reorder';\n }\n return cell;\n }\n if (cell.isGrid) {\n self.hasFocus = false;\n cell.dragContext = 'cell-grid';\n cell.context = 'cell-grid';\n return cell;\n }\n if (cell.style === 'tree-grid') {\n self.hasFocus = false;\n cell.dragContext = 'tree';\n cell.context = 'tree';\n return cell;\n }\n cell.dragContext = 'cell';\n cell.context = 'cell';\n return cell;\n }\n }\n self.hasFocus = true;\n self.cursor = 'default';\n return {\n dragContext: 'background',\n context: 'background',\n style: 'background',\n isBackground: true,\n };\n };\n /**\n * Gets the bounds of current selection.\n * @returns {rect} selection.\n * @memberof canvasDatagrid\n * @name getSelectionBounds\n * @method\n */\n self.getSelectionBounds = function () {\n var low = { x: Infinity, y: Infinity },\n high = { x: -Infinity, y: -Infinity };\n self.selections.forEach(function (row, rowIndex) {\n var maxCol, minCol;\n low.y = rowIndex < low.y ? rowIndex : low.y;\n high.y = rowIndex > high.y ? rowIndex : high.y;\n maxCol = Math.max.apply(null, row);\n minCol = Math.min.apply(null, row);\n low.x = minCol < low.x ? minCol : low.x;\n high.x = maxCol > high.x ? maxCol : high.x;\n });\n return {\n top: low.y,\n left: low.x,\n bottom: high.y,\n right: high.x,\n };\n };\n /**\n * Returns an auto generated schema based on data structure.\n * @memberof canvasDatagrid\n * @name getSchemaFromData\n * @method\n * @tutorial schema\n * @returns {schema} schema A schema based on the first item in the data array.\n */\n self.getSchemaFromData = function (d) {\n d = d || self.originalData;\n return Object.keys(d[0] || { ' ': '' }).map(function mapEachSchemaColumn(\n key,\n index,\n ) {\n var type = self.getBestGuessDataType(key, d),\n i = {\n name: key,\n title: isNaN(parseInt(key, 10))\n ? key\n : self.integerToAlpha(key).toUpperCase(),\n index: index,\n columnIndex: index,\n type: type,\n filter: self.filter(type),\n };\n if (\n self.storedSettings &&\n self.storedSettings.visibility &&\n self.storedSettings.visibility[i.name] !== undefined\n ) {\n i.hidden = !self.storedSettings.visibility[i.name];\n }\n return i;\n });\n };\n /**\n * Clears the change log grid.changes that keeps track of changes to the data set.\n * This does not undo changes or alter data it is simply a convince array to keep\n * track of changes made to the data since last this method was called.\n * @memberof canvasDatagrid\n * @name clearChangeLog\n * @method\n */\n self.clearChangeLog = function () {\n self.changes = [];\n };\n /**\n * Selects an area of the grid.\n * @memberof canvasDatagrid\n * @name selectArea\n * @method\n * @param {rect} bounds A rect object representing the selected values.\n */\n self.selectArea = function (bounds, ctrl) {\n self.selectionBounds = bounds || self.selectionBounds;\n var ev,\n x,\n y,\n s = self.getSchema();\n if (!ctrl) {\n self.selections = [];\n }\n if (\n self.selectionBounds.top < -1 ||\n self.selectionBounds.bottom > self.viewData.length ||\n self.selectionBounds.left < -1 ||\n self.selectionBounds.right > s.length\n ) {\n throw new Error('Impossible selection area');\n }\n for (\n x = self.selectionBounds.top;\n x <= self.selectionBounds.bottom;\n x += 1\n ) {\n self.selections[x] = [];\n for (\n y = self.selectionBounds.left;\n y <= self.selectionBounds.right;\n y += 1\n ) {\n if (self.selections[x].indexOf(y) === -1) {\n self.selections[x].push(y);\n }\n }\n }\n ev = {\n selections: self.selections,\n selectionBounds: self.selectionBounds,\n selectedCells: self.getSelectedCells(),\n };\n Object.defineProperty(ev, 'selectedData', {\n get: function () {\n return self.getSelectedData();\n },\n });\n self.dispatchEvent('selectionchanged', ev);\n };\n /**\n * Returns the maximum text width for a given column by column name.\n * @memberof canvasDatagrid\n * @name findColumnMaxTextLength\n * @method\n * @returns {number} The number of pixels wide the maximum width value in the selected column.\n * @param {string} name The name of the column to calculate the value's width of.\n */\n self.findColumnMaxTextLength = function (name) {\n var m = -Infinity;\n if (name === 'cornerCell') {\n self.ctx.font = self.style.rowHeaderCellFont;\n return (\n self.ctx.measureText(\n (\n self.viewData.length + (self.attributes.showNewRow ? 1 : 0)\n ).toString(),\n ).width +\n self.style.autosizePadding +\n self.style.autosizeHeaderCellPadding +\n self.style.rowHeaderCellPaddingRight +\n self.style.rowHeaderCellPaddingLeft +\n (self.attributes.tree\n ? self.style.treeArrowWidth +\n self.style.treeArrowMarginLeft +\n self.style.treeArrowMarginRight\n : 0)\n );\n }\n var formatter = null;\n self.getSchema().forEach(function (col) {\n if (col.name !== name) {\n return;\n }\n self.ctx.font = self.style.columnHeaderCellFont;\n var t =\n self.ctx.measureText(col.title || col.name).width +\n self.style.columnHeaderCellPaddingRight +\n self.style.columnHeaderCellPaddingLeft +\n self.style.cellAutoResizePadding;\n m = t > m ? t : m;\n formatter = self.formatters[col.type];\n });\n self.viewData.forEach(function (row) {\n var text = row[name];\n if (formatter) {\n text = formatter({ cell: { value: text } });\n }\n self.ctx.font = self.style.cellFont;\n var t =\n self.ctx.measureText(text).width +\n self.style.cellPaddingRight +\n self.style.cellPaddingLeft +\n self.style.cellAutoResizePadding;\n m = t > m ? t : m;\n });\n return m;\n };\n /**\n * Gets the total width of all header columns.\n * @memberof canvasDatagrid\n * @name getHeaderWidth\n * @method\n */\n self.getHeaderWidth = function () {\n return self.getVisibleSchema().reduce(function (total, header) {\n return total + parseInt(header.width || self.style.cellWidth, 10);\n }, 0);\n };\n /**\n * Gets the height of a row by index.\n * @memberof canvasDatagrid\n * @name getRowHeight\n * @method\n * @param {number} rowIndex The row index to lookup.\n */\n self.getRowHeight = function (rowIndex) {\n return (self.sizes.rows[rowIndex] || self.style.cellHeight) * self.scale;\n };\n /**\n * Gets the width of a column by index.\n * @memberof canvasDatagrid\n * @name getColumnWidth\n * @method\n * @param {number} columnIndex The column index to lookup.\n */\n self.getColumnWidth = function (columnIndex) {\n return (\n (self.sizes.columns[columnIndex] ||\n self.getSchema()[columnIndex].width ||\n self.style.cellWidth) * self.scale\n );\n };\n self.formatters.string = function cellFormatterString(e) {\n return e.cell.value !== undefined ? e.cell.value : '';\n };\n self.formatters.rowHeaderCell = self.formatters.string;\n self.formatters.headerCell = self.formatters.string;\n self.formatters.number = self.formatters.string;\n self.formatters.int = self.formatters.string;\n self.formatters.html = self.formatters.string;\n self.sorters.string = function (columnName, direction) {\n var asc = direction === 'asc';\n return function (a, b) {\n const aValue = a[columnName] || '';\n const bValue = b[columnName] || '';\n if (asc) {\n if (!aValue.localeCompare) {\n return 1;\n }\n return aValue.localeCompare(bValue);\n }\n if (!bValue.localeCompare) {\n return 1;\n }\n return bValue.localeCompare(aValue);\n };\n };\n self.sorters.number = function (columnName, direction) {\n var asc = direction === 'asc';\n return function (a, b) {\n if (asc) {\n return a[columnName] - b[columnName];\n }\n return b[columnName] - a[columnName];\n };\n };\n self.sorters.date = function (columnName, direction) {\n var asc = direction === 'asc';\n return function (a, b) {\n if (asc) {\n return (\n new Date(a[columnName]).getTime() - new Date(b[columnName]).getTime()\n );\n }\n return (\n new Date(b[columnName]).getTime() - new Date(a[columnName]).getTime()\n );\n };\n };\n}\n","/*jslint browser: true, unparam: true, todo: true, plusplus: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nexport default function (self) {\n var touchTimerMs = 50,\n debounceTouchMove,\n touchMoving,\n touchScrollTimeout;\n self.scrollAnimation = {};\n self.touchDelta = {};\n self.touchAnimateTo = {};\n self.animationFrames = 0;\n self.getTouchPos = function (e, touchIndex) {\n var t = touchIndex ? e.touches[touchIndex] : e.touches[0],\n rect = self.canvas.getBoundingClientRect(),\n pos;\n if (!t) {\n return;\n }\n pos = {\n x: t.clientX - rect.left,\n y: t.clientY - rect.top,\n };\n if (self.isChildGrid) {\n pos.x -= self.canvasOffsetLeft;\n pos.y -= self.canvasOffsetTop;\n }\n return {\n x: pos.x,\n y: pos.y,\n rect: rect,\n };\n };\n // shamelessly stolen from from https://gist.github.com/gre/1650294\n self.easingFunctions = {\n linear: function (t) {\n return t;\n },\n easeInQuad: function (t) {\n return t * t;\n },\n easeOutQuad: function (t) {\n return t * (2 - t);\n },\n easeInOutQuad: function (t) {\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n },\n easeInCubic: function (t) {\n return t * t * t;\n },\n easeOutCubic: function (t) {\n return --t * t * t + 1;\n },\n easeInOutCubic: function (t) {\n return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n },\n easeInQuart: function (t) {\n return t * t * t * t;\n },\n easeOutQuart: function (t) {\n return 1 - --t * t * t * t;\n },\n easeInOutQuart: function (t) {\n return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;\n },\n easeInQuint: function (t) {\n return t * t * t * t * t;\n },\n easeOutQuint: function (t) {\n return 1 + --t * t * t * t * t;\n },\n easeInOutQuint: function (t) {\n return t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t;\n },\n };\n self.easing = function (t, b, c, d) {\n return (\n c * self.easingFunctions[self.attributes.touchEasingMethod](t / d) + b\n );\n };\n self.calculatePPSTimed = function () {\n self.xPPST = -(\n (self.touchDelta.x - self.touchSigmaTimed.x) /\n (self.touchDelta.t - self.touchSigmaTimed.t)\n );\n self.yPPST = -(\n (self.touchDelta.y - self.touchSigmaTimed.y) /\n (self.touchDelta.t - self.touchSigmaTimed.t)\n );\n self.touchSigmaTimed = {\n x: self.touchDelta.x,\n y: self.touchDelta.y,\n t: performance.now(),\n };\n };\n self.calculatePPS = function () {\n self.xPPS = -(\n (self.touchDelta.x - self.touchSigma.x) /\n (self.touchDelta.t - self.touchSigma.t)\n );\n self.yPPS = -(\n (self.touchDelta.y - self.touchSigma.y) /\n (self.touchDelta.t - self.touchSigma.t)\n );\n self.touchSigma = {\n x: self.touchDelta.x,\n y: self.touchDelta.y,\n t: performance.now(),\n };\n };\n self.touchEndAnimation = function () {\n if (!self.canvas || !self.scrollBox.scrollTo) {\n return requestAnimationFrame(self.touchEndAnimation);\n }\n var n = performance.now(),\n d = self.attributes.touchReleaseAnimationDurationMs,\n t;\n t = n - self.touchDelta.t;\n self.animationFrames += 1;\n self.scrollAnimation.x = self.easing(\n t,\n self.touchDelta.scrollLeft,\n self.touchAnimateTo.x,\n d,\n );\n self.scrollAnimation.y = self.easing(\n t,\n self.touchDelta.scrollTop,\n self.touchAnimateTo.y,\n d,\n );\n if (\n t > d ||\n (self.scrollAnimation.y === self.scrollBox.scrollTop &&\n self.scrollAnimation.x === self.scrollBox.scrollLeft) ||\n self.stopAnimation\n ) {\n return;\n }\n self.scrollBox.scrollTo(self.scrollAnimation.x, self.scrollAnimation.y);\n requestAnimationFrame(self.touchEndAnimation);\n };\n self.touchEditCell = function (cell) {\n self.beginEditAt(cell.columnIndex, cell.rowIndex);\n };\n self.touchstart = function (e) {\n if (e.changedTouches[0]) {\n self.touchStart = self.getTouchPos(e);\n self.startingCell = self.getCellAt(\n self.touchStart.x,\n self.touchStart.y,\n true,\n );\n }\n if (\n self.dispatchEvent('touchstart', {\n NativeEvent: e,\n cell: self.startingCell,\n })\n ) {\n return;\n }\n self.disposeContextMenu();\n clearInterval(self.calculatePPSTimer);\n clearTimeout(self.touchContextTimeout);\n self.touchStartEvent = e;\n self.stopAnimation = true;\n self.animationFrames = 0;\n self.stopPropagation(e);\n if (e.touches.length === 1 && e.changedTouches[0] && !self.zoomAltered) {\n self.touchLength = 1;\n self.touchStart = self.touchStart || self.touchStart1;\n self.touchScrollStart = {\n x: self.scrollBox.scrollLeft,\n y: self.scrollBox.scrollTop,\n t: performance.now(),\n };\n self.touchDelta = {\n x: 0,\n y: 0,\n scrollLeft: self.scrollBox.scrollLeft,\n scrollTop: self.scrollBox.scrollTop,\n t: self.touchScrollStart.t,\n };\n self.touchSigma = {\n x: self.touchDelta.x,\n y: self.touchDelta.y,\n t: self.touchDelta.t,\n };\n self.touchSigmaTimed = {\n x: self.touchDelta.x,\n y: self.touchDelta.y,\n t: self.touchDelta.t,\n };\n self.touchContextTimeout = setTimeout(function () {\n self.contextmenuEvent(e, self.touchStart);\n }, self.attributes.touchContextMenuTimeMs);\n self.calculatePPSTimer = setInterval(\n self.calculatePPSTimed,\n touchTimerMs,\n );\n if (\n self.startingCell &&\n (self.startingCell.isGrid ||\n ['tree', 'inherit'].indexOf(self.startingCell.context) !== -1)\n ) {\n self.hasFocus = false;\n return;\n }\n self.hasFocus = true;\n if (self.startingCell.isHeader) {\n if (self.startingCell.isRowHeader) {\n self.selectArea({\n top: self.startingCell.rowIndex,\n bottom: self.startingCell.rowIndex,\n left: 0,\n right: self.getVisibleSchema().length - 1,\n });\n self.draw(true);\n } else if (self.startingCell.isColumnHeader) {\n if (self.attributes.columnHeaderClickBehavior === 'sort') {\n if (self.orderBy === self.startingCell.header.name) {\n self.orderDirection =\n self.orderDirection === 'asc' ? 'desc' : 'asc';\n } else {\n self.orderDirection = 'asc';\n }\n self.order(self.startingCell.header.name, self.orderDirection);\n }\n if (self.attributes.columnHeaderClickBehavior === 'select') {\n self.selectArea({\n top: 0,\n bottom: self.viewData.length - 1,\n left: self.startingCell.columnIndex,\n right: self.startingCell.columnIndex,\n });\n self.draw(true);\n }\n }\n self.touchEndEvents(e);\n return;\n }\n }\n if (self.zoomAltered) {\n return;\n }\n document.body.addEventListener('touchmove', self.touchmove, {\n passive: false,\n });\n document.body.addEventListener('touchend', self.touchend, false);\n document.body.addEventListener('touchcancel', self.touchcancel, false);\n self.draw(true);\n };\n self.touchSelect = function (cell, handleType) {\n if (cell.rowIndex === undefined || cell.columnIndex === undefined) {\n return;\n }\n self.touchSelecting = true;\n var bounds = self.getSelectionBounds();\n if (\n handleType === 'selection-handle-bl' &&\n cell.rowIndex >= bounds.top &&\n cell.columnIndex <= bounds.right\n ) {\n bounds.bottom = cell.rowIndex;\n bounds.left = cell.columnIndex;\n } else if (\n handleType === 'selection-handle-tl' &&\n cell.rowIndex <= bounds.bottom &&\n cell.columnIndex <= bounds.right\n ) {\n bounds.top = cell.rowIndex;\n bounds.left = cell.columnIndex;\n } else if (\n handleType === 'selection-handle-tr' &&\n cell.rowIndex <= bounds.bottom &&\n cell.columnIndex >= bounds.left\n ) {\n bounds.top = cell.rowIndex;\n bounds.right = cell.columnIndex;\n } else if (\n handleType === 'selection-handle-br' &&\n cell.rowIndex >= bounds.top &&\n cell.columnIndex >= bounds.left\n ) {\n bounds.bottom = cell.rowIndex;\n bounds.right = cell.columnIndex;\n }\n if (self.attributes.selectionMode === 'row' || cell.rowIndex === -1) {\n bounds.left = 0;\n bounds.right = self.getSchema().length - 1;\n } else {\n bounds.left = Math.max(0, bounds.left);\n }\n self.selectArea(bounds);\n self.draw(true);\n };\n function touchMove(e) {\n var ch, rw, rScrollZone, lScrollZone, bScrollZone, tScrollZone, sbw, t1, t2;\n if (self.dispatchEvent('beforetouchmove', { NativeEvent: e })) {\n return;\n }\n clearTimeout(touchScrollTimeout);\n if (e.changedTouches[0]) {\n self.touchPosition = self.getTouchPos(e);\n }\n if (e.changedTouches[1]) {\n self.touchPosition1 = self.getTouchPos(e, 1);\n }\n if (\n Math.abs(self.touchDelta.x) + Math.abs(self.touchDelta.y) >\n self.attributes.touchDeadZone\n ) {\n clearTimeout(self.touchContextTimeout);\n }\n if (e.touches.length === 2 && self.touchPosition && self.touchPosition1) {\n t1 = self.touchPosition.y;\n t2 = self.touchPosition1.y;\n if (!self.zoomDeltaStart) {\n self.zoomDeltaStart = Math.abs(t1 - t2);\n self.startScale = self.scale;\n }\n self.touchLength = 2;\n self.scaleDelta = self.zoomDeltaStart - Math.abs(t1 - t2);\n self.scale =\n self.startScale -\n self.scaleDelta * self.attributes.touchZoomSensitivity;\n self.scale = Math.min(\n Math.max(self.scale, self.attributes.touchZoomMin),\n self.attributes.touchZoomMax,\n );\n self.zoomAltered = true;\n self.resize(true);\n self.resizeChildGrids();\n return;\n }\n if (self.zoomAltered) {\n return;\n }\n self.touchLength = 1;\n self.touchPosition = self.touchPosition || self.touchPosition1;\n ch = self.getColumnHeaderCellHeight();\n rw = self.getRowHeaderCellWidth();\n rScrollZone =\n self.width - self.style.scrollBarWidth - self.touchPosition.x <\n self.attributes.selectionScrollZone;\n lScrollZone =\n self.touchPosition.x - rw < self.attributes.selectionScrollZone;\n bScrollZone =\n self.height - self.style.scrollBarWidth - self.touchPosition.y <\n self.attributes.selectionScrollZone;\n tScrollZone =\n self.touchPosition.y - ch < self.attributes.selectionScrollZone;\n sbw = self.style.scrollBarWidth;\n function touchScroll() {\n var x = self.scrollBox.scrollLeft,\n y = self.scrollBox.scrollTop;\n x += rScrollZone ? self.attributes.selectionScrollIncrement : 0;\n y += bScrollZone ? self.attributes.selectionScrollIncrement : 0;\n y -= tScrollZone ? self.attributes.selectionScrollIncrement : 0;\n x -= lScrollZone ? self.attributes.selectionScrollIncrement : 0;\n self.scrollBox.scrollTo(x, y);\n touchScrollTimeout = setTimeout(\n touchScroll,\n self.attributes.scrollRepeatRate,\n );\n }\n e.stopPropagation();\n self.touchDelta = {\n x: self.touchPosition.x - self.touchStart.x,\n y: self.touchPosition.y - self.touchStart.y,\n scrollLeft: self.scrollBox.scrollLeft,\n scrollTop: self.scrollBox.scrollTop,\n t: performance.now(),\n };\n self.currentCell = self.getCellAt(\n self.touchPosition.x,\n self.touchPosition.y,\n );\n self.dispatchEvent('touchmove', { NativeEvent: e, cell: self.currentCell });\n self.calculatePPS();\n self.touchDuration = performance.now() - self.touchScrollStart.t;\n self.stopAnimation = true;\n self.animationFrames = 0;\n if (\n self.touchSelecting &&\n (rScrollZone || lScrollZone || tScrollZone || bScrollZone)\n ) {\n touchScroll();\n }\n if (/vertical-scroll-/.test(self.startingCell.style)) {\n self.scrollBox.scrollTop =\n self.scrollBox.scrollHeight *\n ((self.touchPosition.y - ch - sbw) /\n (self.scrollBox.height - sbw - ch));\n return;\n }\n if (/horizontal-scroll-/.test(self.startingCell.style)) {\n self.scrollBox.scrollLeft =\n self.scrollBox.scrollWidth *\n ((self.touchPosition.x - rw - sbw) / (self.scrollBox.width - sbw - rw));\n return;\n }\n if (/selection-handle-/.test(self.startingCell.style)) {\n self.touchSelect(self.currentCell, self.startingCell.style);\n return;\n }\n self.scrollBox.scrollTo(\n self.touchScrollStart.x - self.touchDelta.x,\n self.touchScrollStart.y - self.touchDelta.y,\n );\n }\n self.touchmove = function (e) {\n if (touchMoving) {\n return;\n }\n requestAnimationFrame(function () {\n touchMoving = true;\n touchMove(e);\n touchMoving = false;\n });\n };\n self.touchEndEvents = function (e) {\n self.zoomDeltaStart = undefined;\n self.touchSelecting = false;\n clearInterval(self.touchScrollTimeout);\n clearInterval(self.touchContextTimeout);\n clearInterval(self.calculatePPSTimer);\n e.stopPropagation();\n document.body.removeEventListener('touchmove', self.touchmove, {\n passive: false,\n });\n document.body.removeEventListener('touchend', self.touchend, false);\n document.body.removeEventListener('touchcancel', self.touchcancel, false);\n };\n self.touchend = function (e) {\n if (\n self.dispatchEvent('touchend', { NativeEvent: e, cell: self.currentCell })\n ) {\n return;\n }\n self.zoomDeltaStart = undefined;\n if (e.changedTouches[0]) {\n self.touchPosition = undefined;\n }\n if (e.changedTouches[1]) {\n self.touchPosition1 = undefined;\n }\n if (self.zoomAltered) {\n if (e.touches.length === 0) {\n self.zoomAltered = false;\n }\n return;\n }\n var dz =\n Math.abs(self.touchDelta.x) + Math.abs(self.touchDelta.y) <\n self.attributes.touchDeadZone;\n if (isNaN(self.xPPS)) {\n self.xPPS = 0;\n }\n if (isNaN(self.yPPS)) {\n self.yPPS = 0;\n }\n if (isNaN(self.xPPST)) {\n self.xPPST = 0;\n }\n if (isNaN(self.yPPST)) {\n self.yPPST = 0;\n }\n self.touchAnimateTo.x =\n self.xPPS * self.attributes.touchReleaseAcceleration;\n self.touchAnimateTo.y =\n self.yPPS * self.attributes.touchReleaseAcceleration;\n self.calculatePPSTimed();\n if (\n !dz &&\n self.animationFrames === 0 &&\n (Math.abs(self.xPPST) > self.attributes.scrollAnimationPPSThreshold ||\n Math.abs(self.yPPST) > self.attributes.scrollAnimationPPSThreshold) &&\n !/-scroll-/.test(self.startingCell.style) &&\n !dz\n ) {\n self.stopAnimation = false;\n self.touchEndAnimation();\n }\n self.touchEndEvents(e);\n };\n self.touchcancel = function (e) {\n if (\n self.dispatchEvent('touchcancel', {\n NativeEvent: e,\n cell: self.currentCell,\n })\n ) {\n return;\n }\n self.touchEndEvents(e);\n };\n}\n","module.exports=function(e){var o={};function a(t){if(o[t])return o[t].exports;var r=o[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,a),r.l=!0,r.exports}return a.m=e,a.c=o,a.d=function(e,o,t){a.o(e,o)||Object.defineProperty(e,o,{enumerable:!0,get:t})},a.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},a.t=function(e,o){if(1&o&&(e=a(e)),8&o)return e;if(4&o&&\"object\"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(a.r(t),Object.defineProperty(t,\"default\",{enumerable:!0,value:e}),2&o&&\"string\"!=typeof e)for(var r in e)a.d(t,r,function(o){return e[o]}.bind(null,r));return t},a.n=function(e){var o=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(o,\"a\",o),o},a.o=function(e,o){return Object.prototype.hasOwnProperty.call(e,o)},a.p=\"\",a(a.s=0)}([function(e,o,a){\"use strict\";Object.defineProperty(o,\"__esModule\",{value:!0});var t=a(1),r=Object.keys(t.default).reduce((function(e,o){return e.concat(t.default[o])}),[]);o.default=function(e){return-1===r.indexOf(e.key)}},function(e,o,a){\"use strict\";Object.defineProperty(o,\"__esModule\",{value:!0});o.default={modifier:[\"Alt\",\"AltGraph\",\"CapsLock\",\"Control\",\"Fn\",\"FnLock\",\"Meta\",\"NumLock\",\"ScrollLock\",\"Shift\",\"Symbol\",\"SymbolLock\"],legacyModifier:[\"Hyper\",\"Super\"],whiteSpace:[\"Enter\",\"Tab\"],navigation:[\"ArrowDown\",\"ArrowLeft\",\"ArrowRight\",\"ArrowUp\",\"End\",\"Home\",\"PageDown\",\"PageUp\"],editing:[\"Backspace\",\"Clear\",\"Copy\",\"CrSel\",\"Cut\",\"Delete\",\"EraseEof\",\"ExSel\",\"Insert\",\"Paste\",\"Redo\",\"Undo\"],ui:[\"Accept\",\"Again\",\"Attn\",\"Cancel\",\"ContextMenu\",\"Escape\",\"Execute\",\"Find\",\"Help\",\"Pause\",\"Play\",\"Props\",\"Select\",\"ZoomIn\",\"ZoomOut\"],device:[\"BrightnessDown\",\"BrightnessUp\",\"Eject\",\"LogOff\",\"Power\",\"PowerOff\",\"PrintScreen\",\"Hibernate\",\"Standby\",\"WakeUp\"],imeCompositionKeys:[\"AllCandidates\",\"Alphanumeric\",\"CodeInput\",\"Compose\",\"Convert\",\"Dead\",\"FinalMode\",\"GroupFirst\",\"GroupLast\",\"GroupNext\",\"GroupPrevious\",\"ModeChange\",\"NextCandidate\",\"NonConvert\",\"PreviousCandidate\",\"Process\",\"SingleCandidate\"],koreanSpecific:[\"HangulMode\",\"HanjaMode\",\"JunjaMode\"],japaneseSpecific:[\"Eisu\",\"Hankaku\",\"Hiragana\",\"HiraganaKatakana\",\"KanaMode\",\"KanjiMode\",\"Katakana\",\"Romaji\",\"Zenkaku\",\"ZenkakuHankaku\"],commonFunction:[\"F1\",\"F2\",\"F3\",\"F4\",\"F5\",\"F6\",\"F7\",\"F8\",\"F9\",\"F10\",\"F11\",\"F12\",\"Soft1\",\"Soft2\",\"Soft3\",\"Soft4\"],multimedia:[\"ChannelDown\",\"ChannelUp\",\"Close\",\"MailForward\",\"MailReply\",\"MailSend\",\"MediaClose\",\"MediaFastForward\",\"MediaPause\",\"MediaPlay\",\"MediaPlayPause\",\"MediaRecord\",\"MediaRewind\",\"MediaStop\",\"MediaTrackNext\",\"MediaTrackPrevious\",\"New\",\"Open\",\"Print\",\"Save\",\"SpellCheck\"],multimediaNumpad:[\"Key11\",\"Key12\"],audio:[\"AudioBalanceLeft\",\"AudioBalanceRight\",\"AudioBassBoostDown\",\"AudioBassBoostToggle\",\"AudioBassBoostUp\",\"AudioFaderFront\",\"AudioFaderRear\",\"AudioSurroundModeNext\",\"AudioTrebleDown\",\"AudioTrebleUp\",\"AudioVolumeDown\",\"AudioVolumeUp\",\"AudioVolumeMute\",\"MicrophoneToggle\",\"MicrophoneVolumeDown\",\"MicrophoneVolumeUp\",\"MicrophoneVolumeMute\"],speech:[\"SpeechCorrectionList\",\"SpeechInputToggle\"],application:[\"LaunchApplication1\",\"LaunchApplication2\",\"LaunchCalendar\",\"LaunchContacts\",\"LaunchMail\",\"LaunchMediaPlayer\",\"LaunchMusicPlayer\",\"LaunchPhone\",\"LaunchScreenSaver\",\"LaunchSpreadsheet\",\"LaunchWebBrowser\",\"LaunchWebCam\",\"LaunchWordProcessor\"],browser:[\"BrowserBack\",\"BrowserFavorites\",\"BrowserForward\",\"BrowserHome\",\"BrowserRefresh\",\"BrowserSearch\",\"BrowserStop\"],mobilePhone:[\"AppSwitch\",\"Call\",\"Camera\",\"CameraFocus\",\"EndCall\",\"GoBack\",\"GoHome\",\"HeadsetHook\",\"LastNumberRedial\",\"Notification\",\"MannerMode\",\"VoiceDial\"],tv:[\"TV\",\"TV3DMode\",\"TVAntennaCable\",\"TVAudioDescription\",\"TVAudioDescriptionMixDown\",\"TVAudioDescriptionMixUp\",\"TVContentsMenu\",\"TVDataService\",\"TVInput\",\"TVInputComponent1\",\"TVInputComponent2\",\"TVInputComposite1\",\"TVInputComposite2\",\"TVInputHDMI1\",\"TVInputHDMI2\",\"TVInputHDMI3\",\"TVInputHDMI4\",\"TVInputVGA1\",\"TVMediaContext\",\"TVNetwork\",\"TVNumberEntry\",\"TVPower\",\"TVRadioService\",\"TVSatellite\",\"TVSatelliteBS\",\"TVSatelliteCS\",\"TVSatelliteToggle\",\"TVTerrestrialAnalog\",\"TVTerrestrialDigital\",\"TVTimer\"],mediaControls:[\"AVRInput\",\"AVRPower\",\"ColorF0Red\",\"ColorF1Green\",\"ColorF2Yellow\",\"ColorF3Blue\",\"ColorF4Grey\",\"ColorF5Brown\",\"ClosedCaptionToggle\",\"Dimmer\",\"DisplaySwap\",\"DVR\",\"Exit\",\"FavoriteClear0\",\"FavoriteClear1\",\"FavoriteClear2\",\"FavoriteClear3\",\"FavoriteRecall0\",\"FavoriteRecall1\",\"FavoriteRecall2\",\"FavoriteRecall3\",\"FavoriteStore0\",\"FavoriteStore1\",\"FavoriteStore2\",\"FavoriteStore3\",\"Guide\",\"GuideNextDay\",\"GuidePreviousDay\",\"Info\",\"InstantReplay\",\"Link\",\"ListProgram\",\"LiveContent\",\"Lock\",\"MediaApps\",\"MediaAudioTrack\",\"MediaLast\",\"MediaSkipBackward\",\"MediaSkipForward\",\"MediaStepBackward\",\"MediaStepForward\",\"MediaTopMenu\",\"NavigateIn\",\"NavigateNext\",\"NavigateOut\",\"NavigatePrevious\",\"NextFavoriteChannel\",\"NextUserProfile\",\"OnDemand\",\"Pairing\",\"PinPDown\",\"PinPMove\",\"PinPToggle\",\"PinPUp\",\"PlaySpeedDown\",\"PlaySpeedReset\",\"PlaySpeedUp\",\"RandomToggle\",\"RcLowBattery\",\"RecordSpeedNext\",\"RfBypass\",\"ScanChannelsToggle\",\"ScreenModeNext\",\"Settings\",\"SplitScreenToggle\",\"STBInput\",\"STBPower\",\"Subtitle\",\"Teletext\",\"VideoModeNext\",\"Wink\",\"ZoomToggle\"]}}]).default;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(\"./lib/main.js\");\n"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"sources":["webpack://canvasDatagrid/webpack/universalModuleDefinition","webpack://canvasDatagrid/./lib/button.js","webpack://canvasDatagrid/./lib/component.js","webpack://canvasDatagrid/./lib/contextMenu.js","webpack://canvasDatagrid/./lib/defaults.js","webpack://canvasDatagrid/./lib/dom.js","webpack://canvasDatagrid/./lib/draw.js","webpack://canvasDatagrid/./lib/events/index.js","webpack://canvasDatagrid/./lib/events/util.js","webpack://canvasDatagrid/./lib/groups/util.js","webpack://canvasDatagrid/./lib/intf.js","webpack://canvasDatagrid/./lib/main.js","webpack://canvasDatagrid/./lib/publicMethods.js","webpack://canvasDatagrid/./lib/touch.js","webpack://canvasDatagrid/./node_modules/is-printable-key-event/dist/index.js","webpack://canvasDatagrid/webpack/bootstrap","webpack://canvasDatagrid/webpack/runtime/compat get default export","webpack://canvasDatagrid/webpack/runtime/define property getters","webpack://canvasDatagrid/webpack/runtime/hasOwnProperty shorthand","webpack://canvasDatagrid/webpack/runtime/make namespace object","webpack://canvasDatagrid/webpack/startup"],"names":["self","zIndexTop","applyButtonMenuItemStyle","buttonMenuItemContainer","createInlineStyle","mobile","addEventListener","applyButtonStyle","button","buttonMenu","createButton","pos","items","imgSrc","wrapper","document","createElement","buttonArrow","buttonIcon","intf","Array","isArray","Error","init","loc","s","scrollOffset","canvas","undefined","style","buttonZIndex","x","left","y","top","height","position","zIndex","scrollBox","scrollLeft","scrollTop","innerHTML","buttonArrowDownHTML","img","setAttribute","maxWidth","appendChild","body","toggleButtonMenu","dispose","parentNode","removeChild","createDisposeEvent","requestAnimationFrame","disposeButtonMenu","offsetHeight","createButtonMenu","selectedIndex","rect","createItems","addItem","item","menuItemContainer","addContent","content","title","click","ev","apply","disposeButton","clickIndex","idx","dispatchEvent","Event","getBoundingClientRect","bottom","window","innerHeight","buttonMenuWindowMargin","right","innerWidth","Object","defineProperty","get","set","value","isNaN","isFinite","length","forEach","index","removeEventListener","e","keyCode","moveButtonPos","attachButton","typeMap","component","dehyphenateProperty","hyphenateProperty","prop","replace","p","nextLetterCap","prototype","call","char","toUpperCase","cust","toLowerCase","getDefaultItem","base","i","r","defaults","filter","applyComponentStyle","supressChangeAndDrawEvents","isComponent","cStyle","getComputedStyle","tagName","defs","computedStyle","styles","def","val","getPropertyValue","setStyleProperty","resize","data","strData","JSON","parse","schema","strSchema","number","strNum","n","parseInt","strBool","test","string","str","getObservableAttributes","attrs","attributes","attr","push","disconnectedCallback","connected","connectedCallback","parentDOMNode","observe","adoptedCallback","attributeChangedCallback","attrName","oldVal","newVal","tfn","dataType","name","Function","observer","MutationObserver","mutations","checkInnerHTML","checkStyle","mutation","attributeName","target","nodeName","addedNodes","type","characterData","childList","subtree","querySelectorAll","el","hoverScrollTimeout","autoCompleteContext","applyContextItemStyle","contextItemContainer","createContextMenu","parentContextMenu","container","upArrow","downArrow","children","childMenuArrow","removeChildContext","relatedTarget","contextMenu","contains","splice","indexOf","contextAddCallback","getAttribute","cPos","childContextMenuMarginLeft","offsetWidth","childContextMenuMarginTop","createChildContext","childContextMenuArrowHTML","checkArrowVisibility","scrollHeight","fade","element","opacity","timer","setInterval","clearInterval","display","animationDurationHideContextMenu","unfade","animationDurationShowContextMenu","startHoverScroll","t","a","contextHoverScrollAmount","setTimeout","contextHoverScrollRateMs","endHoverScroll","clearTimeout","contextMenuZIndex","color","contextMenuArrowColor","textAlign","inputDropdown","maxHeight","autocompleteBottomMargin","minWidth","width","hasFocus","deltaY","deltaX","contextMenuArrowUpHTML","contextMenuArrowDownHTML","contextMenuWindowMargin","parentGrid","c","createFilterContextMenuItems","filterContainer","filterLabel","filterAutoCompleteButton","filterInput","cell","header","iRect","checkRegExpErrorState","background","contextFilterInputBackground","contextFilterInputColor","invalidFilterRegEx","contextFilterInvalidRegExpBackground","contextFilterInvalidRegExpColor","fillAutoComplete","count","blanksItem","viewData","row","cellValue","String","trim","blankValues","includes","blanksText","maxAutoCompleteItems","formatters","stopPropagation","disposeAutocomplete","keys","concat","map","key","createAutoCompleteContext","autoCompleteItems","onclick","disposeContextMenu","preventDefault","setFilter","en","columnFilters","filterOptionText","contextFilterButtonHTML","cf","h","getHeaderByName","removeFilterOptionText","removeFilterClick","controlInput","focus","getSelectedContiguousColumns","memoKey","selections","selection","rowIndex","compare","sort","b","ranges","begin","end","orderIndex","currentOrderIndex","columnIndex","matchedRange","find","range","orders","columns","matchedSchema","schemaIndex","thisSchema","assign","findIndex","it","getSelectedContiguousRows","allowOnlyOneRow","prev","ok","addDefaultContextMenuItem","getSchema","getColumnsMap","Map","_col","isSorting","orderings","isNormalCell","isBackground","isColumnHeaderCellCap","isScrollBar","isCorner","isRowHeader","showFilter","showCopy","reduce","copyText","execCommand","showPaste","clipBoardData","pasteText","paste","draw","showColumnSelector","columnSelectorText","d","column","toggleColumnVisibility","hidden","setStorageData","columnSelectorHiddenText","columnSelectorVisibleText","columnOrderIndex","contiguousColumns","col","join","hideColumnText","hideColumns","saveAppearance","showClearSettingsOption","sizes","rows","clearSettingsOptionText","createRowOrders","createColumnOrders","storedSettings","columnWidth","cellWidth","cellHeight","allowSorting","showOrderByOption","showOrderByOptionTextAsc","order","showOrderByOptionTextDesc","canHideRows","boundRowIndexes","viewRowIndex","getBoundRowIndexFromViewRowIndex","showHideRow","hideRows","showHideRows","groupAreaHeight","getColumnGroupAreaHeight","groupAreaWidth","getRowGroupAreaWidth","setCollapseStateForAllGroups","allGroups","collapsed","groups","j","group","refresh","showRemoveAllGroupColumns","groupedColumns","showExpandAllGroupColumns","showCollapseAllGroupColumns","showRemoveAllGroupRows","groupedRows","showExpandAllGroupRows","showCollapseAllGroupRows","canGroupByColumns","allowGroupingColumns","isColumnHeader","canUngroupColumns","canGroupByRows","allowGroupingRows","canUngroupRows","groupIndexes","headerIndex","isColumnSelected","isNewGroupRangeValid","groupTitles","groupNames","showGroupColumns","groupColumns","getGroupsColumnBelongsTo","from","to","cell0","cell1","formatArgs","showRemoveGroupColumns","removeGroupColumns","console","warn","rangeTitle","showGroupRows","groupRows","getGroupsRowBelongsTo","showRemoveGroupRows","removeGroupRows","event","mousedown","mouseup","contextmenuEvent","overridePos","childGrids","childGrid","offsetLeft","offsetTop","isChildGrid","childGridsOfParent","matchedMe","grid","nodeA","nodeB","x0","x1","y0","y1","node","newX1","newY1","nodeType","contextPosition","getLayerPos","NativeEvent","getCellAt","isGrid","contextMenuMarginLeft","canvasOffsetLeft","contextMenuMarginTop","canvasOffsetTop","mobileContextMenuMargin","filterButtonMenuOffsetTop","getClippingRect","ele","boundingRect","eleRect","clipRect","w","parentRect","Infinity","columnHeaderCellHeight","getColumnHeaderCellHeight","rowHeaderCellWidth","getRowHeaderCellWidth","scrollBarWidth","clipElement","clip","scrollingElement","resizeEditInput","input","editCell","bm","gridBorderCollapse","borderWidth","cellBorderWidth","getVisibleCellByIndex","mobileEditInputHeight","groupAreaOffsetY","groupAreaOffsetX","columnGroupsAreaHeight","rowGroupsAreaWidth","cellPaddingLeft","ignoreScrollOffset","calculatedTree","offsetParent","isTree","clientX","clientY","endEdit","abort","abortEdit","newValue","oldValue","changes","originalData","boundRowIndex","defaultValue","aborted","addRow","createNewRowData","beginEditAt","inEnterMode","editable","adjacentCells","enumItems","enu","option","valueInEnum","scrollIntoView","setActiveCell","getAdjacentCells","multiLine","editCellZIndex","fontSize","editCellFontSize","scale","cellValueIsEmpty","shouldClearCellValue","Math","round","nx","ny","altKey","nextRowIndex","shiftKey","max","min","last","first","className","css","padding","buttonPadding","borderStyle","borderColor","buttonBorderColor","cursor","buttonBackgroundColor","userSelect","buttonHoverBackgroundColor","buttonActiveBorderColor","buttonActiveBackgroundColor","verticalAlign","buttonArrowColor","lineHeight","fontWeight","fontFamily","contextMenuFontFamily","contextMenuFontSize","margin","contextMenuItemMargin","borderRadius","contextMenuItemBorderRadius","contextMenuHoverBackground","contextMenuHoverColor","contextMenuLabelMargin","contextMenuLabelDisplay","contextMenuLabelMinWidth","contextMenuLabelMaxWidth","contextMenuBackground","contextMenuColor","border","contextMenuBorder","contextMenuPadding","contextMenuBorderRadius","contextMenuOpacity","overflow","whiteSpace","contextMenuCursor","marginLeft","contextFilterInputBorder","contextFilterInputBorderRadius","contextFilterInputFontFamily","contextFilterInputFontSize","contextFilterButtonBorder","contextFilterButtonBorderRadius","contextMenuFilterButtonFontFamily","contextMenuFilterButtonFontSize","cssFloat","childContextMenuArrowColor","contextMenuChildArrowFontSize","boxSizing","outline","mobileEditFontFamily","mobileEditFontSize","editCellBorder","editCellColor","editCellBackgroundColor","appearance","webkitAppearance","mozAppearance","editCellPaddingLeft","editCellFontFamily","boxShadow","editCellBoxShadow","contextMenuFilterInvalidExpresion","appendTo","setDom","ctx","context","eventParent","onblur","blur","parentIsCanvas","getContext","textBaseline","parentNodeStyle","touchstart","dblclick","mousemove","scrollWheel","copy","cut","keypress","keyup","keydown","perfCounters","cachedImagesDrawn","drawCount","perfWindowSize","entityCount","hiddenFrozenColumnCount","scrollDebugCounters","touchPPSCounters","htmlImageCache","fillArray","low","high","step","drawPerfLine","perfArr","arrIndex","useAbs","beginPath","moveTo","cx","cy","abs","lineTo","strokeStyle","stroke","drawOnAllImagesLoaded","loaded","html","complete","drawHtml","v","formattedValue","cacheKey","toString","drawImage","Image","onload","src","btoa","drawLines","coords","fill","drawGroupHandle","fillRect","strokeRect","drawUnhideIndicator","size","dir","active","minPadding","maxPadding","longEdge","median","halfLongEdge","borderCoords","unhideIndicatorBorderColor","lineWidth","fillStyle","unhideIndicatorBackgroundColor","offset","unhideIndicatorColor","drawOrderByArrow","mt","columnHeaderOrderByArrowMarginTop","ml","columnHeaderOrderByArrowMarginLeft","mr","columnHeaderOrderByArrowMarginRight","aw","columnHeaderOrderByArrowWidth","ah","columnHeaderOrderByArrowHeight","columnHeaderOrderByArrowColor","columnHeaderOrderByArrowBorderColor","orderDirection","drawTreeArrow","treeArrowMarginTop","treeArrowMarginRight","treeArrowMarginLeft","treeArrowWidth","treeArrowHeight","treeArrowColor","treeArrowBorderColor","openChildren","drawCellTreeIcon","tree","rowTree","parentCount","iconSize","cellTreeIconWidth","marginTop","cellTreeIconMarginTop","marginRight","cellTreeIconMarginRight","cellTreeIconMarginLeft","paddingLeft","icon","oldFillStyle","oldStrokeStyle","hovered","hovers","onCellTreeIcon","cellTreeIconHoverFillColor","cellTreeIconFillColor","cellTreeIconBorderColor","expand","cellTreeIconLineWidth","cellTreeIconLineColor","drawFilterButtonArrow","filterButtonHeight","filterButtonArrowHeight","filterButtonWidth","filterButtonArrowWidth","filterButtonArrowColor","filterButtonArrowBorderColor","radiusRect","radius","quadraticCurveTo","fillText","text","fillCircle","arc","PI","strokeCircle","clipFrozenArea","mode","lastFrozenColumnPixel","lastFrozenRowPixel","fillHandle","selectionHandleType","strokeHandle","addselectionHandle","hw","selectionHandleSize","tr","br","tl","bl","addBorderLine","l","addEllipsis","ellipsisCache","measureText","wrapText","splitChar","lines","calculatedLineHeight","word","words","split","textHeight","out","wrap","cellWhiteSpace","autoResize","autoResizeRows","elWidth","et","ellipsisText","elClipLength","plWidth","clippedVal","ogWordWidth","previousLine","line","cHeight","paddedHeight","curSplitChar","measure","paddedWidth","arr","originText","stepLength","direction","substr","drawText","treeCellPadding","ll","fontHeight","vPos","hPos","orderByArrowWidth","horizontalAlignment","paddingRight","verticalAlignment","paddingBottom","lineSpacing","debug","font","debugFont","debugColor","stringify","pw","idx_ord","sortColumnIndex","getFrozenColumnsWidth","frozenColumn","collapsedGroups","getCollapsedColumnGroups","isCollapsed","getColumnWidth","internal","visible","checkScrollHeight","rowHeaderCell","treeGrid","rowOpen","rowHeight","cornerCell","rowData","aCell","bc","selectionBorders","moveBorders","selectionHandles","rowHeaders","u","currentCell","rowGroupsRectInfo","rowGroupsFrozenInfo","columnGroupsRectInfo","collapsedColumnGroups","collapsedRowGroups","getCollapsedRowGroups","currentRowIndexOffset","rowIndexOffsetByHiddenRows","hiddenRowRanges","plus","performance","now","visibleRowHeights","saveRowGroupsRectInfo","saveColumnGroupsRectInfo","isColumnCollapsedByGroup","drawScrollBars","drawCorner","entities","m","scrollBarBoxMargin","scrollBarBorderColor","scrollBarBorderWidth","horizontalBox","scrollCache","horizontalBar","scrollBoxWidth","scrollWidth","verticalBox","frozenRow","verticalBar","scrollBoxHeight","horizontalBarVisible","scrollBarBackgroundColor","scrollBarBoxColor","horizontalBoxVisible","scrollBarActiveColor","scrollBarBoxBorderRadius","visibleCells","unshift","verticalBarVisible","verticalBoxVisible","scrollBarCornerBorderColor","scrollBarCornerBackgroundColor","corner","createHandlesOverlayArray","allowMovingSelection","selectionBorderTop","selectionBorderRight","selectionHandle","selectionBorderLeft","selectionBorderBottom","selectionHandleBehavior","createBorderOverlayArray","drawArray","propPrefix","offsetPoint","selectionBorder","isHeader","drawCell","rowOrderIndex","drawEach","cellStyle","cellGridAttributes","isFilterable","filterable","selected","hoverMode","openedFilter","selectedFilterButton","activeCell","rawValue","activeHeader","selectedRows","selectedColumns","f","orderByArrowSize","treeArrowSize","visibleRows","paddingTop","cellLineHeight","cellLineSpacing","viewColumnIndex","boundColumnIndex","getBoundColumnIndexFromViewColumnIndex","sortRowIndex","isNormal","gridId","isRowTree","cellTree","rowTreeColIndex","isColumnTree","userHeight","userWidth","cellHeightWithChildGrid","cellWidthWithChildGrid","save","showRowNumbers","createGrid","cellGridHeight","orderBy","filterTextPrefix","isDrawText","movingSelection","moveOffset","restore","drawFilterButton","showRowNumberGaps","previousRowNumber","hasRowGap","beginRowIndex","endRowIndex","barHeight","rowHeaderCellRowNumberGapHeight","barColor","rowHeaderCellRowNumberGapColor","showUnhideColumnsIndicator","unhideIndicator","unhideIndicatorSize","cellX","topY","isActive","orderIndex0","orderIndex1","isHiddenColumn","drawIndicator","leftX","visibleUnhideIndicators","x2","y2","iconsWidth","lineX0","lineX1","orderIndexPtr","prevColumnIndex","nextColumnIndex","indicatorX","showUnhideRowsIndicator","cellY","topIndicators","bottomIndicators","matched","indicatorY","posX","posY","filterButtonBorderColor","filterButtonBackgroundColor","filterButtonActiveBackgroundColor","onFilterButton","filterButtonHoverBackgroundColor","filterButtonBorderRadius","drawRowHeader","showRowHeaders","filteredRowNumber","rowHeaderValue","hasActiveFilters","hasCollapsedRowGroup","headerDescription","shift","drawHeaders","g","o","columnHeaderCell","nonFrozenHeaderWidth","drawHeaderColumnRange","start","rArgs","rhIndex","showColumnHeaders","scrollPixelLeft","columnHeaderCellBorderWidth","scrollIndexLeft","isColumnHeaderCell","endCap","drawRow","treeHeight","rowSansTreeHeight","trees","scrollIndexRight","scrollPixelRight","initDraw","visibleGroups","firstRowIndexOffset","drawBackground","gridBackgroundColor","initGroupArea","translate","drawGroupArea","mx","my","frozenColumnsWidth","frozenRowsHeight","onTheLeft","columnGroupIndicatorPosition","onTheTop","rowGroupIndicatorPosition","groupingAreaBackgroundColor","columnGroupRowHeight","toggleHandleSize","toggleHandlePadding","centerY","bottomY","leftmostX","drawGroupHandleAtX","pushToVisibleGroups","rightX","crossTheFrozen","notInFrozen","colIndex","groupIndicatorColor","groupIndicatorBackgroundColor","ptr","containsBegining","containsEnd","rightCompare","compareX","minLeftX","lineCoords","colWidth","rowGroupColumnWidth","centerX","topmostY","drawGroupHandleAtY","bottomCompare","compareY","minTopY","drawFrozenRows","ln","allowFreezingRows","frozenMarkerWidth","frozenMarkerBorderWidth","drawRows","snapToRow","scrollPixelTop","scrollIndexTop","scrollIndexBottom","scrollPixelBottom","hide","showNewRow","newRow","drawMoveMarkers","moveOverlayBorderWidth","moveOverlayBorderColor","setLineDash","moveOverlayBorderSegments","drawReorderMarkers","reorderObject","dragOffset","reorderMarkerBackgroundColor","reorderMarkerBorderWidth","reorderMarkerBorderColor","dragMode","k","getRowHeight","reorderMarkerIndexBorderWidth","reorderMarkerIndexBorderColor","reorderTarget","drawBorder","gridBorderWidth","gridBorderColor","drawSelectionBorders","selectionOverlayBorderWidth","selectionOverlayBorderColor","dsb","drawSelectionHandles","selectionHandleBorderWidth","selectionHandleBorderColor","selectionHandleColor","az","touchSelectHandleZone","ax","ay","drawActiveCell","cl","acx","acy","acw","ach","selectionMode","activeCellOverlayBorderWidth","activeCellOverlayBorderColor","getHeaderWidth","drawFrozenMarkers","xHover","yHover","allowFreezingColumns","freezeMarkerPosition","frozenMarkerColor","frozenMarkerBorderColor","frozenMarkerHoverColor","frozenMarkerHeaderColor","frozenMarkerHoverBorderColor","dragStartObject","frozenMarkerActiveColor","frozenMarkerActiveBorderColor","nearCell","isGrab","frozenMarkerActiveHeaderColor","drawPerfLines","showPerformance","px","py","ph","dpl","debugPerfChartTextColor","toFixed","debugPerfChartBackground","debugScrollHeightColor","debugScrollWidthColor","debugPerformanceColor","debugEntitiesColor","debugTouchPPSXColor","debugTouchPPSYColor","pop","yPPS","xPPS","drawDebug","perf","perfDelta","htmlImages","startScale","scaleDelta","zoomDeltaStart","touchLength","touches","touchPosition","touchPosition1","scrollIndex","scrollPixel","canvasOffset","touchDelta","touchAnimateTo","scrollAnimation","touchPPS","touchPPST","xPPST","yPPST","touchDuration","pointerLockPosition","mouse","touch","touchStart","dragContext","debugBackgroundColor","lh","wheeling","fn","events","removeEachListener","sfn","defaultPrevented","dispatchEachEvent","getRatio","maxPixelRatio","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","refreshScrollCacheX","frozenWidth","isColumnCollapsed","dataWidth","reduceSchema","accumulator","drawAfterResize","vb","nb","co","isScrollBoxCorner","sbw","ratio","cellBorder","columnHeaderCellBorder","dataHeight","dims","topGroupAreaHeight","leftGroupAreaWidth","ch","checkScrollBoxVisibility","overflowX","overflowY","setScrollBoxSize","setCanvasSize","dim","appliedInlineStyles","args","widthBoxRatio","heightBoxRatio","scrollBarBoxMinSize","scrollBarBoxWidth","bar","box","page","pageUpDownOverlap","newWidth","newHeight","scroll","dontDraw","floor","draggingItem","which","stopFreezeMove","ctrl","ctrlKey","metaKey","persistantSelectionMode","singleSelectionMode","dragBounds","sBounds","delta","previousCell","scrollTimer","isInGrid","rowBoundaryCrossed","columnBoundaryCrossed","cellBoundaryCrossed","prefix","cursorGrab","indicator","getUnhideIndicator","dragItem","pc","rc","rx","ry","selecting","dragStart","getSelectionBounds","isMultiColumnsSelected","isMultiRowsSelected","ignoreNextClick","toggleCollapseTree","dragAddToSelection","selectedData","getSelectedData","selectedCells","getSelectedCells","selectionBounds","selectRow","selectArea","autoScrollOnMousemove","movedVertically","autoScrollMargin","movedHorizontally","autoScrollZone","columnGroup","getColumnGroupAt","rowGroup","getRowGroupAt","startingBounds","checkSelectionChange","sb","unhideColumns","unhideRows","toggleGroup","leftOffset","topOffset","xInGrid","yInGrid","selectAll","columnHeaderClickBehavior","treeArrowClickRadius","toggleTree","dragResizeColumn","resizingStartingWidth","resizingStartingHeight","minColumnWidth","minRowHeight","resizeScrollZone","resizeChildGrids","globalRowResize","stopDragResize","hasMoved","dragItemIsSelected","fitSelectedColumns","scrollGrid","scrollPointerLock","scrollStartMode","movementX","movementY","scrollMode","scrollStart","scrollModes","scrollRepeatRate","selectionScrollIncrement","stopScrollGrid","exitPointerLock","dragReorder","columReorder","rowReorder","allowColumnReordering","allowRowReordering","selectColumn","source","reorderDeadZone","stopDragReorder","oIndex","tIndex","odata","cr","sortColumnIndices","selectedColumnIndices","deleteCount","dragMove","stopDragMove","moveSelection","freezeMove","startFreezeMove","lastMouseDownTarget","move","freeze","onUnhideIndicator","requestPointerLock","dragging","cols","keepFocusOnMouseOut","isPrintableKeyEvent","selectNone","deleteSelectedData","Number","isArrowKey","firstSelectedRowIndex","firstSelectedRow","firstSelectedColumnIndex","lastSelectedColumn","yAtTop","yAtBottom","xAtLeft","xAtRight","selectionFollowsActiveCell","currentCellIsSelected","fitColumnToValues","autosize","cellTreeExpandCollapse","deltaMode","touchHaltAnimation","scrollTo","pasteData","pasteValue","mimeType","startRowIndex","startColIndex","isSupportedHtml","parseData","cellData","forEachSelectedCell","colName","realRowIndex","cells","existingRowData","newRowData","columnName","boundRowIndexMap","affectedCells","getNextVisibleColumnIndex","visibleColumnIndex","getVisibleSchema","getVisibleColumnIndexOf","clipboardItems","clipboardData","supportedMimeTypes","pasteableItems","itemToPaste","startCell","len","pasteType","getAsString","copySelectedCellsToClipboard","clearSelectedCells","genericDiv","genericSpan","genericTable","excelTable","excelTableRow","some","expression","IGNORE_NODETYPES","isHtmlTable","sanitizeElementData","elementData","innerText","parseHtmlText","doc","DOMParser","parseFromString","querySelector","parseHtmlTable","trs","childNodes","childNode","parseText","htmlSafe","createTextString","isNeat","values","createHTMLString","htmlString","mergeHiddenRowRanges","newRange","inserted","nextRange","ctor","treeGridAttributes","storageName","invalidSearchExpClass","localStyleLibraryStorageKey","add","sortFunction","filters","tempSchema","columnTreeRowStartIndex","columnTreeRowEndIndex","origin","sorters","parsers","schemaHashes","componentL1Events","eventNames","expandToRow","viewDataLength","orderedIndex","entries","firstRowAsString","rowAsString","rowDict","textString","copiedData","setData","has","result","groupIndex","matchedGroup","gi","nextCollapsed","groupsArray","gIndex","visibility","localStorage","setItem","selectedColumn","applyDefaultValue","newRowIndex","forEachHeader","getSchemaNameHash","getFilteredAndSortedViewData","newViewData","originalRowIndex","countOfRows","headerName","filterText","currentFilterFunction","filterFrozenRows","newLen","from2","to2","slice","it2","sortFn","rowA","rowB","rowIndexB","sortFrozenRows","_row","getBestGuessDataType","drawChildGrids","gridKey","setTimer","selectionScrollZone","validateColumn","setDefaults","obj1","obj2","setAttributes","eachAttribute","setStyle","eachStyle","findColumnMaxTextLength","contextmenu","disconnect","tryLoadStoredSettings","reloadStoredValues","tempData","collapsedCount","ctr","ri","lastchild","orTree","ctc","ci","_ri","child","_ci","si","otherData","tempRow","colTrees","collapsedColCount","hasOwnProperty","initCellTreeSettings","invalidRowTree","rt","parentIndex","columnTree","dataColumnLength","invalidColumnTree","ct","getDomRoot","shadowRoot","host","getFontName","fontStyle","getFontHeight","parseFloat","parseStyleValue","initProp","propName","getStyleProperty","styleKeys","supressDrawAndEvent","isDim","getItem","message","initialized","addStyleKeyIfNoneExists","publicStyleKeyIntf","initScrollBox","ie","navigator","userAgent","edge","webKit","moz","cursorGrabing","cursorGrabbing","clearChangeLog","gotoCell","gotoRow","addButton","toggleCellCollapseTree","expandCollapseCellTree","findColumnScrollLeft","findRowScrollTop","toggleGroupColumns","toggleGroupRows","isCellVisible","isRowVisible","isColumnVisible","getSchemaFromData","expandTree","collapseTree","insertRow","deleteRow","insertColumn","deleteColumn","addColumn","setRowHeight","setColumnWidth","resetColumnWidths","resetRowHeights","assertPxColor","clearPxColorAssertions","integerToAlpha","DOMStyles","valueObject","filterFor","filterRegExp","regEnd","pattern","exec","flags","substring","flagLength","RegExp","toLocaleUpperCase","textContent","TypeError","currentCursor","eventName","RangeError","eachDataRow","setTreeGridAttributes","setCellGridAttributes","schemaGetter","schemaSetter","eachSchemaColumn","hideEachSchemaColumn","getTypes","parseInnerHtml","callback","etl","autoGenerateSchema","dataGetter","dataSetter","autoResizeColumns","sHeight","sWidth","setScrollTop","preventScrollEvent","setScrollLeft","supressDrawEvent","webComponent","modules","dom","publicMethods","Grid","eval","module","attachShadow","HTMLElement","create","customElements","observedAttributes","define","canvasDatagrid","require","EXCLUDE_GLOBAL","tKeys","argKey","tKey","sKey","ordA","charCodeAt","ordZ","fromCharCode","showFilterInCell","offsetX","offsetY","targetX","targetY","sbh","treeData","colIsSelected","isRowSelected","rowIsSelected","supressEvent","addCol","removeCol","st","de","dragObject","trArgs","treeGridHeight","beginColumnOrderIndex","endColumnOrderIndex","hiddenColumns","newSize","dontSetStorageData","sorter","addGroup","groupFor","removeGroup","firstColumnName","lastColumnName","firstOne","lastOne","error","rowIndexFrom","rowIndexTo","isInteger","dataLength","sel","visibleSchema","selectionLength","xi","maxRowLength","minXi","yi","lastSourceIndex","cidx","indicators","yZero","xZero","useTouchScrollZones","getBorder","entitiy","borderResizeZone","tsz","touchScrollZone","moveMode","borderDragBehavior","moveBorder","xBorderBehavior","yBorderBehavior","isVerticalScrollBar","isHorizontalScrollBar","allowColumnResize","allowColumnResizeFromCell","allowRowHeaderResize","allowRowResize","allowRowResizeFromCell","columnGrabZoneSize","rowGrabZoneSize","maxCol","minCol","mapEachSchemaColumn","bounds","rowHeaderCellFont","autosizePadding","autosizeHeaderCellPadding","rowHeaderCellPaddingRight","rowHeaderCellPaddingLeft","formatter","columnHeaderCellFont","columnHeaderCellPaddingRight","columnHeaderCellPaddingLeft","cellAutoResizePadding","cellFont","cellPaddingRight","total","cellFormatterString","headerCell","asc","aValue","bValue","localeCompare","date","Date","getTime","touchTimerMs","debounceTouchMove","touchMoving","touchScrollTimeout","animationFrames","getTouchPos","touchIndex","easingFunctions","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easing","touchEasingMethod","calculatePPSTimed","touchSigmaTimed","calculatePPS","touchSigma","touchEndAnimation","touchReleaseAnimationDurationMs","stopAnimation","touchEditCell","changedTouches","startingCell","calculatePPSTimer","touchContextTimeout","touchStartEvent","zoomAltered","touchStart1","touchScrollStart","touchContextMenuTimeMs","touchEndEvents","touchmove","passive","touchend","touchcancel","touchSelect","handleType","touchSelecting","touchMove","rw","rScrollZone","lScrollZone","bScrollZone","tScrollZone","t1","t2","touchDeadZone","touchZoomSensitivity","touchZoomMin","touchZoomMax","touchScroll","dz","touchReleaseAcceleration","scrollAnimationPPSThreshold"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;;;;;;;;;;;;;;;;;;ACVA;;AACA;AACa;;;;;;;;;;AAEb,6BAAe,oCAAUA,IAAV,EAAgB;AAC7B,MAAIC,SAAJ;;AAEA,WAASC,wBAAT,CAAkCC,uBAAlC,EAA2D;AACzDH,QAAI,CAACI,iBAAL,CACED,uBADF,EAEE,sCAAsCH,IAAI,CAACK,MAAL,GAAc,SAAd,GAA0B,EAAhE,CAFF;AAIAF,2BAAuB,CAACG,gBAAxB,CAAyC,WAAzC,EAAsD,YAAY;AAChEN,UAAI,CAACI,iBAAL,CACED,uBADF,EAEE,wCAFF;AAID,KALD;AAMAA,2BAAuB,CAACG,gBAAxB,CAAyC,UAAzC,EAAqD,YAAY;AAC/DN,UAAI,CAACI,iBAAL,CACED,uBADF,EAEE,kCAFF;AAID,KALD;AAMD;;AAED,WAASI,gBAAT,CAA0BC,MAA1B,EAAkC;AAChCR,QAAI,CAACI,iBAAL,CAAuBI,MAAvB,EAA+B,gCAA/B;AACAA,UAAM,CAACF,gBAAP,CAAwB,WAAxB,EAAqC,YAAY;AAC/C,UAAI,CAACN,IAAI,CAACS,UAAV,EAAsB;AACpBT,YAAI,CAACI,iBAAL,CAAuBI,MAAvB,EAA+B,sCAA/B;AACD;AACF,KAJD;AAKAA,UAAM,CAACF,gBAAP,CAAwB,UAAxB,EAAoC,YAAY;AAC9C,UAAI,CAACN,IAAI,CAACS,UAAV,EAAsB;AACpBT,YAAI,CAACI,iBAAL,CAAuBI,MAAvB,EAA+B,gCAA/B;AACD;AACF,KAJD;AAKD;;AAED,WAASE,YAAT,CAAsBC,GAAtB,EAA2BC,KAA3B,EAAkCC,MAAlC,EAA0C;AACxC,QAAIC,OAAO,GAAGC,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAd;AAAA,QACEC,WAAW,GAAGF,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CADhB;AAAA,QAEEE,UAAU,GAAGH,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAFf;AAAA,QAGEG,IAAI,GAAG,EAHT;;AAKA,QAAI,CAACC,KAAK,CAACC,OAAN,CAAcT,KAAd,CAAL,EAA2B;AACzB,YAAM,IAAIU,KAAJ,CAAU,gCAAV,CAAN;AACD;;AAED,aAASC,IAAT,GAAgB;AACd,UAAIC,GAAG,GAAG,EAAV;AAAA,UACEC,CAAC,GAAGzB,IAAI,CAAC0B,YAAL,CAAkB1B,IAAI,CAAC2B,MAAvB,CADN;;AAGA,UAAI1B,SAAS,KAAK2B,SAAlB,EAA6B;AAC3B3B,iBAAS,GAAGD,IAAI,CAAC6B,KAAL,CAAWC,YAAvB;AACD;;AAEDvB,sBAAgB,CAACO,OAAD,CAAhB;AACAd,UAAI,CAACI,iBAAL,CAAuBc,UAAvB,EAAmC,6BAAnC;AACAlB,UAAI,CAACI,iBAAL,CAAuBa,WAAvB,EAAoC,8BAApC;AAEAO,SAAG,CAACO,CAAJ,GAAQpB,GAAG,CAACqB,IAAJ,GAAWP,CAAC,CAACO,IAArB;AACAR,SAAG,CAACS,CAAJ,GAAQtB,GAAG,CAACuB,GAAJ,GAAUT,CAAC,CAACS,GAApB;AACAV,SAAG,CAACW,MAAJ,GAAa,CAAb;AACAlC,eAAS,IAAI,CAAb;AACAa,aAAO,CAACe,KAAR,CAAcO,QAAd,GAAyB,UAAzB;AACAtB,aAAO,CAACe,KAAR,CAAcQ,MAAd,GAAuBpC,SAAvB;AACAa,aAAO,CAACe,KAAR,CAAcG,IAAd,GAAqBR,GAAG,CAACO,CAAJ,GAAQ,IAA7B;AACAjB,aAAO,CAACe,KAAR,CAAcK,GAAd,GAAoBV,GAAG,CAACS,CAAJ,GAAQ,IAA5B;AACAnB,aAAO,CAACkB,IAAR,GAAerB,GAAG,CAACqB,IAAJ,GAAWhC,IAAI,CAACsC,SAAL,CAAeC,UAAzC;AACAzB,aAAO,CAACoB,GAAR,GAAcvB,GAAG,CAACuB,GAAJ,GAAUlC,IAAI,CAACsC,SAAL,CAAeE,SAAvC;AACAvB,iBAAW,CAACwB,SAAZ,GAAwBzC,IAAI,CAAC6B,KAAL,CAAWa,mBAAnC;;AACA,UAAI7B,MAAJ,EAAY;AACV,YAAI8B,GAAG,GAAG5B,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAV;AACA2B,WAAG,CAACC,YAAJ,CAAiB,KAAjB,EAAwB/B,MAAxB;AACA8B,WAAG,CAACd,KAAJ,CAAUgB,QAAV,GAAqB,MAArB;AACAF,WAAG,CAACd,KAAJ,CAAUM,MAAV,GAAmB,MAAnB;AACAjB,kBAAU,CAAC4B,WAAX,CAAuBH,GAAvB;AACD;;AACD7B,aAAO,CAACgC,WAAR,CAAoB5B,UAApB;AACAJ,aAAO,CAACgC,WAAR,CAAoB7B,WAApB;AACAF,cAAQ,CAACgC,IAAT,CAAcD,WAAd,CAA0BhC,OAA1B;AACAA,aAAO,CAACR,gBAAR,CAAyB,OAAzB,EAAkC0C,gBAAlC;AACD;;AAED7B,QAAI,CAACL,OAAL,GAAeA,OAAf;AACAK,QAAI,CAACP,KAAL,GAAaA,KAAb;AACAW,QAAI;;AAEJJ,QAAI,CAAC8B,OAAL,GAAe,YAAY;AACzB,UAAInC,OAAO,CAACoC,UAAZ,EAAwB;AACtBpC,eAAO,CAACoC,UAAR,CAAmBC,WAAnB,CAA+BrC,OAA/B;AACD;AACF,KAJD;;AAKA,WAAOK,IAAP;AACD;;AAED,WAAS6B,gBAAT,GAA4B;AAC1B,aAASI,kBAAT,GAA8B;AAC5BC,2BAAqB,CAAC,YAAY;AAChCtC,gBAAQ,CAACT,gBAAT,CAA0B,OAA1B,EAAmCN,IAAI,CAACsD,iBAAxC;AACD,OAFoB,CAArB;AAGD;;AACD,QAAItD,IAAI,CAACS,UAAT,EAAqB;AACnBT,UAAI,CAACsD,iBAAL;AACD,KAFD,MAEO;AACL,UAAI3C,GAAG,GAAG;AACRqB,YAAI,EAAEhC,IAAI,CAACQ,MAAL,CAAYM,OAAZ,CAAoBkB,IAApB,GAA2BhC,IAAI,CAACsC,SAAL,CAAeC,UADxC;AAERL,WAAG,EACDlC,IAAI,CAACQ,MAAL,CAAYM,OAAZ,CAAoBoB,GAApB,GACAlC,IAAI,CAACQ,MAAL,CAAYM,OAAZ,CAAoByC,YADpB,GAEAvD,IAAI,CAACsC,SAAL,CAAeE;AALT,OAAV;AAOAxC,UAAI,CAACS,UAAL,GAAkB+C,gBAAgB,CAAC7C,GAAD,EAAMX,IAAI,CAACQ,MAAL,CAAYI,KAAlB,CAAlC;AACAZ,UAAI,CAACI,iBAAL,CACEJ,IAAI,CAACQ,MAAL,CAAYM,OADd,EAEE,uCAFF;AAIAsC,wBAAkB;AACnB;AACF;;AAED,WAASI,gBAAT,CAA0B7C,GAA1B,EAA+BC,KAA/B,EAAsC;AACpC,QAAIH,UAAU,GAAGM,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAjB;AAAA,QACEyC,aAAa,GAAG,CAAC,CADnB;AAAA,QAEEtC,IAAI,GAAG,EAFT;AAAA,QAGEuC,IAHF;;AAKA,aAASC,WAAT,GAAuB;AACrB,eAASC,OAAT,CAAiBC,IAAjB,EAAuBC,iBAAvB,EAA0C;AACxC,iBAASC,UAAT,CAAoBC,OAApB,EAA6B;AAC3B,cAAIA,OAAO,KAAK,IAAhB,EAAsB;AACpB;AACD;;AAED,cAAI,QAAOA,OAAP,MAAmB,QAAvB,EAAiC;AAC/BF,6BAAiB,CAAChB,WAAlB,CAA8BkB,OAA9B;AACA;AACD;;AAED9D,kCAAwB,CAAC4D,iBAAD,CAAxB;AACAA,2BAAiB,CAACrB,SAAlB,GAA8BuB,OAA9B;AACA;AACD;;AAEDD,kBAAU,CAACF,IAAI,CAACI,KAAN,CAAV;AACAJ,YAAI,CAAC1D,uBAAL,GAA+B2D,iBAA/B;;AAEA,YAAID,IAAI,CAACK,KAAT,EAAgB;AACdJ,2BAAiB,CAACxD,gBAAlB,CAAmC,OAAnC,EAA4C,UAAU6D,EAAV,EAAc;AACxDN,gBAAI,CAACK,KAAL,CAAWE,KAAX,CAAiBpE,IAAjB,EAAuB,CAACmE,EAAD,CAAvB;AACAnE,gBAAI,CAACqE,aAAL;AACD,WAHD;AAID;AACF;;AA1BoB,iDA4BJzD,KA5BI;AAAA;;AAAA;AA4BrB,4DAAwB;AAAA,cAAfiD,IAAe;AACtB,cAAI1D,uBAAuB,GAAGY,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAA9B;AACA4C,iBAAO,CAACC,IAAD,EAAO1D,uBAAP,CAAP;AACAM,oBAAU,CAACqC,WAAX,CAAuB3C,uBAAvB;AACD;AAhCoB;AAAA;AAAA;AAAA;AAAA;AAiCtB;;AAED,aAASmE,UAAT,CAAoBC,GAApB,EAAyB;AACvB3D,WAAK,CAAC2D,GAAD,CAAL,CAAWpE,uBAAX,CAAmCqE,aAAnC,CAAiD,IAAIC,KAAJ,CAAU,OAAV,CAAjD;AACD;;AAED,aAASlD,IAAT,GAAgB;AACd,UAAIC,GAAG,GAAG,EAAV;AAAA,UACEC,CAAC,GAAGzB,IAAI,CAAC0B,YAAL,CAAkB1B,IAAI,CAAC2B,MAAvB,CADN;;AAGA,UAAI1B,SAAS,KAAK2B,SAAlB,EAA6B;AAC3B3B,iBAAS,GAAGD,IAAI,CAAC6B,KAAL,CAAWC,YAAvB;AACD;;AAED6B,iBAAW;AACX3D,UAAI,CAACI,iBAAL,CACEK,UADF,EAEE,iCAAiCT,IAAI,CAACK,MAAL,GAAc,SAAd,GAA0B,EAA3D,CAFF;AAKAmB,SAAG,CAACO,CAAJ,GAAQpB,GAAG,CAACqB,IAAJ,GAAWP,CAAC,CAACO,IAArB;AACAR,SAAG,CAACS,CAAJ,GAAQtB,GAAG,CAACuB,GAAJ,GAAUT,CAAC,CAACS,GAApB;AACAV,SAAG,CAACW,MAAJ,GAAa,CAAb;AACAlC,eAAS,IAAI,CAAb;AACAQ,gBAAU,CAACoB,KAAX,CAAiBO,QAAjB,GAA4B,UAA5B;AACA3B,gBAAU,CAACoB,KAAX,CAAiBQ,MAAjB,GAA0BpC,SAA1B;AACAQ,gBAAU,CAACoB,KAAX,CAAiBG,IAAjB,GAAwBR,GAAG,CAACO,CAAJ,GAAQ,IAAhC;AACAtB,gBAAU,CAACoB,KAAX,CAAiBK,GAAjB,GAAuBV,GAAG,CAACS,CAAJ,GAAQ,IAA/B;AACAlB,cAAQ,CAACgC,IAAT,CAAcD,WAAd,CAA0BrC,UAA1B;AACAiD,UAAI,GAAGjD,UAAU,CAACiE,qBAAX,EAAP;;AAEA,UAAIhB,IAAI,CAACiB,MAAL,GAAcC,MAAM,CAACC,WAAzB,EAAsC;AACpCrD,WAAG,CAACS,CAAJ,GACEjC,IAAI,CAACQ,MAAL,CAAYM,OAAZ,CAAoBoB,GAApB,GACAzB,UAAU,CAAC8C,YADX,GAEAvD,IAAI,CAACsC,SAAL,CAAeE,SAHjB;;AAIA,YAAIhB,GAAG,CAACS,CAAJ,GAAQ,CAAZ,EAAe;AACbT,aAAG,CAACS,CAAJ,GAAQjC,IAAI,CAAC6B,KAAL,CAAWiD,sBAAnB;AACD;;AAED,YACErE,UAAU,CAAC8C,YAAX,GACAqB,MAAM,CAACC,WAAP,GAAqB7E,IAAI,CAAC6B,KAAL,CAAWiD,sBAFlC,EAGE;AACArE,oBAAU,CAACoB,KAAX,CAAiBM,MAAjB,GACEyC,MAAM,CAACC,WAAP,GAAqB7E,IAAI,CAAC6B,KAAL,CAAWiD,sBAAX,GAAoC,CAAzD,GAA6D,IAD/D;AAED;AACF;;AAED,UAAIpB,IAAI,CAACqB,KAAL,GAAaH,MAAM,CAACI,UAAxB,EAAoC;AAClCxD,WAAG,CAACO,CAAJ,IACE2B,IAAI,CAACqB,KAAL,GAAaH,MAAM,CAACI,UAApB,GAAiChF,IAAI,CAAC6B,KAAL,CAAWiD,sBAD9C;AAED;;AAED,UAAItD,GAAG,CAACO,CAAJ,GAAQ,CAAZ,EAAe;AACbP,WAAG,CAACO,CAAJ,GAAQ/B,IAAI,CAAC6B,KAAL,CAAWiD,sBAAnB;AACD;;AAED,UAAItD,GAAG,CAACS,CAAJ,GAAQ,CAAZ,EAAe;AACbT,WAAG,CAACS,CAAJ,GAAQjC,IAAI,CAAC6B,KAAL,CAAWiD,sBAAnB;AACD;;AAEDrE,gBAAU,CAACoB,KAAX,CAAiBG,IAAjB,GAAwBR,GAAG,CAACO,CAAJ,GAAQ,IAAhC;AACAtB,gBAAU,CAACoB,KAAX,CAAiBK,GAAjB,GAAuBV,GAAG,CAACS,CAAJ,GAAQ,IAA/B;AACD;;AAEDd,QAAI,CAACV,UAAL,GAAkBA,UAAlB;AACAc,QAAI;AACJJ,QAAI,CAACmD,UAAL,GAAkBA,UAAlB;AACAnD,QAAI,CAACuC,IAAL,GAAYA,IAAZ;AACAvC,QAAI,CAACP,KAAL,GAAaA,KAAb;;AAEAO,QAAI,CAAC8B,OAAL,GAAe,YAAY;AACzB,UAAIxC,UAAU,CAACyC,UAAf,EAA2B;AACzBzC,kBAAU,CAACyC,UAAX,CAAsBC,WAAtB,CAAkC1C,UAAlC;AACD;AACF,KAJD;;AAMAwE,UAAM,CAACC,cAAP,CAAsB/D,IAAtB,EAA4B,eAA5B,EAA6C;AAC3CgE,SAAG,EAAE,SAASA,GAAT,GAAe;AAClB,eAAO1B,aAAP;AACD,OAH0C;AAI3C2B,SAAG,EAAE,SAASA,GAAT,CAAaC,KAAb,EAAoB;AACvB,YAAI,OAAOA,KAAP,KAAiB,QAAjB,IAA6BC,KAAK,CAACD,KAAD,CAAlC,IAA6C,CAACE,QAAQ,CAACF,KAAD,CAA1D,EAAmE;AACjE,gBAAM,IAAI/D,KAAJ,CAAU,mDAAV,CAAN;AACD;;AAEDmC,qBAAa,GAAG4B,KAAhB;;AAEA,YAAI5B,aAAa,GAAG7C,KAAK,CAAC4E,MAAN,GAAe,CAAnC,EAAsC;AACpC/B,uBAAa,GAAG7C,KAAK,CAAC4E,MAAN,GAAe,CAA/B;AACD;;AAED,YAAI/B,aAAa,GAAG,CAApB,EAAuB;AACrBA,uBAAa,GAAG,CAAhB;AACD;;AAED7C,aAAK,CAAC6E,OAAN,CAAc,UAAU5B,IAAV,EAAgB6B,KAAhB,EAAuB;AACnC,cAAIA,KAAK,KAAKjC,aAAd,EAA6B;AAC3B,mBAAOzD,IAAI,CAACI,iBAAL,CACLyD,IAAI,CAAC1D,uBADA,EAEL,wCAFK,CAAP;AAID;;AAEDH,cAAI,CAACI,iBAAL,CACEyD,IAAI,CAAC1D,uBADP,EAEE,kCAFF;AAID,SAZD;AAaD;AAhC0C,KAA7C;AAkCA,WAAOgB,IAAP;AACD;;AAEDnB,MAAI,CAACsD,iBAAL,GAAyB,YAAY;AACnC,QAAItD,IAAI,CAACS,UAAT,EAAqB;AACnBM,cAAQ,CAAC4E,mBAAT,CAA6B,OAA7B,EAAsC3F,IAAI,CAACsD,iBAA3C;AACAtD,UAAI,CAACS,UAAL,CAAgBwC,OAAhB;AACAjD,UAAI,CAACS,UAAL,GAAkBmB,SAAlB;AACA5B,UAAI,CAACI,iBAAL,CACEJ,IAAI,CAACQ,MAAL,CAAYM,OADd,EAEE,sCAFF;AAID;AACF,GAVD;;AAYAd,MAAI,CAACqE,aAAL,GAAqB,UAAUuB,CAAV,EAAa;AAChC,QAAIA,CAAC,IAAIA,CAAC,CAACC,OAAF,KAAc,EAAvB,EAA2B;AAC3B9E,YAAQ,CAAC4E,mBAAT,CAA6B,SAA7B,EAAwC3F,IAAI,CAACqE,aAA7C;AACApE,aAAS,GAAGD,IAAI,CAAC6B,KAAL,CAAWC,YAAvB;AACA9B,QAAI,CAACsD,iBAAL;;AAEA,QAAItD,IAAI,CAACQ,MAAT,EAAiB;AACfR,UAAI,CAACQ,MAAL,CAAYyC,OAAZ;AACD;;AAEDjD,QAAI,CAACQ,MAAL,GAAcoB,SAAd;AACD,GAXD;;AAaA5B,MAAI,CAAC8F,aAAL,GAAqB,YAAY;AAC/B9F,QAAI,CAACQ,MAAL,CAAYM,OAAZ,CAAoBe,KAApB,CAA0BG,IAA1B,GACEhC,IAAI,CAACQ,MAAL,CAAYM,OAAZ,CAAoBkB,IAApB,GAA2BhC,IAAI,CAACsC,SAAL,CAAeC,UAA1C,GAAuD,IADzD;AAEAvC,QAAI,CAACQ,MAAL,CAAYM,OAAZ,CAAoBe,KAApB,CAA0BK,GAA1B,GACElC,IAAI,CAACQ,MAAL,CAAYM,OAAZ,CAAoBoB,GAApB,GAA0BlC,IAAI,CAACsC,SAAL,CAAeE,SAAzC,GAAqD,IADvD;AAEAxC,QAAI,CAACsD,iBAAL;AACD,GAND;;AAQAtD,MAAI,CAAC+F,YAAL,GAAoB,UAAUpF,GAAV,EAAeC,KAAf,EAAsBC,MAAtB,EAA8B;AAChD,aAASuC,kBAAT,GAA8B;AAC5BC,2BAAqB,CAAC,YAAY;AAChCtC,gBAAQ,CAACT,gBAAT,CAA0B,SAA1B,EAAqCN,IAAI,CAACqE,aAA1C;AACD,OAFoB,CAArB;AAGD;;AAED,QAAIrE,IAAI,CAACQ,MAAT,EAAiB;AACfR,UAAI,CAACqE,aAAL;AACD;;AAEDrE,QAAI,CAACQ,MAAL,GAAcE,YAAY,CAACC,GAAD,EAAMC,KAAN,EAAaC,MAAb,CAA1B;AACAuC,sBAAkB;AACnB,GAbD;;AAcA;AACD,C;;;;;;;;;;;;;;;;;;;;ACrUD;;AACA;AACa;;;;AAEb;AAEA,6BAAe,sCAAY;AACzB,MAAI4C,OAAJ;AAAA,MACEC,SAAS,GAAG,EADd;;AAEAA,WAAS,CAACC,mBAAV,GAAgC,SAASC,iBAAT,CAA2BC,IAA3B,EAAiC;AAC/DA,QAAI,GAAGA,IAAI,CAACC,OAAL,CAAa,QAAb,EAAuB,EAAvB,CAAP;AACA,QAAIC,CAAC,GAAG,EAAR;AAAA,QACEC,aADF;AAEAnF,SAAK,CAACoF,SAAN,CAAgBf,OAAhB,CAAwBgB,IAAxB,CAA6BL,IAA7B,EAAmC,UAAUM,KAAV,EAAgB;AACjD,UAAIH,aAAJ,EAAmB;AACjBA,qBAAa,GAAG,KAAhB;AACAD,SAAC,IAAII,KAAI,CAACC,WAAL,EAAL;AACA;AACD;;AACD,UAAID,KAAI,KAAK,GAAb,EAAkB;AAChBH,qBAAa,GAAG,IAAhB;AACA;AACD;;AACDD,OAAC,IAAII,KAAL;AACD,KAXD;AAYA,WAAOJ,CAAP;AACD,GAjBD;;AAkBAL,WAAS,CAACE,iBAAV,GAA8B,SAASA,iBAAT,CAA2BC,IAA3B,EAAiCQ,IAAjC,EAAuC;AACnE,QAAIN,CAAC,GAAG,EAAR;AACAlF,SAAK,CAACoF,SAAN,CAAgBf,OAAhB,CAAwBgB,IAAxB,CAA6BL,IAA7B,EAAmC,UAAUM,MAAV,EAAgB;AACjD,UAAIA,MAAI,KAAKA,MAAI,CAACC,WAAL,EAAb,EAAiC;AAC/BL,SAAC,IAAI,MAAMI,MAAI,CAACG,WAAL,EAAX;AACA;AACD;;AACDP,OAAC,IAAII,MAAL;AACD,KAND;AAOA,WAAO,CAACE,IAAI,GAAG,QAAH,GAAc,EAAnB,IAAyBN,CAAhC;AACD,GAVD;;AAWA,WAASQ,cAAT,CAAwBC,IAAxB,EAA8BlD,IAA9B,EAAoC;AAClC,QAAImD,CAAC,GAAG,EAAR;AAAA,QACEC,CADF;AAEAC,sDAAQ,CAACF,CAAD,CAAR;AACAC,KAAC,GAAGD,CAAC,CAACE,QAAF,CAAWH,IAAX,EAAiBI,MAAjB,CAAwB,UAAUH,CAAV,EAAa;AACvC,aACEA,CAAC,CAAC,CAAD,CAAD,CAAKH,WAAL,OAAuBhD,IAAI,CAACgD,WAAL,EAAvB,IACAZ,SAAS,CAACE,iBAAV,CAA4Ba,CAAC,CAAC,CAAD,CAA7B,MAAsCnD,IAAI,CAACgD,WAAL,EADtC,IAEAZ,SAAS,CAACE,iBAAV,CAA4Ba,CAAC,CAAC,CAAD,CAA7B,EAAkC,IAAlC,MAA4CnD,IAAI,CAACgD,WAAL,EAH9C;AAKD,KANG,EAMD,CANC,CAAJ;AAOA,WAAOI,CAAP;AACD;;AACDhB,WAAS,CAACmB,mBAAV,GAAgC,UAAUC,0BAAV,EAAsClG,IAAtC,EAA4C;AAC1E,QAAI,CAACA,IAAI,CAACmG,WAAV,EAAuB;AACrB;AACD;;AACD,QAAIC,MAAM,GAAG3C,MAAM,CAAC4C,gBAAP,CACTrG,IAAI,CAACsG,OAAL,KAAiB,iBAAjB,GAAqCtG,IAArC,GAA4CA,IAAI,CAACQ,MADxC,EAET,IAFS,CAAb;AAAA,QAIE+F,IAAI,GAAG,EAJT;AAKAvG,QAAI,CAACwG,aAAL,GAAqBJ,MAArB;AACAL,sDAAQ,CAACQ,IAAD,CAAR;AACAA,QAAI,GAAGA,IAAI,CAACR,QAAL,CAAcU,MAArB;AACAF,QAAI,CAACjC,OAAL,CAAa,UAAUoC,GAAV,EAAe;AAC1B,UAAIC,GAAJ;AACAA,SAAG,GAAGP,MAAM,CAACQ,gBAAP,CAAwB9B,SAAS,CAACE,iBAAV,CAA4B0B,GAAG,CAAC,CAAD,CAA/B,EAAoC,IAApC,CAAxB,CAAN;;AACA,UAAIC,GAAG,KAAK,EAAZ,EAAgB;AACdA,WAAG,GAAGP,MAAM,CAACQ,gBAAP,CACJ9B,SAAS,CAACE,iBAAV,CAA4B0B,GAAG,CAAC,CAAD,CAA/B,EAAoC,KAApC,CADI,CAAN;AAGD;;AACD,UAAIC,GAAG,KAAK,EAAR,IAAc,OAAOA,GAAP,KAAe,QAAjC,EAA2C;AACzC3G,YAAI,CAAC6G,gBAAL,CACEH,GAAG,CAAC,CAAD,CADL,EAEE7B,OAAO,SAAQ6B,GAAG,CAAC,CAAD,CAAX,EAAP,CACEC,GAAG,CAACzB,OAAJ,CAAY,MAAZ,EAAoB,EAApB,EAAwBA,OAAxB,CAAgC,MAAhC,EAAwC,EAAxC,CADF,EAEEwB,GAAG,CAAC,CAAD,CAFL,CAFF,EAME,IANF;AAQD;AACF,KAlBD;;AAmBA,QAAI,CAACR,0BAAD,IAA+BlG,IAAI,CAACqD,aAAxC,EAAuD;AACrDnB,2BAAqB,CAAC,YAAY;AAChClC,YAAI,CAAC8G,MAAL,CAAY,IAAZ;AACD,OAFoB,CAArB;AAGA9G,UAAI,CAACqD,aAAL,CAAmB,cAAnB,EAAmCrD,IAAI,CAACU,KAAxC;AACD;AACF,GArCD;;AAsCAmE,SAAO,GAAG;AACRkC,QAAI,EAAE,cAAUC,OAAV,EAAmB;AACvB,UAAI;AACF,eAAOC,IAAI,CAACC,KAAL,CAAWF,OAAX,CAAP;AACD,OAFD,CAEE,OAAOvC,CAAP,EAAU;AACV,cAAM,IAAItE,KAAJ,CAAU,gDAAV,CAAN;AACD;AACF,KAPO;AAQRgH,UAAM,EAAE,gBAAUC,SAAV,EAAqB;AAC3B,UAAI;AACF,eAAOH,IAAI,CAACC,KAAL,CAAWE,SAAX,CAAP;AACD,OAFD,CAEE,OAAO3C,CAAP,EAAU;AACV,cAAM,IAAItE,KAAJ,CACJ,4DADI,CAAN;AAGD;AACF,KAhBO;AAiBRkH,UAAM,EAAE,gBAAUC,MAAV,EAAkBZ,GAAlB,EAAuB;AAC7B,UAAIa,CAAC,GAAGC,QAAQ,CAACF,MAAD,EAAS,EAAT,CAAhB;AACA,aAAOnD,KAAK,CAACoD,CAAD,CAAL,GAAWb,GAAX,GAAiBa,CAAxB;AACD,KApBO;AAqBR,eAAS,iBAAUE,OAAV,EAAmB;AAC1B,aAAO,QAAQC,IAAR,CAAaD,OAAb,CAAP;AACD,KAvBO;AAwBRE,UAAM,EAAE,gBAAUC,GAAV,EAAe;AACrB,aAAOA,GAAP;AACD;AA1BO,GAAV;;AA4BA9C,WAAS,CAAC+C,uBAAV,GAAoC,YAAY;AAC9C,QAAIhC,CAAC,GAAG,EAAR;AAAA,QACEiC,KAAK,GAAG,CAAC,MAAD,EAAS,QAAT,EAAmB,OAAnB,EAA4B,WAA5B,EAAyC,MAAzC,CADV;AAEA/B,sDAAQ,CAACF,CAAD,CAAR;AACAA,KAAC,CAACE,QAAF,CAAWgC,UAAX,CAAsBzD,OAAtB,CAA8B,UAAU0D,IAAV,EAAgB;AAC5CF,WAAK,CAACG,IAAN,CAAWD,IAAI,CAAC,CAAD,CAAJ,CAAQtC,WAAR,EAAX;AACD,KAFD;AAGA,WAAOoC,KAAP;AACD,GARD;;AASAhD,WAAS,CAACoD,oBAAV,GAAiC,YAAY;AAC3C,SAAKC,SAAL,GAAiB,KAAjB;AACD,GAFD;;AAGArD,WAAS,CAACsD,iBAAV,GAA8B,YAAY;AACxC,QAAIpI,IAAI,GAAG,IAAX;AACAA,QAAI,CAACqI,aAAL,CAAmB/G,SAAnB,GAA+B,EAA/B;AACAtB,QAAI,CAACqI,aAAL,CAAmB1G,WAAnB,CAA+B3B,IAAI,CAACQ,MAApC;AACAR,QAAI,CAACmI,SAAL,GAAiB,IAAjB;AACArD,aAAS,CAACwD,OAAV,CAAkBtI,IAAlB;AACA8E,aAAS,CAACmB,mBAAV,CAA8B,IAA9B,EAAoCjG,IAApC;AACAA,QAAI,CAAC8G,MAAL,CAAY,IAAZ;AACD,GARD;;AASAhC,WAAS,CAACyD,eAAV,GAA4B,YAAY;AACtC,SAAKzB,MAAL;AACD,GAFD;;AAGAhC,WAAS,CAAC0D,wBAAV,GAAqC,UAAUC,QAAV,EAAoBC,MAApB,EAA4BC,MAA5B,EAAoC;AACvE,QAAIC,GAAJ;AAAA,QACE5I,IAAI,GAAG,IADT;AAAA,QAEE0G,GAFF;;AAGA,QAAI+B,QAAQ,KAAK,OAAjB,EAA0B;AACxB3D,eAAS,CAACmB,mBAAV,CAA8B,KAA9B,EAAqCjG,IAArC;AACA;AACD;;AACD,QAAIyI,QAAQ,KAAK,MAAjB,EAAyB;AACvB,UAAIzI,IAAI,CAAC6I,QAAL,KAAkB,+BAAtB,EAAuD;AACrD7I,YAAI,CAAC6I,QAAL,GAAgB,oCAAhB;AACD;;AACD7I,UAAI,CAAC+G,IAAL,GAAY4B,MAAZ;AACA;AACD;;AACD,QAAIF,QAAQ,KAAK,QAAjB,EAA2B;AACzBzI,UAAI,CAACmH,MAAL,GAActC,OAAO,CAACsC,MAAR,CAAewB,MAAf,CAAd;AACA;AACD;;AACD,QAAIF,QAAQ,KAAK,MAAjB,EAAyB;AACvBzI,UAAI,CAAC8I,IAAL,GAAYH,MAAZ;AACA;AACD;;AACD,QAAIF,QAAQ,KAAK,OAAb,IAAwBA,QAAQ,KAAK,WAAzC,EAAsD;AACpD;AACD;;AACD/B,OAAG,GAAGf,cAAc,CAAC,YAAD,EAAe8C,QAAf,CAApB;;AACA,QAAI/B,GAAJ,EAAS;AACPkC,SAAG,GAAG/D,OAAO,SAAQ6B,GAAG,CAAC,CAAD,CAAX,EAAb;AACA1G,UAAI,CAAC+H,UAAL,CAAgBrB,GAAG,CAAC,CAAD,CAAnB,IAA0BkC,GAAG,CAACD,MAAD,CAA7B;AACA;AACD;;AACD,QAAI,MAAMjB,IAAN,CAAWe,QAAX,CAAJ,EAA0B;AACxBzI,UAAI,CAACb,gBAAL,CAAsB,OAAOsJ,QAA7B,EAAuCM,QAAQ,CAAC,GAAD,EAAMJ,MAAN,CAA/C;AACD;;AACD;AACD,GApCD;;AAqCA7D,WAAS,CAACwD,OAAV,GAAoB,UAAUtI,IAAV,EAAgB;AAClC,QAAIgJ,QAAJ;;AACA,QAAI,CAACvF,MAAM,CAACwF,gBAAZ,EAA8B;AAC5B;AACD;;AACDjJ,QAAI,CAACiG,mBAAL,GAA2B,YAAY;AACrCnB,eAAS,CAACmB,mBAAV,CAA8B,KAA9B,EAAqCjG,IAArC;AACAA,UAAI,CAAC8G,MAAL;AACD,KAHD;AAIA;AACJ;AACA;AACA;AACA;AACA;;;AACIkC,YAAQ,GAAG,IAAIvF,MAAM,CAACwF,gBAAX,CAA4B,UAAUC,SAAV,EAAqB;AAC1D,UAAIC,cAAJ,EAAoBC,UAApB;AACAnJ,WAAK,CAACoF,SAAN,CAAgBf,OAAhB,CAAwBgB,IAAxB,CAA6B4D,SAA7B,EAAwC,UAAUG,QAAV,EAAoB;AAC1D,YACEA,QAAQ,CAACC,aAAT,KAA2B,OAA3B,IACAD,QAAQ,CAACC,aAAT,KAA2B,OAF7B,EAGE;AACAF,oBAAU,GAAG,IAAb;AACA;AACD;;AACD,YAAIC,QAAQ,CAACE,MAAT,CAAgBC,QAAhB,KAA6B,OAAjC,EAA0C;AACxCJ,oBAAU,GAAG,IAAb;AACA;AACD;;AACD,YACEC,QAAQ,CAACE,MAAT,CAAgBxH,UAAhB,IACAsH,QAAQ,CAACE,MAAT,CAAgBxH,UAAhB,CAA2ByH,QAA3B,KAAwC,OAF1C,EAGE;AACAJ,oBAAU,GAAG,IAAb;AACA;AACD;;AACD,YACEC,QAAQ,CAACE,MAAT,KAAoBvJ,IAApB,KACCqJ,QAAQ,CAACI,UAAT,CAAoBpF,MAApB,GAA6B,CAA7B,IAAkCgF,QAAQ,CAACK,IAAT,KAAkB,eADrD,CADF,EAGE;AACAP,wBAAc,GAAG,IAAjB;AACD;AACF,OAzBD;;AA0BA,UAAIC,UAAJ,EAAgB;AACdpJ,YAAI,CAACiG,mBAAL,CAAyB,KAAzB,EAAgCjG,IAAhC;AACD;;AACD,UAAImJ,cAAJ,EAAoB;AAClB,YAAInJ,IAAI,CAAC6I,QAAL,KAAkB,+BAAtB,EAAuD;AACrD7I,cAAI,CAAC6I,QAAL,GAAgB,oCAAhB;AACD;;AACD7I,YAAI,CAAC+G,IAAL,GAAY/G,IAAI,CAACsB,SAAjB;AACD;AACF,KArCU,CAAX;AAsCA0H,YAAQ,CAACV,OAAT,CAAiBtI,IAAjB,EAAuB;AACrB2J,mBAAa,EAAE,IADM;AAErBC,eAAS,EAAE,IAFU;AAGrB7B,gBAAU,EAAE,IAHS;AAIrB8B,aAAO,EAAE;AAJY,KAAvB;AAMA5J,SAAK,CAACoF,SAAN,CAAgBf,OAAhB,CAAwBgB,IAAxB,CACE1F,QAAQ,CAACkK,gBAAT,CAA0B,OAA1B,CADF,EAEE,UAAUC,EAAV,EAAc;AACZf,cAAQ,CAACV,OAAT,CAAiByB,EAAjB,EAAqB;AACnBJ,qBAAa,EAAE,IADI;AAEnBC,iBAAS,EAAE,IAFQ;AAGnB7B,kBAAU,EAAE,IAHO;AAInB8B,eAAO,EAAE;AAJU,OAArB;AAMD,KATH;AAWD,GAtED;;AAuEA,SAAO/E,SAAP;AACD,C;;;;;;;;;;;;;;;;;;;AC1PD;;AACA;AACa;;;;AAEb,6BAAe,oCAAUjG,IAAV,EAAgB;AAC7B,MAAIC,SAAJ,EAAekL,kBAAf,EAAmCC,mBAAnC;;AACA,WAASC,qBAAT,CAA+BC,oBAA/B,EAAqD;AACnDtL,QAAI,CAACI,iBAAL,CACEkL,oBADF,EAEE,uCAAuCtL,IAAI,CAACK,MAAL,GAAc,SAAd,GAA0B,EAAjE,CAFF;AAIAiL,wBAAoB,CAAChL,gBAArB,CAAsC,WAAtC,EAAmD,YAAY;AAC7DN,UAAI,CAACI,iBAAL,CACEkL,oBADF,EAEE,yCAFF;AAID,KALD;AAMAA,wBAAoB,CAAChL,gBAArB,CAAsC,UAAtC,EAAkD,YAAY;AAC5DN,UAAI,CAACI,iBAAL,CACEkL,oBADF,EAEE,mCAFF;AAID,KALD;AAMD;;AACD,WAASC,iBAAT,CAA2BpH,EAA3B,EAA+BxD,GAA/B,EAAoCC,KAApC,EAA2C4K,iBAA3C,EAA8D;AAC5D,QAAIC,SAAS,GAAG1K,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAhB;AAAA,QACE0K,OAAO,GAAG3K,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CADZ;AAAA,QAEE2K,SAAS,GAAG5K,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAFd;AAAA,QAGE4K,QAAQ,GAAG,EAHb;AAAA,QAIEnI,aAAa,GAAG,CAAC,CAJnB;AAAA,QAKEtC,IAAI,GAAG,EALT;AAAA,QAMEuC,IANF;;AAOA,QAAI,CAACtC,KAAK,CAACC,OAAN,CAAcT,KAAd,CAAL,EAA2B;AACzB,YAAM,IAAIU,KAAJ,CAAU,qCAAV,CAAN;AACD;;AACD,aAASqC,WAAT,GAAuB;AACrB/C,WAAK,CAAC6E,OAAN,CAAc,UAAU5B,IAAV,EAAgB;AAC5B,YAAIyH,oBAAoB,GAAGvK,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAA3B;AAAA,YACE6K,cADF;;AAEA,iBAASC,kBAAT,CAA4BlG,CAA5B,EAA+B;AAC7B,cACEA,CAAC,CAACmG,aAAF,KAAoBN,SAApB,IACA5H,IAAI,CAACmI,WAAL,CAAiBP,SAAjB,KAA+B7F,CAAC,CAACmG,aADjC,IAEAF,cAAc,KAAKjG,CAAC,CAACmG,aAFrB,IAGAT,oBAAoB,KAAK1F,CAAC,CAACmG,aAH3B,IAIAlI,IAAI,CAACmI,WAAL,CAAiBP,SAAjB,CAA2BQ,QAA3B,CAAoCrG,CAAC,CAACmG,aAAtC,CALF,EAME;AACA;AACD;;AACDlI,cAAI,CAACmI,WAAL,CAAiB/I,OAAjB;AACA2I,kBAAQ,CAACM,MAAT,CAAgBN,QAAQ,CAACO,OAAT,CAAiBtI,IAAI,CAACmI,WAAtB,CAAhB,EAAoD,CAApD;AACAnI,cAAI,CAACmI,WAAL,GAAmBpK,SAAnB;AACA0J,8BAAoB,CAAC3F,mBAArB,CACE,UADF,EAEEmG,kBAFF;AAIAL,mBAAS,CAAC9F,mBAAV,CAA8B,UAA9B,EAA0CmG,kBAA1C;AACAR,8BAAoB,CAAC1I,YAArB,CAAkC,aAAlC,EAAiD,GAAjD;AACA0I,8BAAoB,CAAC1I,YAArB,CAAkC,SAAlC,EAA6C,GAA7C;AACD;;AACD,iBAASwJ,kBAAT,CAA4BxL,KAA5B,EAAmC;AACjC;AACA,cACE0K,oBAAoB,CAACe,YAArB,CAAkC,SAAlC,MAAiD,GAAjD,IACAf,oBAAoB,CAACe,YAArB,CAAkC,aAAlC,MAAqD,GAFvD,EAGE;AACA;AACD;;AACD,cAAIC,IAAI,GAAGhB,oBAAoB,CAAC5G,qBAArB,EAAX;AACA4H,cAAI,GAAG;AACLtK,gBAAI,EACFsK,IAAI,CAACtK,IAAL,GACAhC,IAAI,CAAC6B,KAAL,CAAW0K,0BADX,GAEAd,SAAS,CAACe,WAJP;AAKLtK,eAAG,EAAEoK,IAAI,CAACpK,GAAL,GAAWlC,IAAI,CAAC6B,KAAL,CAAW4K,yBALtB;AAML9H,kBAAM,EAAE2H,IAAI,CAAC3H,MANR;AAOLI,iBAAK,EAAEuH,IAAI,CAACvH;AAPP,WAAP;AASAlB,cAAI,CAACmI,WAAL,GAAmBT,iBAAiB,CAACpH,EAAD,EAAKmI,IAAL,EAAW1L,KAAX,EAAkBO,IAAlB,CAApC;AACAmK,8BAAoB,CAAC1I,YAArB,CAAkC,aAAlC,EAAiD,GAAjD;AACA0I,8BAAoB,CAAChL,gBAArB,CAAsC,UAAtC,EAAkDwL,kBAAlD;AACAL,mBAAS,CAACnL,gBAAV,CAA2B,UAA3B,EAAuCwL,kBAAvC;AACAF,kBAAQ,CAACxC,IAAT,CAAcvF,IAAI,CAACmI,WAAnB;AACD;;AACD,iBAASU,kBAAT,GAA8B;AAC5B,cAAI1F,CAAJ;;AACA,cAAIsE,oBAAoB,CAACe,YAArB,CAAkC,aAAlC,MAAqD,GAAzD,EAA8D;AAC5D;AACD;;AACDf,8BAAoB,CAAC1I,YAArB,CAAkC,SAAlC,EAA6C,GAA7C;;AACA,cAAI,OAAOiB,IAAI,CAACjD,KAAZ,KAAsB,UAA1B,EAAsC;AACpCoG,aAAC,GAAGnD,IAAI,CAACjD,KAAL,CAAWwD,KAAX,CAAiBjD,IAAjB,EAAuB,CACzB,UAAUP,KAAV,EAAiB;AACfwL,gCAAkB,CAACxL,KAAD,CAAlB;AACD,aAHwB,CAAvB,CAAJ;;AAKA,gBAAIoG,CAAC,KAAKpF,SAAN,IAAmBR,KAAK,CAACC,OAAN,CAAc2F,CAAd,CAAvB,EAAyC;AACvCoF,gCAAkB,CAACpF,CAAD,CAAlB;AACD;;AACD;AACD;;AACDoF,4BAAkB,CAACvI,IAAI,CAACjD,KAAN,CAAlB;AACD;;AACD,iBAASgD,OAAT,CAAiBC,IAAjB,EAAuB;AACrB,mBAASE,UAAT,CAAoBC,OAApB,EAA6B;AAC3B,gBAAIA,OAAO,KAAK,IAAhB,EAAsB;AACpB;AACD;;AACD,gBAAI,OAAOA,OAAP,KAAmB,UAAvB,EAAmC;AACjC,qBAAOD,UAAU,CAACC,OAAO,CAACG,EAAD,CAAR,CAAjB;AACD;;AACD,gBAAI,QAAOH,OAAP,MAAmB,QAAvB,EAAiC;AAC/BsH,kCAAoB,CAACxI,WAArB,CAAiCkB,OAAjC;AACA;AACD;;AACDqH,iCAAqB,CAACC,oBAAD,CAArB;AACAA,gCAAoB,CAAC7I,SAArB,GAAiCuB,OAAjC;AACA;AACD;;AACDD,oBAAU,CAACF,IAAI,CAACI,KAAN,CAAV;AACAJ,cAAI,CAACyH,oBAAL,GAA4BA,oBAA5B;;AACA,cACGzH,IAAI,CAACjD,KAAL,IAAciD,IAAI,CAACjD,KAAL,CAAW4E,MAAX,GAAoB,CAAnC,IACA,OAAO3B,IAAI,CAACjD,KAAZ,KAAsB,UAFxB,EAGE;AACAiL,0BAAc,GAAG9K,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAjB;AACAhB,gBAAI,CAACI,iBAAL,CACEyL,cADF,EAEE,qCAFF;AAIAA,0BAAc,CAACpJ,SAAf,GAA2BzC,IAAI,CAAC6B,KAAL,CAAW8K,yBAAtC;AACArB,gCAAoB,CAACxI,WAArB,CAAiC+I,cAAjC;AACAP,gCAAoB,CAAChL,gBAArB,CACE,WADF,EAEEoM,kBAFF;AAIApB,gCAAoB,CAAChL,gBAArB,CAAsC,UAAtC,EAAkD,YAAY;AAC5DgL,kCAAoB,CAAC1I,YAArB,CAAkC,SAAlC,EAA6C,GAA7C;AACD,aAFD;AAGD;;AACD,cAAIiB,IAAI,CAACK,KAAT,EAAgB;AACdoH,gCAAoB,CAAChL,gBAArB,CAAsC,OAAtC,EAA+C,UAAU6D,EAAV,EAAc;AAC3DN,kBAAI,CAACK,KAAL,CAAWE,KAAX,CAAiBpE,IAAjB,EAAuB,CAACmE,EAAD,CAAvB;AACD,aAFD;AAGD;AACF;;AACDP,eAAO,CAACC,IAAD,CAAP;AACA4H,iBAAS,CAAC3I,WAAV,CAAsBwI,oBAAtB;AACD,OAhHD;AAiHD;;AACD,aAAShH,UAAT,CAAoBC,GAApB,EAAyB;AACvB3D,WAAK,CAAC2D,GAAD,CAAL,CAAW+G,oBAAX,CAAgC9G,aAAhC,CAA8C,IAAIC,KAAJ,CAAU,OAAV,CAA9C;AACD;;AACD,aAASmI,oBAAT,GAAgC;AAC9B,UAAInB,SAAS,CAACjJ,SAAV,GAAsB,CAA1B,EAA6B;AAC3BxC,YAAI,CAACwJ,aAAL,CAAmB1G,WAAnB,CAA+B4I,OAA/B;AACD,OAFD,MAEO,IAAIA,OAAO,CAACxI,UAAZ,EAAwB;AAC7BwI,eAAO,CAACxI,UAAR,CAAmBC,WAAnB,CAA+BuI,OAA/B;AACD;;AACD,UACED,SAAS,CAACjJ,SAAV,IACEiJ,SAAS,CAACoB,YAAV,GAAyBpB,SAAS,CAAClI,YADrC,IAEAoI,SAAS,CAACzI,UAHZ,EAIE;AACAyI,iBAAS,CAACzI,UAAV,CAAqBC,WAArB,CAAiCwI,SAAjC;AACD,OAND,MAMO,IACLF,SAAS,CAACoB,YAAV,GAAyBpB,SAAS,CAAClI,YAAnC,GAAkD,CAAlD,IACA,EACEkI,SAAS,CAACjJ,SAAV,IACAiJ,SAAS,CAACoB,YAAV,GAAyBpB,SAAS,CAAClI,YAFrC,CAFK,EAML;AACAvD,YAAI,CAACwJ,aAAL,CAAmB1G,WAAnB,CAA+B6I,SAA/B;AACD;AACF;;AACD,aAASmB,IAAT,CAAcC,OAAd,EAAuB;AACrB,UAAIC,OAAO,GAAG,CAAd;AACA,UAAIC,KAAK,GAAGC,WAAW,CAAC,YAAY;AAClC,YAAIF,OAAO,IAAI,GAAf,EAAoB;AAClBG,uBAAa,CAACF,KAAD,CAAb;AACAF,iBAAO,CAAClL,KAAR,CAAcuL,OAAd,GAAwB,MAAxB;;AACA,cAAIL,OAAO,CAAC7J,UAAZ,EAAwB;AACtB6J,mBAAO,CAAC7J,UAAR,CAAmBC,WAAnB,CAA+B4J,OAA/B;AACD;AACF;;AACDA,eAAO,CAAClL,KAAR,CAAcmL,OAAd,GAAwBA,OAAxB;AACAD,eAAO,CAAClL,KAAR,CAAcsF,MAAd,GAAuB,mBAAmB6F,OAAO,GAAG,GAA7B,GAAmC,GAA1D;AACAA,eAAO,IAAIA,OAAO,GAAG,GAArB;AACD,OAXsB,EAWpBhN,IAAI,CAACkJ,UAAL,CAAgBmE,gCAAhB,GAAmD,GAX/B,CAAvB;AAYD;;AACD,aAASC,MAAT,CAAgBP,OAAhB,EAAyB;AACvB,UAAIC,OAAO,GAAG,GAAd;AACAD,aAAO,CAAClL,KAAR,CAAcuL,OAAd,GAAwB,OAAxB;AACA,UAAIH,KAAK,GAAGC,WAAW,CAAC,YAAY;AAClC,YAAIF,OAAO,IAAI,CAAf,EAAkB;AAChBG,uBAAa,CAACF,KAAD,CAAb;AACD;;AACDF,eAAO,CAAClL,KAAR,CAAcmL,OAAd,GAAwBA,OAAxB;AACAD,eAAO,CAAClL,KAAR,CAAcsF,MAAd,GAAuB,mBAAmB6F,OAAO,GAAG,GAA7B,GAAmC,GAA1D;AACAA,eAAO,IAAIA,OAAO,GAAG,GAArB;AACD,OAPsB,EAOpBhN,IAAI,CAACkJ,UAAL,CAAgBqE,gCAAhB,GAAmD,GAP/B,CAAvB;AAQD;;AACD,aAASC,gBAAT,CAA0B3C,IAA1B,EAAgC;AAC9B,aAAO,SAAS4C,CAAT,GAAa;AAClB,YAAIC,CAAC,GAAG1N,IAAI,CAACkJ,UAAL,CAAgByE,wBAAxB;;AACA,YAAI9C,IAAI,KAAK,IAAT,IAAiBY,SAAS,CAACjJ,SAAV,KAAwB,CAA7C,EAAgD;AAC9C;AACD;;AACD,YAAIqI,IAAI,KAAK,MAAT,IAAmBY,SAAS,CAACjJ,SAAV,KAAwBiJ,SAAS,CAACoB,YAAzD,EAAuE;AACrE;AACD;;AACDpB,iBAAS,CAACjJ,SAAV,IAAuBqI,IAAI,KAAK,IAAT,GAAgB,CAAC6C,CAAjB,GAAqBA,CAA5C;AACAvC,0BAAkB,GAAGyC,UAAU,CAC7BH,CAD6B,EAE7BzN,IAAI,CAACkJ,UAAL,CAAgB2E,wBAFa,EAG7BhD,IAH6B,CAA/B;AAKD,OAdD;AAeD;;AACD,aAASiD,cAAT,CAAwBjD,IAAxB,EAA8B;AAC5B,aAAO,YAAY;AACjBkD,oBAAY,CAAC5C,kBAAD,CAAZ;AACD,OAFD;AAGD;;AACD,aAAS5J,IAAT,GAAgB;AACd,UAAIC,GAAG,GAAG,EAAV;AAAA,UACEC,CAAC,GAAGzB,IAAI,CAAC0B,YAAL,CAAkB1B,IAAI,CAAC2B,MAAvB,CADN;;AAEA,UAAI1B,SAAS,KAAK2B,SAAlB,EAA6B;AAC3B3B,iBAAS,GAAGD,IAAI,CAAC6B,KAAL,CAAWmM,iBAAvB;AACD;;AACDrK,iBAAW;AACX3D,UAAI,CAACI,iBAAL,CACEqL,SADF,EAEE,kCAAkCzL,IAAI,CAACK,MAAL,GAAc,SAAd,GAA0B,EAA5D,CAFF;AAIAmB,SAAG,CAACO,CAAJ,GAAQpB,GAAG,CAACqB,IAAJ,GAAWP,CAAC,CAACO,IAArB;AACAR,SAAG,CAACS,CAAJ,GAAQtB,GAAG,CAACuB,GAAJ,GAAUT,CAAC,CAACS,GAApB;AACAV,SAAG,CAACW,MAAJ,GAAa,CAAb;AACAlC,eAAS,IAAI,CAAb;AACAwL,eAAS,CAAC5J,KAAV,CAAgBmL,OAAhB,GAA0B,CAA1B;AACAvB,eAAS,CAAC5J,KAAV,CAAgBO,QAAhB,GAA2B,UAA3B;AACAsJ,aAAO,CAAC7J,KAAR,CAAcoM,KAAd,GAAsBjO,IAAI,CAAC6B,KAAL,CAAWqM,qBAAjC;AACAvC,eAAS,CAAC9J,KAAV,CAAgBoM,KAAhB,GAAwBjO,IAAI,CAAC6B,KAAL,CAAWqM,qBAAnC;AACA,OAACxC,OAAD,EAAUC,SAAV,EAAqBlG,OAArB,CAA6B,UAAUyF,EAAV,EAAc;AACzCA,UAAE,CAACrJ,KAAH,CAASsM,SAAT,GAAqB,QAArB;AACAjD,UAAE,CAACrJ,KAAH,CAASO,QAAT,GAAoB,UAApB;AACA8I,UAAE,CAACrJ,KAAH,CAASQ,MAAT,GAAkBpC,SAAS,GAAG,CAA9B;AACD,OAJD;AAKAwL,eAAS,CAAC5J,KAAV,CAAgBQ,MAAhB,GAAyBpC,SAAzB;;AACA,UAAIuL,iBAAiB,IAAIA,iBAAiB,CAAC4C,aAA3C,EAA0D;AACxD3C,iBAAS,CAAC5J,KAAV,CAAgBwM,SAAhB,GACEzJ,MAAM,CAACC,WAAP,GACArD,GAAG,CAACS,CADJ,GAEAjC,IAAI,CAAC6B,KAAL,CAAWyM,wBAFX,GAGA,IAJF;AAKA7C,iBAAS,CAAC5J,KAAV,CAAgB0M,QAAhB,GAA2B5N,GAAG,CAAC6N,KAAJ,GAAY,IAAvC;AACAhN,WAAG,CAACS,CAAJ,IAAStB,GAAG,CAACwB,MAAb;AACD;;AACD,UAAInC,IAAI,CAACK,MAAT,EAAiB;AACfoL,iBAAS,CAAC5J,KAAV,CAAgB2M,KAAhB,GAAwB7N,GAAG,CAAC6N,KAAJ,GAAY,IAApC;AACD;;AACD/C,eAAS,CAAC5J,KAAV,CAAgBG,IAAhB,GAAuBR,GAAG,CAACO,CAAJ,GAAQ,IAA/B;AACA0J,eAAS,CAAC5J,KAAV,CAAgBK,GAAhB,GAAsBV,GAAG,CAACS,CAAJ,GAAQ,IAA9B;AACAwJ,eAAS,CAACnL,gBAAV,CAA2B,QAA3B,EAAqCsM,oBAArC;AACAnB,eAAS,CAACnL,gBAAV,CAA2B,OAA3B,EAAoC,UAAUsF,CAAV,EAAa;AAC/C,YAAI5F,IAAI,CAACyO,QAAT,EAAmB;AACjBhD,mBAAS,CAACjJ,SAAV,IAAuBoD,CAAC,CAAC8I,MAAzB;AACAjD,mBAAS,CAAClJ,UAAV,IAAwBqD,CAAC,CAAC+I,MAA1B;AACD;;AACD/B,4BAAoB;AACrB,OAND;AAOAlB,aAAO,CAACjJ,SAAR,GAAoBzC,IAAI,CAAC6B,KAAL,CAAW+M,sBAA/B;AACAjD,eAAS,CAAClJ,SAAV,GAAsBzC,IAAI,CAAC6B,KAAL,CAAWgN,wBAAjC;AACApD,eAAS,CAAC3I,WAAV,CAAsB4I,OAAtB;AACA3K,cAAQ,CAACgC,IAAT,CAAcD,WAAd,CAA0B6I,SAA1B;AACA5K,cAAQ,CAACgC,IAAT,CAAcD,WAAd,CAA0B2I,SAA1B;AACA6B,YAAM,CAAC7B,SAAD,CAAN;AACA/H,UAAI,GAAG+H,SAAS,CAAC/G,qBAAV,EAAP,CArDc,CAsDd;;AACA,UAAIhB,IAAI,CAACiB,MAAL,GAAcC,MAAM,CAACC,WAAzB,EAAsC;AACpC,YAAI,EAAE2G,iBAAiB,IAAIA,iBAAiB,CAAC4C,aAAzC,CAAJ,EAA6D;AAC3D5M,aAAG,CAACS,CAAJ,IACEyB,IAAI,CAACiB,MAAL,GACA3E,IAAI,CAAC6B,KAAL,CAAWiN,uBADX,GAEAlK,MAAM,CAACC,WAHT;AAID;;AACD,YAAIrD,GAAG,CAACS,CAAJ,GAAQ,CAAZ,EAAe;AACbT,aAAG,CAACS,CAAJ,GAAQjC,IAAI,CAAC6B,KAAL,CAAWiN,uBAAnB;AACD;;AACD,YACErD,SAAS,CAAClI,YAAV,GACAqB,MAAM,CAACC,WAAP,GAAqB7E,IAAI,CAAC6B,KAAL,CAAWiN,uBAFlC,EAGE;AACArD,mBAAS,CAAC5J,KAAV,CAAgBM,MAAhB,GACEyC,MAAM,CAACC,WAAP,GAAqB7E,IAAI,CAAC6B,KAAL,CAAWiN,uBAAX,GAAqC,CAA1D,GAA8D,IADhE;AAED;AACF;;AACD,UAAIpL,IAAI,CAACqB,KAAL,GAAaH,MAAM,CAACI,UAAxB,EAAoC;AAClCxD,WAAG,CAACO,CAAJ,IACE2B,IAAI,CAACqB,KAAL,GAAaH,MAAM,CAACI,UAApB,GAAiChF,IAAI,CAAC6B,KAAL,CAAWiN,uBAD9C;AAED;;AACD,UAAItN,GAAG,CAACO,CAAJ,GAAQ,CAAZ,EAAe;AACbP,WAAG,CAACO,CAAJ,GAAQ/B,IAAI,CAAC6B,KAAL,CAAWiN,uBAAnB;AACD;;AACD,UAAItN,GAAG,CAACS,CAAJ,GAAQ,CAAZ,EAAe;AACbT,WAAG,CAACS,CAAJ,GAAQjC,IAAI,CAAC6B,KAAL,CAAWiN,uBAAnB;AACD;;AACDrD,eAAS,CAAC5J,KAAV,CAAgBG,IAAhB,GAAuBR,GAAG,CAACO,CAAJ,GAAQ,IAA/B;AACA0J,eAAS,CAAC5J,KAAV,CAAgBK,GAAhB,GAAsBV,GAAG,CAACS,CAAJ,GAAQ,IAA9B;AACAyB,UAAI,GAAG+H,SAAS,CAAC/G,qBAAV,EAAP;AACAgH,aAAO,CAAC7J,KAAR,CAAcK,GAAd,GAAoBwB,IAAI,CAACxB,GAAL,GAAW,IAA/B;AACAyJ,eAAS,CAAC9J,KAAV,CAAgBK,GAAhB,GACEwB,IAAI,CAACxB,GAAL,GAAWwB,IAAI,CAACvB,MAAhB,GAAyBwJ,SAAS,CAACpI,YAAnC,GAAkD,IADpD;AAEAmI,aAAO,CAAC7J,KAAR,CAAcG,IAAd,GAAqB0B,IAAI,CAAC1B,IAAL,GAAY,IAAjC;AACA2J,eAAS,CAAC9J,KAAV,CAAgBG,IAAhB,GAAuB0B,IAAI,CAAC1B,IAAL,GAAY,IAAnC;AACA2J,eAAS,CAAC9J,KAAV,CAAgB2M,KAAhB,GAAwB/C,SAAS,CAACe,WAAV,GAAwB,IAAhD;AACAd,aAAO,CAAC7J,KAAR,CAAc2M,KAAd,GAAsB/C,SAAS,CAACe,WAAV,GAAwB,IAA9C;AACAb,eAAS,CAACrL,gBAAV,CAA2B,WAA3B,EAAwCkN,gBAAgB,CAAC,MAAD,CAAxD;AACA7B,eAAS,CAACrL,gBAAV,CAA2B,UAA3B,EAAuCwN,cAAc,CAAC,MAAD,CAArD;AACApC,aAAO,CAACpL,gBAAR,CAAyB,WAAzB,EAAsCkN,gBAAgB,CAAC,IAAD,CAAtD;AACA9B,aAAO,CAACpL,gBAAR,CAAyB,UAAzB,EAAqCwN,cAAc,CAAC,IAAD,CAAnD;AACAlB,0BAAoB;AACrB;;AACDzL,QAAI,CAAC4N,UAAL,GAAkB/O,IAAI,CAACmB,IAAvB;AACAA,QAAI,CAACqK,iBAAL,GAAyBA,iBAAzB;AACArK,QAAI,CAACsK,SAAL,GAAiBA,SAAjB;AACAlK,QAAI;AACJJ,QAAI,CAACmD,UAAL,GAAkBA,UAAlB;AACAnD,QAAI,CAACuC,IAAL,GAAYA,IAAZ;AACAvC,QAAI,CAACP,KAAL,GAAaA,KAAb;AACAO,QAAI,CAACuK,OAAL,GAAeA,OAAf;AACAvK,QAAI,CAACwK,SAAL,GAAiBA,SAAjB;;AACAxK,QAAI,CAAC8B,OAAL,GAAe,YAAY;AACzB8K,kBAAY,CAAC5C,kBAAD,CAAZ;AACAS,cAAQ,CAACnG,OAAT,CAAiB,UAAUuJ,CAAV,EAAa;AAC5BA,SAAC,CAAC/L,OAAF;AACD,OAFD;AAGA,OAAC0I,SAAD,EAAYD,OAAZ,EAAqBD,SAArB,EAAgChG,OAAhC,CAAwC,UAAUyF,EAAV,EAAc;AACpD4B,YAAI,CAAC5B,EAAD,CAAJ;AACD,OAFD;AAGD,KARD;;AASAjG,UAAM,CAACC,cAAP,CAAsB/D,IAAtB,EAA4B,eAA5B,EAA6C;AAC3CgE,SAAG,EAAE,eAAY;AACf,eAAO1B,aAAP;AACD,OAH0C;AAI3C2B,SAAG,EAAE,aAAUC,KAAV,EAAiB;AACpB,YAAI,OAAOA,KAAP,KAAiB,QAAjB,IAA6BC,KAAK,CAACD,KAAK,IAAI,CAACE,QAAQ,CAACF,KAAD,CAAnB,CAAtC,EAAmE;AACjE,gBAAM,IAAI/D,KAAJ,CAAU,oDAAV,CAAN;AACD;;AACDmC,qBAAa,GAAG4B,KAAhB;;AACA,YAAI5B,aAAa,GAAG7C,KAAK,CAAC4E,MAAN,GAAe,CAAnC,EAAsC;AACpC/B,uBAAa,GAAG7C,KAAK,CAAC4E,MAAN,GAAe,CAA/B;AACD;;AACD,YAAI/B,aAAa,GAAG,CAApB,EAAuB;AACrBA,uBAAa,GAAG,CAAhB;AACD;;AACD7C,aAAK,CAAC6E,OAAN,CAAc,UAAU5B,IAAV,EAAgB6B,KAAhB,EAAuB;AACnC,cAAIA,KAAK,KAAKjC,aAAd,EAA6B;AAC3B,mBAAOzD,IAAI,CAACI,iBAAL,CACLyD,IAAI,CAACyH,oBADA,EAEL,yCAFK,CAAP;AAID;;AACDtL,cAAI,CAACI,iBAAL,CACEyD,IAAI,CAACyH,oBADP,EAEE,mCAFF;AAID,SAXD;AAYD;AA3B0C,KAA7C;AA6BA,WAAOnK,IAAP;AACD;;AACD,WAAS8N,4BAAT,CAAsCrJ,CAAtC,EAAyC;AACvC,QAAIsJ,eAAe,GAAGnO,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAtB;AAAA,QACEmO,WAAW,GAAGpO,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CADhB;AAAA,QAEEoO,wBAAwB,GAAGrO,QAAQ,CAACC,aAAT,CAAuB,QAAvB,CAF7B;AAAA,QAGEqO,WAAW,GAAGtO,QAAQ,CAACC,aAAT,CAAuB,OAAvB,CAHhB;AAAA,QAIE0H,CAAC,GACC9C,CAAC,CAAC0J,IAAF,IAAU1J,CAAC,CAAC0J,IAAF,CAAOC,MAAjB,GACI3J,CAAC,CAAC0J,IAAF,CAAOC,MAAP,CAActL,KAAd,IAAuB2B,CAAC,CAAC0J,IAAF,CAAOC,MAAP,CAActF,IADzC,GAEI,EAPR;AAAA,QAQEuF,KARF;;AASA,aAASC,qBAAT,GAAiC;AAC/BJ,iBAAW,CAACxN,KAAZ,CAAkB6N,UAAlB,GAA+B1P,IAAI,CAAC6B,KAAL,CAAW8N,4BAA1C;AACAN,iBAAW,CAACxN,KAAZ,CAAkBoM,KAAlB,GAA0BjO,IAAI,CAAC6B,KAAL,CAAW+N,uBAArC;;AACA,UAAI5P,IAAI,CAAC6P,kBAAT,EAA6B;AAC3BR,mBAAW,CAACxN,KAAZ,CAAkB6N,UAAlB,GACE1P,IAAI,CAAC6B,KAAL,CAAWiO,oCADb;AAEAT,mBAAW,CAACxN,KAAZ,CAAkBoM,KAAlB,GAA0BjO,IAAI,CAAC6B,KAAL,CAAWkO,+BAArC;AACD;AACF;;AACD,aAASC,gBAAT,GAA4B;AAC1B,UAAIC,KAAK,GAAG,CAAZ;AACA,UAAIrP,KAAK,GAAG,EAAZ;AACA,UAAIsP,UAAU,GAAG,EAAjB;AAEAlQ,UAAI,CAACmQ,QAAL,CAAc1K,OAAd,CAAsB,UAAU2K,GAAV,EAAe;AACnC,YAAIC,SAAS,GACXD,GAAG,CAACxK,CAAC,CAAC0J,IAAF,CAAOC,MAAP,CAActF,IAAf,CAAH,IAA2B,IAA3B,GACImG,GAAG,CAACxK,CAAC,CAAC0J,IAAF,CAAOC,MAAP,CAActF,IAAf,CADP,GAEIqG,MAAM,CAACF,GAAG,CAACxK,CAAC,CAAC0J,IAAF,CAAOC,MAAP,CAActF,IAAf,CAAJ,CAAN,CAAgCsG,IAAhC,EAHN;AAIA,YAAIlL,KAAK,GAAGrF,IAAI,CAACwQ,WAAL,CAAiBC,QAAjB,CAA0BJ,SAA1B,IACRrQ,IAAI,CAACkJ,UAAL,CAAgBwH,UADR,GAERL,SAFJ;;AAIA,YAAIzP,KAAK,CAACyE,KAAD,CAAL,IAAgB4K,KAAK,GAAGjQ,IAAI,CAACkJ,UAAL,CAAgByH,oBAA5C,EAAkE;AAChE;AACD;;AACDV,aAAK,IAAI,CAAT;AACArP,aAAK,CAACyE,KAAD,CAAL,GAAe;AACbpB,eAAK,EAAEjE,IAAI,CAAC4Q,UAAL,CAAgBhL,CAAC,CAAC0J,IAAF,CAAOC,MAAP,CAAc1E,IAAd,IAAsB,QAAtC,EAAgD;AACrDyE,gBAAI,EAAE;AAAEjK,mBAAK,EAAEA;AAAT;AAD+C,WAAhD,CADM;AAIbnB,eAAK,EAAE,eAAU0B,CAAV,EAAa;AAClByJ,uBAAW,CAAChK,KAAZ,GAAoBA,KAApB;AACAO,aAAC,CAACiL,eAAF;AACAxB,uBAAW,CAAC7K,aAAZ,CAA0B,IAAIC,KAAJ,CAAU,OAAV,CAA1B;AACAzE,gBAAI,CAAC8Q,mBAAL;AACA;AACD;AAVY,SAAf;AAYD,OAzBD;;AA2BA,UAAI7L,MAAM,CAAC8L,IAAP,CAAYnQ,KAAZ,EAAmBuL,OAAnB,CAA2BnM,IAAI,CAACkJ,UAAL,CAAgBwH,UAA3C,MAA2D,CAAC,CAAhE,EAAmE;AACjER,kBAAU,CAAC9G,IAAX,CAAgBxI,KAAK,CAACZ,IAAI,CAACkJ,UAAL,CAAgBwH,UAAjB,CAArB;AACA,eAAO9P,KAAK,CAACZ,IAAI,CAACkJ,UAAL,CAAgBwH,UAAjB,CAAZ;AACD;;AAED,aAAOR,UAAU,CAACc,MAAX,CACL/L,MAAM,CAAC8L,IAAP,CAAYnQ,KAAZ,EAAmBqQ,GAAnB,CAAuB,UAAUC,GAAV,EAAe;AACpC,eAAOtQ,KAAK,CAACsQ,GAAD,CAAZ;AACD,OAFD,CADK,CAAP;AAKD;;AAED,aAASC,yBAAT,CAAmChN,EAAnC,EAAuC;AACrC,UAAIA,EAAE,IAAI,CAAC,WAAD,EAAc,SAAd,EAAyB,OAAzB,EAAkC,KAAlC,EAAyCsM,QAAzC,CAAkDtM,EAAE,CAAC+M,GAArD,CAAV,EAAqE;AACnE;AACD;;AAED,UAAIE,iBAAiB,GAAGpB,gBAAgB,EAAxC;AAEAR,WAAK,GAAGH,WAAW,CAAC3K,qBAAZ,EAAR;;AACA,UAAI0G,mBAAJ,EAAyB;AACvBA,2BAAmB,CAACnI,OAApB;AACAmI,2BAAmB,GAAGxJ,SAAtB;AACD;;AACDwJ,yBAAmB,GAAGG,iBAAiB,CACrC3F,CADqC,EAErC;AACE5D,YAAI,EAAEwN,KAAK,CAACxN,IADd;AAEEE,WAAG,EAAEsN,KAAK,CAACtN,GAFb;AAGE6C,aAAK,EAAEyK,KAAK,CAACzK,KAHf;AAIEJ,cAAM,EAAE6K,KAAK,CAAC7K,MAJhB;AAKExC,cAAM,EAAEqN,KAAK,CAACrN,MALhB;AAMEqM,aAAK,EAAEgB,KAAK,CAAChB;AANf,OAFqC,EAUrC4C,iBAVqC,EAWrC;AAAEhD,qBAAa,EAAE;AAAjB,OAXqC,CAAvC;AAaAhD,yBAAmB,CAAC3H,aAApB,GAAoC,CAApC;AACD;;AACDzD,QAAI,CAACI,iBAAL,CAAuB+O,WAAvB,EAAoC,oCAApC;AACAnP,QAAI,CAACI,iBAAL,CACEgP,wBADF,EAEE,4CAFF;AAIApP,QAAI,CAACI,iBAAL,CACEiP,WADF,EAEE,2CAFF;AAIAI,yBAAqB;AACrBJ,eAAW,CAACgC,OAAZ,GAAsBrR,IAAI,CAAC8Q,mBAA3B;AACAzB,eAAW,CAAC/O,gBAAZ,CAA6B,SAA7B,EAAwC,UAAUsF,CAAV,EAAa;AACnD,UAAIA,CAAC,CAACsL,GAAF,KAAU,WAAd,EAA2B;AACzB9F,2BAAmB,CAAC3H,aAApB,IAAqC,CAArC;AACD;;AAED,UAAImC,CAAC,CAACsL,GAAF,KAAU,SAAd,EAAyB;AACvB9F,2BAAmB,CAAC3H,aAApB,IAAqC,CAArC;AACD;;AAED,UAAImC,CAAC,CAACsL,GAAF,KAAU,OAAd,EAAuB;AACrB9F,2BAAmB,CAAC9G,UAApB,CAA+B8G,mBAAmB,CAAC3H,aAAnD;AACAzD,YAAI,CAACsR,kBAAL;AACD;;AAED,UAAI1L,CAAC,CAACsL,GAAF,KAAU,KAAd,EAAqB;AACnB9F,2BAAmB,CAAC9G,UAApB,CAA+B8G,mBAAmB,CAAC3H,aAAnD;AACAmC,SAAC,CAAC2L,cAAF;AACD;;AAED,UAAI3L,CAAC,CAACsL,GAAF,KAAU,QAAd,EAAwB;AACtBlR,YAAI,CAACsR,kBAAL;AACD;AACF,KAtBD;AAuBAjC,eAAW,CAAC/O,gBAAZ,CAA6B,OAA7B,EAAsC,YAAY;AAChDN,UAAI,CAACwR,SAAL,CAAe5L,CAAC,CAAC0J,IAAF,CAAOC,MAAP,CAActF,IAA7B,EAAmCoF,WAAW,CAAChK,KAA/C;AACD,KAFD;AAGAgK,eAAW,CAAC/O,gBAAZ,CAA6B,OAA7B,EAAsC6Q,yBAAtC;AACA,KAAC,OAAD,EAAU,MAAV,EAAkB,SAAlB,EAA6B,OAA7B,EAAsC,QAAtC,EAAgD1L,OAAhD,CAAwD,UAAUgM,EAAV,EAAc;AACpEpC,iBAAW,CAAC/O,gBAAZ,CAA6BmR,EAA7B,EAAiChC,qBAAjC;AACD,KAFD;AAGAJ,eAAW,CAAChK,KAAZ,GAAoBO,CAAC,CAAC0J,IAAF,CAAOC,MAAP,GAChBvP,IAAI,CAAC0R,aAAL,CAAmB9L,CAAC,CAAC0J,IAAF,CAAOC,MAAP,CAActF,IAAjC,KAA0C,EAD1B,GAEhB,EAFJ;AAGAkF,eAAW,CAAC1M,SAAZ,GAAwBzC,IAAI,CAACkJ,UAAL,CAAgByI,gBAAhB,CAAiCtL,OAAjC,CAAyC,KAAzC,EAAgDqC,CAAhD,CAAxB;;AACA0G,4BAAwB,CAACiC,OAAzB,GAAmC,YAAY;AAC7C,UAAIjG,mBAAJ,EAAyB;AACvB,eAAOpL,IAAI,CAAC8Q,mBAAL,EAAP;AACD;;AACDK,+BAAyB;AAC1B,KALD;;AAMA/B,4BAAwB,CAAC3M,SAAzB,GAAqCzC,IAAI,CAAC6B,KAAL,CAAW+P,uBAAhD;AACA1C,mBAAe,CAAC5O,gBAAhB,CAAiC,OAAjC,EAA0C,UAAUsF,CAAV,EAAa;AACrD,aAAOA,CAAC,CAACiL,eAAF,EAAP;AACD,KAFD;AAGA3B,mBAAe,CAACpM,WAAhB,CAA4BqM,WAA5B;AACAD,mBAAe,CAACpM,WAAhB,CAA4BuM,WAA5B;AACAH,mBAAe,CAACpM,WAAhB,CAA4BsM,wBAA5B;AACAxJ,KAAC,CAAChF,KAAF,CAAQwI,IAAR,CAAa;AACXnF,WAAK,EAAEiL;AADI,KAAb;;AAGA,QAAIjK,MAAM,CAAC8L,IAAP,CAAY/Q,IAAI,CAAC0R,aAAjB,EAAgClM,MAApC,EAA4C;AAC1CP,YAAM,CAAC8L,IAAP,CAAY/Q,IAAI,CAAC0R,aAAjB,EAAgCjM,OAAhC,CAAwC,UAAUoM,EAAV,EAAc;AACpD,YAAIC,CAAC,GAAG9R,IAAI,CAAC+R,eAAL,CAAqBF,EAArB,CAAR;AACAjM,SAAC,CAAChF,KAAF,CAAQwI,IAAR,CAAa;AACXnF,eAAK,EAAEjE,IAAI,CAACkJ,UAAL,CAAgB8I,sBAAhB,CAAuC3L,OAAvC,CACL,KADK,EAELyL,CAAC,CAAC7N,KAAF,IAAW6N,CAAC,CAAC7H,IAFR,CADI;AAKX/F,eAAK,EAAE,SAAS+N,iBAAT,CAA2BrM,CAA3B,EAA8B;AACnCA,aAAC,CAAC2L,cAAF;AACAvR,gBAAI,CAACwR,SAAL,CAAeK,EAAf,EAAmB,EAAnB;AACA7R,gBAAI,CAACkS,YAAL,CAAkBC,KAAlB;AACD;AATU,SAAb;AAWD,OAbD;AAcD;AACF;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACE,WAASC,4BAAT,CAAsCjO,EAAtC,EAA0CmE,MAA1C,EAAkD;AAChD,QAAM+J,OAAO,GAAG,qBAAhB;AACA,QAAIjR,KAAK,CAACC,OAAN,CAAc8C,EAAE,CAACkO,OAAD,CAAhB,KAA8BlO,EAAE,CAACkO,OAAD,CAAF,KAAgB,IAAlD,EAAwD,OAAOlO,EAAE,CAACkO,OAAD,CAAT;AACxDlO,MAAE,CAACkO,OAAD,CAAF,GAAc,IAAd;AAEA,QAAI,CAACjR,KAAK,CAACC,OAAN,CAAcrB,IAAI,CAACsS,UAAnB,CAAD,IAAmCtS,IAAI,CAACsS,UAAL,CAAgB9M,MAAhB,KAA2B,CAAlE,EAAqE;AACrE,QAAM+M,SAAS,GAAGvS,IAAI,CAACsS,UAAL,CAAgB,CAAhB,CAAlB;AACA,QAAI,CAACC,SAAD,IAAcA,SAAS,CAAC/M,MAAV,KAAqB,CAAvC,EAA0C;;AAC1C,SAAK,IAAIgN,QAAQ,GAAG,CAApB,EAAuBA,QAAQ,GAAGxS,IAAI,CAACmQ,QAAL,CAAc3K,MAAhD,EAAwDgN,QAAQ,EAAhE,EAAoE;AAClE,UAAMpC,GAAG,GAAGpQ,IAAI,CAACmQ,QAAL,CAAcqC,QAAd,CAAZ;AACA,UAAI,CAACpC,GAAL,EAAU;AACV,UAAMqC,OAAO,GAAGzS,IAAI,CAACsS,UAAL,CAAgBE,QAAhB,CAAhB;AACA,UAAI,CAACC,OAAL,EAAc;AACd,UAAIA,OAAO,CAACjN,MAAR,KAAmB+M,SAAS,CAAC/M,MAAjC,EAAyC;;AACzC,WAAK,IAAIwB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuL,SAAS,CAAC/M,MAA9B,EAAsCwB,CAAC,EAAvC;AACE,YAAIuL,SAAS,CAACvL,CAAD,CAAT,KAAiByL,OAAO,CAACzL,CAAD,CAA5B,EAAiC;AADnC;AAED;;AACDuL,aAAS,CAACG,IAAV,CAAe,UAAChF,CAAD,EAAIiF,CAAJ;AAAA,aAAUjF,CAAC,GAAGiF,CAAd;AAAA,KAAf;AAEA;;AACA,QAAMC,MAAM,GAAG,EAAf;AACA,QAAIC,KAAK,GAAGN,SAAS,CAAC,CAAD,CAArB;AACA,QAAIO,GAAG,GAAGP,SAAS,CAAC,CAAD,CAAnB;;AACA,SAAK,IAAIvL,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGuL,SAAS,CAAC/M,MAA9B,EAAsCwB,EAAC,EAAvC,EAA2C;AACzC,UAAM+L,UAAU,GAAGR,SAAS,CAACvL,EAAD,CAA5B;;AACA,UAAI+L,UAAU,KAAKD,GAAG,GAAG,CAAzB,EAA4B;AAC1BA,WAAG,GAAGC,UAAN;AACA;AACD;;AACDH,YAAM,CAACxJ,IAAP,CAAY,CAACyJ,KAAD,EAAQC,GAAR,CAAZ;AACAD,WAAK,GAAGE,UAAR;AACAD,SAAG,GAAGC,UAAN;AACD;;AACDH,UAAM,CAACxJ,IAAP,CAAY,CAACyJ,KAAD,EAAQC,GAAR,CAAZ;AAEA,QAAME,iBAAiB,GAAG7O,EAAE,CAACmL,IAAH,CAAQ2D,WAAlC;AACA,QAAMC,YAAY,GAAGN,MAAM,CAACO,IAAP,CACnB,UAACC,KAAD;AAAA,aACEJ,iBAAiB,IAAII,KAAK,CAAC,CAAD,CAA1B,IACAJ,iBAAiB,IAAII,KAAK,CAAC,CAAD,CAD1B,IAEAA,KAAK,CAAC,CAAD,CAAL,KAAaA,KAAK,CAAC,CAAD,CAHpB;AAAA,KADmB,CAArB;AAMA,QAAI,CAACF,YAAL,EAAmB;AAEnB;;AACA,QAAMG,MAAM,GAAGrT,IAAI,CAACqT,MAAL,CAAYC,OAA3B;AACA,QAAI,CAAClS,KAAK,CAACC,OAAN,CAAcgS,MAAd,CAAL,EAA4B;AAE5B,QAAME,aAAa,GAAGL,YAAY,CAACjC,GAAb,CAAiB,UAAC8B,UAAD,EAAgB;AACrD,UAAMS,WAAW,GAAGH,MAAM,CAACN,UAAD,CAA1B;AACA,UAAMU,UAAU,GAAGnL,MAAM,CAACkL,WAAD,CAAzB;AACA,aAAOvO,MAAM,CAACyO,MAAP,CAAc,EAAd,EAAkBD,UAAlB,EAA8B;AAAEV,kBAAU,EAAVA;AAAF,OAA9B,CAAP;AACD,KAJqB,CAAtB;AAKA,QAAIQ,aAAa,CAACI,SAAd,CAAwB,UAACC,EAAD;AAAA,aAAQ,CAACA,EAAT;AAAA,KAAxB,KAAwC,CAA5C,EAA+C;AAC/C,WAAQzP,EAAE,CAACkO,OAAD,CAAF,GAAckB,aAAtB;AACD;AACD;AACF;AACA;AACA;;;AACE,WAASM,yBAAT,CAAmCC,eAAnC,EAAoD;AAClD,QAAIV,KAAK,GAAG,EAAZ;AACA,QAAIW,IAAI,GAAG,CAAC,CAAZ;AACA,QAAIC,EAAE,GAAG,IAAT;AACAhU,QAAI,CAACsS,UAAL,CAAgB7M,OAAhB,CAAwB,UAAU2K,GAAV,EAAe1K,KAAf,EAAsB;AAC5C,UAAI,CAACsO,EAAL,EAAS;;AACT,UAAID,IAAI,GAAG,CAAC,CAAZ,EAAe;AACbA,YAAI,GAAGrO,KAAP;AACA0N,aAAK,CAAC,CAAD,CAAL,GAAW1N,KAAX;AACA;AACD;;AACD,UAAIA,KAAK,KAAKqO,IAAI,GAAG,CAAjB,IAAsB,CAAC3D,GAAvB,IAA8BA,GAAG,CAAC5K,MAAJ,KAAe,CAAjD,EAAoD;AAClDwO,UAAE,GAAG,KAAL;AACA;AACD;;AACDD,UAAI,GAAGrO,KAAP;AACA0N,WAAK,CAAC,CAAD,CAAL,GAAW1N,KAAX;AACD,KAbD;;AAcA,QAAIsO,EAAJ,EAAQ;AACN,UAAIZ,KAAK,CAAC5N,MAAN,KAAiB,CAArB,EAAwB,OAAOsO,eAAe,GAAGV,KAAH,GAAW,IAAjC;AACxB,aAAOA,KAAP;AACD;AACF;;AACD,WAASa,yBAAT,CAAmCrO,CAAnC,EAAsC;AACpC,QAAM0C,MAAM,GAAGtI,IAAI,CAACkU,SAAL,EAAf;AACA;AACJ;AACA;AACA;;AACI,QAAIZ,OAAJ;;AACA,QAAMa,aAAa,GAAG,SAAhBA,aAAgB,GAAM;AAC1B,UAAI,CAACb,OAAL,EACEA,OAAO,GAAG,IAAIc,GAAJ,CAAQ9L,MAAM,CAAC2I,GAAP,CAAW,UAACoD,IAAD;AAAA,eAAU,CAACA,IAAI,CAACpB,WAAN,EAAmBoB,IAAnB,CAAV;AAAA,OAAX,CAAR,CAAV;AACF,aAAOf,OAAP;AACD,KAJD;;AAKA,QAAMgB,SAAS,GACbtU,IAAI,CAACuU,SAAL,CAAejB,OAAf,IAA0BtT,IAAI,CAACuU,SAAL,CAAejB,OAAf,CAAuB9N,MAAvB,GAAgC,CAD5D;AAGA,QAAMgP,YAAY,GAChB,EACE5O,CAAC,CAAC0J,IAAF,CAAOmF,YAAP,IACA7O,CAAC,CAAC0J,IAAF,CAAOoF,qBADP,IAEA9O,CAAC,CAAC0J,IAAF,CAAOqF,WAFP,IAGA/O,CAAC,CAAC0J,IAAF,CAAOsF,QAHP,IAIAhP,CAAC,CAAC0J,IAAF,CAAOuF,WALT,KAMKjP,CAAC,CAAC0J,IAAF,CAAOC,MAPd;;AAQA,QAAIvP,IAAI,CAACkJ,UAAL,CAAgB4L,UAAhB,IAA8BN,YAAlC,EAAgD;AAC9CvF,kCAA4B,CAACrJ,CAAD,CAA5B;AACD;;AACD,QACE5F,IAAI,CAACkJ,UAAL,CAAgB6L,QAAhB,IACA/U,IAAI,CAACsS,UAAL,CAAgB0C,MAAhB,CAAuB,UAAU1O,CAAV,EAAaW,CAAb,EAAgB;AACrC,aAAOX,CAAC,GAAGW,CAAC,CAACzB,MAAb;AACD,KAFD,EAEG,CAFH,IAEQ,CAJV,EAKE;AACAI,OAAC,CAAChF,KAAF,CAAQwI,IAAR,CAAa;AACXnF,aAAK,EAAEjE,IAAI,CAACkJ,UAAL,CAAgB+L,QADZ;AAEX/Q,aAAK,EAAE,iBAAY;AACjBnD,kBAAQ,CAACmU,WAAT,CAAqB,MAArB;AACAlV,cAAI,CAACsR,kBAAL;AACAtR,cAAI,CAACkS,YAAL,CAAkBC,KAAlB;AACD;AANU,OAAb;AAQD;;AACD,QAAInS,IAAI,CAACkJ,UAAL,CAAgBiM,SAAhB,IAA6BnV,IAAI,CAACoV,aAAtC,EAAqD;AACnDxP,OAAC,CAAChF,KAAF,CAAQwI,IAAR,CAAa;AACXnF,aAAK,EAAEjE,IAAI,CAACkJ,UAAL,CAAgBmM,SADZ;AAEXnR,aAAK,EAAE,iBAAY;AACjBlE,cAAI,CAACsV,KAAL,CAAWtV,IAAI,CAACoV,aAAhB,EAA+BxP,CAAC,CAAC0J,IAAF,CAAO2D,WAAtC,EAAmDrN,CAAC,CAAC0J,IAAF,CAAOkD,QAA1D;AACAxS,cAAI,CAACuV,IAAL;AACD;AALU,OAAb;AAOD;;AACD,QAAIvV,IAAI,CAACkJ,UAAL,CAAgBsM,kBAApB,EAAwC;AACtC5P,OAAC,CAAChF,KAAF,CAAQwI,IAAR,CAAa;AACXnF,aAAK,EAAEjE,IAAI,CAACkJ,UAAL,CAAgBuM,kBADZ;AAEX7U,aAAK,EAAE,iBAAY;AACjB,cAAI8U,CAAC,GAAG,EAAR;AACA1V,cAAI,CAACkU,SAAL,GAAiBzO,OAAjB,CAAyB,UAAUkQ,MAAV,EAAkB;AACzC,qBAASC,sBAAT,CAAgChQ,CAAhC,EAAmC;AACjC+P,oBAAM,CAACE,MAAP,GAAgB,CAACF,MAAM,CAACE,MAAxB;AACA7V,kBAAI,CAACwE,aAAL,CAAmB,cAAnB,EAAmC;AACjCmR,sBAAM,EAAEA,MADyB;AAEjCE,sBAAM,EAAEF,MAAM,CAACE;AAFkB,eAAnC;AAIAjQ,eAAC,CAAC2L,cAAF;AACAvR,kBAAI,CAAC6Q,eAAL,CAAqBjL,CAArB;AACA5F,kBAAI,CAACsR,kBAAL;AACAtR,kBAAI,CAACiI,MAAL,CAAY,IAAZ;AACAjI,kBAAI,CAAC8V,cAAL;AACD;;AACD,gBAAI5K,EAAE,GAAGnK,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAT;AACAqK,iCAAqB,CAACH,EAAD,CAArB;AACAA,cAAE,CAAC5K,gBAAH,CAAoB,YAApB,EAAkCsV,sBAAlC;AACA1K,cAAE,CAAC5K,gBAAH,CAAoB,OAApB,EAA6BsV,sBAA7B;AACA1K,cAAE,CAACzI,SAAH,GACE,CAACkT,MAAM,CAACE,MAAP,GACG7V,IAAI,CAACkJ,UAAL,CAAgB6M,wBADnB,GAEG/V,IAAI,CAACkJ,UAAL,CAAgB8M,yBAFpB,KAGCL,MAAM,CAAC1R,KAAP,IAAgB0R,MAAM,CAAC1L,IAHxB,CADF;AAKAyL,aAAC,CAACtM,IAAF,CAAO;AACLnF,mBAAK,EAAEiH;AADF,aAAP;AAGD,WAzBD;AA0BA,iBAAOwK,CAAP;AACD;AA/BU,OAAb;;AAiCA,UAAI9P,CAAC,CAAC0J,IAAF,IAAU1J,CAAC,CAAC0J,IAAF,CAAOC,MAAjB,IAA2B3J,CAAC,CAAC0J,IAAF,CAAO2D,WAAP,GAAqB,CAAC,CAArD,EAAwD;AACtD;AACA;AACA,YAAMgD,gBAAgB,GAAGrQ,CAAC,CAAC0J,IAAF,CAAO2D,WAAhC;AACA,YAAMA,WAAW,GAAGjT,IAAI,CAACqT,MAAL,CAAYC,OAAZ,CAAoB2C,gBAApB,CAApB;AAEA,YAAMC,iBAAiB,GAAG9D,4BAA4B,CAACxM,CAAD,EAAI0C,MAAJ,CAAtD;AACA,YAAIrE,KAAK,GAAG,EAAZ;;AACA,YAAIiS,iBAAJ,EAAuB;AACrBjS,eAAK,GAAGiS,iBAAiB,CACtBjF,GADK,CACD,UAACkF,GAAD;AAAA,mBAASA,GAAG,CAAClS,KAAJ,IAAakS,GAAG,CAAClM,IAA1B;AAAA,WADC,EAELmM,IAFK,CAEA,GAFA,CAAR;AAGD,SAJD,MAIO;AACL,cAAMT,MAAM,GAAGrN,MAAM,CAAC2K,WAAD,CAArB;AACA,cAAI0C,MAAJ,EAAY1R,KAAK,GAAG0R,MAAM,CAAC1R,KAAP,IAAgB0R,MAAM,CAAC1L,IAA/B;AACb;;AACDrE,SAAC,CAAChF,KAAF,CAAQwI,IAAR,CAAa;AACXnF,eAAK,EAAEjE,IAAI,CAACkJ,UAAL,CAAgBmN,cAAhB,CAA+BhQ,OAA/B,CAAuC,MAAvC,EAA+CpC,KAA/C,CADI;AAEXC,eAAK,EAAE,eAAUC,EAAV,EAAc;AACnBA,cAAE,CAACoN,cAAH;AACAvR,gBAAI,CAAC6Q,eAAL,CAAqB1M,EAArB;AACAnE,gBAAI,CAACsR,kBAAL;;AACA,gBAAI4E,iBAAJ,EAAuB;AACrBlW,kBAAI,CAACsW,WAAL,CACEJ,iBAAiB,CAAC,CAAD,CAAjB,CAAqBnD,UADvB,EAEEmD,iBAAiB,CAAC,CAAD,CAAjB,CAAqBnD,UAFvB;AAID,aALD,MAKO;AACL/S,kBAAI,CAACsW,WAAL,CAAiBL,gBAAjB;AACD;AACF;AAdU,SAAb;AAgBD;AACF;;AACD,QACEjW,IAAI,CAACkJ,UAAL,CAAgBqN,cAAhB,IACAvW,IAAI,CAACkJ,UAAL,CAAgBsN,uBADhB,KAECvR,MAAM,CAAC8L,IAAP,CAAY/Q,IAAI,CAACyW,KAAL,CAAWC,IAAvB,EAA6BlR,MAA7B,GAAsC,CAAtC,IACCP,MAAM,CAAC8L,IAAP,CAAY/Q,IAAI,CAACyW,KAAL,CAAWnD,OAAvB,EAAgC9N,MAAhC,GAAyC,CAH3C,CADF,EAKE;AACAI,OAAC,CAAChF,KAAF,CAAQwI,IAAR,CAAa;AACXnF,aAAK,EAAEjE,IAAI,CAACkJ,UAAL,CAAgByN,uBADZ;AAEXzS,aAAK,EAAE,eAAU0B,CAAV,EAAa;AAClBA,WAAC,CAAC2L,cAAF;AACAvR,cAAI,CAACyW,KAAL,CAAWC,IAAX,GAAkB,EAAlB;AACA1W,cAAI,CAACyW,KAAL,CAAWnD,OAAX,GAAqB,EAArB;AACAtT,cAAI,CAAC4W,eAAL;AACA5W,cAAI,CAAC6W,kBAAL;AACA7W,cAAI,CAAC8W,cAAL,GAAsBlV,SAAtB;AACA5B,cAAI,CAACwE,aAAL,CAAmB,cAAnB,EAAmC;AACjCuS,uBAAW,EAAE/W,IAAI,CAAC6B,KAAL,CAAWmV;AADS,WAAnC;AAGAhX,cAAI,CAACwE,aAAL,CAAmB,WAAnB,EAAgC;AAC9ByS,sBAAU,EAAEjX,IAAI,CAAC6B,KAAL,CAAWoV;AADO,WAAhC;AAGAjX,cAAI,CAAC8V,cAAL;AACA9V,cAAI,CAACiI,MAAL,CAAY,IAAZ;AACAjI,cAAI,CAACsR,kBAAL;AACAtR,cAAI,CAACkS,YAAL,CAAkBC,KAAlB;AACD;AAnBU,OAAb;AAqBD;;AACD,QACEnS,IAAI,CAACkJ,UAAL,CAAgBgO,YAAhB,IACAlX,IAAI,CAACkJ,UAAL,CAAgBiO,iBADhB,IAEA3C,YAHF,EAIE;AACA5O,OAAC,CAAChF,KAAF,CAAQwI,IAAR,CAAa;AACXnF,aAAK,EAAEjE,IAAI,CAACkJ,UAAL,CAAgBkO,wBAAhB,CAAyC/Q,OAAzC,CACL,IADK,EAELT,CAAC,CAAC0J,IAAF,CAAOC,MAAP,CAActL,KAAd,IAAuB2B,CAAC,CAAC0J,IAAF,CAAOC,MAAP,CAActF,IAFhC,CADI;AAKX/F,aAAK,EAAE,eAAUC,EAAV,EAAc;AACnBA,YAAE,CAACoN,cAAH;AACAvR,cAAI,CAACqX,KAAL,CAAWzR,CAAC,CAAC0J,IAAF,CAAOC,MAAP,CAActF,IAAzB,EAA+B,KAA/B;AACAjK,cAAI,CAACkS,YAAL,CAAkBC,KAAlB;AACD;AATU,OAAb;AAWAvM,OAAC,CAAChF,KAAF,CAAQwI,IAAR,CAAa;AACXnF,aAAK,EAAEjE,IAAI,CAACkJ,UAAL,CAAgBoO,yBAAhB,CAA0CjR,OAA1C,CACL,IADK,EAELT,CAAC,CAAC0J,IAAF,CAAOC,MAAP,CAActL,KAAd,IAAuB2B,CAAC,CAAC0J,IAAF,CAAOC,MAAP,CAActF,IAFhC,CADI;AAKX/F,aAAK,EAAE,eAAUC,EAAV,EAAc;AACnBA,YAAE,CAACoN,cAAH;AACAvR,cAAI,CAACqX,KAAL,CAAWzR,CAAC,CAAC0J,IAAF,CAAOC,MAAP,CAActF,IAAzB,EAA+B,MAA/B;AACAjK,cAAI,CAACsR,kBAAL;AACAtR,cAAI,CAACkS,YAAL,CAAkBC,KAAlB;AACD;AAVU,OAAb;AAYD,KA9KmC,CAgLpC;;;AACA,QAAMoF,WAAW,GAAG,CAACjD,SAAD,IAAc1O,CAAC,CAAC0J,IAAF,CAAOuF,WAArB,IAAoCjP,CAAC,CAAC0J,IAAF,CAAOC,MAA/D;;AACA,QAAIgI,WAAJ,EAAiB;AACf,UAAMnE,KAAK,GAAGS,yBAAyB,CAAC,IAAD,CAAvC;;AACA,UAAIT,KAAJ,EAAW;AACT,YAAMoE,eAAe,GAAGpE,KAAK,CAACnC,GAAN,CAAU,UAACwG,YAAD;AAAA,iBAChCzX,IAAI,CAAC0X,gCAAL,CAAsCD,YAAtC,CADgC;AAAA,SAAV,CAAxB;;AAGA,YAAIxT,MAAJ;;AACA,YAAIuT,eAAe,CAAChS,MAAhB,KAA2B,CAA/B,EAAkC;AAChC,cAAI,OAAOgS,eAAe,CAAC,CAAD,CAAtB,KAA8B,QAAlC,EACEvT,MAAK,GAAGuT,eAAe,CAAC,CAAD,CAAf,GAAqB,CAA7B,CADF,KAEKvT,MAAK,GAAGmP,KAAK,CAAC,CAAD,CAAL,GAAW,CAAnB;AAELnP,gBAAK,GAAGjE,IAAI,CAACkJ,UAAL,CAAgByO,WAAhB,CAA4BtR,OAA5B,CAAoC,IAApC,EAA0CpC,MAA1C,CAAR,CALgC,CAMhC;;AACA2B,WAAC,CAAChF,KAAF,CAAQwI,IAAR,CAAa;AACXnF,iBAAK,EAALA,MADW;AAEXC,iBAAK,EAAE,eAAUC,EAAV,EAAc;AACnBA,gBAAE,CAACoN,cAAH;AACAvR,kBAAI,CAAC4X,QAAL,CAAcJ,eAAe,CAAC,CAAD,CAA7B,EAAkCA,eAAe,CAAC,CAAD,CAAjD;AACD;AALU,WAAb;AAOD,SAdD,MAcO,IAAIA,eAAe,CAAC,CAAD,CAAf,IAAsBA,eAAe,CAAC,CAAD,CAAzC,EAA8C;AACnDvT,gBAAK,GAAGuT,eAAe,CACpBvG,GADK,CACD,UAAC2C,EAAD,EAAKlO,KAAL,EAAe;AAClB,gBAAI,OAAOkO,EAAP,KAAc,QAAlB,EAA4B,OAAOA,EAAE,GAAG,CAAZ;AAC5B,mBAAOR,KAAK,CAAC1N,KAAD,CAAL,GAAe,CAAtB;AACD,WAJK,EAKL0Q,IALK,CAKA,GALA,CAAR;AAMAnS,gBAAK,GAAGjE,IAAI,CAACkJ,UAAL,CAAgB2O,YAAhB,CAA6BxR,OAA7B,CAAqC,IAArC,EAA2CpC,MAA3C,CAAR,CAPmD,CAQnD;;AACA2B,WAAC,CAAChF,KAAF,CAAQwI,IAAR,CAAa;AACXnF,iBAAK,EAALA,MADW;AAEXC,iBAAK,EAAE,eAAUC,EAAV,EAAc;AACnBA,gBAAE,CAACoN,cAAH;AACAvR,kBAAI,CAAC4X,QAAL,CAAcJ,eAAe,CAAC,CAAD,CAA7B,EAAkCA,eAAe,CAAC,CAAD,CAAjD;AACD;AALU,WAAb;AAOD;AACF;AACF,KAzNmC,CA0NpC;AAEA;;;AACA,QAAMM,eAAe,GAAG9X,IAAI,CAAC+X,wBAAL,EAAxB;AACA,QAAMC,cAAc,GAAGhY,IAAI,CAACiY,oBAAL,EAAvB;;AACA,QAAMC,4BAA4B,GAAG,SAA/BA,4BAA+B,CAACC,SAAD,EAAYC,SAAZ,EAA0B;AAC7D,UAAID,SAAS,CAAC3S,MAAV,KAAqB,CAAzB,EAA4B;;AAC5B,WAAK,IAAIwB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmR,SAAS,CAAC3S,MAA9B,EAAsCwB,CAAC,EAAvC,EAA2C;AACzC,YAAMqR,MAAM,GAAGF,SAAS,CAACnR,CAAD,CAAxB;;AACA,aAAK,IAAIsR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,MAAM,CAAC7S,MAA3B,EAAmC8S,CAAC,EAApC,EAAwC;AACtC,cAAMC,KAAK,GAAGF,MAAM,CAACC,CAAD,CAApB;AACAC,eAAK,CAACH,SAAN,GAAkBA,SAAlB;AACD;AACF;;AACDpY,UAAI,CAACwY,OAAL;AACD,KAVD;;AAWA,QAAI5S,CAAC,CAACjF,GAAF,IAASiF,CAAC,CAACjF,GAAF,CAAMsB,CAAN,GAAU6V,eAAvB,EAAwC;AACtClS,OAAC,CAAChF,KAAF,CAAQwI,IAAR,CAAa;AACXnF,aAAK,EAAEjE,IAAI,CAACkJ,UAAL,CAAgBuP,yBADZ;AAEXvU,aAAK,EAAE,eAAUC,EAAV,EAAc;AACnBA,YAAE,CAACoN,cAAH;AACAvR,cAAI,CAAC0Y,cAAL,GAAsB,EAAtB;AACA1Y,cAAI,CAACwY,OAAL;AACD;AANU,OAAb;AAQA5S,OAAC,CAAChF,KAAF,CAAQwI,IAAR,CAAa;AACXnF,aAAK,EAAEjE,IAAI,CAACkJ,UAAL,CAAgByP,yBADZ;AAEXzU,aAAK,EAAE,eAAUC,EAAV,EAAc;AACnBA,YAAE,CAACoN,cAAH;AACA2G,sCAA4B,CAAClY,IAAI,CAAC0Y,cAAN,EAAsB,KAAtB,CAA5B;AACD;AALU,OAAb;AAOA9S,OAAC,CAAChF,KAAF,CAAQwI,IAAR,CAAa;AACXnF,aAAK,EAAEjE,IAAI,CAACkJ,UAAL,CAAgB0P,2BADZ;AAEX1U,aAAK,EAAE,eAAUC,EAAV,EAAc;AACnBA,YAAE,CAACoN,cAAH;AACA2G,sCAA4B,CAAClY,IAAI,CAAC0Y,cAAN,EAAsB,IAAtB,CAA5B;AACD;AALU,OAAb;AAOD;;AACD,QAAI9S,CAAC,CAACjF,GAAF,IAASiF,CAAC,CAACjF,GAAF,CAAMoB,CAAN,GAAUiW,cAAvB,EAAuC;AACrCpS,OAAC,CAAChF,KAAF,CAAQwI,IAAR,CAAa;AACXnF,aAAK,EAAEjE,IAAI,CAACkJ,UAAL,CAAgB2P,sBADZ;AAEX3U,aAAK,EAAE,eAAUC,EAAV,EAAc;AACnBA,YAAE,CAACoN,cAAH;AACAvR,cAAI,CAAC8Y,WAAL,GAAmB,EAAnB;AACA9Y,cAAI,CAACwY,OAAL;AACD;AANU,OAAb;AAQA5S,OAAC,CAAChF,KAAF,CAAQwI,IAAR,CAAa;AACXnF,aAAK,EAAEjE,IAAI,CAACkJ,UAAL,CAAgB6P,sBADZ;AAEX7U,aAAK,EAAE,eAAUC,EAAV,EAAc;AACnBA,YAAE,CAACoN,cAAH;AACA2G,sCAA4B,CAAClY,IAAI,CAAC8Y,WAAN,EAAmB,KAAnB,CAA5B;AACD;AALU,OAAb;AAOAlT,OAAC,CAAChF,KAAF,CAAQwI,IAAR,CAAa;AACXnF,aAAK,EAAEjE,IAAI,CAACkJ,UAAL,CAAgB8P,wBADZ;AAEX9U,aAAK,EAAE,eAAUC,EAAV,EAAc;AACnBA,YAAE,CAACoN,cAAH;AACA2G,sCAA4B,CAAClY,IAAI,CAAC8Y,WAAN,EAAmB,IAAnB,CAA5B;AACD;AALU,OAAb;AAOD;;AAED,QAAMG,iBAAiB,GACrBjZ,IAAI,CAACkJ,UAAL,CAAgBgQ,oBAAhB,IACAtT,CAAC,CAAC0J,IAAF,CAAO6J,cADP,IAEAvT,CAAC,CAAC0J,IAAF,CAAOC,MAFP,IAGA3J,CAAC,CAAC0J,IAAF,CAAOC,MAAP,CAAc7J,KAAd,GAAsB,CAJxB;AAKA,QAAM0T,iBAAiB,GACrBpZ,IAAI,CAACkJ,UAAL,CAAgBgQ,oBAAhB,IAAwCtT,CAAC,CAAC0J,IAAF,CAAO6J,cADjD;AAEA,QAAME,cAAc,GAClB,CAAC/E,SAAD,IACAtU,IAAI,CAACkJ,UAAL,CAAgBoQ,iBADhB,IAEA1T,CAAC,CAAC0J,IAAF,CAAOuF,WAFP,IAGAjP,CAAC,CAAC0J,IAAF,CAAOC,MAJT;AAKA,QAAMgK,cAAc,GAClBvZ,IAAI,CAACkJ,UAAL,CAAgBoQ,iBAAhB,IAAqC1T,CAAC,CAAC0J,IAAF,CAAOuF,WAD9C;;AAGA,QAAIoE,iBAAJ,EAAuB;AACrB;AACA,UAAMO,YAAY,GAAG,EAArB;AACA;;AACA,UAAMC,WAAW,GAAG7T,CAAC,CAAC0J,IAAF,CAAOC,MAAP,CAAc7J,KAAlC;AACA,UAAIyQ,GAAG,GAAGsD,WAAV;;AACA,aAAOtD,GAAG,IAAI,CAAd,EAAiBA,GAAG,EAApB,EAAwB;AACtB,YAAI,CAACnW,IAAI,CAAC0Z,gBAAL,CAAsBvD,GAAtB,CAAL,EAAiC;AACjCqD,oBAAY,CAAC,CAAD,CAAZ,GAAkBrD,GAAlB;AACD;;AACD,WAAKA,GAAG,GAAGsD,WAAX,GAA0BtD,GAAG,EAA7B,EAAiC;AAC/B,YAAI,CAACnW,IAAI,CAAC0Z,gBAAL,CAAsBvD,GAAtB,CAAL,EAAiC;AACjCqD,oBAAY,CAAC,CAAD,CAAZ,GAAkBrD,GAAlB;AACD;;AACD,UACEA,GAAG,KAAKsD,WAAR,IACAD,YAAY,CAAChU,MAAb,KAAwB,CADxB,IAEAgU,YAAY,CAAC,CAAD,CAAZ,GAAkBA,YAAY,CAAC,CAAD,CAF9B,IAGAxZ,IAAI,CAAC2Z,oBAAL,CACE3Z,IAAI,CAAC0Y,cADP,EAEEc,YAAY,CAAC,CAAD,CAFd,EAGEA,YAAY,CAAC,CAAD,CAHd,CAJF,EASE;AACA,YAAMlG,QAAO,GAAGa,aAAa,EAA7B;;AACA,YAAMyF,WAAW,GAAG,EAApB;AACA,YAAMC,UAAU,GAAG,EAAnB;;AACA,aAAK,IAAI7S,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwS,YAAY,CAAChU,MAAjC,EAAyCwB,CAAC,EAA1C,EAA8C;AAC5C,cAAMiM,YAAW,GAAGuG,YAAY,CAACxS,CAAD,CAAhC;;AACA,cAAM2O,OAAM,GAAGrC,QAAO,CAACnO,GAAR,CAAY8N,YAAZ,CAAf;;AACA,cAAI0C,OAAJ,EAAY;AACVkE,sBAAU,CAACzQ,IAAX,CAAgBuM,OAAM,CAAC1L,IAAvB;AACA2P,uBAAW,CAACxQ,IAAZ,CAAiBuM,OAAM,CAAC1R,KAAP,IAAgB0R,OAAM,CAAC1L,IAAvB,IAA+B0L,OAAM,CAACjQ,KAAvD;AACD;AACF;;AACD,YAAImU,UAAU,CAAC,CAAD,CAAV,IAAiBA,UAAU,CAAC,CAAD,CAA/B,EAAoC;AAClC;AACAjU,WAAC,CAAChF,KAAF,CAAQwI,IAAR,CAAa;AACXnF,iBAAK,EAAEjE,IAAI,CAACkJ,UAAL,CAAgB4Q,gBAAhB,CAAiCzT,OAAjC,CACL,IADK,EAELuT,WAAW,CAAC,CAAD,CAAX,GAAiB,GAAjB,GAAuBA,WAAW,CAAC,CAAD,CAF7B,CADI;AAKX1V,iBAAK,EAAE,eAAUC,EAAV,EAAc;AACnBA,gBAAE,CAACoN,cAAH;AACAvR,kBAAI,CAAC+Z,YAAL,CAAkBF,UAAU,CAAC,CAAD,CAA5B,EAAiCA,UAAU,CAAC,CAAD,CAA3C;AACA7Z,kBAAI,CAACkS,YAAL,CAAkBC,KAAlB;AACD;AATU,WAAb;AAWD;AACF;AACF;;AACD,QAAIiH,iBAAJ,EAAuB;AACrB,UAAMnG,aAAW,GAAGrN,CAAC,CAAC0J,IAAF,CAAO2D,WAA3B;AACA,UAAMoF,MAAM,GAAGrY,IAAI,CAACga,wBAAL,CAA8B/G,aAA9B,CAAf;;AACA,UAAMK,SAAO,GAAGa,aAAa,EAA7B;;AAHqB,iCAIZnN,GAJY;AAAA,yBAKEqR,MAAM,CAACrR,GAAD,CALR;AAAA,YAKXiT,IALW,cAKXA,IALW;AAAA,YAKLC,EALK,cAKLA,EALK;;AAMnB,YAAMC,KAAK,GAAG7G,SAAO,CAACnO,GAAR,CAAY8U,IAAZ,CAAd;;AACA,YAAMG,KAAK,GAAG9G,SAAO,CAACnO,GAAR,CAAY+U,EAAZ,CAAd;;AACA,YAAIC,KAAK,IAAIC,KAAb,EAAoB;AAClB,cAAMC,UAAU,GACd,CAACF,KAAK,CAAClW,KAAN,IAAekW,KAAK,CAAClQ,IAArB,IAA6BkQ,KAAK,CAACzU,KAApC,IACA,GADA,IAEC0U,KAAK,CAACnW,KAAN,IAAemW,KAAK,CAACnQ,IAArB,IAA6BmQ,KAAK,CAAC1U,KAFpC,CADF;AAIAE,WAAC,CAAChF,KAAF,CAAQwI,IAAR,CAAa;AACXnF,iBAAK,EAAEjE,IAAI,CAACkJ,UAAL,CAAgBoR,sBAAhB,CAAuCjU,OAAvC,CACL,IADK,EAELgU,UAFK,CADI;AAKXnW,iBAAK,EAAE,eAAUC,EAAV,EAAc;AACnBA,gBAAE,CAACoN,cAAH;AACAvR,kBAAI,CAACua,kBAAL,CAAwBJ,KAAK,CAAClQ,IAA9B,EAAoCmQ,KAAK,CAACnQ,IAA1C;AACAjK,kBAAI,CAACkS,YAAL,CAAkBC,KAAlB;AACD;AATU,WAAb;AAWD,SAhBD,MAgBO;AACLqI,iBAAO,CAACC,IAAR,8BAAmCR,IAAnC,wBAAqDC,EAArD;AACD;AA1BkB;;AAIrB,WAAK,IAAIlT,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGqR,MAAM,CAAC7S,MAA3B,EAAmCwB,GAAC,EAApC,EAAwC;AAAA,cAA/BA,GAA+B;AAuBvC;AACF;;AACD,QAAIqS,cAAJ,EAAoB;AAClB,UAAMjG,MAAK,GAAGS,yBAAyB,CAAC,KAAD,CAAzB,IAAoC,EAAlD;;AACA,UAAM6G,UAAU,GAAGtH,MAAK,CACrBnC,GADgB,CACZ,UAACuB,QAAD,EAAc;AACjB,YAAM9M,KAAK,GAAG1F,IAAI,CAAC0X,gCAAL,CAAsClF,QAAtC,CAAd;AACA,YAAI,OAAO9M,KAAP,KAAiB,QAArB,EAA+B,OAAOA,KAAK,GAAG,CAAf;AAC/B,eAAO8M,QAAQ,GAAG,CAAlB;AACD,OALgB,EAMhB4D,IANgB,CAMX,GANW,CAAnB;;AAOA,UACEhD,MAAK,CAAC5N,MAAN,KAAiB,CAAjB,IACAxF,IAAI,CAAC2Z,oBAAL,CAA0B3Z,IAAI,CAAC8Y,WAA/B,EAA4C1F,MAAK,CAAC,CAAD,CAAjD,EAAsDA,MAAK,CAAC,CAAD,CAA3D,CAFF,EAGE;AACAxN,SAAC,CAAChF,KAAF,CAAQwI,IAAR,CAAa;AACXnF,eAAK,EAAEjE,IAAI,CAACkJ,UAAL,CAAgByR,aAAhB,CAA8BtU,OAA9B,CAAsC,IAAtC,EAA4CqU,UAA5C,CADI;AAEXxW,eAAK,EAAE,eAAUC,EAAV,EAAc;AACnBA,cAAE,CAACoN,cAAH;AACAvR,gBAAI,CAAC4a,SAAL,CAAexH,MAAK,CAAC,CAAD,CAApB,EAAyBA,MAAK,CAAC,CAAD,CAA9B;AACD;AALU,SAAb;AAOD;AACF;;AACD,QAAImG,cAAJ,EAAoB;AAClB,UAAM/G,QAAQ,GAAG5M,CAAC,CAAC0J,IAAF,CAAOkD,QAAxB;;AACA,UAAM6F,OAAM,GAAGrY,IAAI,CAAC6a,qBAAL,CAA2BrI,QAA3B,CAAf;;AAFkB,mCAGTxL,GAHS;AAAA,0BAIKqR,OAAM,CAACrR,GAAD,CAJX;AAAA,YAIRiT,IAJQ,eAIRA,IAJQ;AAAA,YAIFC,EAJE,eAIFA,EAJE;AAKhB,YAAMQ,UAAU,GAAG,CAACT,IAAD,EAAOC,EAAP,EAChBjJ,GADgB,CACZ,UAACuB,QAAD,EAAc;AACjB,cAAM9M,KAAK,GAAG1F,IAAI,CAAC0X,gCAAL,CAAsClF,QAAtC,CAAd;AACA,cAAI,OAAO9M,KAAP,KAAiB,QAArB,EAA+B,OAAOA,KAAK,GAAG,CAAf;AAC/B,iBAAO8M,QAAQ,GAAG,CAAlB;AACD,SALgB,EAMhB4D,IANgB,CAMX,GANW,CAAnB;AAOAxQ,SAAC,CAAChF,KAAF,CAAQwI,IAAR,CAAa;AACXnF,eAAK,EAAEjE,IAAI,CAACkJ,UAAL,CAAgB4R,mBAAhB,CAAoCzU,OAApC,CAA4C,IAA5C,EAAkDqU,UAAlD,CADI;AAEXxW,eAAK,EAAE,eAAUC,EAAV,EAAc;AACnBA,cAAE,CAACoN,cAAH;AACAvR,gBAAI,CAAC+a,eAAL,CAAqBd,IAArB,EAA2BC,EAA3B;AACAla,gBAAI,CAACkS,YAAL,CAAkBC,KAAlB;AACD;AANU,SAAb;AAZgB;;AAGlB,WAAK,IAAInL,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGqR,OAAM,CAAC7S,MAA3B,EAAmCwB,GAAC,EAApC,EAAwC;AAAA,eAA/BA,GAA+B;AAiBvC;AACF,KAramC,CAsapC;;AACD;;AACDhH,MAAI,CAAC8Q,mBAAL,GAA2B,YAAY;AACrC,QAAI1F,mBAAJ,EAAyB;AACvBA,yBAAmB,CAACnI,OAApB;AACAmI,yBAAmB,GAAGxJ,SAAtB;AACD;AACF,GALD;;AAMA5B,MAAI,CAACsR,kBAAL,GAA0B,UAAU0J,KAAV,EAAiB;AACzCja,YAAQ,CAAC4E,mBAAT,CAA6B,OAA7B,EAAsC3F,IAAI,CAACsR,kBAA3C;AACArR,aAAS,GAAGD,IAAI,CAAC6B,KAAL,CAAWmM,iBAAvB;AACAhO,QAAI,CAAC8Q,mBAAL;;AACA,QAAI9Q,IAAI,CAACgM,WAAT,EAAsB;AACpBhM,UAAI,CAACgM,WAAL,CAAiB/I,OAAjB;AACD;;AACDjD,QAAI,CAACgM,WAAL,GAAmBpK,SAAnB;;AACA,QAAIoZ,KAAJ,EAAW;AACThb,UAAI,CAAC2B,MAAL,CAAYwQ,KAAZ;AACAnS,UAAI,CAACib,SAAL,CAAeD,KAAf;AACAhb,UAAI,CAACkb,OAAL,CAAaF,KAAb;AACD;AACF,GAbD;;AAcAhb,MAAI,CAACmb,gBAAL,GAAwB,UAAUvV,CAAV,EAAawV,WAAb,EAA0B;AAChD,QAAI,CAACpb,IAAI,CAACyO,QAAN,IAAkB7I,CAAC,CAAC8E,MAAF,KAAa1K,IAAI,CAAC2B,MAAxC,EAAgD;AAC9C;AACD,KAH+C,CAIhD;;;AACA,QAAMiK,QAAQ,GAAG3G,MAAM,CAAC8L,IAAP,CAAY/Q,IAAI,CAACqb,UAAjB,CAAjB;;AACA,SAAK,IAAIrU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4E,QAAQ,CAACpG,MAA7B,EAAqCwB,CAAC,EAAtC,EAA0C;AACxC,UAAMsU,SAAS,GAAGtb,IAAI,CAACqb,UAAL,CAAgBzP,QAAQ,CAAC5E,CAAD,CAAxB,CAAlB;AACA,UAAM9D,UAAU,GAAGoY,SAAS,IAAIA,SAAS,CAACpY,UAA1C;AACA,UAAI,CAACA,UAAL,EAAiB;AAHuB,UAIhCqY,UAJgC,GAIqBrY,UAJrB,CAIhCqY,UAJgC;AAAA,UAIpB/O,WAJoB,GAIqBtJ,UAJrB,CAIpBsJ,WAJoB;AAAA,UAIPgP,SAJO,GAIqBtY,UAJrB,CAIPsY,SAJO;AAAA,UAIIjY,YAJJ,GAIqBL,UAJrB,CAIIK,YAJJ;AAKxC,UAAI,CAACqC,CAAC,CAAC7D,CAAF,IAAOwZ,UAAP,IAAqB3V,CAAC,CAAC7D,CAAF,IAAOwZ,UAAU,GAAG/O,WAA1C,MAA2D,KAA/D,EACE;AACF,UAAI,CAAC5G,CAAC,CAAC3D,CAAF,IAAOuZ,SAAP,IAAoB5V,CAAC,CAAC3D,CAAF,IAAOuZ,SAAS,GAAGjY,YAAxC,MAA0D,KAA9D,EACE;AACF,aATwC,CAShC;AACT,KAhB+C,CAiBhD;;;AACA,QAAIvD,IAAI,CAACyb,WAAL,IAAoBzb,IAAI,CAACkD,UAA7B,EAAyC;AACvC;AACA,UAAMwY,kBAAkB,GAAG1b,IAAI,CAAC+O,UAAL,IAAmB/O,IAAI,CAAC+O,UAAL,CAAgBsM,UAA9D;AACA,UAAI,CAACK,kBAAD,IAAuB,CAACta,KAAK,CAACC,OAAN,CAAcqa,kBAAd,CAA5B,EAA+D;AAC/D,UAAMC,SAAS,GAAGD,kBAAkB,CAACvI,IAAnB,CAAwB,UAACyI,IAAD,EAAU;AAClD,YAAMC,KAAK,GAAGD,IAAI,CAAC1Y,UAAnB;AACA,YAAM4Y,KAAK,GAAG9b,IAAI,CAACkD,UAAnB;AACA,eACE2Y,KAAK,CAACL,SAAN,IAAmBM,KAAK,CAACN,SAAzB,IACAK,KAAK,CAACN,UAAN,KAAqBO,KAAK,CAACP,UAF7B;AAID,OAPiB,CAAlB;AAQA,UAAI,CAACI,SAAL,EAAgB,OAZuB,CAavC;;AAEA,UAAII,EAAE,GAAG/b,IAAI,CAACkD,UAAL,CAAgBqY,UAAzB;AACA,UAAIS,EAAE,GAAGhc,IAAI,CAACkD,UAAL,CAAgBqY,UAAhB,GAA6Bvb,IAAI,CAACkD,UAAL,CAAgBsJ,WAAtD;AACA,UAAIyP,EAAE,GAAGjc,IAAI,CAACkD,UAAL,CAAgBsY,SAAzB;AACA,UAAIU,EAAE,GAAGlc,IAAI,CAACkD,UAAL,CAAgBsY,SAAhB,GAA4Bxb,IAAI,CAACkD,UAAL,CAAgBK,YAArD;AACA,UAAI4Y,IAAI,GAAGnc,IAAI,CAACkD,UAAL,CAAgBA,UAA3B;;AACA,aAAOiZ,IAAP,EAAa;AAAA,oBACkDA,IADlD;AAAA,YACHZ,WADG,SACHA,UADG;AAAA,YACS/O,YADT,SACSA,WADT;AAAA,YACsBgP,UADtB,SACsBA,SADtB;AAAA,YACiCjY,aADjC,SACiCA,YADjC;AAEX,YAAIgY,WAAU,GAAGQ,EAAjB,EAAqBA,EAAE,GAAGR,WAAL;AACrB,YAAIC,UAAS,GAAGS,EAAhB,EAAoBA,EAAE,GAAGT,UAAL;AACpB,YAAMY,KAAK,GAAGb,WAAU,GAAG/O,YAA3B;AACA,YAAM6P,KAAK,GAAGb,UAAS,GAAGjY,aAA1B;AACA,YAAI6Y,KAAK,GAAGJ,EAAZ,EAAgBA,EAAE,GAAGI,KAAL;AAChB,YAAIC,KAAK,GAAGH,EAAZ,EAAgBA,EAAE,GAAGG,KAAL;AAChB,YAAIF,IAAI,CAACG,QAAL,KAAkB,sBAAtB,EAA8C;AAC9CH,YAAI,GAAGA,IAAI,CAACjZ,UAAZ;AACD;;AACD,UAAI,CAAC0C,CAAC,CAAC7D,CAAF,IAAOga,EAAP,IAAanW,CAAC,CAAC7D,CAAF,IAAOia,EAApB,IAA0BpW,CAAC,CAAC3D,CAAF,IAAOga,EAAjC,IAAuCrW,CAAC,CAAC3D,CAAF,IAAOia,EAA/C,MAAuD,KAA3D,EAAkE;AACnE;;AACD,aAAS9Y,kBAAT,GAA8B;AAC5BC,2BAAqB,CAAC,YAAY;AAChCtC,gBAAQ,CAACT,gBAAT,CAA0B,OAA1B,EAAmCN,IAAI,CAACsR,kBAAxC;AACA1M,cAAM,CAACe,mBAAP,CAA2B,SAA3B,EAAsCvC,kBAAtC;AACD,OAHoB,CAArB;AAID;;AACD,QAAImZ,eAAJ;AAAA,QACE3b,KAAK,GAAG,EADV;AAAA,QAEED,GAAG,GAAGya,WAAW,IAAIpb,IAAI,CAACwc,WAAL,CAAiB5W,CAAjB,CAFvB;AAAA,QAGEzB,EAAE,GAAG;AACHsY,iBAAW,EAAE7W,CADV;AAEH0J,UAAI,EAAEtP,IAAI,CAAC0c,SAAL,CAAe/b,GAAG,CAACoB,CAAnB,EAAsBpB,GAAG,CAACsB,CAA1B,CAFH;AAGHtB,SAAG,EAAHA,GAHG;AAIHC,WAAK,EAAEA;AAJJ,KAHP;;AASA,QAAI,CAACuD,EAAE,CAACmL,IAAH,CAAQqN,MAAb,EAAqB;AACnB1I,+BAAyB,CAAC9P,EAAD,CAAzB;AACD;;AACD,QAAIyB,CAAC,CAACiF,IAAF,KAAW,WAAX,IAA0B7K,IAAI,CAACwE,aAAL,CAAmB,aAAnB,EAAkCL,EAAlC,CAA9B,EAAqE;AACnE;AACD;;AACD,QAAI,CAACA,EAAE,CAACmL,IAAH,CAAQqN,MAAb,EAAqB;AACnB,UAAI3c,IAAI,CAACgM,WAAT,EAAsB;AACpBhM,YAAI,CAACsR,kBAAL;AACD;;AACDiL,qBAAe,GAAG;AAChBva,YAAI,EACFrB,GAAG,CAACoB,CAAJ,GACApB,GAAG,CAAC+C,IAAJ,CAAS1B,IADT,GAEAhC,IAAI,CAAC6B,KAAL,CAAW+a,qBAFX,GAGA5c,IAAI,CAAC6c,gBALS;AAMhB3a,WAAG,EACDvB,GAAG,CAACsB,CAAJ,GACAtB,GAAG,CAAC+C,IAAJ,CAASxB,GADT,GAEAlC,IAAI,CAAC6B,KAAL,CAAWib,oBAFX,GAGA9c,IAAI,CAAC+c,eAVS;AAWhBhY,aAAK,EAAEZ,EAAE,CAACmL,IAAH,CAAQd,KAAR,GAAgBrK,EAAE,CAACmL,IAAH,CAAQvN,CAAxB,GAA4BpB,GAAG,CAAC+C,IAAJ,CAAS1B,IAX5B;AAYhB2C,cAAM,EAAER,EAAE,CAACmL,IAAH,CAAQnN,MAAR,GAAiBgC,EAAE,CAACmL,IAAH,CAAQrN,CAAzB,GAA6BtB,GAAG,CAAC+C,IAAJ,CAASxB,GAZ9B;AAahBC,cAAM,EAAEgC,EAAE,CAACmL,IAAH,CAAQnN,MAbA;AAchBqM,aAAK,EAAErK,EAAE,CAACmL,IAAH,CAAQd;AAdC,OAAlB;;AAgBA,UAAIxO,IAAI,CAACK,MAAT,EAAiB;AACfkc,uBAAe,CAACva,IAAhB,GAAuBhC,IAAI,CAAC6B,KAAL,CAAWmb,uBAAX,GAAqC,IAA5D;AACAT,uBAAe,CAAC/N,KAAhB,GACExO,IAAI,CAACwO,KAAL,GAAaxO,IAAI,CAAC6B,KAAL,CAAWmb,uBAAX,GAAqC,CAAlD,GAAsD,IADxD;AAED;;AACD,UAAIpX,CAAC,CAACiF,IAAF,IAAU,WAAd,EAA2B;AACzB0R,uBAAe,CAACra,GAAhB,IAAuBlC,IAAI,CAAC6B,KAAL,CAAWob,yBAAlC;AACD;;AACDjd,UAAI,CAACgM,WAAL,GAAmBT,iBAAiB,CAACpH,EAAD,EAAKoY,eAAL,EAAsB3b,KAAtB,CAApC;;AACA,UAAIgF,CAAC,CAACiF,IAAF,IAAU,WAAd,EAA2B;AACzBjG,cAAM,CAACtE,gBAAP,CAAwB,SAAxB,EAAmC8C,kBAAnC;AACD,OAFD,MAEO;AACLA,0BAAkB;AACnB;;AACDwC,OAAC,CAAC2L,cAAF;AACD;AACF,GA5GD;;AA6GA;AACD,C;;;;;;;;;;;;;;;;;;;AClqCD;;AACA;AAEa;;AACb,6BAAe,oCAAUvR,IAAV,EAAgB;AAC7BA,MAAI,CAACkH,QAAL,GAAgB;AACdgC,cAAU,EAAE,CACV,CAAC,uBAAD,EAA0B,IAA1B,CADU,EAEV,CAAC,mBAAD,EAAsB,IAAtB,CAFU,EAGV,CAAC,2BAAD,EAA8B,KAA9B,CAHU,EAIV,CAAC,mBAAD,EAAsB,KAAtB,CAJU,EAKV,CAAC,sBAAD,EAAyB,KAAzB,CALU,EAMV,CAAC,sBAAD,EAAyB,IAAzB,CANU,EAOV,CAAC,sBAAD,EAAyB,IAAzB,CAPU,EAQV,CAAC,oBAAD,EAAuB,KAAvB,CARU,EASV,CAAC,gBAAD,EAAmB,IAAnB,CATU,EAUV,CAAC,wBAAD,EAA2B,KAA3B,CAVU,EAWV,CAAC,cAAD,EAAiB,IAAjB,CAXU,EAYV,CAAC,mBAAD,EAAsB,IAAtB,CAZU,EAaV,CAAC,sBAAD,EAAyB,IAAzB,CAbU,EAcV,CAAC,kCAAD,EAAqC,EAArC,CAdU,EAeV,CAAC,kCAAD,EAAqC,EAArC,CAfU,EAgBV,CAAC,oBAAD,EAAuB,KAAvB,CAhBU,EAiBV,CAAC,mBAAD,EAAsB,KAAtB,CAjBU,EAkBV,CAAC,gBAAD,EAAmB,KAAnB,CAlBU,EAmBV,CAAC,uBAAD,EAA0B,KAA1B,CAnBU,EAoBV,CAAC,kBAAD,EAAqB,CAArB,CApBU,EAqBV,CAAC,YAAD,EAAe,UAAf,CArBU,EAsBV,CAAC,oBAAD,EAAuB,MAAvB,CAtBU,EAuBV,CAAC,kBAAD,EAAqB,EAArB,CAvBU,EAwBV,CAAC,yBAAD,EAA4B,sBAA5B,CAxBU,EAyBV,CAAC,2BAAD,EAA8B,MAA9B,CAzBU,EA0BV,CAAC,0BAAD,EAA6B,oBAA7B,CA1BU,EA2BV,CAAC,oBAAD,EAAuB,oBAAvB,CA3BU,EA4BV,CAAC,2BAAD,EAA8B,QAA9B,CA5BU,EA6BV,CAAC,0BAAD,EAA6B,CAA7B,CA7BU,EA8BV,CAAC,0BAAD,EAA6B,CAA7B,CA9BU,EA+BV,CAAC,wBAAD,EAA2B,IAA3B,CA/BU,EAgCV,CAAC,UAAD,EAAa,MAAb,CAhCU,EAiCV,CAAC,OAAD,EAAU,KAAV,CAjCU,EAkCV,CAAC,UAAD,EAAa,IAAb,CAlCU,EAmCV,CAAC,cAAD,EAAiB,KAAjB,CAnCU,EAoCV,CAAC,kBAAD,EAAqB,WAArB,CApCU,EAqCV,CAAC,kBAAD,EAAqB,aAArB,CArCU,EAsCV,CAAC,kBAAD,EAAqB,IAArB,CAtCU,EAuCV,CAAC,iBAAD,EAAoB,KAApB,CAvCU,EAwCV,CAAC,gBAAD,EAAmB,SAAnB,CAxCU,EAyCV,CAAC,4BAAD,EAA+B,KAA/B,CAzCU,EA0CV,CAAC,yBAAD,EAA4B,KAA5B,CA1CU,EA2CV,CAAC,aAAD,EAAgB,aAAhB,CA3CU,EA4CV,CAAC,cAAD,EAAiB,cAAjB,CA5CU,EA6CV,CAAC,WAAD,EAAc,MAAd,CA7CU,EA8CV,CAAC,qBAAD,EAAwB,KAAxB,CA9CU,EA+CV,CAAC,sBAAD,EAAyB,GAAzB,CA/CU,EAgDV,CAAC,WAAD,EAAc,KAAd,CAhDU,EAiDV,CAAC,MAAD,EAAS,EAAT,CAjDU,EAkDV,CAAC,mBAAD,EAAsB,CAAtB,CAlDU,EAmDV,CAAC,WAAD,EAAc,OAAd,CAnDU,EAoDV,CAAC,yBAAD,EAA4B,KAA5B,CApDU,EAqDV,CAAC,wBAAD,EAA2B,qBAA3B,CArDU,EAsDV,CAAC,iBAAD,EAAoB,CAApB,CAtDU,EAuDV,CAAC,kBAAD,EAAqB,EAArB,CAvDU,EAwDV,CAAC,iBAAD,EAAoB,CAApB,CAxDU,EAyDV,CAAC,oBAAD,EAAuB,EAAvB,CAzDU,EA0DV,CAAC,gBAAD,EAAmB,IAAnB,CA1DU,EA2DV,CAAC,6BAAD,EAAgC,IAAhC,CA3DU,EA4DV,CAAC,mBAAD,EAAsB,KAAtB,CA5DU,EA6DV,CAAC,kBAAD,EAAqB,EAArB,CA7DU,EA8DV,CAAC,4BAAD,EAA+B,KAA/B,CA9DU,EA+DV,CAAC,yBAAD,EAA4B,MAA5B,CA/DU,EAgEV,CAAC,eAAD,EAAkB,MAAlB,CAhEU,EAiEV,CAAC,0BAAD,EAA6B,EAA7B,CAjEU,EAkEV,CAAC,qBAAD,EAAwB,EAAxB,CAlEU,EAmEV,CAAC,yBAAD,EAA4B,IAA5B,CAnEU,EAoEV,CAAC,mBAAD,EAAsB,IAAtB,CApEU,EAqEV,CAAC,oBAAD,EAAuB,IAAvB,CArEU,EAsEV,CAAC,UAAD,EAAa,KAAb,CAtEU,EAuEV,CAAC,YAAD,EAAe,IAAf,CAvEU,EAwEV,CAAC,kBAAD,EAAqB,KAArB,CAxEU,EAyEV,CAAC,YAAD,EAAe,KAAf,CAzEU,EA0EV,CAAC,mBAAD,EAAsB,IAAtB,CA1EU,EA2EV,CAAC,0BAAD,EAA6B,uBAA7B,CA3EU,EA4EV,CAAC,2BAAD,EAA8B,wBAA9B,CA5EU,EA6EV;AACA,KAAC,kBAAD,EAAqB,kBAArB,CA9EU,EA+EV,CAAC,eAAD,EAAkB,eAAlB,CA/EU,EAgFV,CAAC,wBAAD,EAA2B,iBAA3B,CAhFU,EAiFV,CAAC,qBAAD,EAAwB,iBAAxB,CAjFU,EAkFV,CAAC,2BAAD,EAA8B,0BAA9B,CAlFU,EAmFV,CAAC,wBAAD,EAA2B,uBAA3B,CAnFU,EAoFV,CAAC,2BAAD,EAA8B,0BAA9B,CApFU,EAqFV,CAAC,wBAAD,EAA2B,uBAA3B,CArFU,EAsFV,CAAC,6BAAD,EAAgC,4BAAhC,CAtFU,EAuFV,CAAC,0BAAD,EAA6B,yBAA7B,CAvFU,EAwFV,CAAC,8BAAD,EAAiC,OAAjC,CAxFU,EAyFV,CAAC,2BAAD,EAA8B,QAA9B,CAzFU,EA0FV;AACA,KAAC,WAAD,EAAc,KAAd,CA3FU,EA4FV,CAAC,iBAAD,EAAoB,KAApB,CA5FU,EA6FV,CAAC,gBAAD,EAAmB,IAAnB,CA7FU,EA8FV,CAAC,gBAAD,EAAmB,IAAnB,CA9FU,EA+FV,CAAC,mBAAD,EAAsB,IAAtB,CA/FU,EAgGV,CAAC,qBAAD,EAAwB,KAAxB,CAhGU,EAiGV,CAAC,WAAD,EAAc,KAAd,CAjGU,EAkGV,CAAC,gBAAD,EAAmB,IAAnB,CAlGU,EAmGV,CAAC,wBAAD,EAA2B,GAA3B,CAnGU,EAoGV,CAAC,eAAD,EAAkB,CAAlB,CApGU,EAqGV,CAAC,mBAAD,EAAsB,aAAtB,CArGU,EAsGV,CAAC,0BAAD,EAA6B,IAA7B,CAtGU,EAuGV,CAAC,iCAAD,EAAoC,IAApC,CAvGU,EAwGV,CAAC,iBAAD,EAAoB,EAApB,CAxGU,EAyGV,CAAC,uBAAD,EAA0B,EAA1B,CAzGU,EA0GV,CAAC,sBAAD,EAAyB,KAAzB,CA1GU,EA2GV,CAAC,cAAD,EAAiB,GAAjB,CA3GU,EA4GV,CAAC,cAAD,EAAiB,IAAjB,CA5GU,EA6GV,CAAC,eAAD,EAAkB,CAAlB,CA7GU,EA8GV,CAAC,MAAD,EAAS,KAAT,CA9GU,EA+GV,CAAC,sBAAD,EAAyB,KAAzB,CA/GU,EAgHV,CAAC,SAAD,EAAY,EAAZ,CAhHU,EAiHV,CAAC,iBAAD,EAAoB,CAApB,CAjHU,EAkHV,CAAC,YAAD,EAAe,EAAf,CAlHU,EAmHV,CAAC,yBAAD,EAA4B,CAA5B,CAnHU,EAoHV,CAAC,uBAAD,EAA0B,CAA1B,CApHU,CADE;AAuHdtB,UAAM,EAAE,CACN,CAAC,2BAAD,EAA8B,wBAA9B,CADM,EAEN,CAAC,uBAAD,EAA0B,wBAA1B,CAFM,EAGN,CAAC,uBAAD,EAA0B,CAA1B,CAHM,EAIN,CAAC,iBAAD,EAAoB,kBAApB,CAJM,EAKN,CAAC,gBAAD,EAAmB,iBAAnB,CALM,EAMN,CAAC,gCAAD,EAAmC,wBAAnC,CANM,EAON,CAAC,+BAAD,EAAkC,MAAlC,CAPM,EAQN,CAAC,sBAAD,EAAyB,kBAAzB,CARM,EASN,CAAC,8BAAD,EAAiC,uBAAjC,CATM,EAUN,CAAC,8BAAD,EAAiC,CAAjC,CAVM,EAWN,CAAC,yBAAD,EAA4B,CAA5B,CAXM,EAYN,CAAC,uBAAD,EAA0B,CAA1B,CAZM,EAaN,CAAC,wBAAD,EAA2B,CAA3B,CAbM,EAcN,CAAC,sBAAD,EAAyB,CAAzB,CAdM,EAeN,CAAC,mCAAD,EAAsC,wBAAtC,CAfM,EAgBN,CAAC,yBAAD,EAA4B,kBAA5B,CAhBM,EAiBN,CAAC,6BAAD,EAAgC,QAAhC,CAjBM,EAkBN,CAAC,uCAAD,EAA0C,wBAA1C,CAlBM,EAmBN,CAAC,6BAAD,EAAgC,kBAAhC,CAnBM,EAoBN,CAAC,oCAAD,EAAuC,wBAAvC,CApBM,EAqBN,CAAC,0BAAD,EAA6B,kBAA7B,CArBM,EAsBN,CAAC,0BAAD,EAA6B,EAA7B,CAtBM,EAuBN,CAAC,2BAAD,EAA8B,CAA9B,CAvBM,EAwBN,CAAC,iBAAD,EAAoB,CAApB,CAxBM,EAyBN,CAAC,6BAAD,EAAgC,wBAAhC,CAzBM,EA0BN,CAAC,yBAAD,EAA4B,wBAA5B,CA1BM,EA2BN,CAAC,kBAAD,EAAqB,qBAArB,CA3BM,EA4BN,CAAC,qBAAD,EAAwB,UAAxB,CA5BM,EA6BN,CAAC,cAAD,EAAiB,KAAjB,CA7BM,EA8BN,CAAC,uBAAD,EAA0B,wBAA1B,CA9BM,EA+BN,CAAC,mBAAD,EAAsB,wBAAtB,CA/BM,EAgCN,CAAC,4BAAD,EAA+B,wBAA/B,CAhCM,EAiCN,CAAC,wBAAD,EAA2B,EAA3B,CAjCM,EAkCN,CAAC,eAAD,EAAkB,KAAlB,CAlCM,EAmCN,CAAC,uBAAD,EAA0B,EAA1B,CAnCM,EAoCN,CAAC,qBAAD,EAAwB,wBAAxB,CApCM,EAqCN,CAAC,iBAAD,EAAoB,wBAApB,CArCM,EAsCN,CAAC,iBAAD,EAAoB,CAApB,CAtCM,EAuCN,CAAC,WAAD,EAAc,kBAAd,CAvCM,EAwCN,CAAC,UAAD,EAAa,iBAAb,CAxCM,EAyCN,CAAC,gBAAD,EAAmB,GAAnB,CAzCM,EA0CN,CAAC,YAAD,EAAe,EAAf,CA1CM,EA2CN,CAAC,yBAAD,EAA4B,GAA5B,CA3CM,EA4CN,CAAC,yBAAD,EAA4B,MAA5B,CA5CM,EA6CN,CAAC,0BAAD,EAA6B,wBAA7B,CA7CM,EA8CN,CAAC,gBAAD,EAAmB,kBAAnB,CA9CM,EA+CN,CAAC,mBAAD,EAAsB,CAAtB,CA/CM,EAgDN,CAAC,iBAAD,EAAoB,CAApB,CAhDM,EAiDN,CAAC,kBAAD,EAAqB,CAArB,CAjDM,EAkDN,CAAC,gBAAD,EAAmB,CAAnB,CAlDM,EAmDN,CAAC,6BAAD,EAAgC,wBAAhC,CAnDM,EAoDN,CAAC,mBAAD,EAAsB,kBAAtB,CApDM,EAqDN,CAAC,yBAAD,EAA4B,wBAA5B,CArDM,EAsDN,CAAC,uBAAD,EAA0B,wBAA1B,CAtDM,EAuDN,CAAC,4BAAD,EAA+B,wBAA/B,CAvDM,EAwDN,CAAC,uBAAD,EAA0B,qBAA1B,CAxDM,EAyDN,CAAC,uBAAD,EAA0B,GAA1B,CAzDM,EA0DN,CAAC,wBAAD,EAA2B,CAA3B,CA1DM,EA2DN,CAAC,yBAAD,EAA4B,CAA5B,CA3DM,EA4DN,CAAC,uBAAD,EAA0B,CAA1B,CA5DM,EA6DN,CAAC,mBAAD,EAAsB,EAAtB,CA7DM,EA8DN,CAAC,uBAAD,EAA0B,QAA1B,CA9DM,EA+DN,CAAC,WAAD,EAAc,GAAd,CA/DM,EAgEN,CAAC,wBAAD,EAA2B,GAA3B,CAhEM,EAiEN,CAAC,gBAAD,EAAmB,QAAnB,CAjEM,EAkEN,CAAC,gBAAD,EAAmB,CAAnB,CAlEM,EAmEN,CAAC,iBAAD,EAAoB,CAApB,CAnEM,EAoEN,CAAC,4BAAD,EAA+B,qBAA/B,CApEM,EAqEN,CAAC,2BAAD,EAA8B,UAA9B,CArEM,EAsEN,CAAC,4BAAD,EAA+B,CAAC,EAAhC,CAtEM,EAuEN,CAAC,2BAAD,EAA8B,CAAC,CAA/B,CAvEM,EAwEN,CAAC,sBAAD,EAAyB,EAAzB,CAxEM,EAyEN,CAAC,iCAAD,EAAoC,wBAApC,CAzEM,EA0EN,CAAC,6BAAD,EAAgC,wBAAhC,CA1EM,EA2EN,CAAC,6BAAD,EAAgC,CAAhC,CA3EM,EA4EN,CAAC,oCAAD,EAAuC,wBAAvC,CA5EM,EA6EN,CAAC,gCAAD,EAAmC,wBAAnC,CA7EM,EA8EN,CAAC,gCAAD,EAAmC,CAAnC,CA9EM,EA+EN,CAAC,uBAAD,EAA0B,qBAA1B,CA/EM,EAgFN,CAAC,sBAAD,EAAyB,iBAAzB,CAhFM,EAiFN,CAAC,wBAAD,EAA2B,EAA3B,CAjFM,EAkFN,CAAC,qCAAD,EAAwC,MAAxC,CAlFM,EAmFN,CAAC,sCAAD,EAAyC,wBAAzC,CAnFM,EAoFN,CAAC,4BAAD,EAA+B,kBAA/B,CApFM,EAqFN,CAAC,+BAAD,EAAkC,CAAlC,CArFM,EAsFN,CAAC,6BAAD,EAAgC,CAAhC,CAtFM,EAuFN,CAAC,8BAAD,EAAiC,CAAjC,CAvFM,EAwFN,CAAC,4BAAD,EAA+B,CAA/B,CAxFM,EAyFN,CAAC,mCAAD,EAAsC,QAAtC,CAzFM,EA0FN,CAAC,qCAAD,EAAwC,wBAAxC,CA1FM,EA2FN,CAAC,qCAAD,EAAwC,CAAxC,CA3FM,EA4FN,CAAC,+BAAD,EAAkC,wBAAlC,CA5FM,EA6FN,CAAC,gCAAD,EAAmC,CAAnC,CA7FM,EA8FN,CAAC,oCAAD,EAAuC,CAAvC,CA9FM,EA+FN,CAAC,qCAAD,EAAwC,CAAxC,CA/FM,EAgGN,CAAC,mCAAD,EAAsC,CAAtC,CAhGM,EAiGN,CAAC,+BAAD,EAAkC,EAAlC,CAjGM,EAkGN,CAAC,2BAAD,EAA8B,kCAA9B,CAlGM,EAmGN,CAAC,iCAAD,EAAoC,KAApC,CAnGM,EAoGN,CAAC,yBAAD,EAA4B,UAA5B,CApGM,EAqGN,CAAC,8BAAD,EAAiC,qBAAjC,CArGM,EAsGN,CAAC,0BAAD,EAA6B,kCAA7B,CAtGM,EAuGN,CAAC,gCAAD,EAAmC,GAAnC,CAvGM,EAwGN,CAAC,yBAAD,EAA4B,eAA5B,CAxGM,EAyGN,CAAC,8BAAD,EAAiC,YAAjC,CAzGM,EA0GN,CAAC,4BAAD,EAA+B,MAA/B,CA1GM,EA2GN,CAAC,sCAAD,EAAyC,oBAAzC,CA3GM,EA4GN,CAAC,iCAAD,EAAoC,wBAApC,CA5GM,EA6GN,CAAC,uBAAD,EAA0B,qBAA1B,CA7GM,EA8GN,CAAC,0BAAD,EAA6B,UAA7B,CA9GM,EA+GN,CAAC,wBAAD,EAA2B,UAA3B,CA/GM,EAgHN,CAAC,uBAAD,EAA0B,wBAA1B,CAhHM,EAiHN,CAAC,mBAAD,EAAsB,kCAAtB,CAjHM,EAkHN,CAAC,yBAAD,EAA4B,KAA5B,CAlHM,EAmHN,CAAC,+BAAD,EAAkC,MAAlC,CAnHM,EAoHN,CAAC,kBAAD,EAAqB,qBAArB,CApHM,EAqHN,CAAC,mBAAD,EAAsB,SAAtB,CArHM,EAsHN,CAAC,mCAAD,EAAsC,YAAtC,CAtHM,EAuHN,CAAC,iCAAD,EAAoC,MAApC,CAvHM,EAwHN,CAAC,mCAAD,EAAsC,wBAAtC,CAxHM,EAyHN,CAAC,uBAAD,EAA0B,YAA1B,CAzHM,EA0HN,CAAC,qBAAD,EAAwB,MAAxB,CA1HM,EA2HN,CAAC,4BAAD,EAA+B,wBAA/B,CA3HM,EA4HN,CAAC,uBAAD,EAA0B,sBAA1B,CA5HM,EA6HN,CAAC,6BAAD,EAAgC,KAAhC,CA7HM,EA8HN,CAAC,uBAAD,EAA0B,KAA1B,CA9HM,EA+HN,CAAC,yBAAD,EAA4B,cAA5B,CA/HM,EAgIN,CAAC,wBAAD,EAA2B,WAA3B,CAhIM,EAiIN,CAAC,0BAAD,EAA6B,OAA7B,CAjIM,EAkIN,CAAC,0BAAD,EAA6B,MAA7B,CAlIM,EAmIN,CAAC,uBAAD,EAA0B,CAA1B,CAnIM,EAoIN,CAAC,sBAAD,EAAyB,CAAC,CAA1B,CApIM,EAqIN,CAAC,oBAAD,EAAuB,MAAvB,CArIM,EAsIN,CAAC,oBAAD,EAAuB,KAAvB,CAtIM,EAuIN,CAAC,yBAAD,EAA4B,EAA5B,CAvIM,EAwIN,CAAC,mBAAD,EAAsB,KAAtB,CAxIM,EAyIN,CAAC,2BAAD,EAA8B,wBAA9B,CAzIM,EA0IN,CAAC,uBAAD,EAA0B,wBAA1B,CA1IM,EA2IN,CAAC,sBAAD,EAAyB,mBAAzB,CA3IM,EA4IN,CAAC,YAAD,EAAe,sBAAf,CA5IM,EA6IN,CAAC,oBAAD,EAAuB,0BAAvB,CA7IM,EA8IN,CAAC,WAAD,EAAc,iBAAd,CA9IM,EA+IN,CAAC,0BAAD,EAA6B,wBAA7B,CA/IM,EAgJN,CAAC,yBAAD,EAA4B,0BAA5B,CAhJM,EAiJN,CAAC,uBAAD,EAA0B,0BAA1B,CAjJM,EAkJN,CAAC,wBAAD,EAA2B,0BAA3B,CAlJM,EAmJN,CAAC,uBAAD,EAA0B,yBAA1B,CAnJM,EAoJN,CAAC,qBAAD,EAAwB,0BAAxB,CApJM,EAqJN,CAAC,qBAAD,EAAwB,yBAAxB,CArJM,EAsJN,CAAC,SAAD,EAAY,cAAZ,CAtJM,EAuJN,CAAC,yBAAD,EAA4B,OAA5B,CAvJM,EAwJN,CAAC,gBAAD,EAAmB,kCAAnB,CAxJM,EAyJN,CAAC,mBAAD,EAAsB,2BAAtB,CAzJM,EA0JN,CAAC,eAAD,EAAkB,OAAlB,CA1JM,EA2JN,CAAC,oBAAD,EAAuB,YAAvB,CA3JM,EA4JN,CAAC,kBAAD,EAAqB,MAArB,CA5JM,EA6JN,CAAC,qBAAD,EAAwB,CAAxB,CA7JM,EA8JN,CAAC,gBAAD,EAAmB,KAAnB,CA9JM,EA+JN,CAAC,mCAAD,EAAsC,wBAAtC,CA/JM,EAgKN,CAAC,8BAAD,EAAiC,wBAAjC,CAhKM,EAiKN,CAAC,8BAAD,EAAiC,CAAjC,CAjKM,EAkKN,CAAC,8BAAD,EAAiC,CAAjC,CAlKM,EAmKN,CAAC,wBAAD,EAA2B,qBAA3B,CAnKM,EAoKN,CAAC,yBAAD,EAA4B,CAA5B,CApKM,EAqKN,CAAC,wBAAD,EAA2B,CAA3B,CArKM,EAsKN,CAAC,6BAAD,EAAgC,wBAAhC,CAtKM,EAuKN,CAAC,yBAAD,EAA4B,wBAA5B,CAvKM,EAwKN,CAAC,0BAAD,EAA6B,CAA7B,CAxKM,EAyKN,CAAC,oBAAD,EAAuB,EAAvB,CAzKM,EA0KN,CAAC,kCAAD,EAAqC,wBAArC,CA1KM,EA2KN,CAAC,2BAAD,EAA8B,EAA9B,CA3KM,EA4KN,CAAC,mBAAD,EAAsB,EAAtB,CA5KM,EA6KN,CAAC,wBAAD,EAA2B,wBAA3B,CA7KM,EA8KN,CAAC,8BAAD,EAAiC,wBAAjC,CA9KM,EA+KN,CAAC,yBAAD,EAA4B,0BAA5B,CA/KM,EAgLN,CAAC,+BAAD,EAAkC,0BAAlC,CAhLM,EAiLN,CAAC,+BAAD,EAAkC,wBAAlC,CAjLM,EAkLN,CAAC,mBAAD,EAAsB,wBAAtB,CAlLM,EAmLN,CAAC,yBAAD,EAA4B,wBAA5B,CAnLM,EAoLN,CAAC,yBAAD,EAA4B,CAA5B,CApLM,EAqLN,CAAC,yBAAD,EAA4B,wBAA5B,CArLM,EAsLN,CAAC,mBAAD,EAAsB,CAAtB,CAtLM,EAuLN,CAAC,6BAAD,EAAgC,wBAAhC,CAvLM,EAwLN,CAAC,qBAAD,EAAwB,wBAAxB,CAxLM,EAyLN,CAAC,oBAAD,EAAuB,UAAvB,CAzLM,EA0LN,CAAC,iBAAD,EAAoB,wBAApB,CA1LM,EA2LN,CAAC,iBAAD,EAAoB,CAApB,CA3LM,EA4LN,CAAC,qBAAD,EAAwB,wBAAxB,CA5LM,EA6LN,CAAC,+BAAD,EAAkC,wBAAlC,CA7LM,EA8LN,CAAC,QAAD,EAAW,MAAX,CA9LM,EA+LN,CAAC,WAAD,EAAc,SAAd,CA/LM,EAgMN,CAAC,UAAD,EAAa,SAAb,CAhMM,EAiMN,CAAC,gBAAD,EAAmB,EAAnB,CAjMM,EAkMN,CAAC,WAAD,EAAc,SAAd,CAlMM,EAmMN,CAAC,cAAD,EAAiB,EAAjB,CAnMM,EAoMN,CAAC,UAAD,EAAa,SAAb,CApMM,EAqMN,CAAC,yBAAD,EAA4B,EAA5B,CArMM,EAsMN,CAAC,uBAAD,EAA0B,EAA1B,CAtMM,EAuMN,CAAC,sBAAD,EAAyB,YAAzB,CAvMM,EAwMN,CAAC,oBAAD,EAAuB,MAAvB,CAxMM,EAyMN,CAAC,wBAAD,EAA2B,CAA3B,CAzMM,EA0MN,CAAC,wBAAD,EAA2B,uBAA3B,CA1MM,EA2MN,CAAC,2BAAD,EAA8B,OAA9B,CA3MM,EA4MN,CAAC,MAAD,EAAS,SAAT,CA5MM,EA6MN,CAAC,WAAD,EAAc,MAAd,CA7MM,EA8MN,CAAC,WAAD,EAAc,MAAd,CA9MM,EA+MN,CAAC,8BAAD,EAAiC,oBAAjC,CA/MM,EAgNN,CAAC,0BAAD,EAA6B,oBAA7B,CAhNM,EAiNN,CAAC,0BAAD,EAA6B,IAA7B,CAjNM,EAkNN,CAAC,+BAAD,EAAkC,uBAAlC,CAlNM,EAmNN,CAAC,+BAAD,EAAkC,IAAlC,CAnNM,EAoNN,CAAC,qBAAD,EAAwB,EAAxB,CApNM,EAqNN,CAAC,8BAAD,EAAiC,wBAAjC,CArNM,EAsNN,CAAC,0BAAD,EAA6B,wBAA7B,CAtNM,EAuNN,CAAC,0BAAD,EAA6B,CAA7B,CAvNM,EAwNN,CAAC,oBAAD,EAAuB,qBAAvB,CAxNM,EAyNN,CAAC,mBAAD,EAAsB,iBAAtB,CAzNM,EA0NN,CAAC,qBAAD,EAAwB,EAAxB,CA1NM,EA2NN,CAAC,kCAAD,EAAqC,MAArC,CA3NM,EA4NN,CAAC,mCAAD,EAAsC,wBAAtC,CA5NM,EA6NN,CAAC,yBAAD,EAA4B,kBAA5B,CA7NM,EA8NN,CAAC,4BAAD,EAA+B,CAA/B,CA9NM,EA+NN,CAAC,0BAAD,EAA6B,CAA7B,CA/NM,EAgON,CAAC,2BAAD,EAA8B,CAA9B,CAhOM,EAiON,CAAC,yBAAD,EAA4B,CAA5B,CAjOM,EAkON,CAAC,iCAAD,EAAoC,CAApC,CAlOM,EAmON,CAAC,gCAAD,EAAmC,qBAAnC,CAnOM,EAoON,CAAC,sCAAD,EAAyC,wBAAzC,CApOM,EAqON,CAAC,4BAAD,EAA+B,qBAA/B,CArOM,EAsON,CAAC,gCAAD,EAAmC,QAAnC,CAtOM,EAuON,CAAC,oBAAD,EAAuB,EAAvB,CAvOM,EAwON,CAAC,sBAAD,EAAyB,wBAAzB,CAxOM,EAyON,CAAC,0BAAD,EAA6B,wBAA7B,CAzOM,EA0ON,CAAC,sBAAD,EAAyB,wBAAzB,CA1OM,EA2ON,CAAC,sBAAD,EAAyB,GAAzB,CA3OM,EA4ON,CAAC,0BAAD,EAA6B,KAA7B,CA5OM,EA6ON,CAAC,mBAAD,EAAsB,wBAAtB,CA7OM,EA8ON,CAAC,oBAAD,EAAuB,CAAvB,CA9OM,EA+ON,CAAC,qBAAD,EAAwB,EAAxB,CA/OM,EAgPN,CAAC,mBAAD,EAAsB,CAAtB,CAhPM,EAiPN,CAAC,gCAAD,EAAmC,wBAAnC,CAjPM,EAkPN,CAAC,4BAAD,EAA+B,wBAA/B,CAlPM,EAmPN,CAAC,gBAAD,EAAmB,EAAnB,CAnPM,EAoPN,CAAC,4BAAD,EAA+B,wBAA/B,CApPM,EAqPN,CAAC,4BAAD,EAA+B,GAA/B,CArPM,EAsPN,CAAC,sBAAD,EAAyB,uBAAzB,CAtPM,EAuPN,CAAC,qBAAD,EAAwB,CAAxB,CAvPM,EAwPN,CAAC,qBAAD,EAAwB,QAAxB,CAxPM,EAyPN,CAAC,6BAAD,EAAgC,uBAAhC,CAzPM,EA0PN,CAAC,6BAAD,EAAgC,CAAhC,CA1PM,EA2PN,CAAC,sBAAD,EAAyB,wBAAzB,CA3PM,EA4PN,CAAC,sBAAD,EAAyB,CAAzB,CA5PM,EA6PN,CAAC,sBAAD,EAAyB,CAAzB,CA7PM,EA8PN,CAAC,gBAAD,EAAmB,wBAAnB,CA9PM,EA+PN,CAAC,iBAAD,EAAoB,CAApB,CA/PM,EAgQN,CAAC,qBAAD,EAAwB,CAAxB,CAhQM,EAiQN,CAAC,sBAAD,EAAyB,CAAzB,CAjQM,EAkQN,CAAC,oBAAD,EAAuB,CAAvB,CAlQM,EAmQN,CAAC,gBAAD,EAAmB,EAAnB,CAnQM,EAoQN,CAAC,gBAAD,EAAmB,GAAnB,CApQM,EAqQN,CAAC,sBAAD,EAAyB,kBAAzB,CArQM,EAsQN,CAAC,gCAAD,EAAmC,wBAAnC,CAtQM,EAuQN,CAAC,4BAAD,EAA+B,wBAA/B,CAvQM,EAwQN,CAAC,qBAAD,EAAwB,EAAxB,CAxQM,EAyQN,CAAC,OAAD,EAAU,MAAV,CAzQM;AAvHM,GAAhB;AAmYD,C;;;;;;;;;;;;;;;;;;;ACxYD;;AACA;AACa;;AAEb,6BAAe,oCAAU5H,IAAV,EAAgB;AAC7BA,MAAI,CAACkd,eAAL,GAAuB,UAAUC,GAAV,EAAe;AACpC,QAAIC,YAAY,GAAGpd,IAAI,CAACoC,QAAL,CAAcpC,IAAI,CAACkD,UAAnB,CAAnB;AAAA,QACEma,OAAO,GAAGrd,IAAI,CAACoC,QAAL,CAAc+a,GAAd,CADZ;AAAA,QAEE1b,CAAC,GAAGzB,IAAI,CAAC0B,YAAL,CAAkB1B,IAAI,CAAC2B,MAAvB,CAFN;AAAA,QAGE2b,QAAQ,GAAG;AACTvb,OAAC,EAAE,CADM;AAETE,OAAC,EAAE,CAFM;AAGT6P,OAAC,EAAE,CAHM;AAITyL,OAAC,EAAE;AAJM,KAHb;AAAA,QASEC,UAAU,GAAG;AACXzb,OAAC,EAAE,CAAC0b,QADO;AAEXxb,OAAC,EAAE,CAACwb,QAFO;AAGX3L,OAAC,EAAE2L,QAHQ;AAIXF,OAAC,EAAEE;AAJQ,KATf;AAAA,QAeEC,sBAAsB,GAAG1d,IAAI,CAAC2d,yBAAL,EAf3B;AAAA,QAgBEC,kBAAkB,GAAG5d,IAAI,CAAC6d,qBAAL,EAhBvB;AAiBAT,gBAAY,CAAClb,GAAb,IAAoBT,CAAC,CAACS,GAAtB;AACAkb,gBAAY,CAACpb,IAAb,IAAqBP,CAAC,CAACO,IAAvB;AACAqb,WAAO,CAACnb,GAAR,IAAeT,CAAC,CAACS,GAAjB;AACAmb,WAAO,CAACrb,IAAR,IAAgBP,CAAC,CAACO,IAAlB;AACAsb,YAAQ,CAACxL,CAAT,GACEsL,YAAY,CAAClb,GAAb,GACAkb,YAAY,CAACjb,MADb,GAEAgb,GAAG,CAAC3B,SAFJ,GAGAxb,IAAI,CAAC6B,KAAL,CAAWic,cAJb;AAKAR,YAAQ,CAACC,CAAT,GACEH,YAAY,CAACpb,IAAb,GACAob,YAAY,CAAC5O,KADb,GAEA2O,GAAG,CAAC5B,UAFJ,GAGAvb,IAAI,CAAC6B,KAAL,CAAWic,cAJb;AAKAR,YAAQ,CAACvb,CAAT,GAAaqb,YAAY,CAACpb,IAAb,GAAoBqb,OAAO,CAACrb,IAAR,GAAe,CAAC,CAApC,GAAwC4b,kBAArD;AACAN,YAAQ,CAACrb,CAAT,GAAamb,YAAY,CAAClb,GAAb,GAAmBmb,OAAO,CAACnb,GAAR,GAAc,CAAC,CAAlC,GAAsCwb,sBAAnD;AACA,WAAO;AACL3b,OAAC,EAAEub,QAAQ,CAACvb,CAAT,GAAayb,UAAU,CAACzb,CAAxB,GAA4Bub,QAAQ,CAACvb,CAArC,GAAyCyb,UAAU,CAACzb,CADlD;AAELE,OAAC,EAAEqb,QAAQ,CAACrb,CAAT,GAAaub,UAAU,CAACvb,CAAxB,GAA4Bqb,QAAQ,CAACrb,CAArC,GAAyCub,UAAU,CAACvb,CAFlD;AAGL6P,OAAC,EAAEwL,QAAQ,CAACxL,CAAT,GAAa0L,UAAU,CAAC1L,CAAxB,GAA4BwL,QAAQ,CAACxL,CAArC,GAAyC0L,UAAU,CAAC1L,CAHlD;AAILyL,OAAC,EAAED,QAAQ,CAACC,CAAT,GAAaC,UAAU,CAACD,CAAxB,GAA4BD,QAAQ,CAACC,CAArC,GAAyCC,UAAU,CAACD;AAJlD,KAAP;AAMD,GAxCD;;AAyCAvd,MAAI,CAAC+d,WAAL,GAAmB,UAAUZ,GAAV,EAAe;AAChC,QAAIG,QAAQ,GAAGtd,IAAI,CAACkd,eAAL,CAAqBC,GAArB,CAAf;;AACA,QAAIG,QAAQ,CAACC,CAAT,GAAa,CAAjB,EAAoB;AAClBD,cAAQ,CAACC,CAAT,GAAa,CAAb;AACD;;AACD,QAAID,QAAQ,CAACxL,CAAT,GAAa,CAAjB,EAAoB;AAClBwL,cAAQ,CAACxL,CAAT,GAAa,CAAb;AACD;;AACDqL,OAAG,CAACtb,KAAJ,CAAUmc,IAAV,GACE,UACAV,QAAQ,CAACrb,CADT,GAEA,KAFA,GAGAqb,QAAQ,CAACC,CAHT,GAIA,KAJA,GAKAD,QAAQ,CAACxL,CALT,GAMA,KANA,GAOAwL,QAAQ,CAACvb,CAPT,GAQA,IARA,GASA,GAVF,CARgC,CAmBhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACD,GA9BD;;AA+BA/B,MAAI,CAAC0B,YAAL,GAAoB,UAAUkE,CAAV,EAAa;AAC/B,QAAI7D,CAAC,GAAG,CAAR;AAAA,QACEE,CAAC,GAAG,CADN;AAAA,QAEEgc,gBAAgB,GAAGld,QAAQ,CAACkd,gBAAT,IAA6B;AAC9C1b,gBAAU,EAAE,CADkC;AAE9CC,eAAS,EAAE;AAFmC,KAFlD;;AAMA,WACEoD,CAAC,CAAC1C,UAAF,IACA0C,CAAC,CAAC+E,QAAF,KAAe,iBADf,IAEA/E,CAAC,KAAK5F,IAAI,CAACmB,IAHb,EAIE;AACA,UACEyE,CAAC,CAAC0W,QAAF,KAAe,sBAAf,IACA1W,CAAC,CAAC0W,QAAF,KAAe,sBAFjB,EAGE;AACAva,SAAC,IAAI6D,CAAC,CAACrD,UAAP;AACAN,SAAC,IAAI2D,CAAC,CAACpD,SAAP;AACD;;AACDoD,OAAC,GAAGA,CAAC,CAAC1C,UAAN;AACD;;AACD,WAAO;AACLlB,UAAI,EAAED,CAAC,GAAGkc,gBAAgB,CAAC1b,UADtB;AAELL,SAAG,EAAED,CAAC,GAAGgc,gBAAgB,CAACzb;AAFrB,KAAP;AAID,GAzBD;;AA0BAxC,MAAI,CAACke,eAAL,GAAuB,YAAY;AACjC,QAAIle,IAAI,CAACme,KAAL,IAAcne,IAAI,CAACme,KAAL,CAAWC,QAA7B,EAAuC;AACrC,UAAIzd,GAAG,GAAGX,IAAI,CAAC2B,MAAL,CAAY+C,qBAAZ,EAAV;AAAA,UACEjD,CAAC,GAAGzB,IAAI,CAAC0B,YAAL,CAAkB1B,IAAI,CAACmB,IAAvB,CADN;AAAA,UAEEkd,EAAE,GAAGre,IAAI,CAAC6B,KAAL,CAAWyc,kBAAX,KAAkC,UAAlC,GAA+C,CAA/C,GAAmD,CAF1D;AAAA,UAGEC,WAAW,GAAGve,IAAI,CAAC6B,KAAL,CAAW2c,eAAX,GAA6BH,EAH7C;AAAA,UAIE/O,IAAI,GAAGtP,IAAI,CAACye,qBAAL,CACLze,IAAI,CAACme,KAAL,CAAWC,QAAX,CAAoBnL,WADf,EAELjT,IAAI,CAACme,KAAL,CAAWC,QAAX,CAAoB5L,QAFf,KAGF;AAAEzQ,SAAC,EAAE,CAAC,GAAN;AAAWE,SAAC,EAAE,CAAC,GAAf;AAAoBE,cAAM,EAAE,CAA5B;AAA+BqM,aAAK,EAAE;AAAtC,OAPP;;AAQA,UAAIxO,IAAI,CAACK,MAAT,EAAiB;AACfL,YAAI,CAACme,KAAL,CAAWtc,KAAX,CAAiBG,IAAjB,GAAwB,GAAxB;AACAhC,YAAI,CAACme,KAAL,CAAWtc,KAAX,CAAiBK,GAAjB,GACElC,IAAI,CAACmC,MAAL,GACAnC,IAAI,CAAC6B,KAAL,CAAW6c,qBADX,GAEAH,WAFA,GAGA,CAHA,GAIA,IALF;AAMAve,YAAI,CAACme,KAAL,CAAWtc,KAAX,CAAiBM,MAAjB,GAA0BnC,IAAI,CAAC6B,KAAL,CAAW6c,qBAAX,GAAmC,IAA7D;AACA1e,YAAI,CAACme,KAAL,CAAWtc,KAAX,CAAiB2M,KAAjB,GAAyBxO,IAAI,CAACwO,KAAL,GAAa+P,WAAb,GAA2B,CAA3B,GAA+B,IAAxD;AACA;AACD;;AACD,UAAII,gBAAgB,GAAG3e,IAAI,CAAC+X,wBAAL,EAAvB;AACA,UAAI6G,gBAAgB,GAAG5e,IAAI,CAACiY,oBAAL,EAAvB;;AACA,UAAIjY,IAAI,CAACkD,UAAT,EAAqB;AAAA,+BACoClD,IAAI,CAACkD,UADzC;AAAA,YACX2b,sBADW,oBACXA,sBADW;AAAA,YACaC,kBADb,oBACaA,kBADb;AAEnB,YAAID,sBAAJ,EAA4BF,gBAAgB,IAAIE,sBAApB;AAC5B,YAAIC,kBAAJ,EAAwBF,gBAAgB,IAAIE,kBAApB;AACzB;;AACD9e,UAAI,CAACme,KAAL,CAAWtc,KAAX,CAAiBG,IAAjB,GACErB,GAAG,CAACqB,IAAJ,GACAsN,IAAI,CAACvN,CADL,GAEA/B,IAAI,CAAC6c,gBAFL,GAGApb,CAAC,CAACO,IAHF,GAIA4c,gBAJA,GAKA,IANF;AAOA5e,UAAI,CAACme,KAAL,CAAWtc,KAAX,CAAiBK,GAAjB,GACEvB,GAAG,CAACuB,GAAJ,GACAoN,IAAI,CAACrN,CADL,GAEAjC,IAAI,CAAC6B,KAAL,CAAW2c,eAFX,GAGAxe,IAAI,CAAC+c,eAHL,GAIAtb,CAAC,CAACS,GAJF,GAKAyc,gBALA,GAMA,IAPF;AAQA3e,UAAI,CAACme,KAAL,CAAWtc,KAAX,CAAiBM,MAAjB,GAA0BmN,IAAI,CAACnN,MAAL,GAAcoc,WAAd,GAA4B,IAAtD;AACAve,UAAI,CAACme,KAAL,CAAWtc,KAAX,CAAiB2M,KAAjB,GAAyBc,IAAI,CAACd,KAAL,GAAaxO,IAAI,CAAC6B,KAAL,CAAWkd,eAAxB,GAA0C,IAAnE;AACA/e,UAAI,CAAC+d,WAAL,CAAiB/d,IAAI,CAACme,KAAtB;AACD;AACF,GAhDD;;AAiDAne,MAAI,CAACoC,QAAL,GAAgB,UAAUwD,CAAV,EAAaoZ,kBAAb,EAAiC;AAC/C,QAAIjd,CAAC,GAAG,CAAR;AAAA,QACEE,CAAC,GAAG,CADN;AAAA,QAEER,CAAC,GAAGmE,CAFN;AAAA,QAGEkM,CAHF;AAAA,QAIEyL,CAJF;AAKA,QAAI0B,cAAc,GAAG,KAArB;;AACA,WAAOrZ,CAAC,CAACsZ,YAAF,IAAkBtZ,CAAC,CAAC+E,QAAF,KAAe,iBAAxC,EAA2D;AACzD,UAAMwU,MAAM,GAAGvZ,CAAC,CAAC0W,QAAF,KAAe,sBAA9B;;AACA,UAAI,CAAC6C,MAAD,IAAW,CAACF,cAAhB,EAAgC;AAC9Bld,SAAC,IAAI6D,CAAC,CAAC2V,UAAP;AACAtZ,SAAC,IAAI2D,CAAC,CAAC4V,SAAP;AACA1J,SAAC,GAAGlM,CAAC,CAACrC,YAAN;AACAga,SAAC,GAAG3X,CAAC,CAAC4G,WAAN;AACD;;AACD,UAAI2S,MAAJ,EAAYF,cAAc,GAAG,IAAjB;AACZrZ,OAAC,GAAGA,CAAC,CAACsZ,YAAN;AACD;;AACD,QAAIF,kBAAJ,EAAwB;AACtB,aAAO;AAAEhd,YAAI,EAAED,CAAR;AAAWG,WAAG,EAAED,CAAhB;AAAmBE,cAAM,EAAE2P,CAA3B;AAA8BtD,aAAK,EAAE+O;AAArC,OAAP;AACD;;AACD3X,KAAC,GAAGnE,CAAJ;AACAA,KAAC,GAAGzB,IAAI,CAAC0B,YAAL,CAAkBkE,CAAlB,CAAJ;AACA,WAAO;AAAE5D,UAAI,EAAED,CAAC,GAAGN,CAAC,CAACO,IAAd;AAAoBE,SAAG,EAAED,CAAC,GAAGR,CAAC,CAACS,GAA/B;AAAoCC,YAAM,EAAE2P,CAA5C;AAA+CtD,WAAK,EAAE+O;AAAtD,KAAP;AACD,GAxBD;;AAyBAvd,MAAI,CAACwc,WAAL,GAAmB,UAAU5W,CAAV,EAAa;AAC9B,QAAIlC,IAAI,GAAG1D,IAAI,CAAC2B,MAAL,CAAY+C,qBAAZ,EAAX;AAAA,QACE/D,GAAG,GAAG;AACJoB,OAAC,EAAE6D,CAAC,CAACwZ,OAAF,GAAY1b,IAAI,CAAC1B,IADhB;AAEJC,OAAC,EAAE2D,CAAC,CAACyZ,OAAF,GAAY3b,IAAI,CAACxB;AAFhB,KADR;;AAKA,QAAIlC,IAAI,CAACyb,WAAT,EAAsB;AACpB9a,SAAG,CAACoB,CAAJ,IAAS/B,IAAI,CAAC6c,gBAAd;AACAlc,SAAG,CAACsB,CAAJ,IAASjC,IAAI,CAAC+c,eAAd;AACA,UAAI/c,IAAI,CAACkD,UAAL,CAAgB4b,kBAApB,EACEne,GAAG,CAACoB,CAAJ,IAAS/B,IAAI,CAACkD,UAAL,CAAgB4b,kBAAzB;AACF,UAAI9e,IAAI,CAACkD,UAAL,CAAgB2b,sBAApB,EACEle,GAAG,CAACsB,CAAJ,IAASjC,IAAI,CAACkD,UAAL,CAAgB2b,sBAAzB;AACH;;AACD,WAAO;AACL9c,OAAC,EAAEpB,GAAG,CAACoB,CADF;AAELE,OAAC,EAAEtB,GAAG,CAACsB,CAFF;AAGLyB,UAAI,EAAEA;AAHD,KAAP;AAKD,GAnBD;AAoBA;AACF;AACA;AACA;AACA;AACA;AACA;;;AACE1D,MAAI,CAACsf,OAAL,GAAe,UAAUC,KAAV,EAAiB;AAC9B,QAAIjQ,IAAI,GAAGtP,IAAI,CAACme,KAAL,CAAWC,QAAtB;AAAA,QACEnc,CAAC,GAAGqN,IAAI,CAACkD,QADX;;AAEA,aAASgN,SAAT,GAAqB;AACnBD,WAAK,GAAG,IAAR;AACD;;AACD,QACEvf,IAAI,CAACwE,aAAL,CAAmB,eAAnB,EAAoC;AAClC8K,UAAI,EAAEA,IAD4B;AAElCmQ,cAAQ,EAAEzf,IAAI,CAACme,KAAL,CAAW9Y,KAFa;AAGlCqa,cAAQ,EAAEpQ,IAAI,CAACjK,KAHmB;AAIlCka,WAAK,EAAEC,SAJ2B;AAKlCrB,WAAK,EAAEne,IAAI,CAACme;AALsB,KAApC,CADF,EAQE;AACA,aAAO,KAAP;AACD;;AACD,QAAIne,IAAI,CAACme,KAAL,CAAW9Y,KAAX,KAAqBiK,IAAI,CAACjK,KAA1B,IAAmC,CAACka,KAAxC,EAA+C;AAC7Cvf,UAAI,CAAC2f,OAAL,CAAa1d,CAAb,IAAkBjC,IAAI,CAAC2f,OAAL,CAAa1d,CAAb,KAAmB,EAArC;AACAjC,UAAI,CAAC2f,OAAL,CAAa1d,CAAb,EAAgBqN,IAAI,CAACC,MAAL,CAAYtF,IAA5B,IAAoCjK,IAAI,CAACme,KAAL,CAAW9Y,KAA/C;;AACA,UAAI,CAACiK,IAAI,CAACpH,IAAV,EAAgB;AACdlI,YAAI,CAAC4f,YAAL,CAAkBtQ,IAAI,CAACuQ,aAAvB,IAAwC,EAAxC;AACAvQ,YAAI,CAACpH,IAAL,GAAYlI,IAAI,CAAC4f,YAAL,CAAkBtQ,IAAI,CAACuQ,aAAvB,CAAZ;AACD;;AACDvQ,UAAI,CAACpH,IAAL,CAAUoH,IAAI,CAACC,MAAL,CAAYtF,IAAtB,IAA8BjK,IAAI,CAACme,KAAL,CAAW9Y,KAAzC;;AACA,UAAIpD,CAAC,KAAKjC,IAAI,CAACmQ,QAAL,CAAc3K,MAAxB,EAAgC;AAC9B,YACExF,IAAI,CAACwE,aAAL,CAAmB,QAAnB,EAA6B;AAC3Ba,eAAK,EAAErF,IAAI,CAACme,KAAL,CAAW9Y,KADS;AAE3Bya,sBAAY,EAAExQ,IAAI,CAACjK,KAFQ;AAG3B0a,iBAAO,EAAER,KAHkB;AAI3BjQ,cAAI,EAAEA,IAJqB;AAK3B6O,eAAK,EAAEne,IAAI,CAACme;AALe,SAA7B,CADF,EAQE;AACA,iBAAO,KAAP;AACD;;AACDne,YAAI,CAACggB,MAAL,CAAY1Q,IAAI,CAACpH,IAAjB;AACAlI,YAAI,CAACigB,gBAAL;AACD;;AACDjgB,UAAI,CAACuV,IAAL,CAAU,IAAV;AACD;;AACD,QAAIvV,IAAI,CAACme,KAAL,CAAWjb,UAAf,EAA2B;AACzBlD,UAAI,CAACme,KAAL,CAAWjb,UAAX,CAAsBC,WAAtB,CAAkCnD,IAAI,CAACme,KAAvC;AACD;;AACDne,QAAI,CAACmB,IAAL,CAAUgR,KAAV;AACAnS,QAAI,CAACwE,aAAL,CAAmB,SAAnB,EAA8B;AAC5B8K,UAAI,EAAEA,IADsB;AAE5BjK,WAAK,EAAErF,IAAI,CAACme,KAAL,CAAW9Y,KAFU;AAG5B0a,aAAO,EAAER,KAHmB;AAI5BpB,WAAK,EAAEne,IAAI,CAACme;AAJgB,KAA9B;AAMAne,QAAI,CAACme,KAAL,GAAavc,SAAb;AACA,WAAO,IAAP;AACD,GAtDD;AAuDA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACE5B,MAAI,CAACkgB,WAAL,GAAmB,UAAUne,CAAV,EAAaE,CAAb,EAAgBwa,WAAhB,EAAkD;AAAA,QAArB0D,WAAqB,uEAAP,KAAO;;AACnE,QAAI,CAACngB,IAAI,CAACkJ,UAAL,CAAgBkX,QAArB,EAA+B;AAC7B;AACD;;AACD,QAAIpgB,IAAI,CAACme,KAAT,EAAgB;AACdne,UAAI,CAACsf,OAAL;AACD;;AACD,QAAIhQ,IAAI,GAAGtP,IAAI,CAACye,qBAAL,CAA2B1c,CAA3B,EAA8BE,CAA9B,CAAX;AAAA,QACER,CAAC,GAAGzB,IAAI,CAACkU,SAAL,EADN;AAAA,QAEEmM,aAFF;AAAA,QAGEC,SAHF;AAAA,QAIEC,GAJF;AAAA,QAKEC,MALF;AAAA,QAMEC,WANF;;AAOA,QAAI,EAAEnR,IAAI,IAAIA,IAAI,CAACC,MAAf,CAAJ,EAA4B;AAC1B;AACD,KAhBkE,CAiBnE;;;AACAgR,OAAG,GAAGjR,IAAI,CAACC,MAAL,CAAY,MAAZ,CAAN;;AACA,QACEvP,IAAI,CAACwE,aAAL,CAAmB,iBAAnB,EAAsC;AACpC8K,UAAI,EAAEA,IAD8B;AAEpCmN,iBAAW,EAAEA;AAFuB,KAAtC,CADF,EAKE;AACA,aAAO,KAAP;AACD;;AACDzc,QAAI,CAAC0gB,cAAL,CAAoB3e,CAApB,EAAuBE,CAAvB;AACAjC,QAAI,CAAC2gB,aAAL,CAAmB5e,CAAnB,EAAsBE,CAAtB;AACAoe,iBAAa,GAAGrgB,IAAI,CAAC4gB,gBAAL,EAAhB;;AACA,QAAIL,GAAJ,EAAS;AACPvgB,UAAI,CAACme,KAAL,GAAapd,QAAQ,CAACC,aAAT,CAAuB,QAAvB,CAAb;AACD,KAFD,MAEO;AACLhB,UAAI,CAACme,KAAL,GAAapd,QAAQ,CAACC,aAAT,CACXhB,IAAI,CAACkJ,UAAL,CAAgB2X,SAAhB,GAA4B,UAA5B,GAAyC,OAD9B,CAAb;AAGD;;AACDvR,QAAI,GAAGtP,IAAI,CAACye,qBAAL,CAA2B1c,CAA3B,EAA8BE,CAA9B,CAAP,CArCmE,CAsCnE;;AACA,QAAI,CAACqN,IAAL,EAAW;AACT;AACD;;AACD,QAAIiR,GAAJ,EAAS;AACP;AACA,UAAI,OAAOA,GAAP,KAAe,UAAnB,EAA+B;AAC7BD,iBAAS,GAAGC,GAAG,CAACnc,KAAJ,CAAUpE,IAAI,CAACmB,IAAf,EAAqB,CAAC;AAAEmO,cAAI,EAAEA;AAAR,SAAD,CAArB,CAAZ;AACD,OAFD,MAEO,IAAIlO,KAAK,CAACC,OAAN,CAAckf,GAAd,CAAJ,EAAwB;AAC7BD,iBAAS,GAAGC,GAAZ;AACD;;AACDD,eAAS,CAAC7a,OAAV,CAAkB,UAAUG,CAAV,EAAa;AAC7B,YAAIoB,CAAC,GAAGjG,QAAQ,CAACC,aAAT,CAAuB,QAAvB,CAAR;AAAA,YACE8G,GADF;AAAA,YAEE7D,KAFF;;AAGA,YAAI7C,KAAK,CAACC,OAAN,CAAcuE,CAAd,CAAJ,EAAsB;AACpBkC,aAAG,GAAGlC,CAAC,CAAC,CAAD,CAAP;AACA3B,eAAK,GAAG2B,CAAC,CAAC,CAAD,CAAT;AACD,SAHD,MAGO;AACLkC,aAAG,GAAGlC,CAAN;AACA3B,eAAK,GAAG2B,CAAR;AACD;;AACD,YAAIkC,GAAG,KAAKwH,IAAI,CAACjK,KAAjB,EAAwB;AACtBob,qBAAW,GAAG,IAAd;AACD;;AACDzZ,SAAC,CAAC3B,KAAF,GAAUyC,GAAV;AACAd,SAAC,CAACvE,SAAF,GAAcwB,KAAd;AACAjE,YAAI,CAACme,KAAL,CAAWrb,WAAX,CAAuBkE,CAAvB;AACD,OAjBD;;AAkBA,UAAI,CAACyZ,WAAL,EAAkB;AAChBD,cAAM,GAAGzf,QAAQ,CAACC,aAAT,CAAuB,QAAvB,CAAT;AACAwf,cAAM,CAACnb,KAAP,GAAeiK,IAAI,CAACjK,KAApB;AACAmb,cAAM,CAAC/d,SAAP,GAAmB6M,IAAI,CAACjK,KAAxB;AACArF,YAAI,CAACme,KAAL,CAAWrb,WAAX,CAAuB0d,MAAvB;AACD;;AACDxgB,UAAI,CAACme,KAAL,CAAW7d,gBAAX,CAA4B,QAA5B,EAAsC,YAAY;AAChDN,YAAI,CAACsf,OAAL;AACAtf,YAAI,CAACuV,IAAL,CAAU,IAAV;AACD,OAHD;AAID,KA7EkE,CA8EnE;;;AACA,QACE,CAACvV,IAAI,CAACwE,aAAL,CAAmB,iBAAnB,EAAsC;AAAE8K,UAAI,EAAEA,IAAR;AAAc6O,WAAK,EAAEne,IAAI,CAACme;AAA1B,KAAtC,CADH,EAEE;AACApd,cAAQ,CAACgC,IAAT,CAAcD,WAAd,CAA0B9C,IAAI,CAACme,KAA/B;AACD;;AACDne,QAAI,CAACI,iBAAL,CACEJ,IAAI,CAACme,KADP,EAEEne,IAAI,CAACK,MAAL,GACI,mCADJ,GAEI,4BAJN;AAMAL,QAAI,CAACme,KAAL,CAAWtc,KAAX,CAAiBO,QAAjB,GAA4B,UAA5B;AACApC,QAAI,CAACme,KAAL,CAAWC,QAAX,GAAsB9O,IAAtB;AACAtP,QAAI,CAACke,eAAL;AACAle,QAAI,CAACme,KAAL,CAAWtc,KAAX,CAAiBQ,MAAjB,GAA0BrC,IAAI,CAAC6B,KAAL,CAAWif,cAArC;AACA9gB,QAAI,CAACme,KAAL,CAAWtc,KAAX,CAAiBkf,QAAjB,GACEpY,QAAQ,CAAC3I,IAAI,CAAC6B,KAAL,CAAWmf,gBAAZ,EAA8B,EAA9B,CAAR,GAA4ChhB,IAAI,CAACihB,KAAjD,GAAyD,IAD3D;AAGA,QAAIC,gBAAgB,GAAG,CAAC,IAAD,EAAOtf,SAAP,EAAkBuK,OAAlB,CAA0BmD,IAAI,CAACjK,KAA/B,MAA0C,CAAC,CAAlE;AACA,QAAI8b,oBAAoB,GAAGD,gBAAgB,IAAIf,WAA/C;AAEAngB,QAAI,CAACme,KAAL,CAAW9Y,KAAX,GAAmB8b,oBAAoB,GAAG,EAAH,GAAQ7R,IAAI,CAACjK,KAApD;AACA,QAAImJ,KAAK,GAAG4S,IAAI,CAACC,KAAL,CACVrhB,IAAI,CAACme,KAAL,CAAW9Y,KAAX,CAAiBG,MAAjB,GACEmD,QAAQ,CAAC3I,IAAI,CAAC6B,KAAL,CAAWmf,gBAAZ,EAA8B,EAA9B,CADV,GAEE,GAFF,GAGEhhB,IAAI,CAACihB,KAJG,CAAZ;;AAMA,QAAIzS,KAAK,GAAGxO,IAAI,CAAC6B,KAAL,CAAWkd,eAAnB,GAAqCzP,IAAI,CAACd,KAA9C,EAAqD;AACnDA,WAAK,GAAGc,IAAI,CAACd,KAAL,GAAaxO,IAAI,CAAC6B,KAAL,CAAWkd,eAAhC;AACD,KAFD,MAEO,IAAIvQ,KAAK,GAAGxO,IAAI,CAACwO,KAAL,GAAac,IAAI,CAACvN,CAAlB,GAAsB/B,IAAI,CAAC6B,KAAL,CAAWic,cAA7C,EAA6D;AAClEtP,WAAK,GAAGxO,IAAI,CAACwO,KAAL,GAAac,IAAI,CAACvN,CAAlB,GAAsB/B,IAAI,CAAC6B,KAAL,CAAWic,cAAzC;AACA9d,UAAI,CAACme,KAAL,CAAWtc,KAAX,CAAiBM,MAAjB,GAA0B,MAA1B;AACD;;AACDnC,QAAI,CAACme,KAAL,CAAWtc,KAAX,CAAiB2M,KAAjB,GAAyBA,KAAK,GAAG,IAAjC;AACAxO,QAAI,CAACme,KAAL,CAAWhM,KAAX;AACAnS,QAAI,CAACme,KAAL,CAAW7d,gBAAX,CAA4B,OAA5B,EAAqCN,IAAI,CAAC6Q,eAA1C;AACA7Q,QAAI,CAACme,KAAL,CAAW7d,gBAAX,CAA4B,UAA5B,EAAwCN,IAAI,CAAC6Q,eAA7C;AACA7Q,QAAI,CAACme,KAAL,CAAW7d,gBAAX,CAA4B,SAA5B,EAAuCN,IAAI,CAAC6Q,eAA5C;AACA7Q,QAAI,CAACme,KAAL,CAAW7d,gBAAX,CAA4B,WAA5B,EAAyCN,IAAI,CAAC6Q,eAA9C;AACA7Q,QAAI,CAACme,KAAL,CAAW7d,gBAAX,CAA4B,SAA5B,EAAuC,UAAUsF,CAAV,EAAa;AAClD,UAAI0b,EAAE,GAAGhS,IAAI,CAAC2D,WAAd;AAAA,UACEsO,EAAE,GAAGjS,IAAI,CAACkD,QADZ;;AAGA,UAAI5M,CAAC,CAACsL,GAAF,KAAU,QAAd,EAAwB;AACtBlR,YAAI,CAACsf,OAAL,CAAa,IAAb,EADsB,CACF;;AACpBtf,YAAI,CAACuV,IAAL,CAAU,IAAV;AACD,OAHD,MAGO,IAAI3P,CAAC,CAACsL,GAAF,KAAU,OAAV,IAAqBlR,IAAI,CAACkJ,UAAL,CAAgB2X,SAArC,IAAkDjb,CAAC,CAAC4b,MAAxD,EAAgE;AACrExhB,YAAI,CAACme,KAAL,CAAW9Y,KAAX,GAAmBrF,IAAI,CAACme,KAAL,CAAW9Y,KAAX,GAAmB,IAAtC;AACArF,YAAI,CAACme,KAAL,CAAW3b,SAAX,GAAuBxC,IAAI,CAACme,KAAL,CAAWtR,YAAlC;AACD,OAHM,MAGA,IAAIjH,CAAC,CAACsL,GAAF,KAAU,OAAd,EAAuB;AAC5BlR,YAAI,CAACsf,OAAL,GAD4B,CAG5B;;AACA,YAAImC,YAAY,GAAG7b,CAAC,CAAC8b,QAAF,GACfN,IAAI,CAACO,GAAL,CAAS,CAAT,EAAYJ,EAAE,GAAG,CAAjB,CADe,GAEfH,IAAI,CAACQ,GAAL,CAASL,EAAE,GAAG,CAAd,EAAiBvhB,IAAI,CAACmQ,QAAL,CAAc3K,MAAd,GAAuB,CAAxC,CAFJ;;AAIA,YAAIic,YAAY,KAAKF,EAArB,EAAyB;AACvBvhB,cAAI,CAAC0gB,cAAL,CAAoBY,EAApB,EAAwBG,YAAxB;AACAzhB,cAAI,CAAC2gB,aAAL,CAAmBW,EAAnB,EAAuBG,YAAvB;AACD;;AAEDzhB,YAAI,CAACuV,IAAL,CAAU,IAAV;AACD,OAdM,MAcA,IACL,CAAC,SAAD,EAAY,WAAZ,EAAyB,WAAzB,EAAsC,YAAtC,EAAoD9E,QAApD,CAA6D7K,CAAC,CAACsL,GAA/D,KACAiP,WAFK,EAGL;AACA,gBAAQva,CAAC,CAACsL,GAAV;AACE,eAAK,SAAL;AACEqQ,cAAE,GAAGH,IAAI,CAACO,GAAL,CAAS,CAAT,EAAYJ,EAAE,GAAG,CAAjB,CAAL;AACA;;AACF,eAAK,WAAL;AACEA,cAAE,GAAGH,IAAI,CAACQ,GAAL,CAASL,EAAE,GAAG,CAAd,EAAiBvhB,IAAI,CAACmQ,QAAL,CAAc3K,MAAd,GAAuB,CAAxC,CAAL;AACA;;AACF,eAAK,WAAL;AACE8b,cAAE,GAAGF,IAAI,CAACO,GAAL,CAASL,EAAE,GAAG,CAAd,EAAiB,CAAjB,CAAL;AACA;;AACF,eAAK,YAAL;AACEA,cAAE,GAAGjB,aAAa,CAACtb,KAAnB;AACA;AAZJ;;AAeA/E,YAAI,CAACsf,OAAL;AAEAtf,YAAI,CAAC0gB,cAAL,CAAoBY,EAApB,EAAwBC,EAAxB;AACAvhB,YAAI,CAAC2gB,aAAL,CAAmBW,EAAnB,EAAuBC,EAAvB;AAEAvhB,YAAI,CAACuV,IAAL,CAAU,IAAV;AACD,OAzBM,MAyBA,IAAI3P,CAAC,CAACsL,GAAF,KAAU,KAAd,EAAqB;AAC1BtL,SAAC,CAAC2L,cAAF;;AACA,YAAI,CAACvR,IAAI,CAACsf,OAAL,EAAL,EAAqB;AACnB;AACD;;AACD,YAAI1Z,CAAC,CAAC8b,QAAN,EAAgB;AACdJ,YAAE,GAAGjB,aAAa,CAACre,IAAnB;AACD,SAFD,MAEO;AACLsf,YAAE,GAAGjB,aAAa,CAACtb,KAAnB;AACD;;AACD,YAAIsb,aAAa,CAACre,IAAd,KAAuBD,CAAvB,IAA4B6D,CAAC,CAAC8b,QAAlC,EAA4C;AAC1CJ,YAAE,GAAGjB,aAAa,CAACwB,IAAnB;AACAN,YAAE,IAAI,CAAN;AACD;;AACD,YAAIlB,aAAa,CAACtb,KAAd,KAAwBhD,CAAxB,IAA6B,CAAC6D,CAAC,CAAC8b,QAApC,EAA8C;AAC5CJ,YAAE,GAAGjB,aAAa,CAACyB,KAAnB;AACAP,YAAE,IAAI,CAAN;AACD;;AACD,YAAIA,EAAE,GAAG,CAAT,EAAY;AACVA,YAAE,GAAGvhB,IAAI,CAACmQ,QAAL,CAAc3K,MAAd,GAAuB,CAA5B;AACD;;AACD,YAAI+b,EAAE,GAAGvhB,IAAI,CAACmQ,QAAL,CAAc3K,MAAd,GAAuB,CAAhC,EAAmC;AACjC+b,YAAE,GAAG,CAAL;AACD;;AACDvhB,YAAI,CAAC0gB,cAAL,CAAoBY,EAApB,EAAwBC,EAAxB;AACAvhB,YAAI,CAACkgB,WAAL,CAAiBoB,EAAjB,EAAqBC,EAArB,EAAyB3b,CAAzB;AACD,OA1BM,MA0BA;AACL,YAAI4I,MAAK,GAAG4S,IAAI,CAACC,KAAL,CACVrhB,IAAI,CAACme,KAAL,CAAW9Y,KAAX,CAAiBG,MAAjB,GACEmD,QAAQ,CAAC3I,IAAI,CAAC6B,KAAL,CAAWmf,gBAAZ,EAA8B,EAA9B,CADV,GAEE,GAFF,GAGEhhB,IAAI,CAACihB,KAJG,CAAZ;;AAMA,YAAIzS,MAAK,GAAGxO,IAAI,CAAC6B,KAAL,CAAWkd,eAAnB,GAAqCzP,IAAI,CAACd,KAA9C,EAAqD;AACnDA,gBAAK,GAAGc,IAAI,CAACd,KAAL,GAAaxO,IAAI,CAAC6B,KAAL,CAAWkd,eAAhC;AACD,SAFD,MAEO,IAAIvQ,MAAK,GAAGxO,IAAI,CAACwO,KAAL,GAAac,IAAI,CAACvN,CAAlB,GAAsB/B,IAAI,CAAC6B,KAAL,CAAWic,cAA7C,EAA6D;AAClEtP,gBAAK,GAAGxO,IAAI,CAACwO,KAAL,GAAac,IAAI,CAACvN,CAAlB,GAAsB/B,IAAI,CAAC6B,KAAL,CAAWic,cAAzC;AACA9d,cAAI,CAACme,KAAL,CAAWtc,KAAX,CAAiBM,MAAjB,GAA0B,MAA1B;AACD;;AACDnC,YAAI,CAACme,KAAL,CAAWtc,KAAX,CAAiB2M,KAAjB,GAAyBA,MAAK,GAAG,IAAjC;AACD;AACF,KA1FD;AA4FAxO,QAAI,CAACwE,aAAL,CAAmB,WAAnB,EAAgC;AAAE8K,UAAI,EAAEA,IAAR;AAAc6O,WAAK,EAAEne,IAAI,CAACme;AAA1B,KAAhC;AACD,GApND;;AAqNAne,MAAI,CAACI,iBAAL,GAAyB,UAAU8K,EAAV,EAAc6W,SAAd,EAAyB;AAChD,QAAIC,GAAG,GAAG;AACR,wCAAkC;AAChC5U,eAAO,EAAE,cADuB;AAEhC6U,eAAO,EAAEjiB,IAAI,CAAC6B,KAAL,CAAWqgB,aAFY;AAGhC3D,mBAAW,EAAE,KAHmB;AAIhC4D,mBAAW,EAAE,OAJmB;AAKhCC,mBAAW,EAAEpiB,IAAI,CAAC6B,KAAL,CAAWwgB,iBALQ;AAMhCC,cAAM,EAAE,SANwB;AAOhC5S,kBAAU,EAAE1P,IAAI,CAAC6B,KAAL,CAAW0gB,qBAPS;AAQhCC,kBAAU,EAAE;AARoB,OAD1B;AAWR,8CAAwC;AACtCJ,mBAAW,EAAEpiB,IAAI,CAAC6B,KAAL,CAAWwgB,iBADc;AAEtC3S,kBAAU,EAAE1P,IAAI,CAAC6B,KAAL,CAAW4gB;AAFe,OAXhC;AAeR,+CAAyC;AACvCL,mBAAW,EAAEpiB,IAAI,CAAC6B,KAAL,CAAW6gB,uBADe;AAEvChT,kBAAU,EAAE1P,IAAI,CAAC6B,KAAL,CAAW8gB;AAFgB,OAfjC;AAmBR,qCAA+B;AAC7BnU,aAAK,EAAE,MADsB;AAE7BrM,cAAM,EAAE,MAFqB;AAG7BiL,eAAO,EAAE,cAHoB;AAI7BwV,qBAAa,EAAE;AAJc,OAnBvB;AAyBR,sCAAgC;AAC9BxV,eAAO,EAAE,cADqB;AAE9Ba,aAAK,EAAEjO,IAAI,CAAC6B,KAAL,CAAWghB,gBAFY;AAG9B9B,gBAAQ,EAAE;AAHoB,OAzBxB;AA8BR,iDAA2C;AACzC+B,kBAAU,EAAE,QAD6B;AAEzCC,kBAAU,EAAE,QAF6B;AAGzCC,kBAAU,EAAEhjB,IAAI,CAAC6B,KAAL,CAAWohB,qBAHkB;AAIzClC,gBAAQ,EAAE/gB,IAAI,CAAC6B,KAAL,CAAWqhB,mBAJoB;AAKzCjV,aAAK,EAAE,SALkC;AAMzCyB,kBAAU,EAAE,SAN6B;AAOzCyT,cAAM,EAAEnjB,IAAI,CAAC6B,KAAL,CAAWuhB,qBAPsB;AAQzCC,oBAAY,EAAErjB,IAAI,CAAC6B,KAAL,CAAWyhB,2BARgB;AASzCV,qBAAa,EAAE;AAT0B,OA9BnC;AAyCR,0CAAoC;AAClCE,kBAAU,EAAE,QADsB;AAElCC,kBAAU,EAAE,QAFsB;AAGlCC,kBAAU,EAAEhjB,IAAI,CAAC6B,KAAL,CAAWohB,qBAHW;AAIlClC,gBAAQ,EAAE/gB,IAAI,CAAC6B,KAAL,CAAWqhB,mBAJa;AAKlCjV,aAAK,EAAE,SAL2B;AAMlCyB,kBAAU,EAAE,SANsB;AAOlCyT,cAAM,EAAEnjB,IAAI,CAAC6B,KAAL,CAAWuhB,qBAPe;AAQlCC,oBAAY,EAAErjB,IAAI,CAAC6B,KAAL,CAAWyhB,2BARS;AASlCV,qBAAa,EAAE;AATmB,OAzC5B;AAoDR,gDAA0C;AACxClT,kBAAU,EAAE1P,IAAI,CAAC6B,KAAL,CAAW0hB,0BADiB;AAExCtV,aAAK,EAAEjO,IAAI,CAAC6B,KAAL,CAAW2hB;AAFsB,OApDlC;AAwDR,2CAAqC;AACnCL,cAAM,EAAEnjB,IAAI,CAAC6B,KAAL,CAAW4hB,sBADgB;AAEnCrW,eAAO,EAAEpN,IAAI,CAAC6B,KAAL,CAAW6hB,uBAFe;AAGnCnV,gBAAQ,EAAEvO,IAAI,CAAC6B,KAAL,CAAW8hB,wBAHc;AAInC9gB,gBAAQ,EAAE7C,IAAI,CAAC6B,KAAL,CAAW+hB;AAJc,OAxD7B;AA8DR,4CAAsC;AACpCd,kBAAU,EAAE,QADwB;AAEpCC,kBAAU,EAAE,QAFwB;AAGpCC,kBAAU,EAAEhjB,IAAI,CAAC6B,KAAL,CAAWohB,qBAHa;AAIpClC,gBAAQ,EAAE/gB,IAAI,CAAC6B,KAAL,CAAWqhB,mBAJe;AAKpCxT,kBAAU,EAAE1P,IAAI,CAAC6B,KAAL,CAAWgiB,qBALa;AAMpC5V,aAAK,EAAEjO,IAAI,CAAC6B,KAAL,CAAWiiB,gBANkB;AAOpCC,cAAM,EAAE/jB,IAAI,CAAC6B,KAAL,CAAWmiB,iBAPiB;AAQpC/B,eAAO,EAAEjiB,IAAI,CAAC6B,KAAL,CAAWoiB,kBARgB;AASpCZ,oBAAY,EAAErjB,IAAI,CAAC6B,KAAL,CAAWqiB,uBATW;AAUpClX,eAAO,EAAEhN,IAAI,CAAC6B,KAAL,CAAWsiB,kBAVgB;AAWpCC,gBAAQ,EAAE,QAX0B;AAYpCC,kBAAU,EAAE;AAZwB,OA9D9B;AA4ER,qCAA+B;AAC7BvB,kBAAU,EAAE,QADiB;AAE7BC,kBAAU,EAAE,QAFiB;AAG7BC,kBAAU,EAAEhjB,IAAI,CAAC6B,KAAL,CAAWohB,qBAHM;AAI7BlC,gBAAQ,EAAE/gB,IAAI,CAAC6B,KAAL,CAAWqhB,mBAJQ;AAK7BxT,kBAAU,EAAE1P,IAAI,CAAC6B,KAAL,CAAWgiB,qBALM;AAM7B5V,aAAK,EAAEjO,IAAI,CAAC6B,KAAL,CAAWiiB,gBANW;AAO7BC,cAAM,EAAE/jB,IAAI,CAAC6B,KAAL,CAAWmiB,iBAPU;AAQ7B/B,eAAO,EAAEjiB,IAAI,CAAC6B,KAAL,CAAWoiB,kBARS;AAS7BZ,oBAAY,EAAErjB,IAAI,CAAC6B,KAAL,CAAWqiB,uBATI;AAU7BlX,eAAO,EAAEhN,IAAI,CAAC6B,KAAL,CAAWsiB,kBAVS;AAW7BC,gBAAQ,EAAE,QAXmB;AAY7BC,kBAAU,EAAE,QAZiB;AAa7B/B,cAAM,EAAEtiB,IAAI,CAAC6B,KAAL,CAAWyiB;AAbU,OA5EvB;AA2FR,mDAA6C;AAC3CniB,cAAM,EAAE,MADmC;AAE3CygB,qBAAa,EAAE,QAF4B;AAG3C2B,kBAAU,EAAE,KAH+B;AAI3CtC,eAAO,EAAE,GAJkC;AAK3CvS,kBAAU,EAAE1P,IAAI,CAAC6B,KAAL,CAAW8N,4BALoB;AAM3C1B,aAAK,EAAEjO,IAAI,CAAC6B,KAAL,CAAW+N,uBANyB;AAO3CmU,cAAM,EAAE/jB,IAAI,CAAC6B,KAAL,CAAW2iB,wBAPwB;AAQ3CnB,oBAAY,EAAErjB,IAAI,CAAC6B,KAAL,CAAW4iB,8BARkB;AAS3C3B,kBAAU,EAAE,QAT+B;AAU3CC,kBAAU,EAAE,QAV+B;AAW3CC,kBAAU,EAAEhjB,IAAI,CAAC6B,KAAL,CAAW6iB,4BAXoB;AAY3C3D,gBAAQ,EAAE/gB,IAAI,CAAC6B,KAAL,CAAW8iB;AAZsB,OA3FrC;AAyGR,oDAA8C;AAC5CxiB,cAAM,EAAE,MADoC;AAE5CygB,qBAAa,EAAE,QAF6B;AAG5C2B,kBAAU,EAAE,KAHgC;AAI5CtC,eAAO,EAAE,GAJmC;AAK5CvS,kBAAU,EAAE1P,IAAI,CAAC6B,KAAL,CAAWgiB,qBALqB;AAM5C5V,aAAK,EAAEjO,IAAI,CAAC6B,KAAL,CAAWiiB,gBAN0B;AAO5CC,cAAM,EAAE/jB,IAAI,CAAC6B,KAAL,CAAW+iB,yBAPyB;AAQ5CvB,oBAAY,EAAErjB,IAAI,CAAC6B,KAAL,CAAWgjB,+BARmB;AAS5C/B,kBAAU,EAAE,QATgC;AAU5CC,kBAAU,EAAE,QAVgC;AAW5CC,kBAAU,EAAEhjB,IAAI,CAAC6B,KAAL,CAAWijB,iCAXqB;AAY5C/D,gBAAQ,EAAE/gB,IAAI,CAAC6B,KAAL,CAAWkjB;AAZuB,OAzGtC;AAuHR,6CAAuC;AACrCC,gBAAQ,EAAE,OAD2B;AAErC/W,aAAK,EAAEjO,IAAI,CAAC6B,KAAL,CAAWojB,0BAFmB;AAGrClE,gBAAQ,EAAE/gB,IAAI,CAAC6B,KAAL,CAAWqjB,6BAHgB;AAIrClC,kBAAU,EAAEhjB,IAAI,CAAC6B,KAAL,CAAWohB,qBAJc;AAKrCL,qBAAa,EAAE;AALsB,OAvH/B;AA8HR,sCAAgC;AAC9BI,kBAAU,EAAEhjB,IAAI,CAAC6B,KAAL,CAAWohB,qBADO;AAE9BlC,gBAAQ,EAAE/gB,IAAI,CAAC6B,KAAL,CAAWqhB,mBAFS;AAG9BxT,kBAAU,EAAE1P,IAAI,CAAC6B,KAAL,CAAWgiB,qBAHO;AAI9B5V,aAAK,EAAEjO,IAAI,CAAC6B,KAAL,CAAWiiB,gBAJY;AAK9BC,cAAM,EAAE/jB,IAAI,CAAC6B,KAAL,CAAWmiB,iBALW;AAM9B/B,eAAO,EAAEjiB,IAAI,CAAC6B,KAAL,CAAWoiB,kBANU;AAO9BZ,oBAAY,EAAErjB,IAAI,CAAC6B,KAAL,CAAWqiB,uBAPK;AAQ9BlX,eAAO,EAAEhN,IAAI,CAAC6B,KAAL,CAAWsiB,kBARU;AAS9B/hB,gBAAQ,EAAE,UAToB;AAU9BC,cAAM,EAAE,IAVsB;AAW9B+hB,gBAAQ,EAAE;AAXoB,OA9HxB;AA2IR,2CAAqC;AACnC1U,kBAAU,EAAE1P,IAAI,CAAC6B,KAAL,CAAWgiB,qBADY;AAEnC5V,aAAK,EAAEjO,IAAI,CAAC6B,KAAL,CAAWiiB;AAFiB,OA3I7B;AA+IR,iDAA2C;AACzCpU,kBAAU,EAAE1P,IAAI,CAAC6B,KAAL,CAAW0hB,0BADkB;AAEzCtV,aAAK,EAAEjO,IAAI,CAAC6B,KAAL,CAAW2hB;AAFuB,OA/InC;AAmJR,gCAA0B;AACxBphB,gBAAQ,EAAE,UADc;AAExBC,cAAM,EAAE;AAFgB,OAnJlB;AAuJR,yBAAmB;AACjB+K,eAAO,EAAE;AADQ,OAvJX;AA0JR,uCAAiC;AAC/BhL,gBAAQ,EAAE,OADqB;AAE/BF,WAAG,EAAE,MAF0B;AAG/BF,YAAI,EAAE,MAHyB;AAI/B+hB,cAAM,EAAE,MAJuB;AAK/B/W,eAAO,EAAE,GALsB;AAM/BsV,cAAM,EAAE,SANuB;AAO/B9T,aAAK,EAAE,KAPwB;AAQ/BrM,cAAM,EAAE,KARuB;AAS/B2gB,kBAAU,EAAE,QATmB;AAU/BC,kBAAU,EAAE,QAVmB;AAW/BC,kBAAU,EAAEhjB,IAAI,CAAC6B,KAAL,CAAWohB,qBAXQ;AAY/BlC,gBAAQ,EAAE/gB,IAAI,CAAC6B,KAAL,CAAWqhB;AAZU,OA1JzB;AAwKR,2CAAqC;AACnCiC,iBAAS,EAAE,aADwB;AAEnCC,eAAO,EAAE,MAF0B;AAGnCjC,cAAM,EAAE,GAH2B;AAInClB,eAAO,EAAE,SAJ0B;AAKnCa,kBAAU,EAAE,QALuB;AAMnCC,kBAAU,EAAE,QANuB;AAOnCC,kBAAU,EAAEhjB,IAAI,CAAC6B,KAAL,CAAWwjB,oBAPY;AAQnCtE,gBAAQ,EAAE/gB,IAAI,CAAC6B,KAAL,CAAWyjB,kBARc;AASnCvB,cAAM,EAAE/jB,IAAI,CAAC6B,KAAL,CAAW0jB,cATgB;AAUnCtX,aAAK,EAAEjO,IAAI,CAAC6B,KAAL,CAAW2jB,aAViB;AAWnC9V,kBAAU,EAAE1P,IAAI,CAAC6B,KAAL,CAAW4jB,uBAXY;AAYnCC,kBAAU,EAAE,MAZuB;AAanCC,wBAAgB,EAAE,MAbiB;AAcnCC,qBAAa,EAAE,MAdoB;AAenCvC,oBAAY,EAAE;AAfqB,OAxK7B;AAyLR,oCAA8B;AAC5B8B,iBAAS,EAAE,aADiB;AAE5BC,eAAO,EAAE,MAFmB;AAG5BjC,cAAM,EAAE,GAHoB;AAI5BlB,eAAO,EAAE,WAAWjiB,IAAI,CAAC6B,KAAL,CAAWgkB,mBAAtB,GAA4C,IAJzB;AAK5B/C,kBAAU,EAAE,QALgB;AAM5BC,kBAAU,EAAE,QANgB;AAO5BC,kBAAU,EAAEhjB,IAAI,CAAC6B,KAAL,CAAWikB,kBAPK;AAQ5B/E,gBAAQ,EAAE/gB,IAAI,CAAC6B,KAAL,CAAWmf,gBARO;AAS5B+E,iBAAS,EAAE/lB,IAAI,CAAC6B,KAAL,CAAWmkB,iBATM;AAU5BjC,cAAM,EAAE/jB,IAAI,CAAC6B,KAAL,CAAW0jB,cAVS;AAW5BtX,aAAK,EAAEjO,IAAI,CAAC6B,KAAL,CAAW2jB,aAXU;AAY5B9V,kBAAU,EAAE1P,IAAI,CAAC6B,KAAL,CAAW4jB,uBAZK;AAa5BC,kBAAU,EAAE,MAbgB;AAc5BC,wBAAgB,EAAE,MAdU;AAe5BC,qBAAa,EAAE,MAfa;AAgB5BvC,oBAAY,EAAE;AAhBc,OAzLtB;AA2MR,kDAA4C;AAC1CP,kBAAU,EAAE,QAD8B;AAE1CC,kBAAU,EAAE,QAF8B;AAG1CC,kBAAU,EAAEhjB,IAAI,CAAC6B,KAAL,CAAWohB,qBAHmB;AAI1ClC,gBAAQ,EAAE/gB,IAAI,CAAC6B,KAAL,CAAWqhB,mBAJqB;AAK1CjV,aAAK,EAAE,SALmC;AAM1CyB,kBAAU,EAAE,SAN8B;AAO1CyT,cAAM,EAAEnjB,IAAI,CAAC6B,KAAL,CAAWuhB,qBAPuB;AAQ1CC,oBAAY,EAAErjB,IAAI,CAAC6B,KAAL,CAAWyhB,2BARiB;AAS1CV,qBAAa,EAAE;AAT2B,OA3MpC;AAsNR,2CAAqC;AACnCE,kBAAU,EAAE,QADuB;AAEnCC,kBAAU,EAAE,QAFuB;AAGnCC,kBAAU,EAAEhjB,IAAI,CAAC6B,KAAL,CAAWohB,qBAHY;AAInClC,gBAAQ,EAAE/gB,IAAI,CAAC6B,KAAL,CAAWqhB,mBAJc;AAKnCjV,aAAK,EAAE,SAL4B;AAMnCyB,kBAAU,EAAE,SANuB;AAOnCyT,cAAM,EAAEnjB,IAAI,CAAC6B,KAAL,CAAWuhB,qBAPgB;AAQnCC,oBAAY,EAAErjB,IAAI,CAAC6B,KAAL,CAAWyhB,2BARU;AASnCV,qBAAa,EAAE;AAToB,OAtN7B;AAiOR,iDAA2C;AACzClT,kBAAU,EAAE1P,IAAI,CAAC6B,KAAL,CAAW0hB,0BADkB;AAEzCtV,aAAK,EAAEjO,IAAI,CAAC6B,KAAL,CAAW2hB;AAFuB,OAjOnC;AAqOR,4CAAsC;AACpCL,cAAM,EAAEnjB,IAAI,CAAC6B,KAAL,CAAW4hB,sBADiB;AAEpCrW,eAAO,EAAEpN,IAAI,CAAC6B,KAAL,CAAW6hB,uBAFgB;AAGpCnV,gBAAQ,EAAEvO,IAAI,CAAC6B,KAAL,CAAW8hB,wBAHe;AAIpC9gB,gBAAQ,EAAE7C,IAAI,CAAC6B,KAAL,CAAW+hB;AAJe,OArO9B;AA2OR,6CAAuC;AACrCd,kBAAU,EAAE,QADyB;AAErCC,kBAAU,EAAE,QAFyB;AAGrCC,kBAAU,EAAEhjB,IAAI,CAAC6B,KAAL,CAAWohB,qBAHc;AAIrClC,gBAAQ,EAAE/gB,IAAI,CAAC6B,KAAL,CAAWqhB,mBAJgB;AAKrCxT,kBAAU,EAAE1P,IAAI,CAAC6B,KAAL,CAAWgiB,qBALc;AAMrC5V,aAAK,EAAEjO,IAAI,CAAC6B,KAAL,CAAWiiB,gBANmB;AAOrCC,cAAM,EAAE/jB,IAAI,CAAC6B,KAAL,CAAWmiB,iBAPkB;AAQrC/B,eAAO,EAAEjiB,IAAI,CAAC6B,KAAL,CAAWoiB,kBARiB;AASrCZ,oBAAY,EAAErjB,IAAI,CAAC6B,KAAL,CAAWqiB,uBATY;AAUrClX,eAAO,EAAEhN,IAAI,CAAC6B,KAAL,CAAWsiB,kBAViB;AAWrCC,gBAAQ,EAAE,QAX2B;AAYrCC,kBAAU,EAAE;AAZyB,OA3O/B;AAyPR,sCAAgC;AAC9BvB,kBAAU,EAAE,QADkB;AAE9BC,kBAAU,EAAE,QAFkB;AAG9BC,kBAAU,EAAEhjB,IAAI,CAAC6B,KAAL,CAAWohB,qBAHO;AAI9BlC,gBAAQ,EAAE/gB,IAAI,CAAC6B,KAAL,CAAWqhB,mBAJS;AAK9BxT,kBAAU,EAAE1P,IAAI,CAAC6B,KAAL,CAAWgiB,qBALO;AAM9B5V,aAAK,EAAEjO,IAAI,CAAC6B,KAAL,CAAWiiB,gBANY;AAO9BC,cAAM,EAAE/jB,IAAI,CAAC6B,KAAL,CAAWmiB,iBAPW;AAQ9B/B,eAAO,EAAEjiB,IAAI,CAAC6B,KAAL,CAAWoiB,kBARU;AAS9BZ,oBAAY,EAAErjB,IAAI,CAAC6B,KAAL,CAAWqiB,uBATK;AAU9BlX,eAAO,EAAEhN,IAAI,CAAC6B,KAAL,CAAWsiB,kBAVU;AAW9BC,gBAAQ,EAAE,QAXoB;AAY9BC,kBAAU,EAAE,QAZkB;AAa9B/B,cAAM,EAAEtiB,IAAI,CAAC6B,KAAL,CAAWyiB;AAbW,OAzPxB;AAwQR,+CAAyC;AACvC5U,kBAAU,EAAE1P,IAAI,CAAC6B,KAAL,CAAWokB;AADgB;AAxQjC,KAAV;;AA4QA,QAAIjE,GAAG,CAACD,SAAD,CAAP,EAAoB;AAClB9c,YAAM,CAAC8L,IAAP,CAAYiR,GAAG,CAACD,SAAD,CAAf,EAA4B9Q,GAA5B,CAAgC,UAAU7K,IAAV,EAAgB;AAC9C8E,UAAE,CAACrJ,KAAH,CAASuE,IAAT,IAAiB4b,GAAG,CAACD,SAAD,CAAH,CAAe3b,IAAf,CAAjB;AACD,OAFD;AAGD;;AACD;AACD,GAnRD;;AAoRApG,MAAI,CAACkmB,QAAL,GAAgB,UAAUtgB,CAAV,EAAa;AAC3B5F,QAAI,CAACkD,UAAL,GAAkB0C,CAAlB;AACA5F,QAAI,CAACmmB,MAAL;AACD,GAHD;;AAIAnmB,MAAI,CAACmmB,MAAL,GAAc,YAAY;AACxB,QAAInmB,IAAI,CAACyb,WAAT,EAAsB;AACpBzb,UAAI,CAAC+O,UAAL,GAAkB/O,IAAI,CAACkD,UAAL,CAAgB6L,UAAlC;AACA/O,UAAI,CAAComB,GAAL,GAAWpmB,IAAI,CAAC+O,UAAL,CAAgBsX,OAA3B;AACArmB,UAAI,CAAC2B,MAAL,GAAc3B,IAAI,CAAC+O,UAAL,CAAgBpN,MAA9B;AACA3B,UAAI,CAACkS,YAAL,GAAoBlS,IAAI,CAAC+O,UAAL,CAAgBmD,YAApC;AACAlS,UAAI,CAACsmB,WAAL,GAAmBtmB,IAAI,CAAC2B,MAAxB;AACD,KAND,MAMO;AACL3B,UAAI,CAACkS,YAAL,GAAoBlS,IAAI,CAACkS,YAAL,IAAqBnR,QAAQ,CAACC,aAAT,CAAuB,OAAvB,CAAzC;AACAhB,UAAI,CAACkS,YAAL,CAAkBqU,MAAlB,GAA2BvmB,IAAI,CAACmB,IAAL,CAAUqlB,IAArC;AACAxmB,UAAI,CAACI,iBAAL,CACEJ,IAAI,CAACkS,YADP,EAEE,+BAFF;AAIAlS,UAAI,CAACyb,WAAL,GAAmB,KAAnB;AACAzb,UAAI,CAACwJ,aAAL,GAAqBxJ,IAAI,CAACkD,UAA1B;AACAlD,UAAI,CAACymB,cAAL,GAAsB,YAAY5d,IAAZ,CAAiB7I,IAAI,CAACwJ,aAAL,CAAmB/B,OAApC,CAAtB;;AACA,UAAIzH,IAAI,CAACymB,cAAT,EAAyB;AACvBzmB,YAAI,CAAC2B,MAAL,GAAc3B,IAAI,CAACwJ,aAAnB;AACD,OAFD,MAEO;AACLxJ,YAAI,CAAC2B,MAAL,GAAcZ,QAAQ,CAACC,aAAT,CAAuB,QAAvB,CAAd;AACAhB,YAAI,CAACwJ,aAAL,CAAmB1G,WAAnB,CAA+B9C,IAAI,CAAC2B,MAApC;AACD;;AACDZ,cAAQ,CAACgC,IAAT,CAAcD,WAAd,CAA0B9C,IAAI,CAACkS,YAA/B;AACAlS,UAAI,CAACI,iBAAL,CAAuBJ,IAAI,CAAC2B,MAA5B,EAAoC,iBAApC;AACA3B,UAAI,CAAComB,GAAL,GAAWpmB,IAAI,CAAC2B,MAAL,CAAY+kB,UAAZ,CAAuB,IAAvB,CAAX;AACA1mB,UAAI,CAAComB,GAAL,CAASO,YAAT,GAAwB,YAAxB;AACA3mB,UAAI,CAACsmB,WAAL,GAAmBtmB,IAAI,CAAC2B,MAAxB;AACD;;AACD3B,QAAI,CAAC4mB,eAAL,GAAuB5mB,IAAI,CAAC2B,MAAL,CAAYE,KAAnC;AACA7B,QAAI,CAACkS,YAAL,CAAkBtP,YAAlB,CAA+B,UAA/B,EAA2C,IAA3C;AACA5C,QAAI,CAACkS,YAAL,CAAkB5R,gBAAlB,CAAmC,MAAnC,EAA2C,UAAUsF,CAAV,EAAa;AACtD,UAAIA,CAAC,CAAC8E,MAAF,KAAa1K,IAAI,CAAC2B,MAAtB,EAA8B;AAC5B3B,YAAI,CAACyO,QAAL,GAAgB,KAAhB;AACD;AACF,KAJD;AAKAzO,QAAI,CAACsmB,WAAL,CAAiBhmB,gBAAjB,CAAkC,QAAlC,EAA4CN,IAAI,CAACiI,MAAjD,EAAyD,KAAzD;AACAjI,QAAI,CAACsmB,WAAL,CAAiBhmB,gBAAjB,CAAkC,YAAlC,EAAgDN,IAAI,CAAC6mB,UAArD,EAAiE,KAAjE;AACA7mB,QAAI,CAACsmB,WAAL,CAAiBhmB,gBAAjB,CAAkC,WAAlC,EAA+CN,IAAI,CAACib,SAApD,EAA+D,KAA/D;AACAjb,QAAI,CAACsmB,WAAL,CAAiBhmB,gBAAjB,CAAkC,UAAlC,EAA8CN,IAAI,CAAC8mB,QAAnD,EAA6D,KAA7D;AACA9mB,QAAI,CAACsmB,WAAL,CAAiBhmB,gBAAjB,CAAkC,OAAlC,EAA2CN,IAAI,CAACkE,KAAhD,EAAuD,KAAvD;AACAU,UAAM,CAACtE,gBAAP,CAAwB,SAAxB,EAAmCN,IAAI,CAACkb,OAAxC,EAAiD,KAAjD;AACAtW,UAAM,CAACtE,gBAAP,CAAwB,WAAxB,EAAqCN,IAAI,CAAC+mB,SAA1C;AACA/mB,QAAI,CAACA,IAAI,CAACyb,WAAL,GAAmB,YAAnB,GAAkC,aAAnC,CAAJ,CAAsDnb,gBAAtD,CACE,OADF,EAEEN,IAAI,CAACgnB,WAFP,EAGE,KAHF;AAKAhnB,QAAI,CAAC2B,MAAL,CAAYrB,gBAAZ,CAA6B,aAA7B,EAA4CN,IAAI,CAACmb,gBAAjD,EAAmE,KAAnE;AACAnb,QAAI,CAACkS,YAAL,CAAkB5R,gBAAlB,CAAmC,MAAnC,EAA2CN,IAAI,CAACinB,IAAhD;AACAjnB,QAAI,CAACkS,YAAL,CAAkB5R,gBAAlB,CAAmC,KAAnC,EAA0CN,IAAI,CAACknB,GAA/C;AACAlnB,QAAI,CAACkS,YAAL,CAAkB5R,gBAAlB,CAAmC,OAAnC,EAA4CN,IAAI,CAACsV,KAAjD;AACAtV,QAAI,CAACkS,YAAL,CAAkB5R,gBAAlB,CAAmC,UAAnC,EAA+CN,IAAI,CAACmnB,QAApD,EAA8D,KAA9D;AACAnnB,QAAI,CAACkS,YAAL,CAAkB5R,gBAAlB,CAAmC,OAAnC,EAA4CN,IAAI,CAAConB,KAAjD,EAAwD,KAAxD;AACApnB,QAAI,CAACkS,YAAL,CAAkB5R,gBAAlB,CAAmC,SAAnC,EAA8CN,IAAI,CAACqnB,OAAnD,EAA4D,KAA5D;AACAziB,UAAM,CAACtE,gBAAP,CAAwB,QAAxB,EAAkCN,IAAI,CAACiI,MAAvC;AACD,GAxDD;AAyDD,C;;;;;;;;;;;;;;;;;;;ACrzBD;;AACA;AACa;;;;;;;;;;;;;;;;;;;;;;AAEb,6BAAe,oCAAUjI,IAAV,EAAgB;AAC7B,MAAIsnB,YAAY,GAAG,EAAnB;AAAA,MACEC,iBAAiB,GAAG,KADtB;AAAA,MAEEC,SAAS,GAAG,CAFd;AAAA,MAGEC,cAAc,GAAG,GAHnB;AAAA,MAIEC,WAAW,GAAG,EAJhB;AAAA,MAKEC,uBAAuB,GAAG,CAL5B;AAAA,MAMEC,mBAAmB,GAAG,EANxB;AAAA,MAOEC,gBAAgB,GAAG,EAPrB;AAQA7nB,MAAI,CAAC8nB,cAAL,GAAsB,EAAtB,CAT6B,CAU7B;;AACA,WAASC,SAAT,CAAmBC,GAAnB,EAAwBC,IAAxB,EAA8BC,IAA9B,EAAoCrgB,GAApC,EAAyC;AACvCqgB,QAAI,GAAGA,IAAI,IAAI,CAAf;AACA,QAAIlhB,CAAC,GAAG,EAAR;AAAA,QACEjF,CADF;;AAEA,SAAKA,CAAC,GAAGimB,GAAT,EAAcjmB,CAAC,IAAIkmB,IAAnB,EAAyBlmB,CAAC,IAAImmB,IAA9B,EAAoC;AAClClhB,OAAC,CAACjF,CAAD,CAAD,GAAO8F,GAAG,KAAKjG,SAAR,GAAoBG,CAApB,GAAwB,OAAO8F,GAAP,KAAe,UAAf,GAA4BA,GAAG,CAAC9F,CAAD,CAA/B,GAAqC8F,GAApE;AACD;;AACD,WAAOb,CAAP;AACD;;AACD,WAASmhB,YAAT,CAAsB5K,CAAtB,EAAyBzL,CAAzB,EAA4B/P,CAA5B,EAA+BE,CAA/B,EAAkCmmB,OAAlC,EAA2CC,QAA3C,EAAqD1G,GAArD,EAA0D1T,KAA1D,EAAiEqa,MAAjE,EAAyE;AACvE,QAAIthB,CAAC,GAAGuW,CAAC,GAAG6K,OAAO,CAAC5iB,MAApB;AAAA,QACEyB,CAAC,GAAG6K,CAAC,GAAG6P,GADV;AAEA5f,KAAC,IAAI/B,IAAI,CAAC6c,gBAAV;AACA5a,KAAC,IAAIjC,IAAI,CAAC+c,eAAV;AACA/c,QAAI,CAAComB,GAAL,CAASmC,SAAT;AACAvoB,QAAI,CAAComB,GAAL,CAASoC,MAAT,CAAgBzmB,CAAhB,EAAmBE,CAAC,GAAG6P,CAAvB;AACAsW,WAAO,CAAC3iB,OAAR,CAAgB,UAAUiD,CAAV,EAAa;AAC3B,UAAIZ,GAAG,GAAGugB,QAAQ,KAAKzmB,SAAb,GAAyB8G,CAAzB,GAA6BA,CAAC,CAAC2f,QAAD,CAAxC;AAAA,UACEI,EADF;AAAA,UAEEC,EAFF;;AAGA,UAAIJ,MAAJ,EAAY;AACVxgB,WAAG,GAAGsZ,IAAI,CAACuH,GAAL,CAAS7gB,GAAT,CAAN;AACD;;AACD2gB,QAAE,GAAG1mB,CAAC,GAAGiF,CAAT;AACA0hB,QAAE,GAAGzmB,CAAC,GAAG6P,CAAJ,GAAQhK,GAAG,GAAGb,CAAnB;AACAjH,UAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgBH,EAAhB,EAAoBC,EAApB;AACA3mB,OAAC,IAAIiF,CAAL;AACD,KAXD;AAYAhH,QAAI,CAAComB,GAAL,CAASoC,MAAT,CAAgBzmB,CAAC,GAAGwb,CAApB,EAAuBtb,CAAC,GAAG6P,CAA3B;AACA9R,QAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB5a,KAAvB;AACAjO,QAAI,CAAComB,GAAL,CAAS0C,MAAT;AACD;;AACD,WAASC,qBAAT,GAAiC;AAC/B,QAAIC,MAAM,GAAG,IAAb;AACA/jB,UAAM,CAAC8L,IAAP,CAAY/Q,IAAI,CAAC8nB,cAAjB,EAAiCriB,OAAjC,CAAyC,UAAUwjB,IAAV,EAAgB;AACvD,UAAI,CAACjpB,IAAI,CAAC8nB,cAAL,CAAoBmB,IAApB,EAA0BtmB,GAA1B,CAA8BumB,QAAnC,EAA6C;AAC3CF,cAAM,GAAG,KAAT;AACD;AACF,KAJD;;AAKA,QAAIA,MAAM,IAAI,CAACzB,iBAAf,EAAkC;AAChCA,uBAAiB,GAAG,IAApB;AACAvnB,UAAI,CAACuV,IAAL;AACD;AACF;;AACD,WAAS4T,QAAT,CAAkB7Z,IAAlB,EAAwB;AACtB,QAAI3M,GAAJ;AAAA,QACEymB,CAAC,GAAG9Z,IAAI,CAAC7M,SAAL,IAAkB6M,IAAI,CAAC+Z,cAD7B;AAAA,QAEEC,QAAQ,GACNF,CAAC,CAACG,QAAF,KAAeja,IAAI,CAACkD,QAAL,CAAc+W,QAAd,EAAf,GAA0Cja,IAAI,CAAC2D,WAAL,CAAiBsW,QAAjB,EAH9C;AAAA,QAIExnB,CAAC,GAAGqf,IAAI,CAACC,KAAL,CAAW/R,IAAI,CAACvN,CAAL,GAAS/B,IAAI,CAAC6c,gBAAzB,CAJN;AAAA,QAKE5a,CAAC,GAAGmf,IAAI,CAACC,KAAL,CAAW/R,IAAI,CAACrN,CAAL,GAASjC,IAAI,CAAC+c,eAAzB,CALN;;AAMA,QAAI/c,IAAI,CAAC8nB,cAAL,CAAoBwB,QAApB,CAAJ,EAAmC;AACjC3mB,SAAG,GAAG3C,IAAI,CAAC8nB,cAAL,CAAoBwB,QAApB,EAA8B3mB,GAApC;;AACA,UACE3C,IAAI,CAAC8nB,cAAL,CAAoBwB,QAApB,EAA8BnnB,MAA9B,KAAyCmN,IAAI,CAACnN,MAA9C,IACAnC,IAAI,CAAC8nB,cAAL,CAAoBwB,QAApB,EAA8B9a,KAA9B,KAAwCc,IAAI,CAACd,KAF/C,EAGE;AACA;AACAxO,YAAI,CAAC8nB,cAAL,CAAoBwB,QAApB,IAAgC1nB,SAAhC;AACD,OAND,MAMO;AACL,YAAI,CAACe,GAAG,CAACumB,QAAT,EAAmB;AACjB;AACD;;AACD,eAAOlpB,IAAI,CAAComB,GAAL,CAASoD,SAAT,CAAmB7mB,GAAnB,EAAwBZ,CAAxB,EAA2BE,CAA3B,CAAP;AACD;AACF,KAdD,MAcO;AACLslB,uBAAiB,GAAG,KAApB;AACD;;AACD5kB,OAAG,GAAG,IAAI8mB,KAAJ,CAAUna,IAAI,CAACd,KAAf,EAAsBc,IAAI,CAACnN,MAA3B,CAAN;AACAnC,QAAI,CAAC8nB,cAAL,CAAoBwB,QAApB,IAAgC;AAC9B3mB,SAAG,EAAHA,GAD8B;AAE9B6L,WAAK,EAAEc,IAAI,CAACd,KAFkB;AAG9BrM,YAAM,EAAEmN,IAAI,CAACnN;AAHiB,KAAhC;;AAKAQ,OAAG,CAAC+mB,MAAJ,GAAa,YAAY;AACvB1pB,UAAI,CAAComB,GAAL,CAASoD,SAAT,CAAmB7mB,GAAnB,EAAwBZ,CAAxB,EAA2BE,CAA3B;AACA8mB,2BAAqB;AACtB,KAHD;;AAIApmB,OAAG,CAACgnB,GAAJ,GACE,+BACAC,IAAI,CACF,oDACEta,IAAI,CAACd,KADP,GAEE,YAFF,GAGEc,IAAI,CAACnN,MAHP,GAIE,MAJF,GAKE,uEALF,GAME,2EANF,GAOEinB,CAPF,GAQE,IARF,GASE,SATF,GAUE,oBAVF,GAWE,UAZA,CAFN;AAgBD;AACD;AACF;AACA;AACA;;;AACE,WAASS,SAAT,CAAmBC,MAAnB,EAA2BC,IAA3B,EAAiC;AAC/B,QAAID,MAAM,CAACtkB,MAAP,GAAgB,CAApB,EAAuB;AACvBxF,QAAI,CAAComB,GAAL,CAASmC,SAAT;AACAvoB,QAAI,CAAComB,GAAL,CAASoC,MAAT,CACEsB,MAAM,CAAC,CAAD,CAAN,GAAY9pB,IAAI,CAAC6c,gBADnB,EAEEiN,MAAM,CAAC,CAAD,CAAN,GAAY9pB,IAAI,CAAC+c,eAFnB;;AAIA,SAAK,IAAI/V,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8iB,MAAM,CAACtkB,MAA3B,EAAmCwB,CAAC,IAAI,CAAxC,EAA2C;AACzC,UAAMjF,CAAC,GAAG+nB,MAAM,CAAC9iB,CAAD,CAAN,GAAYhH,IAAI,CAAC6c,gBAA3B;AACA,UAAM5a,CAAC,GAAG6nB,MAAM,CAAC9iB,CAAC,GAAG,CAAL,CAAN,GAAgBhH,IAAI,CAAC+c,eAA/B;AACA/c,UAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB7mB,CAAhB,EAAmBE,CAAnB;AACD;;AACD,QAAI8nB,IAAJ,EAAU/pB,IAAI,CAAComB,GAAL,CAAS2D,IAAT,GAAV,KACK/pB,IAAI,CAAComB,GAAL,CAAS0C,MAAT;AACN;AACD;AACF;AACA;AACA;AACA;AACA;;;AACE,WAASkB,eAAT,CAAyBjoB,CAAzB,EAA4BE,CAA5B,EAA+BuM,KAA/B,EAAsC4J,SAAtC,EAAiD;AAC/C6R,YAAQ,CAACloB,CAAD,EAAIE,CAAJ,EAAOuM,KAAP,EAAcA,KAAd,CAAR;AACA0b,cAAU,CAACnoB,CAAD,EAAIE,CAAJ,EAAOuM,KAAP,EAAcA,KAAd,CAAV;AACA,QAAMia,EAAE,GAAG1mB,CAAC,GAAGyM,KAAK,GAAG,GAAvB;AACA,QAAMka,EAAE,GAAGzmB,CAAC,GAAGuM,KAAK,GAAG,GAAvB;AACAqb,aAAS,CAAC,CAAC9nB,CAAC,GAAGyM,KAAK,GAAG,GAAb,EAAkBka,EAAlB,EAAsB3mB,CAAC,GAAGyM,KAAK,GAAG,IAAlC,EAAwCka,EAAxC,CAAD,CAAT;AACA,QAAItQ,SAAJ,EAAeyR,SAAS,CAAC,CAACpB,EAAD,EAAKxmB,CAAC,GAAGuM,KAAK,GAAG,IAAjB,EAAuBia,EAAvB,EAA2BxmB,CAAC,GAAGuM,KAAK,GAAG,GAAvC,CAAD,CAAT;AAChB;AACD;AACF;AACA;AACA;AACA;AACA;AACA;;;AACE,WAAS2b,mBAAT,CAA6BpoB,CAA7B,EAAgCE,CAAhC,EAAmCmoB,IAAnC,EAAyCC,GAAzC,EAA8CC,MAA9C,EAAsD;AACpD,QAAMC,UAAU,GAAGH,IAAI,GAAG,GAA1B;AACA,QAAMI,UAAU,GAAGJ,IAAI,GAAG,GAA1B;AACA;;AACA,QAAMK,QAAQ,GAAGL,IAAI,GAAG,IAAIG,UAA5B;AACA;;AACA,QAAMG,MAAM,GAAGN,IAAI,GAAG,IAAII,UAA1B;AACA,QAAMG,YAAY,GAAGF,QAAQ,GAAG,GAAhC;AACA,QAAI1O,EAAJ,EAAQE,EAAR;AACA,QAAI6N,MAAJ,EAAYc,YAAZ;;AACA,YAAQP,GAAR;AACE,WAAK,GAAL;AACEtO,UAAE,GAAGha,CAAC,GAAGyoB,UAAT;AACAvO,UAAE,GAAGha,CAAC,GAAGsoB,UAAT;AACAK,oBAAY,GAAG,CAAC7oB,CAAD,EAAIE,CAAJ,EAAOF,CAAC,GAAGqoB,IAAX,EAAiBnoB,CAAjB,EAAoBF,CAAC,GAAGqoB,IAAxB,EAA8BnoB,CAAC,GAAGmoB,IAAlC,EAAwCroB,CAAxC,EAA2CE,CAAC,GAAGmoB,IAA/C,CAAf;AACAN,cAAM,GAAG,CAAC/N,EAAD,EAAKE,EAAL,EAASF,EAAT,EAAaE,EAAE,GAAGwO,QAAlB,EAA4B1O,EAAE,GAAG2O,MAAjC,EAAyCzO,EAAE,GAAG0O,YAA9C,CAAT;AACA;;AACF,WAAK,GAAL;AACE5O,UAAE,GAAGha,CAAC,GAAGqoB,IAAJ,GAAWI,UAAhB;AACAvO,UAAE,GAAGha,CAAC,GAAGsoB,UAAT;AACAK,oBAAY,GAAG,CAAC7oB,CAAC,GAAGqoB,IAAL,EAAWnoB,CAAX,EAAcF,CAAd,EAAiBE,CAAjB,EAAoBF,CAApB,EAAuBE,CAAC,GAAGmoB,IAA3B,EAAiCroB,CAAC,GAAGqoB,IAArC,EAA2CnoB,CAAC,GAAGmoB,IAA/C,CAAf;AACAN,cAAM,GAAG,CAAC/N,EAAD,EAAKE,EAAL,EAASF,EAAT,EAAaE,EAAE,GAAGwO,QAAlB,EAA4B1O,EAAE,GAAG2O,MAAjC,EAAyCzO,EAAE,GAAG0O,YAA9C,CAAT;AACA;;AACF,WAAK,GAAL;AACE5O,UAAE,GAAGha,CAAC,GAAGwoB,UAAT;AACAtO,UAAE,GAAGha,CAAC,GAAGmoB,IAAJ,GAAWI,UAAhB;AACAI,oBAAY,GAAG,CAAC7oB,CAAD,EAAIE,CAAC,GAAGmoB,IAAR,EAAcroB,CAAd,EAAiBE,CAAjB,EAAoBF,CAAC,GAAGqoB,IAAxB,EAA8BnoB,CAA9B,EAAiCF,CAAC,GAAGqoB,IAArC,EAA2CnoB,CAAC,GAAGmoB,IAA/C,CAAf;AACAN,cAAM,GAAG,CAAC/N,EAAD,EAAKE,EAAL,EAASF,EAAE,GAAG0O,QAAd,EAAwBxO,EAAxB,EAA4BF,EAAE,GAAG4O,YAAjC,EAA+C1O,EAAE,GAAGyO,MAApD,CAAT;AACA;;AACF,WAAK,GAAL;AACE3O,UAAE,GAAGha,CAAC,GAAGwoB,UAAT;AACAtO,UAAE,GAAGha,CAAC,GAAGuoB,UAAT;AACAI,oBAAY,GAAG,CAAC7oB,CAAD,EAAIE,CAAJ,EAAOF,CAAP,EAAUE,CAAC,GAAGmoB,IAAd,EAAoBroB,CAAC,GAAGqoB,IAAxB,EAA8BnoB,CAAC,GAAGmoB,IAAlC,EAAwCroB,CAAC,GAAGqoB,IAA5C,EAAkDnoB,CAAlD,CAAf;AACA6nB,cAAM,GAAG,CAAC/N,EAAD,EAAKE,EAAL,EAASF,EAAE,GAAG0O,QAAd,EAAwBxO,EAAxB,EAA4BF,EAAE,GAAG4O,YAAjC,EAA+C1O,EAAE,GAAGyO,MAApD,CAAT;AACA;AAxBJ;;AA2BA,QAAIJ,MAAJ,EAAY;AACVtqB,UAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAWgpB,0BAAlC;AACA7qB,UAAI,CAAComB,GAAL,CAAS0E,SAAT,GAAqB,CAArB;AACAjB,eAAS,CAACe,YAAD,CAAT;AAEA5qB,UAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWmpB,8BAAhC;AACA,UAAIC,MAAM,GAAGZ,GAAG,KAAK,GAAR,IAAeA,GAAG,KAAK,GAAvB,GAA6B,CAA7B,GAAiC,CAA9C;AACA,UAAIA,GAAG,KAAK,GAAR,IAAeA,GAAG,KAAK,GAA3B,EACEJ,QAAQ,CAACloB,CAAC,GAAGkpB,MAAL,EAAahpB,CAAb,EAAgBmoB,IAAI,GAAGa,MAAvB,EAA+Bb,IAA/B,CAAR,CADF,KAEKH,QAAQ,CAACloB,CAAD,EAAIE,CAAC,GAAGgpB,MAAR,EAAgBb,IAAhB,EAAsBA,IAAI,GAAGa,MAA7B,CAAR;AACN;;AAEDjrB,QAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWqpB,oBAAhC;AACArB,aAAS,CAACC,MAAD,EAAS,IAAT,CAAT;AACD;;AACD,WAASqB,gBAAT,CAA0BppB,CAA1B,EAA6BE,CAA7B,EAAgC;AAC9B,QAAImpB,EAAE,GAAGprB,IAAI,CAAC6B,KAAL,CAAWwpB,iCAAX,GAA+CrrB,IAAI,CAACihB,KAA7D;AAAA,QACEqK,EAAE,GAAGtrB,IAAI,CAAC6B,KAAL,CAAW0pB,kCAAX,GAAgDvrB,IAAI,CAACihB,KAD5D;AAAA,QAEEuK,EAAE,GAAGxrB,IAAI,CAAC6B,KAAL,CAAW4pB,mCAAX,GAAiDzrB,IAAI,CAACihB,KAF7D;AAAA,QAGEyK,EAAE,GAAG1rB,IAAI,CAAC6B,KAAL,CAAW8pB,6BAAX,GAA2C3rB,IAAI,CAACihB,KAHvD;AAAA,QAIE2K,EAAE,GAAG5rB,IAAI,CAAC6B,KAAL,CAAWgqB,8BAAX,GAA4C7rB,IAAI,CAACihB,KAJxD;AAKAlf,KAAC,IAAI/B,IAAI,CAAC6c,gBAAV;AACA5a,KAAC,IAAIjC,IAAI,CAAC+c,eAAV;AACA/c,QAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWiqB,6BAAhC;AACA9rB,QAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAWkqB,mCAAlC;AACA/rB,QAAI,CAAComB,GAAL,CAASmC,SAAT;AACAxmB,KAAC,GAAGA,CAAC,GAAGupB,EAAR;AACArpB,KAAC,GAAGA,CAAC,GAAGmpB,EAAR;;AACA,QAAIprB,IAAI,CAACgsB,cAAL,KAAwB,KAA5B,EAAmC;AACjChsB,UAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB7mB,CAAhB,EAAmBE,CAAC,GAAG2pB,EAAvB;AACA5rB,UAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB7mB,CAAC,GAAG2pB,EAApB,EAAwBzpB,CAAC,GAAG2pB,EAA5B;AACA5rB,UAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB7mB,CAAC,GAAG2pB,EAAE,GAAG,GAAzB,EAA8BzpB,CAA9B;AACAjC,UAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB7mB,CAAhB,EAAmBE,CAAC,GAAG2pB,EAAvB;AACD,KALD,MAKO;AACL5rB,UAAI,CAAComB,GAAL,CAASoC,MAAT,CAAgBzmB,CAAhB,EAAmBE,CAAnB;AACAjC,UAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB7mB,CAAC,GAAG2pB,EAApB,EAAwBzpB,CAAxB;AACAjC,UAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB7mB,CAAC,GAAG2pB,EAAE,GAAG,GAAzB,EAA8BzpB,CAAC,GAAG2pB,EAAlC;AACA5rB,UAAI,CAAComB,GAAL,CAASoC,MAAT,CAAgBzmB,CAAhB,EAAmBE,CAAnB;AACD;;AACDjC,QAAI,CAAComB,GAAL,CAAS0C,MAAT;AACA9oB,QAAI,CAAComB,GAAL,CAAS2D,IAAT;AACA,WAAOuB,EAAE,GAAGI,EAAL,GAAUF,EAAjB;AACD;;AACD,WAASS,aAAT,CAAuB3c,IAAvB,EAA6BvN,CAA7B,EAAgCE,CAAhC,EAAmC;AACjC,QAAImpB,EAAE,GAAGprB,IAAI,CAAC6B,KAAL,CAAWqqB,kBAAX,GAAgClsB,IAAI,CAACihB,KAA9C;AAAA,QACEuK,EAAE,GAAGxrB,IAAI,CAAC6B,KAAL,CAAWsqB,oBAAX,GAAkCnsB,IAAI,CAACihB,KAD9C;AAAA,QAEEqK,EAAE,GAAGtrB,IAAI,CAAC6B,KAAL,CAAWuqB,mBAAX,GAAiCpsB,IAAI,CAACihB,KAF7C;AAAA,QAGEyK,EAAE,GAAG1rB,IAAI,CAAC6B,KAAL,CAAWwqB,cAAX,GAA4BrsB,IAAI,CAACihB,KAHxC;AAAA,QAIE2K,EAAE,GAAG5rB,IAAI,CAAC6B,KAAL,CAAWyqB,eAAX,GAA6BtsB,IAAI,CAACihB,KAJzC;AAKAlf,KAAC,IAAI/B,IAAI,CAAC6c,gBAAV;AACA5a,KAAC,IAAIjC,IAAI,CAAC+c,eAAV;AACA/c,QAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAW0qB,cAAhC;AACAvsB,QAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAW2qB,oBAAlC;AACAxsB,QAAI,CAAComB,GAAL,CAASmC,SAAT;AACAxmB,KAAC,GAAGA,CAAC,GAAGupB,EAAR;AACArpB,KAAC,GAAGA,CAAC,GAAGmpB,EAAR;;AACA,QAAIprB,IAAI,CAACysB,YAAL,CAAkBnd,IAAI,CAACkD,QAAvB,CAAJ,EAAsC;AACpCxS,UAAI,CAAComB,GAAL,CAASoC,MAAT,CAAgBzmB,CAAhB,EAAmBE,CAAnB;AACAjC,UAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB7mB,CAAC,GAAG2pB,EAApB,EAAwBzpB,CAAxB;AACAjC,UAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB7mB,CAAC,GAAG2pB,EAAE,GAAG,GAAzB,EAA8BzpB,CAAC,GAAG2pB,EAAlC;AACA5rB,UAAI,CAAComB,GAAL,CAASoC,MAAT,CAAgBzmB,CAAhB,EAAmBE,CAAnB;AACD,KALD,MAKO;AACLjC,UAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB7mB,CAAhB,EAAmBE,CAAnB;AACAjC,UAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB7mB,CAAC,GAAG6pB,EAApB,EAAwB3pB,CAAC,GAAGypB,EAAE,GAAG,GAAjC;AACA1rB,UAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB7mB,CAAhB,EAAmBE,CAAC,GAAGypB,EAAvB;AACA1rB,UAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB7mB,CAAhB,EAAmBE,CAAnB;AACD;;AACDjC,QAAI,CAAComB,GAAL,CAAS0C,MAAT;AACA9oB,QAAI,CAAComB,GAAL,CAAS2D,IAAT;AACA,WAAOuB,EAAE,GAAGI,EAAL,GAAUF,EAAjB;AACD;;AACD,WAASkB,gBAAT,CAA0Bpd,IAA1B,EAAgCqd,IAAhC,EAAsCC,OAAtC,EAA+C;AAC7C,QAAMC,WAAW,GAAGD,OAAO,GAAGD,IAAI,CAACE,WAAR,GAAsB,CAAjD;AACA,QAAMC,QAAQ,GAAG9sB,IAAI,CAAC6B,KAAL,CAAWkrB,iBAAX,GAA+B/sB,IAAI,CAACihB,KAArD;AAAA,QACE+L,SAAS,GAAGhtB,IAAI,CAAC6B,KAAL,CAAWorB,qBAAX,GAAmCjtB,IAAI,CAACihB,KADtD;AAAA,QAEEiM,WAAW,GAAGltB,IAAI,CAAC6B,KAAL,CAAWsrB,uBAAX,GAAqCntB,IAAI,CAACihB,KAF1D;AAAA,QAGEsD,UAAU,GACRvkB,IAAI,CAAC6B,KAAL,CAAWurB,sBAAX,GAAoCptB,IAAI,CAACihB,KAAzC,GACA4L,WAAW,IAAIC,QAAQ,GAAGxd,IAAI,CAAC+d,WAApB,CALf;AAOA,QAAItrB,CAAC,GAAGuN,IAAI,CAACvN,CAAL,GAASuN,IAAI,CAAC+d,WAAd,GAA4BrtB,IAAI,CAAC6c,gBAAjC,GAAoD0H,UAA5D;AAAA,QACEtiB,CAAC,GAAGqN,IAAI,CAACrN,CAAL,GAASjC,IAAI,CAAC+c,eAAd,GAAgCiQ,SADtC;;AAGA,QAAIL,IAAI,CAACW,IAAT,EAAe;AACbttB,UAAI,CAAComB,GAAL,CAASmC,SAAT;AACA,UAAMgF,YAAY,GAAGvtB,IAAI,CAAComB,GAAL,CAAS2E,SAA9B;AACA,UAAMyC,cAAc,GAAGxtB,IAAI,CAAComB,GAAL,CAASyC,WAAhC;;AAEA,UAAIvZ,IAAI,CAACme,OAAL,IAAgBztB,IAAI,CAAC0tB,MAAL,CAAYC,cAAhC,EAAgD;AAC9C3tB,YAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAW+rB,0BAAhC;AACD,OAFD,MAEO;AACL5tB,YAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWgsB,qBAAhC;AACD;;AAED7tB,UAAI,CAAComB,GAAL,CAAS6D,QAAT,CAAkBloB,CAAlB,EAAqBE,CAArB,EAAwB6qB,QAAxB,EAAkCA,QAAlC;AACA9sB,UAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAWisB,uBAAlC;AACA9tB,UAAI,CAAComB,GAAL,CAAS1iB,IAAT,CAAc3B,CAAd,EAAiBE,CAAjB,EAAoB6qB,QAApB,EAA8BA,QAA9B;AACA9sB,UAAI,CAAComB,GAAL,CAAS0C,MAAT;AAEA9oB,UAAI,CAAComB,GAAL,CAASmC,SAAT;;AACA,UAAIoE,IAAI,CAACoB,MAAT,EAAiB;AACf/tB,YAAI,CAAComB,GAAL,CAASoC,MAAT,CAAgBzmB,CAAC,GAAG,CAApB,EAAuBE,CAAC,GAAG6qB,QAAQ,GAAG,GAAtC;AACA9sB,YAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB7mB,CAAC,GAAG+qB,QAAJ,GAAe,CAA/B,EAAkC7qB,CAAC,GAAG6qB,QAAQ,GAAG,GAAjD;AACD,OAHD,MAGO;AACL9sB,YAAI,CAAComB,GAAL,CAASoC,MAAT,CAAgBzmB,CAAC,GAAG,CAApB,EAAuBE,CAAC,GAAG6qB,QAAQ,GAAG,GAAtC;AACA9sB,YAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB7mB,CAAC,GAAG+qB,QAAJ,GAAe,CAA/B,EAAkC7qB,CAAC,GAAG6qB,QAAQ,GAAG,GAAjD;AACA9sB,YAAI,CAAComB,GAAL,CAASoC,MAAT,CAAgBzmB,CAAC,GAAG+qB,QAAQ,GAAG,GAA/B,EAAoC7qB,CAAC,GAAG,CAAxC;AACAjC,YAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB7mB,CAAC,GAAG+qB,QAAQ,GAAG,GAA/B,EAAoC7qB,CAAC,GAAG6qB,QAAJ,GAAe,CAAnD;AACD;;AACD9sB,UAAI,CAAComB,GAAL,CAAS0E,SAAT,GAAqB9qB,IAAI,CAAC6B,KAAL,CAAWmsB,qBAAhC;AACAhuB,UAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAWosB,qBAAlC;AACAjuB,UAAI,CAAComB,GAAL,CAAS0C,MAAT;AAEA9oB,UAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB2E,cAAvB;AACAxtB,UAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqBwC,YAArB;AACD;;AAED,WAAOhJ,UAAU,GAAGuI,QAAb,GAAwBI,WAA/B;AACD;;AACD,WAASgB,qBAAT,CAA+BnsB,CAA/B,EAAkCE,CAAlC,EAAqC;AACnC,QAAImpB,EAAE,GACD,CAACprB,IAAI,CAAC6B,KAAL,CAAWssB,kBAAX,GAAgCnuB,IAAI,CAAC6B,KAAL,CAAWusB,uBAA5C,IACC,CADF,GAEApuB,IAAI,CAACihB,KAHT;AAAA,QAIEqK,EAAE,GACC,CAACtrB,IAAI,CAAC6B,KAAL,CAAWwsB,iBAAX,GAA+BruB,IAAI,CAAC6B,KAAL,CAAWysB,sBAA3C,IACC,CADF,GAEAtuB,IAAI,CAACihB,KAPT;AAAA,QAQEyK,EAAE,GAAG1rB,IAAI,CAAC6B,KAAL,CAAWysB,sBAAX,GAAoCtuB,IAAI,CAACihB,KARhD;AAAA,QASE2K,EAAE,GAAG5rB,IAAI,CAAC6B,KAAL,CAAWusB,uBAAX,GAAqCpuB,IAAI,CAACihB,KATjD;AAUAlf,KAAC,IAAI/B,IAAI,CAAC6c,gBAAV;AACA5a,KAAC,IAAIjC,IAAI,CAAC+c,eAAV;AACA/c,QAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAW0sB,sBAAhC;AACAvuB,QAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAW2sB,4BAAlC;AACAxuB,QAAI,CAAComB,GAAL,CAASmC,SAAT;AACAxmB,KAAC,GAAGA,CAAC,GAAGupB,EAAR;AACArpB,KAAC,GAAGA,CAAC,GAAGmpB,EAAR;AAEAprB,QAAI,CAAComB,GAAL,CAASoC,MAAT,CAAgBzmB,CAAhB,EAAmBE,CAAnB;AACAjC,QAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB7mB,CAAC,GAAG2pB,EAApB,EAAwBzpB,CAAxB;AACAjC,QAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB7mB,CAAC,GAAG2pB,EAAE,GAAG,GAAzB,EAA8BzpB,CAAC,GAAG2pB,EAAlC;AACA5rB,QAAI,CAAComB,GAAL,CAASoC,MAAT,CAAgBzmB,CAAhB,EAAmBE,CAAnB;AAEAjC,QAAI,CAAComB,GAAL,CAAS0C,MAAT;AACA9oB,QAAI,CAAComB,GAAL,CAAS2D,IAAT;AACA,WAAOuB,EAAE,GAAGI,EAAZ;AACD;;AACD,WAAS+C,UAAT,CAAoB1sB,CAApB,EAAuBE,CAAvB,EAA0Bsb,CAA1B,EAA6BzL,CAA7B,EAAgC4c,MAAhC,EAAwC;AACtC3sB,KAAC,IAAI/B,IAAI,CAAC6c,gBAAV;AACA5a,KAAC,IAAIjC,IAAI,CAAC+c,eAAV;AACA,QAAI9V,CAAC,GAAGlF,CAAC,GAAGwb,CAAZ;AAAA,QACE5K,CAAC,GAAG1Q,CAAC,GAAG6P,CADV;AAEA9R,QAAI,CAAComB,GAAL,CAASmC,SAAT;AACAvoB,QAAI,CAAComB,GAAL,CAASoC,MAAT,CAAgBzmB,CAAC,GAAG2sB,MAApB,EAA4BzsB,CAA5B;AACAjC,QAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB3hB,CAAC,GAAGynB,MAApB,EAA4BzsB,CAA5B;AACAjC,QAAI,CAAComB,GAAL,CAASuI,gBAAT,CAA0B1nB,CAA1B,EAA6BhF,CAA7B,EAAgCgF,CAAhC,EAAmChF,CAAC,GAAGysB,MAAvC;AACA1uB,QAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB3hB,CAAhB,EAAmBhF,CAAC,GAAG6P,CAAJ,GAAQ4c,MAA3B;AACA1uB,QAAI,CAAComB,GAAL,CAASuI,gBAAT,CAA0B1nB,CAA1B,EAA6B0L,CAA7B,EAAgC1L,CAAC,GAAGynB,MAApC,EAA4C/b,CAA5C;AACA3S,QAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB7mB,CAAC,GAAG2sB,MAApB,EAA4B/b,CAA5B;AACA3S,QAAI,CAAComB,GAAL,CAASuI,gBAAT,CAA0B5sB,CAA1B,EAA6B4Q,CAA7B,EAAgC5Q,CAAhC,EAAmC4Q,CAAC,GAAG+b,MAAvC;AACA1uB,QAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB7mB,CAAhB,EAAmBE,CAAC,GAAGysB,MAAvB;AACA1uB,QAAI,CAAComB,GAAL,CAASuI,gBAAT,CAA0B5sB,CAA1B,EAA6BE,CAA7B,EAAgCF,CAAC,GAAG2sB,MAApC,EAA4CzsB,CAA5C;AACD;;AACD,WAASgoB,QAAT,CAAkBloB,CAAlB,EAAqBE,CAArB,EAAwBsb,CAAxB,EAA2BzL,CAA3B,EAA8B;AAC5B/P,KAAC,IAAI/B,IAAI,CAAC6c,gBAAV;AACA5a,KAAC,IAAIjC,IAAI,CAAC+c,eAAV;AACA/c,QAAI,CAAComB,GAAL,CAAS6D,QAAT,CAAkBloB,CAAlB,EAAqBE,CAArB,EAAwBsb,CAAxB,EAA2BzL,CAA3B;AACD;;AACD,WAASoY,UAAT,CAAoBnoB,CAApB,EAAuBE,CAAvB,EAA0Bsb,CAA1B,EAA6BzL,CAA7B,EAAgC;AAC9B/P,KAAC,IAAI/B,IAAI,CAAC6c,gBAAV;AACA5a,KAAC,IAAIjC,IAAI,CAAC+c,eAAV;AACA/c,QAAI,CAAComB,GAAL,CAAS8D,UAAT,CAAoBnoB,CAApB,EAAuBE,CAAvB,EAA0Bsb,CAA1B,EAA6BzL,CAA7B;AACD;;AACD,WAAS8c,QAAT,CAAkBC,IAAlB,EAAwB9sB,CAAxB,EAA2BE,CAA3B,EAA8B;AAC5BF,KAAC,IAAI/B,IAAI,CAAC6c,gBAAV;AACA5a,KAAC,IAAIjC,IAAI,CAAC+c,eAAV;AACA/c,QAAI,CAAComB,GAAL,CAASwI,QAAT,CAAkBC,IAAlB,EAAwB9sB,CAAxB,EAA2BE,CAA3B;AACD;;AACD,WAAS6sB,UAAT,CAAoB/sB,CAApB,EAAuBE,CAAvB,EAA0BgF,CAA1B,EAA6B;AAC3BlF,KAAC,IAAI/B,IAAI,CAAC6c,gBAAV;AACA5a,KAAC,IAAIjC,IAAI,CAAC+c,eAAV;AACA/c,QAAI,CAAComB,GAAL,CAASmC,SAAT;AACAvoB,QAAI,CAAComB,GAAL,CAAS2I,GAAT,CAAahtB,CAAb,EAAgBE,CAAhB,EAAmBgF,CAAnB,EAAsB,CAAtB,EAAyB,IAAIma,IAAI,CAAC4N,EAAlC;AACAhvB,QAAI,CAAComB,GAAL,CAAS2D,IAAT;AACD;;AACD,WAASkF,YAAT,CAAsBltB,CAAtB,EAAyBE,CAAzB,EAA4BgF,CAA5B,EAA+B;AAC7BlF,KAAC,IAAI/B,IAAI,CAAC6c,gBAAV;AACA5a,KAAC,IAAIjC,IAAI,CAAC+c,eAAV;AACA/c,QAAI,CAAComB,GAAL,CAASmC,SAAT;AACAvoB,QAAI,CAAComB,GAAL,CAAS2I,GAAT,CAAahtB,CAAb,EAAgBE,CAAhB,EAAmBgF,CAAnB,EAAsB,CAAtB,EAAyB,IAAIma,IAAI,CAAC4N,EAAlC;AACAhvB,QAAI,CAAComB,GAAL,CAAS0C,MAAT;AACD;;AACD,WAASoG,cAAT,CAAwBC,IAAxB,EAA8B;AAC5B;AACA;AACA;AACAnvB,QAAI,CAAComB,GAAL,CAASmC,SAAT;;AACA,QAAI4G,IAAI,KAAK,CAAb,EAAgB;AACdnvB,UAAI,CAAComB,GAAL,CAASoC,MAAT,CAAgBxoB,IAAI,CAACovB,qBAArB,EAA4CpvB,IAAI,CAACqvB,kBAAjD;AACArvB,UAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB5oB,IAAI,CAACovB,qBAArB,EAA4CpvB,IAAI,CAACmC,MAAjD;AACAnC,UAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB5oB,IAAI,CAACwO,KAArB,EAA4BxO,IAAI,CAACmC,MAAjC;AACAnC,UAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB5oB,IAAI,CAACwO,KAArB,EAA4BxO,IAAI,CAACqvB,kBAAjC;AACD;;AACD,QAAIF,IAAI,KAAK,CAAb,EAAgB;AACdnvB,UAAI,CAAComB,GAAL,CAASoC,MAAT,CAAgB,CAAhB,EAAmBxoB,IAAI,CAACqvB,kBAAxB;AACArvB,UAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB,CAAhB,EAAmB5oB,IAAI,CAACmC,MAAxB;AACAnC,UAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB5oB,IAAI,CAACwO,KAArB,EAA4BxO,IAAI,CAACmC,MAAjC;AACAnC,UAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB5oB,IAAI,CAACwO,KAArB,EAA4BxO,IAAI,CAACqvB,kBAAjC;AACD;;AACD,QAAIF,IAAI,KAAK,CAAb,EAAgB;AACdnvB,UAAI,CAAComB,GAAL,CAASoC,MAAT,CAAgBxoB,IAAI,CAACovB,qBAArB,EAA4C,CAA5C;AACApvB,UAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB5oB,IAAI,CAACwO,KAArB,EAA4B,CAA5B;AACAxO,UAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB5oB,IAAI,CAACwO,KAArB,EAA4BxO,IAAI,CAACmC,MAAjC;AACAnC,UAAI,CAAComB,GAAL,CAASwC,MAAT,CAAgB5oB,IAAI,CAACovB,qBAArB,EAA4CpvB,IAAI,CAACmC,MAAjD;AACD;;AACDnC,QAAI,CAAComB,GAAL,CAASpI,IAAT;AACD;;AACD,WAASsR,UAAT,CAAoBvtB,CAApB,EAAuBE,CAAvB,EAA0BgF,CAA1B,EAA6B;AAC3B,QAAIjH,IAAI,CAAC6B,KAAL,CAAW0tB,mBAAX,KAAmC,QAAvC,EAAiD;AAC/C,aAAOT,UAAU,CAAC/sB,CAAD,EAAIE,CAAJ,EAAOgF,CAAC,GAAG,GAAX,CAAjB;AACD;;AACDgjB,YAAQ,CAACloB,CAAC,GAAGkF,CAAC,GAAG,GAAT,EAAchF,CAAC,GAAGgF,CAAC,GAAG,GAAtB,EAA2BA,CAA3B,EAA8BA,CAA9B,CAAR;AACD;;AACD,WAASuoB,YAAT,CAAsBztB,CAAtB,EAAyBE,CAAzB,EAA4BgF,CAA5B,EAA+B;AAC7B,QAAIjH,IAAI,CAAC6B,KAAL,CAAW0tB,mBAAX,KAAmC,QAAvC,EAAiD;AAC/C,aAAON,YAAY,CAACltB,CAAD,EAAIE,CAAJ,EAAOgF,CAAC,GAAG,GAAX,CAAnB;AACD;;AACDijB,cAAU,CAACnoB,CAAC,GAAGkF,CAAC,GAAG,GAAT,EAAchF,CAAC,GAAGgF,CAAC,GAAG,GAAtB,EAA2BA,CAA3B,EAA8BA,CAA9B,CAAV;AACD;;AACD,WAASwoB,kBAAT,CAA4BzgB,CAA5B,EAA+BrO,GAA/B,EAAoC;AAClC,QAAI+uB,EAAE,GAAG1vB,IAAI,CAAC6B,KAAL,CAAW8tB,mBAApB;AAAA,QACErpB,CAAC,GAAG;AACFspB,QAAE,EAAE,cAAY;AACdN,kBAAU,CAACtgB,CAAC,CAACjN,CAAF,GAAMiN,CAAC,CAACR,KAAT,EAAgBQ,CAAC,CAAC/M,CAAlB,EAAqBytB,EAArB,CAAV;AACAF,oBAAY,CAACxgB,CAAC,CAACjN,CAAF,GAAMiN,CAAC,CAACR,KAAT,EAAgBQ,CAAC,CAAC/M,CAAlB,EAAqBytB,EAArB,CAAZ;AACD,OAJC;AAKFG,QAAE,EAAE,cAAY;AACdP,kBAAU,CAACtgB,CAAC,CAACjN,CAAF,GAAMiN,CAAC,CAACR,KAAT,EAAgBQ,CAAC,CAAC/M,CAAF,GAAM+M,CAAC,CAAC7M,MAAxB,EAAgCutB,EAAhC,CAAV;AACAF,oBAAY,CAACxgB,CAAC,CAACjN,CAAF,GAAMiN,CAAC,CAACR,KAAT,EAAgBQ,CAAC,CAAC/M,CAAF,GAAM+M,CAAC,CAAC7M,MAAxB,EAAgCutB,EAAhC,CAAZ;AACD,OARC;AASFI,QAAE,EAAE,cAAY;AACdR,kBAAU,CAACtgB,CAAC,CAACjN,CAAH,EAAMiN,CAAC,CAAC/M,CAAR,EAAWytB,EAAX,CAAV;AACAF,oBAAY,CAACxgB,CAAC,CAACjN,CAAH,EAAMiN,CAAC,CAAC/M,CAAR,EAAWytB,EAAX,CAAZ;AACD,OAZC;AAaFK,QAAE,EAAE,cAAY;AACdT,kBAAU,CAACtgB,CAAC,CAACjN,CAAH,EAAMiN,CAAC,CAAC/M,CAAF,GAAM+M,CAAC,CAAC7M,MAAd,EAAsButB,EAAtB,CAAV;AACAF,oBAAY,CAACxgB,CAAC,CAACjN,CAAH,EAAMiN,CAAC,CAAC/M,CAAF,GAAM+M,CAAC,CAAC7M,MAAd,EAAsButB,EAAtB,CAAZ;AACD;AAhBC,KADN;AAmBAppB,KAAC,CAAC3F,GAAD,CAAD;AACD;;AACD,WAASqvB,aAAT,CAAuBhhB,CAAvB,EAA0BrO,GAA1B,EAA+B;AAC7BX,QAAI,CAAComB,GAAL,CAASmC,SAAT;AACA,QAAIjiB,CAAC,GAAG;AACNmH,OAAC,EAAE,aAAY;AACbzN,YAAI,CAAComB,GAAL,CAASoC,MAAT,CACExZ,CAAC,CAACjN,CAAF,GAAM/B,IAAI,CAAC6c,gBADb,EAEE7N,CAAC,CAAC/M,CAAF,GAAMjC,IAAI,CAAC+c,eAFb;AAIA/c,YAAI,CAAComB,GAAL,CAASwC,MAAT,CACE5Z,CAAC,CAACjN,CAAF,GAAM/B,IAAI,CAAC6c,gBAAX,GAA8B7N,CAAC,CAACR,KADlC,EAEEQ,CAAC,CAAC/M,CAAF,GAAMjC,IAAI,CAAC+c,eAFb;AAID,OAVK;AAWN9V,OAAC,EAAE,aAAY;AACbjH,YAAI,CAAComB,GAAL,CAASoC,MAAT,CACExZ,CAAC,CAACjN,CAAF,GAAM/B,IAAI,CAAC6c,gBAAX,GAA8B7N,CAAC,CAACR,KADlC,EAEEQ,CAAC,CAAC/M,CAAF,GAAMjC,IAAI,CAAC+c,eAFb;AAIA/c,YAAI,CAAComB,GAAL,CAASwC,MAAT,CACE5Z,CAAC,CAACjN,CAAF,GAAM/B,IAAI,CAAC6c,gBAAX,GAA8B7N,CAAC,CAACR,KADlC,EAEEQ,CAAC,CAAC/M,CAAF,GAAMjC,IAAI,CAAC+c,eAAX,GAA6B/N,CAAC,CAAC7M,MAFjC;AAID,OApBK;AAqBNwQ,OAAC,EAAE,aAAY;AACb3S,YAAI,CAAComB,GAAL,CAASoC,MAAT,CACExZ,CAAC,CAACjN,CAAF,GAAM/B,IAAI,CAAC6c,gBADb,EAEE7N,CAAC,CAAC/M,CAAF,GAAMjC,IAAI,CAAC+c,eAAX,GAA6B/N,CAAC,CAAC7M,MAFjC;AAIAnC,YAAI,CAAComB,GAAL,CAASwC,MAAT,CACE5Z,CAAC,CAACjN,CAAF,GAAM/B,IAAI,CAAC6c,gBAAX,GAA8B7N,CAAC,CAACR,KADlC,EAEEQ,CAAC,CAAC/M,CAAF,GAAMjC,IAAI,CAAC+c,eAAX,GAA6B/N,CAAC,CAAC7M,MAFjC;AAID,OA9BK;AA+BN8tB,OAAC,EAAE,aAAY;AACbjwB,YAAI,CAAComB,GAAL,CAASoC,MAAT,CACExZ,CAAC,CAACjN,CAAF,GAAM/B,IAAI,CAAC6c,gBADb,EAEE7N,CAAC,CAAC/M,CAAF,GAAMjC,IAAI,CAAC+c,eAFb;AAIA/c,YAAI,CAAComB,GAAL,CAASwC,MAAT,CACE5Z,CAAC,CAACjN,CAAF,GAAM/B,IAAI,CAAC6c,gBADb,EAEE7N,CAAC,CAAC/M,CAAF,GAAMjC,IAAI,CAAC+c,eAAX,GAA6B/N,CAAC,CAAC7M,MAFjC;AAID;AAxCK,KAAR;AA0CAmE,KAAC,CAAC3F,GAAD,CAAD;AACAX,QAAI,CAAComB,GAAL,CAAS0C,MAAT;AACD;;AACD,WAASoH,WAAT,CAAqBrB,IAArB,EAA2BrgB,KAA3B,EAAkC;AAChC,QAAIQ,CAAJ;AAAA,QACEuO,CAAC,GAAG,CADN;;AAEA,QAAIvd,IAAI,CAACmwB,aAAL,CAAmBtB,IAAnB,KAA4B7uB,IAAI,CAACmwB,aAAL,CAAmBtB,IAAnB,EAAyBrgB,KAAzB,CAAhC,EAAiE;AAC/D,aAAOxO,IAAI,CAACmwB,aAAL,CAAmBtB,IAAnB,EAAyBrgB,KAAzB,CAAP;AACD,KAL+B,CAMhC;;;AACA+O,KAAC,GAAGvd,IAAI,CAAComB,GAAL,CAASgK,WAAT,CAAqBvB,IAArB,EAA2BrgB,KAA/B;AACAxO,QAAI,CAACmwB,aAAL,CAAmBtB,IAAnB,IAA2B7uB,IAAI,CAACmwB,aAAL,CAAmBtB,IAAnB,KAA4B,EAAvD;AACA7f,KAAC,GAAG;AAAE3J,WAAK,EAAEwpB,IAAT;AAAergB,WAAK,EAAE+O;AAAtB,KAAJ;AACAvd,QAAI,CAACmwB,aAAL,CAAmBtB,IAAnB,EAAyBrgB,KAAzB,IAAkCQ,CAAlC;AACA,WAAOA,CAAP;AACD;;AACD,WAASqhB,QAAT,CAAkB/gB,IAAlB,EAAwBghB,SAAxB,EAAmC;AACjC,QAAI,CAAChhB,IAAI,CAAC+Z,cAAV,EAA0B;AACxB,aAAO;AACLkH,aAAK,EAAE,CAAC;AAAE/hB,eAAK,EAAE,CAAT;AAAYnJ,eAAK,EAAE;AAAnB,SAAD,CADF;AAELmJ,aAAK,EAAE,CAFF;AAGLrM,cAAM,EAAEmN,IAAI,CAACkhB;AAHR,OAAP;AAKD;;AACD,QAAI7O,GAAG,GAAG,CAAV;AAAA,QACEjZ,CAAC,GAAG,IADN;AAAA,QAEE3G,CAFF;AAAA,QAGE0uB,IAHF;AAAA,QAIEC,KAAK,GAAGphB,IAAI,CAAC+Z,cAAL,CAAoBsH,KAApB,CAA0BL,SAA1B,CAJV;AAAA,QAKEM,UAAU,GAAGthB,IAAI,CAACkhB,oBALpB;AAAA,QAMED,KAAK,GAAG,EANV;AAAA,QAOEM,GAAG,GAAG,EAPR;AAAA,QAQEC,IAAI,GAAG9wB,IAAI,CAAC6B,KAAL,CAAWkvB,cAAX,KAA8B,QARvC;AAAA,QASEC,UAAU,GAAGhxB,IAAI,CAACkJ,UAAL,CAAgB+nB,cAAhB,IAAkCH,IATjD;AAAA,QAUEI,OAVF;AAAA,QAWEC,EAAE,GAAGnxB,IAAI,CAACkJ,UAAL,CAAgBkoB,YAXvB;AAAA,QAYEC,YAZF;AAAA,QAaEC,OAbF;AAAA,QAcEC,UAdF;AAAA,QAeEC,WAfF;AAAA,QAgBEC,YAhBF;AAAA,QAiBEC,IAAI,GAAG;AACLljB,WAAK,EAAE,CADF;AAELnJ,WAAK,EAAE;AAFF,KAjBT;AAAA,QAqBEssB,OAAO,GAAGb,IAAI,GAAGxhB,IAAI,CAACsiB,YAAR,GAAuBtiB,IAAI,CAACkhB,oBArB5C;AAsBAD,SAAK,CAACnnB,IAAN,CAAWsoB,IAAX;AACAR,WAAO,GAAGlxB,IAAI,CAAComB,GAAL,CAASgK,WAAT,CAAqB,MAAMe,EAA3B,EAA+B3iB,KAAzC;;AACA,SAAKzM,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG2uB,KAAK,CAAClrB,MAAtB,EAA8BzD,CAAC,IAAI,CAAnC,EAAsC;AACpC0uB,UAAI,GAAGC,KAAK,CAAC3uB,CAAD,CAAZ;AACA,UAAI8vB,YAAY,GAAGpB,IAAI,CAACA,IAAI,CAACjrB,MAAL,GAAc,CAAf,CAAJ,KAA0B,GAA1B,GAAgC,EAAhC,GAAqC8qB,SAAxD;AACA,UAAIwB,OAAO,GAAG9xB,IAAI,CAAComB,GAAL,CAASgK,WAAT,CAAqBK,IAAI,GAAGoB,YAA5B,CAAd;;AACA,UAAIH,IAAI,CAACljB,KAAL,GAAasjB,OAAO,CAACtjB,KAArB,GAA6B0iB,OAA7B,GAAuC5hB,IAAI,CAACyiB,WAAhD,EAA6D;AAC3DL,YAAI,CAACrsB,KAAL,IAAcorB,IAAI,GAAGoB,YAArB;AACAH,YAAI,CAACljB,KAAL,IAAcsjB,OAAO,CAACtjB,KAAtB;AACA;AACD,OARmC,CASpC;AACA;AACA;AACA;;;AACA,UAAI,QAAQ3F,IAAR,CAAa4nB,IAAb,KAAsBnhB,IAAI,CAACyiB,WAAL,GAAmBD,OAAO,CAACtjB,KAArD,EAA4D;AAC1D,YAAIwjB,GAAG,GAAGvB,IAAI,CAACE,KAAL,CAAW,GAAX,CAAV;AACAqB,WAAG,GAAGA,GAAG,CAAC/gB,GAAJ,CAAQ,UAACpN,IAAD,EAAO6B,KAAP,EAAiB;AAC7B,iBAAOA,KAAK,KAAKssB,GAAG,CAACxsB,MAAJ,GAAa,CAAvB,GAA2B3B,IAA3B,GAAkCA,IAAI,GAAG,GAAhD;AACD,SAFK,CAAN;AAGA6sB,aAAK,CAACxkB,MAAN,OAAAwkB,KAAK,GAAQ3uB,CAAR,EAAW,CAAX,4BAAiBiwB,GAAjB,GAAL;AACAjwB,SAAC,IAAI,CAAL;AACA;AACD;;AACD2vB,UAAI,GAAG;AACLljB,aAAK,EAAEsjB,OAAO,CAACtjB,KADV;AAELnJ,aAAK,EAAEorB,IAAI,GAAGoB;AAFT,OAAP;;AAIA,UAAI9vB,CAAC,KAAK,CAAV,EAAa;AACXwuB,aAAK,GAAG,EAAR;AACAA,aAAK,CAACnnB,IAAN,CAAWsoB,IAAX;AACD;;AACDd,gBAAU,IAAIthB,IAAI,CAACkhB,oBAAnB;;AACA,UAAII,UAAU,GAAGe,OAAb,IAAwB,CAACX,UAA7B,EAAyC;AACvC,YAAIT,KAAK,CAAC/qB,MAAN,KAAiB,CAArB,EAAwB;AACtB;AACD;;AACD6rB,oBAAY,GAAG,CAAf;AACAI,oBAAY,GAAGlB,KAAK,CAACA,KAAK,CAAC/qB,MAAN,GAAe,CAAhB,CAApB;;AACA,YAAIisB,YAAY,CAACjjB,KAAb,GAAqBc,IAAI,CAACyiB,WAA1B,IAAyCrB,KAAK,CAAClrB,MAAN,KAAiB,CAA9D,EAAiE;AAC/D;AACD;;AACD+rB,kBAAU,GAAGE,YAAY,CAACpsB,KAAb,GAAqBorB,IAAlC;AACAa,eAAO,GAAGtxB,IAAI,CAAComB,GAAL,CAASgK,WAAT,CAAqBmB,UAAU,GAAGJ,EAAlC,EAAsC3iB,KAAhD;AACA,YAAIyjB,UAAU,GAAGV,UAAjB;;AACA,YAAID,OAAO,GAAGhiB,IAAI,CAACyiB,WAAnB,EAAgC;AAC9B,cAAIG,UAAU,GAAGvpB,QAAQ,CAAC4oB,UAAU,CAAC/rB,MAAX,GAAoB,CAArB,CAAzB;AACA,cAAI2sB,SAAS,GAAG,CAAC,CAAjB;;AACA,iBAAOD,UAAU,GAAG,CAApB,EAAuB;AACrBX,sBAAU,GAAGU,UAAU,CAACG,MAAX,CACX,CADW,EAEXF,UAAU,GAAGC,SAAb,GAAyBZ,UAAU,CAAC/rB,MAFzB,CAAb;AAIA8rB,mBAAO,GAAGtxB,IAAI,CAAComB,GAAL,CAASgK,WAAT,CAAqBmB,UAAU,GAAGJ,EAAlC,EAAsC3iB,KAAhD;AACA2jB,qBAAS,GAAGb,OAAO,GAAGhiB,IAAI,CAACyiB,WAAf,GAA6B,CAAC,CAA9B,GAAkC,CAA9C;AACAG,sBAAU,GAAGvpB,QAAQ,CAACupB,UAAU,GAAG,CAAd,CAArB;AACD;AACF;;AACDX,kBAAU,GACRA,UAAU,IAAIU,UAAU,CAACzsB,MAAX,IAAqB+rB,UAAU,CAAC/rB,MAAhC,GAAyC2rB,EAAzC,GAA8C,EAAlD,CADZ;AAEAM,oBAAY,CAACpsB,KAAb,GAAqBksB,UAArB;AACAE,oBAAY,CAACjjB,KAAb,GAAqB8iB,OAArB;AACA;AACD;;AACD,UAAIvvB,CAAC,GAAG,CAAR,EAAW;AACTwuB,aAAK,CAACnnB,IAAN,CAAWsoB,IAAX;AACD;AACF;;AACD,WAAO;AACLnB,WAAK,EAAEA,KADF;AAEL/hB,WAAK,EAAEmT,GAFF;AAGLxf,YAAM,EAAEmN,IAAI,CAACkhB,oBAAL,GAA4BD,KAAK,CAAC/qB;AAHrC,KAAP;AAKD;;AACD,WAAS6sB,QAAT,CAAkB/iB,IAAlB,EAA6C;AAAA,QAArBgjB,eAAqB,uEAAH,CAAG;AAC3C,QAAIC,EAAE,GAAGjjB,IAAI,CAACuf,IAAL,CAAU0B,KAAV,CAAgB/qB,MAAzB;AAAA,QACEsM,CAAC,GAAGxC,IAAI,CAACkjB,UAAL,GAAkBljB,IAAI,CAACwT,UAD7B;AAAA,QAEE/gB,CAFF;AAAA,QAGE2vB,IAHF;AAAA,QAIEZ,IAAI,GAAG9wB,IAAI,CAAC6B,KAAL,CAAWkvB,cAAX,KAA8B,QAJvC;AAAA,QAKEH,UAAU,GAAG,CALf;;AAMA,SAAK7uB,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGuN,IAAI,CAACuf,IAAL,CAAU0B,KAAV,CAAgB/qB,MAAhC,EAAwCzD,CAAC,IAAI,CAA7C,EAAgD;AAC9C2vB,UAAI,GAAGpiB,IAAI,CAACuf,IAAL,CAAU0B,KAAV,CAAgBxuB,CAAhB,CAAP;AACA,UAAI0wB,IAAI,GACJrR,IAAI,CAACO,GAAL,CACE,CAACrS,IAAI,CAACnN,MAAL,IACE2uB,IAAI,GAAGxhB,IAAI,CAACuf,IAAL,CAAU1sB,MAAb,GAAsBmN,IAAI,CAACkhB,oBADjC,CAAD,IAEE,GAHJ,EAIE,CAJF,IAKI1e,CANR;AAAA,UAOE4gB,IAAI,GACFpjB,IAAI,CAAC+d,WAAL,GACAiF,eADA,GAEAhjB,IAAI,CAAC+c,cAFL,GAGA/c,IAAI,CAACqjB,iBAXT;;AAYA,UAAIrjB,IAAI,CAACsjB,mBAAL,KAA6B,OAAjC,EAA0C;AACxCF,YAAI,GACFpjB,IAAI,CAAC+d,WAAL,GAAmBiF,eAAnB,GAAqChjB,IAAI,CAACyiB,WAA1C,GAAwDL,IAAI,CAACljB,KAD/D;AAED,OAHD,MAGO,IAAIc,IAAI,CAACsjB,mBAAL,KAA6B,QAAjC,EAA2C;AAChDF,YAAI,GACFpjB,IAAI,CAAC+d,WAAL,GACAiF,eADA,GAEA,CAAChjB,IAAI,CAACyiB,WAAL,GAAmBziB,IAAI,CAACujB,YAAzB,IAAyC,CAFzC,GAGAnB,IAAI,CAACljB,KAAL,GAAa,CAJf;AAKD;;AACD,UAAIc,IAAI,CAACwjB,iBAAL,KAA2B,KAA/B,EAAsC;AACpCL,YAAI,GAAGnjB,IAAI,CAACkhB,oBAAZ;AACD,OAFD,MAEO,IAAIlhB,IAAI,CAACwjB,iBAAL,KAA2B,QAA/B,EAAyC;AAC9CL,YAAI,GAAGnjB,IAAI,CAACnN,MAAL,GAAcmN,IAAI,CAACyjB,aAAnB,GAAmCzjB,IAAI,CAACuf,IAAL,CAAU1sB,MAApD;AACD;;AACDuvB,UAAI,CAACvvB,MAAL,GAAc2P,CAAC,GAAGxC,IAAI,CAAC0jB,WAAvB;AACAtB,UAAI,CAACnW,UAAL,GAAkBmX,IAAlB;AACAhB,UAAI,CAAClW,SAAL,GAAiBiX,IAAjB;AACAf,UAAI,CAAC3vB,CAAL,GAASuN,IAAI,CAACvN,CAAL,GAAS2wB,IAAlB;AACAhB,UAAI,CAACzvB,CAAL,GAASqN,IAAI,CAACrN,CAAL,GAAS2uB,UAAT,GAAsB6B,IAA/B;AACA7B,gBAAU,IAAIc,IAAI,CAACvvB,MAAnB;AACAysB,cAAQ,CAAC8C,IAAI,CAACrsB,KAAN,EAAaqsB,IAAI,CAAC3vB,CAAlB,EAAqB2vB,IAAI,CAACzvB,CAA1B,CAAR;AACD;;AACD,QAAIjC,IAAI,CAACkJ,UAAL,CAAgB+pB,KAAhB,IAAyB3jB,IAAI,CAACgb,MAAlC,EAA0C;AACxCjnB,2BAAqB,CAAC,YAAY;AAChCrD,YAAI,CAAComB,GAAL,CAAS8M,IAAT,GAAgBlzB,IAAI,CAAC6B,KAAL,CAAWsxB,SAA3B;AACAnzB,YAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWuxB,UAAhC;AACAxE,gBAAQ,CACNxmB,IAAI,CAACirB,SAAL,CACE;AACEtxB,WAAC,EAAEuN,IAAI,CAACvN,CADV;AAEEE,WAAC,EAAEqN,IAAI,CAACrN,CAFV;AAGE6P,WAAC,EAAExC,IAAI,CAACnN,MAHV;AAIEob,WAAC,EAAEjO,IAAI,CAACd,KAJV;AAKE8kB,YAAE,EAAEhkB,IAAI,CAACyiB,WALX;AAMExtB,aAAG,EAAE+K,IAAI,CAAC2D,WANZ;AAOEsgB,iBAAO,EAAEjkB,IAAI,CAACkkB;AAPhB,SADF,EAUE,IAVF,EAWE,IAXF,CADM,EAcNlkB,IAAI,CAACvN,CAAL,GAAS,EAdH,EAeNuN,IAAI,CAACrN,CAAL,GAAS,EAfH,CAAR;AAiBA2sB,gBAAQ,CACNxmB,IAAI,CAACirB,SAAL,CACE/jB,IAAI,CAACuf,IAAL,CAAU0B,KAAV,CAAgBtf,GAAhB,CAAoB,UAAUgf,CAAV,EAAa;AAC/B,iBAAO;AAAE1S,aAAC,EAAE0S,CAAC,CAACzhB,KAAP;AAAc4a,aAAC,EAAE6G,CAAC,CAAC5qB,KAAF,CAAQG;AAAzB,WAAP;AACD,SAFD,CADF,EAIE,IAJF,EAKE,IALF,CADM,EAQN8J,IAAI,CAACvN,CAAL,GAAS,EARH,EASNuN,IAAI,CAACrN,CAAL,GAAS,EATH,CAAR;AAWD,OA/BoB,CAArB;AAgCD;AACF;;AACD,WAASwxB,qBAAT,GAAiC;AAC/B,QAAIlW,CAAC,GAAG,CAAR;AAAA,QACE9b,CAAC,GAAGzB,IAAI,CAACkU,SAAL,EADN;AAAA,QAEEnS,CAAC,GAAG,CAFN;AAAA,QAGE2G,CAAC,GAAG0Y,IAAI,CAACQ,GAAL,CAAS5hB,IAAI,CAAC0zB,YAAd,EAA4BjyB,CAAC,CAAC+D,MAA9B,CAHN;AAAA,QAIEmuB,eAAe,GAAG3zB,IAAI,CAAC4zB,wBAAL,EAJpB;AAAA,QAKEje,MALF;AAMAgS,2BAAuB,GAAG,CAA1B;;AACA,WAAO5lB,CAAC,GAAG2G,CAAX,EAAc;AACZiN,YAAM,GAAGlU,CAAC,CAACM,CAAD,CAAV;;AACA,UAAI4T,MAAM,CAACE,MAAX,EAAmB;AACjB8R,+BAAuB,IAAI,CAA3B;AACD,OAFD,MAEO;AACL,YAAMkM,WAAW,GACfF,eAAe,CAAChgB,SAAhB,CACE,UAAC4E,KAAD;AAAA,iBAAWxW,CAAC,IAAIwW,KAAK,CAAC0B,IAAX,IAAmBlY,CAAC,IAAIwW,KAAK,CAAC2B,EAAzC;AAAA,SADF,KAEK,CAHP;;AAIA,YAAI2Z,WAAJ,EAAiB;AACflM,iCAAuB,IAAI,CAA3B;AACD,SAFD,MAEO;AACLpK,WAAC,IAAIvd,IAAI,CAAC8zB,cAAL,CAAoB/xB,CAApB,CAAL;AACD;AACF;;AACDA,OAAC,IAAI,CAAL;AACD;;AACD,WAAOwb,CAAP;AACD;AACD;AACF;AACA;AACA;AACA;AACA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACAvd,MAAI,CAACuV,IAAL,GAAY,UAAUwe,QAAV,EAAoB;AAC9B,QAAI/zB,IAAI,CAACwE,aAAL,CAAmB,YAAnB,EAAiC,EAAjC,CAAJ,EAA0C;AACxC;AACD;;AACD,QAAI,CAACxE,IAAI,CAACyb,WAAN,KAAsB,CAACzb,IAAI,CAACmC,MAAN,IAAgB,CAACnC,IAAI,CAACwO,KAA5C,CAAJ,EAAwD;AACtD;AACD;;AACD,QAAIxO,IAAI,CAACyb,WAAL,IAAoBsY,QAAxB,EAAkC;AAChC1wB,2BAAqB,CAACrD,IAAI,CAAC+O,UAAL,CAAgBwG,IAAjB,CAArB;AACA;AACD;;AACD,QAAIvV,IAAI,CAACmB,IAAL,CAAU6yB,OAAV,KAAsB,KAA1B,EAAiC;AAC/B;AACD,KAb6B,CAc9B;;;AACA,QAAIC,iBAAJ;AAAA,QACEC,aADF;AAAA,QAEE5tB,CAFF;AAAA,QAGEmiB,EAHF;AAAA,QAIEC,EAJF;AAAA,QAKEyL,QALF;AAAA,QAMEC,OANF;AAAA,QAOEC,SAPF;AAAA,QAQEC,UARF;AAAA,QASEryB,CATF;AAAA,QAUEF,CAVF;AAAA,QAWEiN,CAXF;AAAA,QAYE8C,CAZF;AAAA,QAaEyL,CAbF;AAAA,QAcEjV,MAdF;AAAA,QAeEkK,QAfF;AAAA,QAgBE+hB,OAhBF;AAAA,QAiBEC,KAjBF;AAAA,QAkBErkB,QAAQ,GAAGnQ,IAAI,CAACmQ,QAAL,IAAiB,EAlB9B;AAAA,QAmBEskB,EAAE,GAAGz0B,IAAI,CAAC6B,KAAL,CAAWyc,kBAAX,KAAkC,UAnBzC;AAAA,QAoBEoW,gBAAgB,GAAG,EApBrB;AAAA,QAqBEC,WAAW,GAAG,EArBhB;AAAA,QAsBEC,gBAAgB,GAAG,EAtBrB;AAAA,QAuBEC,UAAU,GAAG,EAvBf;AAAA,QAwBE5E,CAAC,GAAG9f,QAAQ,CAAC3K,MAxBf;AAAA,QAyBEsvB,CAAC,GAAG90B,IAAI,CAAC+0B,WAAL,IAAoB,EAzB1B;AAAA,QA0BErX,sBAAsB,GAAG1d,IAAI,CAAC2d,yBAAL,EA1B3B;AAAA,QA2BEC,kBAAkB,GAAG5d,IAAI,CAAC6d,qBAAL,EA3BvB;AAAA,QA4BEiB,kBAAkB,GAAG9e,IAAI,CAACiY,oBAAL,EA5BvB;AAAA,QA6BE4G,sBAAsB,GAAG7e,IAAI,CAAC+X,wBAAL,EA7B3B;;AA8BE;AACAid,qBAAiB,GAAG,EA/BtB;;AAgCE;AACAC,uBAAmB,GAAG,EAjCxB;;AAkCE;AACAC,wBAAoB,GAAG,EAnCzB;AAAA,QAoCEC,qBAAqB,GAAGn1B,IAAI,CAAC4zB,wBAAL,EApC1B;AAAA,QAqCEwB,kBAAkB,GAAGp1B,IAAI,CAACq1B,qBAAL,EArCvB;AAAA,QAsCEpe,UAAU,GAAGjX,IAAI,CAAC6B,KAAL,CAAWoV,UAtC1B;AAAA,QAuCEqe,qBAAqB,GAAG,CAvC1B;;AAwCE;AACAC,8BAA0B,GAAGv1B,IAAI,CAACw1B,eAAL,CAC1BvkB,GAD0B,CACtB,UAACmC,KAAD;AAAA,aAAY;AACf6G,YAAI,EAAE7G,KAAK,CAAC,CAAD,CADI;AAEfqiB,YAAI,EAAEriB,KAAK,CAAC,CAAD,CAAL,GAAWA,KAAK,CAAC,CAAD,CAAhB,GAAsB;AAFb,OAAZ;AAAA,KADsB,EAK1BV,IAL0B,CAKrB,UAAChF,CAAD,EAAIiF,CAAJ;AAAA,aAAUjF,CAAC,CAACuM,IAAF,GAAStH,CAAC,CAACsH,IAArB;AAAA,KALqB,CAzC/B;AA+CAuN,aAAS,IAAI,CAAb;AACAlhB,KAAC,GAAGovB,WAAW,CAACC,GAAZ,EAAJ;AACA31B,QAAI,CAAC41B,iBAAL,GAAyB,EAAzB,CAhE8B,CAiE9B;;AACA,QAAIzlB,QAAQ,CAAC3K,MAAT,GAAkBxF,IAAI,CAACqT,MAAL,CAAYqD,IAAZ,CAAiBlR,MAAvC,EAA+C;AAC7CxF,UAAI,CAAC4W,eAAL;AACD;;AACD,aAASif,qBAAT,CAA+BvmB,IAA/B,EAAqC;AACnC,UAAI5J,KAAK,GAAG4J,IAAI,CAACuQ,aAAjB;AACA,UAAIna,KAAK,IAAI,CAAC,CAAV,KAAgB,KAApB,EACE,IAAI4J,IAAI,CAACkD,QAAL,KAAkB,CAAC,CAAvB,EAA0B9M,KAAK,GAAG,CAAC,CAAT,CAA1B,KACK;AACP,UAAIsvB,iBAAiB,CAACtvB,KAAD,CAArB,EAA8B;AAC9BsvB,uBAAiB,CAACtvB,KAAD,CAAjB,GAA2B;AAAEzD,SAAC,EAAEqN,IAAI,CAACrN,CAAV;AAAa6P,SAAC,EAAExC,IAAI,CAACnN;AAArB,OAA3B;AACD;;AACD,aAAS2zB,wBAAT,CAAkCxmB,IAAlC,EAAwC;AACtC,UAAM5J,KAAK,GAAG4J,IAAI,CAAC2D,WAAnB;AACA,UAAIiiB,oBAAoB,CAACxvB,KAAD,CAAxB,EAAiC;AACjCwvB,0BAAoB,CAACxvB,KAAD,CAApB,GAA8B;AAAE3D,SAAC,EAAEuN,IAAI,CAACvN,CAAV;AAAawb,SAAC,EAAEjO,IAAI,CAACd;AAArB,OAA9B;AACD;AACD;AACJ;AACA;AACA;;;AACI,aAASunB,wBAAT,CAAkC9iB,WAAlC,EAA+C;AAC7C,aACEkiB,qBAAqB,CAACxhB,SAAtB,CACE,UAAC4E,KAAD;AAAA,eAAWtF,WAAW,IAAIsF,KAAK,CAAC0B,IAArB,IAA6BhH,WAAW,IAAIsF,KAAK,CAAC2B,EAA7D;AAAA,OADF,KAEK,CAHP;AAKD;;AAED,aAAS8b,cAAT,GAA0B;AACxB,UAAIC,UAAJ;AAAA,UACExkB,EAAE,GAAGzR,IAAI,CAACsC,SAAL,CAAe4zB,QADtB;AAAA,UAEEC,CAAC,GAAGn2B,IAAI,CAAC6B,KAAL,CAAWu0B,kBAAX,GAAgC,CAFtC;AAGAp2B,UAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAWw0B,oBAAlC;AACAr2B,UAAI,CAAComB,GAAL,CAAS0E,SAAT,GAAqB9qB,IAAI,CAAC6B,KAAL,CAAWy0B,oBAAhC;;AACA,UAAIt2B,IAAI,CAAC0zB,YAAL,GAAoB,CAAxB,EAA2B;AACzBjiB,UAAE,CAAC8kB,aAAH,CAAiBx0B,CAAjB,GACE6b,kBAAkB,GAClB5d,IAAI,CAAC6B,KAAL,CAAWu0B,kBADX,GAEAp2B,IAAI,CAACw2B,WAAL,CAAiBz0B,CAAjB,CAAmB/B,IAAI,CAAC0zB,YAAL,GAAoB,CAAvC,CAFA,GAGA,CAACjiB,EAAE,CAACglB,aAAH,CAAiBjoB,KAAjB,GACCxO,IAAI,CAACw2B,WAAL,CAAiBz0B,CAAjB,CAAmB/B,IAAI,CAAC0zB,YAAL,GAAoB,CAAvC,CADD,GAEC1zB,IAAI,CAACsC,SAAL,CAAeo0B,cAFjB,KAGG12B,IAAI,CAACsC,SAAL,CAAeC,UAAf,GAA4BvC,IAAI,CAACsC,SAAL,CAAeq0B,WAH9C,CAJF;AAQD,OATD,MASO;AACLllB,UAAE,CAAC8kB,aAAH,CAAiBx0B,CAAjB,GACE6b,kBAAkB,GAClB5d,IAAI,CAAC6B,KAAL,CAAWu0B,kBADX,GAEA,CAAC3kB,EAAE,CAACglB,aAAH,CAAiBjoB,KAAjB,GAAyBxO,IAAI,CAACsC,SAAL,CAAeo0B,cAAzC,KACG12B,IAAI,CAACsC,SAAL,CAAeC,UAAf,GAA4BvC,IAAI,CAACsC,SAAL,CAAeq0B,WAD9C,CAHF;AAKD;;AACDllB,QAAE,CAACmlB,WAAH,CAAe30B,CAAf,GACEyb,sBAAsB,GACtB1d,IAAI,CAAC6B,KAAL,CAAWu0B,kBADX,GAEAp2B,IAAI,CAACw2B,WAAL,CAAiBv0B,CAAjB,CAAmBjC,IAAI,CAAC62B,SAAxB,CAFA,GAGA,CAACplB,EAAE,CAACqlB,WAAH,CAAe30B,MAAf,GACCnC,IAAI,CAACsC,SAAL,CAAey0B,eADhB,GAEC/2B,IAAI,CAACw2B,WAAL,CAAiBv0B,CAAjB,CAAmBjC,IAAI,CAAC62B,SAAxB,CAFF,KAGG72B,IAAI,CAACsC,SAAL,CAAeE,SAAf,GAA2BxC,IAAI,CAACsC,SAAL,CAAeuK,YAH7C,CAJF;;AAQA,UAAI7M,IAAI,CAACsC,SAAL,CAAe00B,oBAAnB,EAAyC;AACvCh3B,YAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWo1B,wBAAhC;AACAhN,gBAAQ,CACNxY,EAAE,CAACglB,aAAH,CAAiB10B,CADX,EAEN0P,EAAE,CAACglB,aAAH,CAAiBx0B,CAFX,EAGNwP,EAAE,CAACglB,aAAH,CAAiBjoB,KAAjB,GAAyB2nB,CAHnB,EAIN1kB,EAAE,CAACglB,aAAH,CAAiBt0B,MAJX,CAAR;AAMA+nB,kBAAU,CACRzY,EAAE,CAACglB,aAAH,CAAiB10B,CADT,EAER0P,EAAE,CAACglB,aAAH,CAAiBx0B,CAFT,EAGRwP,EAAE,CAACglB,aAAH,CAAiBjoB,KAAjB,GAAyB2nB,CAHjB,EAIR1kB,EAAE,CAACglB,aAAH,CAAiBt0B,MAJT,CAAV;AAMAnC,YAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWq1B,iBAAhC;;AACA,YAAIl3B,IAAI,CAACsC,SAAL,CAAe60B,oBAAnB,EAAyC;AACvC,cAAI,aAAatuB,IAAb,CAAkBisB,CAAC,CAACzO,OAApB,CAAJ,EAAkC;AAChCrmB,gBAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWu1B,oBAAhC;AACD;;AACD3I,oBAAU,CACRhd,EAAE,CAAC8kB,aAAH,CAAiBx0B,CADT,EAER0P,EAAE,CAAC8kB,aAAH,CAAiBt0B,CAFT,EAGRwP,EAAE,CAAC8kB,aAAH,CAAiB/nB,KAHT,EAIRiD,EAAE,CAAC8kB,aAAH,CAAiBp0B,MAJT,EAKRnC,IAAI,CAAC6B,KAAL,CAAWw1B,wBALH,CAAV;AAOAr3B,cAAI,CAAComB,GAAL,CAAS0C,MAAT;AACA9oB,cAAI,CAAComB,GAAL,CAAS2D,IAAT;AACD;;AACDkM,kBAAU,GAAG,IAAb;AACAj2B,YAAI,CAACs3B,YAAL,CAAkBC,OAAlB,CAA0B9lB,EAAE,CAACglB,aAA7B;AACAz2B,YAAI,CAACs3B,YAAL,CAAkBC,OAAlB,CAA0B9lB,EAAE,CAAC8kB,aAA7B;AACD;;AACD,UAAIv2B,IAAI,CAACsC,SAAL,CAAek1B,kBAAnB,EAAuC;AACrCx3B,YAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWo1B,wBAAhC;AACAhN,gBAAQ,CACNxY,EAAE,CAACqlB,WAAH,CAAe/0B,CADT,EAEN0P,EAAE,CAACqlB,WAAH,CAAe70B,CAFT,EAGNwP,EAAE,CAACqlB,WAAH,CAAetoB,KAHT,EAINiD,EAAE,CAACqlB,WAAH,CAAe30B,MAAf,GAAwBg0B,CAJlB,CAAR;AAMAjM,kBAAU,CACRzY,EAAE,CAACqlB,WAAH,CAAe/0B,CADP,EAER0P,EAAE,CAACqlB,WAAH,CAAe70B,CAFP,EAGRwP,EAAE,CAACqlB,WAAH,CAAetoB,KAHP,EAIRiD,EAAE,CAACqlB,WAAH,CAAe30B,MAAf,GAAwBg0B,CAJhB,CAAV;;AAMA,YAAIn2B,IAAI,CAACsC,SAAL,CAAem1B,kBAAnB,EAAuC;AACrCz3B,cAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWq1B,iBAAhC;;AACA,cAAI,WAAWruB,IAAX,CAAgBisB,CAAC,CAACzO,OAAlB,CAAJ,EAAgC;AAC9BrmB,gBAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWu1B,oBAAhC;AACD;;AACD3I,oBAAU,CACRhd,EAAE,CAACmlB,WAAH,CAAe70B,CADP,EAER0P,EAAE,CAACmlB,WAAH,CAAe30B,CAFP,EAGRwP,EAAE,CAACmlB,WAAH,CAAepoB,KAHP,EAIRiD,EAAE,CAACmlB,WAAH,CAAez0B,MAJP,EAKRnC,IAAI,CAAC6B,KAAL,CAAWw1B,wBALH,CAAV;AAOAr3B,cAAI,CAAComB,GAAL,CAAS0C,MAAT;AACA9oB,cAAI,CAAComB,GAAL,CAAS2D,IAAT;AACD;;AACDkM,kBAAU,GAAG,IAAb;AACAj2B,YAAI,CAACs3B,YAAL,CAAkBC,OAAlB,CAA0B9lB,EAAE,CAACqlB,WAA7B;AACA92B,YAAI,CAACs3B,YAAL,CAAkBC,OAAlB,CAA0B9lB,EAAE,CAACmlB,WAA7B;AACD;;AACD,UAAIX,UAAJ,EAAgB;AACd;AACAj2B,YAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAW61B,0BAAlC;AACA13B,YAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAW81B,8BAAhC;AACAlJ,kBAAU,CACRhd,EAAE,CAACmmB,MAAH,CAAU71B,CADF,EAER0P,EAAE,CAACmmB,MAAH,CAAU31B,CAFF,EAGRwP,EAAE,CAACmmB,MAAH,CAAUppB,KAHF,EAIRiD,EAAE,CAACmmB,MAAH,CAAUz1B,MAJF,EAKR,CALQ,CAAV;AAOAnC,YAAI,CAAComB,GAAL,CAAS0C,MAAT;AACA9oB,YAAI,CAAComB,GAAL,CAAS2D,IAAT;AACA/pB,YAAI,CAACs3B,YAAL,CAAkBC,OAAlB,CAA0B9lB,EAAE,CAACmmB,MAA7B;AACD;AACF;;AACD,aAASC,yBAAT,CAAmCvoB,IAAnC,EAAyC;AACvC,UAAItP,IAAI,CAACkJ,UAAL,CAAgB4uB,oBAAhB,IAAwC93B,IAAI,CAACK,MAAjD,EAAyD;AACvD,YACEiP,IAAI,CAACyoB,kBAAL,IACAzoB,IAAI,CAAC0oB,oBADL,IAEAh4B,IAAI,CAACK,MAHP,EAIE;AACAu0B,0BAAgB,CAACxrB,IAAjB,CAAsB,CAACkG,IAAD,EAAO,IAAP,CAAtB;AACAA,cAAI,CAAC2oB,eAAL,GAAuB,IAAvB;AACD;;AACD,YACE3oB,IAAI,CAACyoB,kBAAL,IACAzoB,IAAI,CAAC4oB,mBADL,IAEAl4B,IAAI,CAACK,MAHP,EAIE;AACAu0B,0BAAgB,CAACxrB,IAAjB,CAAsB,CAACkG,IAAD,EAAO,IAAP,CAAtB;AACAA,cAAI,CAAC2oB,eAAL,GAAuB,IAAvB;AACD;;AACD,YACE3oB,IAAI,CAAC6oB,qBAAL,IACA7oB,IAAI,CAAC4oB,mBADL,IAEAl4B,IAAI,CAACK,MAHP,EAIE;AACAu0B,0BAAgB,CAACxrB,IAAjB,CAAsB,CAACkG,IAAD,EAAO,IAAP,CAAtB;AACAA,cAAI,CAAC2oB,eAAL,GAAuB,IAAvB;AACD;;AACD,YACE3oB,IAAI,CAAC6oB,qBAAL,IACA7oB,IAAI,CAAC0oB,oBADL,KAECh4B,IAAI,CAACkJ,UAAL,CAAgBkvB,uBAAhB,KAA4C,MAA5C,IAAsDp4B,IAAI,CAACK,MAF5D,CADF,EAIE;AACAu0B,0BAAgB,CAACxrB,IAAjB,CAAsB,CAACkG,IAAD,EAAO,IAAP,CAAtB;AACAA,cAAI,CAAC2oB,eAAL,GAAuB,IAAvB;AACD;AACF;AACF;;AACD,aAASI,wBAAT,CACE/oB,IADF,EAEEgpB,SAFF,EAGEC,UAHF,EAIEC,WAJF,EAKE;AACAA,iBAAW,GAAGA,WAAW,IAAI;AAAEz2B,SAAC,EAAE,CAAL;AAAQE,SAAC,EAAE;AAAX,OAA7B;AACAqN,UAAI,CAACmpB,eAAL,GAAuB,EAAvB;;AACA,UACE,CAACnpB,IAAI,CAACuF,WAAN,IACA7U,IAAI,CAACsS,UAAL,CAAgBhD,IAAI,CAACkD,QAAL,GAAgB,CAACgmB,WAAW,CAACv2B,CAA7C,CADA,IAEAjC,IAAI,CAACsS,UAAL,CAAgBhD,IAAI,CAACkD,QAAL,GAAgB,CAACgmB,WAAW,CAACv2B,CAA7C,EAAgDkK,OAAhD,CACEmD,IAAI,CAAC2D,WAAL,GAAmB,CAACulB,WAAW,CAACz2B,CADlC,MAEM,CAAC,CALT,EAME;AACA,YACE,CAAC,CAAC/B,IAAI,CAACsS,UAAL,CAAgBhD,IAAI,CAACkD,QAAL,GAAgB,CAAhB,GAAoB,CAACgmB,WAAW,CAACv2B,CAAjD,CAAD,IACCjC,IAAI,CAACsS,UAAL,CAAgBhD,IAAI,CAACkD,QAAL,GAAgB,CAAhB,GAAoB,CAACgmB,WAAW,CAACv2B,CAAjD,EAAoDkK,OAApD,CACEmD,IAAI,CAAC2D,WAAL,GAAmB,CAACulB,WAAW,CAACz2B,CADlC,MAEM,CAAC,CAHR,IAICuN,IAAI,CAACkD,QAAL,KAAkB,CAJpB,KAKA,CAAClD,IAAI,CAACopB,QANR,EAOE;AACAJ,mBAAS,CAAClvB,IAAV,CAAe,CAACkG,IAAD,EAAO,GAAP,CAAf;AACAA,cAAI,CAACipB,UAAU,GAAG,WAAd,CAAJ,GAAiC,IAAjC;AACAjpB,cAAI,CAACipB,UAAU,GAAG,QAAd,CAAJ,IAA+B,GAA/B;AACD;;AACD,YACE,CAACv4B,IAAI,CAACsS,UAAL,CAAgBhD,IAAI,CAACkD,QAAL,GAAgB,CAAhB,GAAoB,CAACgmB,WAAW,CAACv2B,CAAjD,CAAD,IACAjC,IAAI,CAACsS,UAAL,CAAgBhD,IAAI,CAACkD,QAAL,GAAgB,CAAhB,GAAoB,CAACgmB,WAAW,CAACv2B,CAAjD,EAAoDkK,OAApD,CACEmD,IAAI,CAAC2D,WAAL,GAAmB,CAACulB,WAAW,CAACz2B,CADlC,MAEM,CAAC,CAJT,EAKE;AACAu2B,mBAAS,CAAClvB,IAAV,CAAe,CAACkG,IAAD,EAAO,GAAP,CAAf;AACAA,cAAI,CAACipB,UAAU,GAAG,cAAd,CAAJ,GAAoC,IAApC;AACAjpB,cAAI,CAACipB,UAAU,GAAG,QAAd,CAAJ,IAA+B,GAA/B;AACD;;AACD,YACE,CAACv4B,IAAI,CAACsS,UAAL,CAAgBhD,IAAI,CAACkD,QAAL,GAAgB,CAACgmB,WAAW,CAACv2B,CAA7C,CAAD,IACAqN,IAAI,CAAC2D,WAAL,KAAqB,CADrB,IAEAjT,IAAI,CAACsS,UAAL,CAAgBhD,IAAI,CAACkD,QAAL,GAAgB,CAACgmB,WAAW,CAACv2B,CAA7C,EAAgDkK,OAAhD,CACEmD,IAAI,CAAC2D,WAAL,GAAmB,CAAnB,GAAuB,CAACulB,WAAW,CAACz2B,CADtC,MAEM,CAAC,CALT,EAME;AACAu2B,mBAAS,CAAClvB,IAAV,CAAe,CAACkG,IAAD,EAAO,GAAP,CAAf;AACAA,cAAI,CAACipB,UAAU,GAAG,YAAd,CAAJ,GAAkC,IAAlC;AACAjpB,cAAI,CAACipB,UAAU,GAAG,QAAd,CAAJ,IAA+B,GAA/B;AACD;;AACD,YACE,CAACv4B,IAAI,CAACsS,UAAL,CAAgBhD,IAAI,CAACkD,QAAL,GAAgB,CAACgmB,WAAW,CAACv2B,CAA7C,CAAD,IACAqN,IAAI,CAAC2D,WAAL,KAAqB3K,MAAM,CAAC9C,MAD5B,IAEAxF,IAAI,CAACsS,UAAL,CAAgBhD,IAAI,CAACkD,QAAL,GAAgB,CAACgmB,WAAW,CAACv2B,CAA7C,EAAgDkK,OAAhD,CACEmD,IAAI,CAAC2D,WAAL,GAAmB,CAAnB,GAAuB,CAACulB,WAAW,CAACz2B,CADtC,MAEM,CAAC,CALT,EAME;AACAu2B,mBAAS,CAAClvB,IAAV,CAAe,CAACkG,IAAD,EAAO,GAAP,CAAf;AACAA,cAAI,CAACipB,UAAU,GAAG,aAAd,CAAJ,GAAmC,IAAnC;AACAjpB,cAAI,CAACipB,UAAU,GAAG,QAAd,CAAJ,IAA+B,GAA/B;AACD;AACF;AACF;;AACD,aAASI,QAAT,CAAkBpE,OAAlB,EAA2BqE,aAA3B,EAA0CpmB,QAA1C,EAAoD;AAClD,aAAO,SAASqmB,QAAT,CAAkBtpB,MAAlB,EAA0BkK,WAA1B,EAAuCxD,gBAAvC,EAAyD;AAC9D,YAAI1G,MAAM,CAACsG,MAAX,EAAmB;AACjB,iBAAO,CAAP;AACD;;AACD,YAAIijB,SAAS,GAAGvpB,MAAM,CAAC1N,KAAP,IAAgB,MAAhC;AAAA,YACEk3B,kBADF;AAAA,YAEEzpB,IAFF;AAAA,YAGEopB,QAAQ,GAAG,aAAa7vB,IAAb,CAAkBiwB,SAAlB,CAHb;AAAA,YAIElkB,QAAQ,GAAG,aAAa/L,IAAb,CAAkBiwB,SAAlB,CAJb;AAAA,YAKEjkB,WAAW,GAAG,oBAAoBikB,SALpC;AAAA,YAME3f,cAAc,GAAG,uBAAuB2f,SAN1C;AAAA,YAOEE,YAAY,GACVh5B,IAAI,CAACi5B,UAAL,CAAgBviB,IAAhB,CAAqBjG,QAArB,CAA8B+B,QAA9B,KACAxS,IAAI,CAACi5B,UAAL,CAAgB3lB,OAAhB,CAAwB7C,QAAxB,CAAiCgJ,WAAjC,CATJ;AAAA,YAUEqX,IAAI,GAAG9wB,IAAI,CAAC6B,KAAL,CAAWkvB,cAAX,KAA8B,QAVvC;AAAA,YAWEmI,QAAQ,GACNl5B,IAAI,CAACsS,UAAL,CAAgBsmB,aAAhB,KACA54B,IAAI,CAACsS,UAAL,CAAgBsmB,aAAhB,EAA+BzsB,OAA/B,CAAuC8J,gBAAvC,MAA6D,CAAC,CAblE;AAAA,YAcEwX,OAAO,GACLztB,IAAI,CAAC0tB,MAAL,CAAYlb,QAAZ,KAAyBomB,aAAzB,KACC54B,IAAI,CAACkJ,UAAL,CAAgBiwB,SAAhB,KAA8B,KAA9B,IACCn5B,IAAI,CAAC0tB,MAAL,CAAYza,WAAZ,KAA4BgD,gBAF9B,CAfJ;AAAA,YAkBEmjB,YAAY,GACVp5B,IAAI,CAACq5B,oBAAL,CAA0B7mB,QAA1B,IAAsCA,QAAtC,IACAxS,IAAI,CAACq5B,oBAAL,CAA0BpmB,WAA1B,IAAyCwG,WApB7C;AAAA,YAqBE6Q,MAAM,GACJtqB,IAAI,CAACs5B,UAAL,CAAgB9mB,QAAhB,KAA6BomB,aAA7B,IACA54B,IAAI,CAACs5B,UAAL,CAAgBrmB,WAAhB,KAAgCgD,gBAvBpC;AAAA,YAwBEvB,qBAAqB,GAAGokB,SAAS,KAAK,qBAxBxC;AAAA,YAyBES,QAAQ,GAAGhF,OAAO,GAAGA,OAAO,CAAChlB,MAAM,CAACtF,IAAR,CAAV,GAA0BrI,SAzB9C;AAAA,YA0BE+a,MAAM,GAAGpN,MAAM,CAAC1E,IAAP,KAAgB,iBA1B3B;AAAA,YA2BE2uB,YAAY,GACV,CAACx5B,IAAI,CAACqT,MAAL,CAAYqD,IAAZ,CAAiB1W,IAAI,CAACs5B,UAAL,CAAgB9mB,QAAjC,MAA+ComB,aAA/C,IACC54B,IAAI,CAACy5B,YAAL,CAAkBttB,OAAlB,CAA0BysB,aAA1B,KAA4C,CAD7C,IAEC54B,IAAI,CAACqT,MAAL,CAAYC,OAAZ,CAAoBtT,IAAI,CAACs5B,UAAL,CAAgBrmB,WAApC,MACEwG,WAHH,IAICzZ,IAAI,CAAC05B,eAAL,CAAqBvtB,OAArB,CAA6BsN,WAA7B,KAA6C,CAJ/C,MAKCxD,gBAAgB,KAAK,CAAC,CAAtB,IAA2B2iB,aAAa,KAAK,CAAC,CAL/C,IAMI/jB,WAAW,GACT,qBADS,GAET,wBARN,GASI,KArCR;AAAA,YAsCE/M,GAtCF;AAAA,YAuCE6xB,CAAC,GAAG35B,IAAI,CAAC4Q,UAAL,CAAgBrB,MAAM,CAAC1E,IAAP,IAAe,QAA/B,CAvCN;AAAA,YAwCE+uB,gBAAgB,GAAG,CAxCrB;AAAA,YAyCEC,aAAa,GAAG,CAzClB;AAAA,YA0CE7iB,SAAS,GAAGhX,IAAI,CAACyW,KAAL,CAAWnD,OAAX,CAAmBmG,WAAnB,KAAmClK,MAAM,CAACf,KA1CxD;AAAA,YA2CErK,EAAE,GAAG;AACHkB,eAAK,EAAEk0B,QADJ;AAEHnpB,aAAG,EAAEmkB,OAFF;AAGHhlB,gBAAM,EAAEA;AAHL,SA3CP;;AAgDA,YAAImF,qBAAJ,EAA2B;AACzBsC,mBAAS,GAAGuG,CAAC,GAAGxb,CAAhB;AACD,SAtD6D,CAuD9D;;;AACA,YAAIiV,SAAS,KAAKpV,SAAlB,EAA6B;AAC3BoV,mBAAS,GAAGhX,IAAI,CAAC6B,KAAL,CAAWmV,SAAvB;AACD;;AACDA,iBAAS,GAAGA,SAAS,GAAGhX,IAAI,CAACihB,KAA7B;;AACA,YAAIlf,CAAC,GAAGiV,SAAJ,GAAgBhX,IAAI,CAAC6B,KAAL,CAAW2c,eAA3B,GAA6C,CAAjD,EAAoD;AAClDzc,WAAC,IAAIiV,SAAS,GAAGhX,IAAI,CAAC6B,KAAL,CAAW2c,eAA5B;AACD;;AACD,YAAI8L,MAAM,IAAIwO,SAAS,KAAK,YAA5B,EAA0C;AACxCA,mBAAS,GAAG,YAAZ;AACD;;AACD,YAAI94B,IAAI,CAAC85B,WAAL,CAAiB3tB,OAAjB,CAAyBqG,QAAzB,MAAuC,CAAC,CAAxC,IAA6C,CAACkmB,QAAlD,EAA4D;AAC1D14B,cAAI,CAAC85B,WAAL,CAAiB1wB,IAAjB,CAAsBoJ,QAAtB;AACD;;AACD1K,WAAG,GAAG9H,IAAI,CAACwE,aAAL,CAAmB,iBAAnB,EAAsCL,EAAtC,CAAN;AACAskB,UAAE,GAAG1mB,CAAL;AACA2mB,UAAE,GAAGzmB,CAAL;;AACA,YAAI62B,SAAS,KAAK,YAAlB,EAAgC;AAC9BrQ,YAAE,GAAG,CAAL;AACAC,YAAE,GAAG,CAAL;AACD,SAHD,MAGO,IAAI7T,WAAJ,EAAiB;AACtB4T,YAAE,GAAG,CAAL;AACD,SAFM,MAEA,IAAIiQ,QAAJ,EAAc;AACnBhQ,YAAE,GAAG,CAAL;AACD;;AACDpZ,YAAI,GAAG;AACLzE,cAAI,EAAE8R,MAAM,GAAG,sBAAH,GAA4BpN,MAAM,CAAC1E,IAD1C;AAELhJ,eAAK,EAAEi3B,SAFF;AAGLxc,kBAAQ,EAAE,sBAHL;AAILva,WAAC,EAAE0mB,EAJE;AAKLxmB,WAAC,EAAEymB,EALE;AAML8J,oBAAU,EAAE,CAACxyB,IAAI,CAAC6B,KAAL,CAAWi3B,SAAS,GAAG,YAAvB,KAAwC,CAAzC,IAA8C94B,IAAI,CAACihB,KAN1D;AAOL2R,6BAAmB,EAAE5yB,IAAI,CAAC6B,KAAL,CAAWi3B,SAAS,GAAG,qBAAvB,CAPhB;AAQLhG,2BAAiB,EAAE9yB,IAAI,CAAC6B,KAAL,CAAWi3B,SAAS,GAAG,mBAAvB,CARd;AASLzL,qBAAW,EACT,CAACrtB,IAAI,CAAC6B,KAAL,CAAWi3B,SAAS,GAAG,aAAvB,KAAyC,CAA1C,IAA+C94B,IAAI,CAACihB,KAVjD;AAWL8Y,oBAAU,EAAE,CAAC/5B,IAAI,CAAC6B,KAAL,CAAWi3B,SAAS,GAAG,YAAvB,KAAwC,CAAzC,IAA8C94B,IAAI,CAACihB,KAX1D;AAYL4R,sBAAY,EACV,CAAC7yB,IAAI,CAAC6B,KAAL,CAAWi3B,SAAS,GAAG,cAAvB,KAA0C,CAA3C,IAAgD94B,IAAI,CAACihB,KAblD;AAcL8R,uBAAa,EACX,CAAC/yB,IAAI,CAAC6B,KAAL,CAAWi3B,SAAS,GAAG,eAAvB,KAA2C,CAA5C,IAAiD94B,IAAI,CAACihB,KAfnD;AAgBLoD,oBAAU,EAAErkB,IAAI,CAAC6B,KAAL,CAAWkvB,cAhBlB;AAiBLjO,oBAAU,EAAE9iB,IAAI,CAAC6B,KAAL,CAAWm4B,cAjBlB;AAkBLhH,qBAAW,EAAEhzB,IAAI,CAAC6B,KAAL,CAAWo4B,eAlBnB;AAmBLze,mBAAS,EAAExb,IAAI,CAAC+c,eAAL,GAAuB2L,EAnB7B;AAoBLnN,oBAAU,EAAEvb,IAAI,CAAC6c,gBAAL,GAAwB4L,EApB/B;AAqBLjmB,mBAAS,EAAExC,IAAI,CAACsC,SAAL,CAAeE,SArBrB;AAsBLD,oBAAU,EAAEvC,IAAI,CAACsC,SAAL,CAAeC,UAtBtB;AAuBL+nB,gBAAM,EAAEA,MAAM,IAAIkP,YAvBb;AAwBL/L,iBAAO,EAAEA,OAxBJ;AAyBLyL,kBAAQ,EAAEA,QAzBL;AA0BL1qB,eAAK,EAAEwI,SA1BF;AA2BL7U,gBAAM,EAAE8U,UA3BH;AA4BLzK,qBAAW,EAAEwK,SA5BR;AA6BLzT,sBAAY,EAAE0T,UA7BT;AA8BL/T,oBAAU,EAAElD,IAAI,CAACmB,IAAL,CAAU+B,UA9BjB;AA+BLgc,sBAAY,EAAElf,IAAI,CAACmB,IAAL,CAAU+B,UA/BnB;AAgCLgF,cAAI,EAAEqsB,OAhCD;AAiCL3f,kBAAQ,EAAEA,QAjCL;AAkCL8jB,kBAAQ,EAAEA,QAlCL;AAmCLvf,wBAAc,EAAEA,cAnCX;AAoCLzE,+BAAqB,EAAEA,qBApClB;AAqCLG,qBAAW,EAAEA,WArCR;AAsCLmkB,sBAAY,EAAEA,YAtCT;AAuCLI,sBAAY,EAAEA,YAvCT;AAwCLhF,iBAAO,EAAEA,OAxCJ;AAyCL7kB,gBAAM,EAAEA,MAzCH;AA2CL0D,qBAAW,EAAEgD,gBA3CR;AA4CLzD,kBAAQ,EAAEomB,aA5CL;AA8CLnhB,sBAAY,EAAEmhB,aA9CT;AA+CLsB,yBAAe,EAAEjkB,gBA/CZ;AAiDL4J,uBAAa,EAAE7f,IAAI,CAAC0X,gCAAL,CAAsCkhB,aAAtC,CAjDV;AAkDLuB,0BAAgB,EAAEn6B,IAAI,CAACo6B,sCAAL,CAChBnkB,gBADgB,CAlDb;AAsDLud,yBAAe,EAAE/Z,WAtDZ;AAuDL4gB,sBAAY,EAAE7nB,QAvDT;AAyDLmK,gBAAM,EAAEA,MAzDH;AA0DL2d,kBAAQ,EAAE,CAAC3d,MAAD,IAAW,CAAC/H,QAAZ,IAAwB,CAAC8jB,QA1D9B;AA2DL6B,gBAAM,EAAE,CAACv6B,IAAI,CAACkJ,UAAL,CAAgBe,IAAhB,IAAwB,EAAzB,IAA+BuI,QAA/B,GAA0C,GAA1C,GAAgDiH,WA3DnD;AA4DL1K,oBAAU,EAAE/O,IAAI,CAACmB,IA5DZ;AA6DLsB,mBAAS,EAAE,EA7DN;AA8DL+2B,sBAAY,EAAEA,YA9DT;AA+DLn0B,eAAK,EACHqzB,QAAQ,IAAI,CAAC7jB,WAAb,GAA2BtF,MAAM,CAACtL,KAAP,IAAgBsL,MAAM,CAACtF,IAAlD,GAAyDsvB,QAhEtD;AAiELiB,mBAAS,EACP5B,aAAa,IAAI,CAAjB,IACA3iB,gBAAgB,IAAIjW,IAAI,CAACy6B,QAAL,CAAcC,eADlC,IAEA16B,IAAI,CAACy6B,QAAL,CAAc/jB,IAAd,CAAmBlR,MAAnB,GAA4B,CAF5B,IAGAxF,IAAI,CAACy6B,QAAL,CAAc/jB,IAAd,CAAmBkiB,aAAnB,EAAkCtL,IArE/B;AAsELqN,sBAAY,EACV1kB,gBAAgB,IAAI,CAApB,IACAjW,IAAI,CAACy6B,QAAL,CAAcnnB,OAAd,CAAsBslB,aAAtB,CADA,IAEA54B,IAAI,CAACy6B,QAAL,CAAcnnB,OAAd,CAAsBslB,aAAtB,EAAqC3iB,gBAArC,EAAuDqX;AAzEpD,SAAP;AA2EAhe,YAAI,CAACkhB,oBAAL,GACElhB,IAAI,CAACkjB,UAAL,GAAkBljB,IAAI,CAACwT,UAAvB,GAAoCxT,IAAI,CAAC0jB,WAD3C;AAEA1jB,YAAI,CAACyiB,WAAL,GAAmBziB,IAAI,CAACd,KAAL,GAAac,IAAI,CAACujB,YAAlB,GAAiCvjB,IAAI,CAAC+d,WAAzD;AACA/d,YAAI,CAACsiB,YAAL,GAAoBtiB,IAAI,CAACnN,MAAL,GAAcmN,IAAI,CAACyqB,UAAnB,GAAgCzqB,IAAI,CAACyjB,aAAzD;AACA5uB,UAAE,CAACmL,IAAH,GAAUA,IAAV;AACAA,YAAI,CAACsrB,UAAL,GAAkBtrB,IAAI,CAACopB,QAAL,GAAgB14B,IAAI,CAACyW,KAAL,CAAWC,IAAX,CAAgB,CAAC,CAAjB,CAAhB,GAAsC2d,SAAxD;AACA/kB,YAAI,CAACurB,SAAL,GAAiBvrB,IAAI,CAACopB,QAAL,GACb14B,IAAI,CAACyW,KAAL,CAAWnD,OAAX,CAAmBghB,UADN,GAEbt0B,IAAI,CAACyW,KAAL,CAAWnD,OAAX,CAAmBmG,WAAnB,CAFJ;AAGAzZ,YAAI,CAACs3B,YAAL,CAAkBC,OAAlB,CAA0BjoB,IAA1B;AACAumB,6BAAqB,CAACvmB,IAAD,CAArB;AACAwmB,gCAAwB,CAACxmB,IAAD,CAAxB;;AACA,YAAItP,IAAI,CAACwE,aAAL,CAAmB,kBAAnB,EAAuCL,EAAvC,CAAJ,EAAgD;AAC9C;AACD;;AACDnE,YAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWi3B,SAAS,GAAG,iBAAvB,CAArB;AACA94B,YAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAWi3B,SAAS,GAAG,aAAvB,CAAvB;AACA94B,YAAI,CAAComB,GAAL,CAAS0E,SAAT,GAAqB9qB,IAAI,CAAC6B,KAAL,CAAWi3B,SAAS,GAAG,aAAvB,CAArB;;AACA,YAAIrL,OAAJ,EAAa;AACXztB,cAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWi3B,SAAS,GAAG,sBAAvB,CAArB;AACA94B,cAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAWi3B,SAAS,GAAG,kBAAvB,CAAvB;AACD;;AACD,YAAII,QAAJ,EAAc;AACZl5B,cAAI,CAAComB,GAAL,CAAS2E,SAAT,GACE/qB,IAAI,CAAC6B,KAAL,CAAWi3B,SAAS,GAAG,yBAAvB,CADF;AAEA94B,cAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAWi3B,SAAS,GAAG,qBAAvB,CAAvB;AACD;;AACD,YAAIU,YAAJ,EAAkB;AAChBx5B,cAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAW23B,YAAY,GAAG,iBAA1B,CAArB;AACD;;AACDx5B,YAAI,CAACwE,aAAL,CAAmB,YAAnB,EAAiCL,EAAjC;;AACA,YAAImL,IAAI,CAACqN,MAAT,EAAiB;AACf,cAAIrN,IAAI,CAACnN,MAAL,KAAgBkyB,SAApB,EAA+B;AAC7B/kB,gBAAI,CAACnN,MAAL,GAAckyB,SAAS,IAAIr0B,IAAI,CAAC6B,KAAL,CAAWi5B,uBAAtC;AACA7G,6BAAiB,GAAG,IAApB;AACD;;AACD3kB,cAAI,CAACd,KAAL,GACExO,IAAI,CAACyW,KAAL,CAAWnD,OAAX,CAAmBmG,WAAnB,KACAzZ,IAAI,CAAC6B,KAAL,CAAWk5B,sBAFb;AAGD;;AACD,YAAI3G,OAAO,IAAI,CAAC9kB,IAAI,CAACuF,WAArB,EAAkC;AAChCvF,cAAI,CAACnN,MAAL,GAAcnC,IAAI,CAACyW,KAAL,CAAWC,IAAX,CAAgBlE,QAAhB,KAA6BxS,IAAI,CAAC6B,KAAL,CAAWoV,UAAtD;AACD;;AACD,YAAI,CAAC3H,IAAI,CAACqN,MAAV,EAAkB;AAChBsN,kBAAQ,CAACxB,EAAD,EAAKC,EAAL,EAASpZ,IAAI,CAACd,KAAd,EAAqBc,IAAI,CAACnN,MAA1B,CAAR;AACA+nB,oBAAU,CAACzB,EAAD,EAAKC,EAAL,EAASpZ,IAAI,CAACd,KAAd,EAAqBc,IAAI,CAACnN,MAA1B,CAAV;AACD;;AACDnC,YAAI,CAAComB,GAAL,CAAS4U,IAAT;AACAvM,kBAAU,CAACnf,IAAI,CAACvN,CAAN,EAASuN,IAAI,CAACrN,CAAd,EAAiBqN,IAAI,CAACd,KAAtB,EAA6Bc,IAAI,CAACnN,MAAlC,EAA0C,CAA1C,CAAV;AACAnC,YAAI,CAAComB,GAAL,CAASpI,IAAT;AACAhe,YAAI,CAACwE,aAAL,CAAmB,iBAAnB,EAAsCL,EAAtC;;AACA,YAAImL,IAAI,CAACnN,MAAL,KAAgB8U,UAAhB,IAA8B,EAAEmd,OAAO,IAAI,CAAC9kB,IAAI,CAACuF,WAAnB,CAAlC,EAAmE;AACjE7U,cAAI,CAACyW,KAAL,CAAWC,IAAX,CAAgBgiB,QAAQ,GAAG,CAAC,CAAJ,GAAQlmB,QAAhC,IAA4ClD,IAAI,CAACnN,MAAjD;AACA8xB,2BAAiB,GAAG,IAApB;AACD;;AACD,YAAI3kB,IAAI,CAACd,KAAL,KAAewI,SAAnB,EAA8B;AAC5BhX,cAAI,CAACyW,KAAL,CAAWnD,OAAX,CAAmBmG,WAAnB,IAAkCnK,IAAI,CAACd,KAAvC;AACAylB,2BAAiB,GAAG,IAApB;AACD;;AACD,YAAIpf,WAAW,IAAI7U,IAAI,CAACkJ,UAAL,CAAgByjB,IAAnC,EAAyC;AACvC,cAAI,CAAC3sB,IAAI,CAACwE,aAAL,CAAmB,iBAAnB,EAAsCL,EAAtC,CAAL,EAAgD;AAC9C01B,yBAAa,GAAG5N,aAAa,CAC3B3c,IAD2B,EAE3BtP,IAAI,CAAC6B,KAAL,CAAWi3B,SAAS,GAAG,aAAvB,CAF2B,EAG3BpQ,EAH2B,EAI3B,CAJ2B,CAA7B;AAMD;AACF;;AACD,YAAK1oB,IAAI,CAACkJ,UAAL,CAAgB+xB,cAAhB,IAAkCpmB,WAAnC,IAAmD,CAACA,WAAxD,EAAqE;AACnE,cAAIvF,IAAI,CAACqN,MAAL,IAAe,CAAC3c,IAAI,CAACwE,aAAL,CAAmB,sBAAnB,EAA2CL,EAA3C,CAApB,EAAoE;AAClE,gBAAI,CAACnE,IAAI,CAACqb,UAAL,CAAgB/L,IAAI,CAACirB,MAArB,CAAL,EAAmC;AACjC;AACA;AACA;AACAxB,gCAAkB,GAAG/4B,IAAI,CAAC+4B,kBAA1B;AACAA,gCAAkB,CAAC9uB,IAAnB,GAA0BjK,IAAI,CAACkJ,UAAL,CAAgBqN,cAAhB,GACtBjH,IAAI,CAACirB,MADiB,GAEtB34B,SAFJ;AAGAm3B,gCAAkB,CAAC9yB,SAAnB,GAA+B,KAA/B;AACA8yB,gCAAkB,CAAC71B,UAAnB,GAAgCoM,IAAhC;AACAypB,gCAAkB,CAAC7wB,IAAnB,GAA0BqxB,QAA1B;AACAp1B,gBAAE,CAAC40B,kBAAH,GAAwBA,kBAAxB;;AACA,kBAAI/4B,IAAI,CAACwE,aAAL,CAAmB,sBAAnB,EAA2CL,EAA3C,CAAJ,EAAoD;AAClD;AACD;;AACDnE,kBAAI,CAACqb,UAAL,CAAgB/L,IAAI,CAACirB,MAArB,IAA+Bv6B,IAAI,CAACk7B,UAAL,CAC7BnC,kBAD6B,CAA/B;AAGA/4B,kBAAI,CAACyW,KAAL,CAAWC,IAAX,CAAgBlE,QAAhB,IACExS,IAAI,CAACyW,KAAL,CAAWC,IAAX,CAAgBlE,QAAhB,KAA6BxS,IAAI,CAAC6B,KAAL,CAAWs5B,cAD1C;AAEAlH,+BAAiB,GAAG,IAApB;AACD;;AACD3kB,gBAAI,CAACsM,IAAL,GAAY5b,IAAI,CAACqb,UAAL,CAAgB/L,IAAI,CAACirB,MAArB,CAAZ;AACAjrB,gBAAI,CAACsM,IAAL,CAAU1Y,UAAV,GAAuBoM,IAAvB;AACAA,gBAAI,CAACsM,IAAL,CAAUoY,OAAV,GAAoB,IAApB;AACA1kB,gBAAI,CAACsM,IAAL,CAAUrG,IAAV;AACAvV,gBAAI,CAACwE,aAAL,CAAmB,gBAAnB,EAAqCL,EAArC;AACD,WA5BD,MA4BO,IAAI,CAACmL,IAAI,CAACqN,MAAV,EAAkB;AACvB,gBAAI3c,IAAI,CAACqb,UAAL,CAAgB/L,IAAI,CAACirB,MAArB,CAAJ,EAAkC;AAChCv6B,kBAAI,CAACqb,UAAL,CAAgB/L,IAAI,CAACirB,MAArB,EAA6Br3B,UAA7B,CAAwCK,YAAxC,GAAuD,CAAvD;AACD;;AACD,gBAAIm1B,QAAQ,IAAI14B,IAAI,CAACo7B,OAAL,KAAiB7rB,MAAM,CAACtF,IAAxC,EAA8C;AAC5C,kBAAI,CAACjK,IAAI,CAACwE,aAAL,CAAmB,oBAAnB,EAAyCL,EAAzC,CAAL,EAAmD;AACjDy1B,gCAAgB,GAAGzO,gBAAgB,CACjC1C,EAAE,GAAGzoB,IAAI,CAAC6B,KAAL,CAAWi3B,SAAS,GAAG,aAAvB,CAD4B,EAEjC,CAFiC,CAAnC;AAID;AACF;;AACD94B,gBAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWi3B,SAAS,GAAG,OAAvB,CAArB;;AACA,gBAAIrL,OAAJ,EAAa;AACXztB,kBAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWi3B,SAAS,GAAG,YAAvB,CAArB;AACD;;AACD,gBAAII,QAAJ,EAAc;AACZl5B,kBAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWi3B,SAAS,GAAG,eAAvB,CAArB;AACD;;AACD,gBAAIU,YAAJ,EAAkB;AAChBx5B,kBAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAW23B,YAAY,GAAG,OAA1B,CAArB;AACD;;AACDlqB,gBAAI,CAAC+c,cAAL,GAAsBwN,aAAtB;AACAvqB,gBAAI,CAACqjB,iBAAL,GAAyBiH,gBAAzB,CAvBuB,CAwBvB;;AACA9xB,eAAG,GAAGA,GAAG,KAAKlG,SAAR,GAAoBkG,GAApB,GAA0B6xB,CAAC,GAAGA,CAAC,CAACx1B,EAAD,CAAJ,GAAW,EAA5C;;AACA,gBAAI2D,GAAG,KAAKlG,SAAR,IAAqB,CAAC+3B,CAA1B,EAA6B;AAC3B7xB,iBAAG,GAAG,EAAN;AACA0S,qBAAO,CAACC,IAAR,CACE,qCACElL,MAAM,CAAC1E,IADT,GAEE,qBAHJ;AAKD;;AACDyE,gBAAI,CAAC+Z,cAAL,GAAsB,CAACvhB,GAAG,KAAKlG,SAAR,IAAqBkG,GAAG,KAAK,IAA7B,GACnBA,GADmB,GAEnB,EAFkB,EAGpByhB,QAHoB,EAAtB;;AAIA,gBACEvpB,IAAI,CAAC0R,aAAL,IACA1R,IAAI,CAAC0R,aAAL,CAAmB5J,GAAnB,MAA4BlG,SAD5B,IAEA82B,QAHF,EAIE;AACAppB,kBAAI,CAAC+Z,cAAL,GAAsBrpB,IAAI,CAACkJ,UAAL,CAAgBmyB,gBAAhB,GAAmCvzB,GAAzD;AACD;;AACD9H,gBAAI,CAAComB,GAAL,CAAS8M,IAAT,GACElzB,IAAI,CAAC6B,KAAL,CAAWi3B,SAAS,GAAG,YAAvB,IAAuC94B,IAAI,CAACihB,KAA5C,GACA,KADA,GAEAjhB,IAAI,CAAC6B,KAAL,CAAWi3B,SAAS,GAAG,UAAvB,CAHF;;AAIA,gBAAI,CAAC94B,IAAI,CAACwE,aAAL,CAAmB,YAAnB,EAAiCL,EAAjC,CAAL,EAA2C;AACzCmL,kBAAI,CAACuf,IAAL,GAAYwB,QAAQ,CAAC/gB,IAAD,EAAO,GAAP,CAApB;AACD;;AACD,gBAAI,CAACtP,IAAI,CAACwE,aAAL,CAAmB,YAAnB,EAAiCL,EAAjC,CAAL,EAA2C;AACzC,kBAAImL,IAAI,CAAC7M,SAAL,IAAkB8M,MAAM,CAAC1E,IAAP,KAAgB,MAAtC,EAA8C;AAC5Cse,wBAAQ,CAAC7Z,IAAD,CAAR;AACD,eAFD,MAEO;AACL,oBAAIgjB,eAAe,GAAG,CAAtB;AAAA,oBACEgJ,UAAU,GAAG,IADf;AAEA,oBACEhsB,IAAI,CAAC2D,WAAL,IAAoBjT,IAAI,CAACy6B,QAAL,CAAcC,eAAlC,IACA,CAACprB,IAAI,CAAC6J,cADN,IAEAnZ,IAAI,CAACy6B,QAAL,CAAc/jB,IAAd,CAAmBlR,MAAnB,GAA4B,CAF5B,IAGAP,MAAM,CAAC8L,IAAP,CAAY/Q,IAAI,CAACy6B,QAAL,CAAc/jB,IAAd,CAAmBpH,IAAI,CAACkD,QAAxB,CAAZ,EAA+ChN,MAA/C,GAAwD,CAJ1D,EAME8sB,eAAe,GAAG5F,gBAAgB,CAChCpd,IADgC,EAEhCtP,IAAI,CAACy6B,QAAL,CAAc/jB,IAAd,CAAmBpH,IAAI,CAACkD,QAAxB,CAFgC,EAGhC,IAHgC,CAAlC;;AAMF,oBACE,CAAClD,IAAI,CAACuF,WAAN,IACAvF,IAAI,CAACkD,QAAL,GAAgB,CADhB,IAEAxS,IAAI,CAACy6B,QAAL,CAAcnnB,OAAd,CAAsBhE,IAAI,CAACkD,QAAL,GAAgB,CAAtC,CAFA,IAGAxS,IAAI,CAACy6B,QAAL,CAAcnnB,OAAd,CAAsBhE,IAAI,CAACkD,QAAL,GAAgB,CAAtC,EAAyClD,IAAI,CAAC2D,WAA9C,EACGqa,IALL,EAME;AACA,uBAAK,IAAIrmB,CAAC,GAAGqI,IAAI,CAACkD,QAAL,GAAgB,CAA7B,EAAgCvL,CAAC,IAAI,CAArC,EAAwCA,CAAC,EAAzC,EAA6C;AAC3C,wBAAI,CAACjH,IAAI,CAACy6B,QAAL,CAAcnnB,OAAd,CAAsBrM,CAAtB,CAAL,EAA+B;AAC/B,wBAAI,CAACjH,IAAI,CAACy6B,QAAL,CAAcnnB,OAAd,CAAsBrM,CAAtB,EAAyBqI,IAAI,CAAC2D,WAA9B,EAA2Cqa,IAAhD,EAAsD;;AACtD,wBAAI,CAACttB,IAAI,CAACy6B,QAAL,CAAcnnB,OAAd,CAAsBrM,CAAtB,EAAyBqI,IAAI,CAAC2D,WAA9B,EAA2C8a,MAAhD,EAAwD;AACtDuN,gCAAU,GAAG,KAAb;AACA;AACD;AACF;AACF;;AACD,oBACEA,UAAU,IACV,CAAChsB,IAAI,CAACuF,WADN,IAEA7U,IAAI,CAACy6B,QAAL,CAAcnnB,OAAd,CAAsBhE,IAAI,CAACkD,QAA3B,CAFA,IAGAxS,IAAI,CAACy6B,QAAL,CAAcnnB,OAAd,CAAsBhE,IAAI,CAACkD,QAA3B,EAAqClD,IAAI,CAAC2D,WAA1C,EAAuDqa,IAJzD,EAKE;AACA,sBACEttB,IAAI,CAACmQ,QAAL,CAAc3K,MAAd,GAAuB,CAAvB,IACAxF,IAAI,CAACmQ,QAAL,CAAcb,IAAI,CAACkD,QAAnB,EAA6BlD,IAAI,CAAC2D,WAAlC,EAA+CzN,MAA/C,GAAwD,CAF1D,EAIE8sB,eAAe,GAAG5F,gBAAgB,CAChCpd,IADgC,EAEhCtP,IAAI,CAACy6B,QAAL,CAAcnnB,OAAd,CAAsBhE,IAAI,CAACkD,QAA3B,EAAqClD,IAAI,CAAC2D,WAA1C,CAFgC,EAGhC,KAHgC,CAAlC;AAKH;;AACD,oBAAIqoB,UAAJ,EAAgBjJ,QAAQ,CAAC/iB,IAAD,EAAOgjB,eAAP,CAAR;AACjB;;AAED,kBAAIxB,IAAI,IAAIxhB,IAAI,CAACuf,IAAb,IAAqBvf,IAAI,CAACuf,IAAL,CAAU1sB,MAAV,GAAmBkyB,SAA5C,EAAuD;AACrDr0B,oBAAI,CAACyW,KAAL,CAAWC,IAAX,CAAgBgiB,QAAQ,GAAG,CAAC,CAAJ,GAAQlmB,QAAhC,IAA4ClD,IAAI,CAACuf,IAAL,CAAU1sB,MAAtD;AACA8xB,iCAAiB,GAAG,IAApB;AACD;AACF;AACF;AACF;;AACD,YAAI3J,MAAJ,EAAY;AACVkK,eAAK,GAAGllB,IAAR;AACD;;AACD+oB,gCAAwB,CAAC/oB,IAAD,EAAOolB,gBAAP,EAAyB,WAAzB,CAAxB,CAhX8D,CAiX9D;;AACAmD,iCAAyB,CAACvoB,IAAD,CAAzB;;AACA,YAAItP,IAAI,CAACu7B,eAAT,EAA0B;AACxBlD,kCAAwB,CAAC/oB,IAAD,EAAOqlB,WAAP,EAAoB,MAApB,EAA4B30B,IAAI,CAACw7B,UAAjC,CAAxB;AACD;;AACDx7B,YAAI,CAAComB,GAAL,CAASqV,OAAT;;AAEA,YAAIzC,YAAJ,EAAkB;AAChB0C,0BAAgB,CAACpsB,IAAD,CAAhB;AACD,SA1X6D,CA4X9D;AACA;AACA;AACA;AACA;;;AACA,YAAMgF,SAAS,GACbtU,IAAI,CAACuU,SAAL,CAAejB,OAAf,IAA0BtT,IAAI,CAACuU,SAAL,CAAejB,OAAf,CAAuB9N,MAAvB,GAAgC,CAD5D;;AAGA,YACEqP,WAAW,IACX7U,IAAI,CAACkJ,UAAL,CAAgB+xB,cADhB,IAEAj7B,IAAI,CAACkJ,UAAL,CAAgByyB,iBAFhB,IAGArnB,SAAS,KAAK,KAJhB,EAKE;AACA,cAAMsnB,iBAAiB,GAAG57B,IAAI,CAAC0X,gCAAL,CACxBkhB,aAAa,GAAG,CADQ,CAA1B;AAGA,cAAIiD,SAAS,GACXD,iBAAiB,KAAKh6B,SAAtB,IACA0N,IAAI,CAACuQ,aAAL,GAAqB,CADrB,IAEAvQ,IAAI,CAACuQ,aAAL,GAAqB+b,iBAArB,GAAyC,CAH3C;;AAIA,cAAIC,SAAS,IAAIzG,kBAAkB,CAAC5vB,MAAnB,GAA4B,CAA7C,EAAgD;AAC9Cq2B,qBAAS,GACPzG,kBAAkB,CAACjiB,IAAnB,CACE,UAACoF,KAAD;AAAA,qBACEA,KAAK,CAAC0B,IAAN,KAAe2hB,iBAAf,IACArjB,KAAK,CAAC2B,EAAN,KAAa5K,IAAI,CAACuQ,aAFpB;AAAA,aADF,KAIK,CALP;AAMD,WAfD,CAgBA;;;AACA,cAAIgc,SAAS,IAAI77B,IAAI,CAACw1B,eAAL,CAAqBhwB,MAArB,GAA8B,CAA/C,EAAkD;AAChD,iBAAK,IAAIwB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGhH,IAAI,CAACw1B,eAAL,CAAqBhwB,MAAzC,EAAiDwB,CAAC,EAAlD,EAAsD;AAAA,yDACfhH,IAAI,CAACw1B,eAAL,CAAqBxuB,CAArB,CADe;AAAA,kBAC7C80B,aAD6C;AAAA,kBAC9BC,WAD8B;;AAEpD,kBACEzsB,IAAI,CAACuQ,aAAL,KAAuBkc,WAAW,GAAG,CAArC,IACAH,iBAAiB,KAAKE,aAAa,GAAG,CAFxC,EAGE;AACAD,yBAAS,GAAG,KAAZ;AACA;AACD;AACF;AACF;;AAED,cAAIA,SAAJ,EAAe;AACb,gBAAMG,SAAS,GAAGh8B,IAAI,CAAC6B,KAAL,CAAWo6B,+BAA7B;AACA,gBAAMC,QAAQ,GAAGl8B,IAAI,CAAC6B,KAAL,CAAWs6B,8BAA5B;AAEAn8B,gBAAI,CAAComB,GAAL,CAAS4U,IAAT;AAEAh7B,gBAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqBmR,QAArB;AAEAjS,oBAAQ,CAAC3a,IAAI,CAACvN,CAAN,EAASuN,IAAI,CAACrN,CAAL,GAAS+5B,SAAS,GAAG,CAA9B,EAAiC1sB,IAAI,CAACd,KAAtC,EAA6CwtB,SAA7C,CAAR;AAEAh8B,gBAAI,CAAComB,GAAL,CAASqV,OAAT;AACD;AACF,SAnb6D,CAqb9D;;;AACA,YAAItiB,cAAc,IAAInZ,IAAI,CAACkJ,UAAL,CAAgBkzB,0BAAtC,EAAkE;AAChE,cAAM3O,QAAO,GAAGztB,IAAI,CAAC0tB,MAAL,CAAY2O,eAA5B;AACA,cAAMjS,IAAI,GAAGpqB,IAAI,CAAC6B,KAAL,CAAWy6B,mBAAxB;AACA,cAAMC,KAAK,GAAGx6B,CAAd;AACA,cAAMy6B,IAAI,GAAGltB,IAAI,CAACrN,CAAL,GAASmf,IAAI,CAACO,GAAL,CAAS,OAAOrS,IAAI,CAACnN,MAAL,GAAcioB,IAArB,CAAT,EAAqC,CAArC,CAAtB;;AAEA,cAAMqS,QAAQ,GAAG,SAAXA,QAAW,CAAC1pB,UAAD;AAAA,mBACf0a,QAAO,KACNA,QAAO,CAACpD,GAAR,KAAgB,GAAhB,IAAuBoD,QAAO,CAACpD,GAAR,KAAgB,GADjC,CAAP,IAEAtX,UAAU,IAAI0a,QAAO,CAACiP,WAFtB,IAGA3pB,UAAU,IAAI0a,QAAO,CAACkP,WAJP;AAAA,WAAjB;;AAKA,cAAMC,cAAc,GAAG,SAAjBA,cAAiB,CAAC3pB,WAAD;AAAA,mBACrBA,WAAW,IAAI,CAAf,IACA3K,MAAM,CAAC2K,WAAD,CADN,IAEA3K,MAAM,CAAC2K,WAAD,CAAN,CAAoB4C,MAHC;AAAA,WAAvB;;AAKA,cAAI6mB,WAAJ,EAAiBC,WAAjB;;AACA,cAAME,aAAa,GAAG,SAAhBA,aAAgB,CAACC,KAAD,EAAQzS,GAAR,EAAaC,MAAb,EAAwB;AAC5CtqB,gBAAI,CAAC+8B,uBAAL,CAA6B3zB,IAA7B,CAAkC;AAChCrH,eAAC,EAAE+6B,KAAK,GAAG,CADqB;AAEhC76B,eAAC,EAAEu6B,IAAI,GAAG,CAFsB;AAGhCQ,gBAAE,EAAEF,KAAK,GAAG1S,IAAR,GAAe,CAHa;AAIhC6S,gBAAE,EAAET,IAAI,GAAGpS,IAAP,GAAc,CAJc;AAKhCsS,yBAAW,EAAXA,WALgC;AAMhCC,yBAAW,EAAXA,WANgC;AAOhCtS,iBAAG,EAAHA;AAPgC,aAAlC;;AASA,gBAAI,CAACC,MAAL,EAAa;AACX,kBAAMoH,IAAI,GAAGpiB,IAAI,CAACuf,IAAL,IAAavf,IAAI,CAACuf,IAAL,CAAU0B,KAAvB,IAAgCjhB,IAAI,CAACuf,IAAL,CAAU0B,KAAV,CAAgB,CAAhB,CAA7C;;AACA,kBAAImB,IAAJ,EAAU;AACR,oBAAMwL,UAAU,GAAGtD,gBAAgB,GAAGC,aAAtC;AACA,oBAAMsD,MAAM,GAAGD,UAAU,GAAG,CAAb,GAAiBA,UAAjB,GAA8BxL,IAAI,CAAC3vB,CAAlD;AACA,oBAAMq7B,MAAM,GAAG1L,IAAI,CAAC3vB,CAAL,GAAS2vB,IAAI,CAACljB,KAA7B;AACA,oBAAIsuB,KAAK,GAAG1S,IAAR,IAAgB+S,MAAhB,IAA0BL,KAAK,IAAIM,MAAvC,EAA+C;AAChD;AACF;;AACDjT,+BAAmB,CAAC2S,KAAD,EAAQN,IAAR,EAAcpS,IAAd,EAAoBC,GAApB,EAAyBC,MAAzB,CAAnB;AACD,WApBD,CAjBgE,CAqC7D;;;AAEH,cAAI+S,aAAa,GAAGpnB,gBAAgB,GAAG,CAAvC;AACA,cAAMqnB,eAAe,GAAGt9B,IAAI,CAACqT,MAAL,CAAYC,OAAZ,CAAoB+pB,aAApB,CAAxB;;AACA,cAAIT,cAAc,CAACU,eAAD,CAAlB,EAAqC;AACnC,gBAAMhT,OAAM,GAAGmS,QAAQ,CAACa,eAAD,CAAvB;;AACAZ,uBAAW,GAAGW,aAAd;AACAV,uBAAW,GAAGU,aAAd;;AACA,mBAAO,EAAEA,aAAF,IAAmB,CAA1B,EAA6B;AAC3B,kBAAIT,cAAc,CAAC58B,IAAI,CAACqT,MAAL,CAAYC,OAAZ,CAAoB+pB,aAApB,CAAD,CAAlB,EACEX,WAAW,GAAGW,aAAd,CADF,KAEK;AACN;;AACDR,yBAAa,CAACN,KAAD,EAAQ,GAAR,EAAajS,OAAb,CAAb;AACD;;AAED+S,uBAAa,GAAGpnB,gBAAgB,GAAG,CAAnC;AACA,cAAMsnB,eAAe,GAAGv9B,IAAI,CAACqT,MAAL,CAAYC,OAAZ,CAAoB+pB,aAApB,CAAxB;;AACA,cAAIT,cAAc,CAACW,eAAD,CAAlB,EAAqC;AACnC,gBAAMjT,QAAM,GAAGmS,QAAQ,CAACc,eAAD,CAAvB;;AACAb,uBAAW,GAAGW,aAAd;AACAV,uBAAW,GAAGU,aAAd;;AACA,mBAAO,EAAEA,aAAF,GAAkBr9B,IAAI,CAACqT,MAAL,CAAYC,OAAZ,CAAoB9N,MAA7C,EAAqD;AACnD,kBAAIo3B,cAAc,CAAC58B,IAAI,CAACqT,MAAL,CAAYC,OAAZ,CAAoB+pB,aAApB,CAAD,CAAlB,EACEV,WAAW,GAAGU,aAAd,CADF,KAEK;AACN;;AACD,gBAAMG,UAAU,GAAGz7B,CAAC,GAAGuN,IAAI,CAACd,KAAT,GAAiB4b,IAApC;AACAyS,yBAAa,CAACW,UAAD,EAAa,GAAb,EAAkBlT,QAAlB,CAAb;AACD;AACF,SAzf6D,CA0f9D;AAEA;;;AACA,YACEzV,WAAW,IACX7U,IAAI,CAACkJ,UAAL,CAAgBu0B,uBADhB,IAEAz9B,IAAI,CAACw1B,eAAL,CAAqBhwB,MAArB,GAA8B,CAHhC,EAIE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAMioB,SAAO,GAAGztB,IAAI,CAAC0tB,MAAL,CAAY2O,eAA5B;AACA,cAAMjS,KAAI,GAAGpqB,IAAI,CAAC6B,KAAL,CAAWy6B,mBAAxB;AACA,cAAMQ,KAAK,GAAGxtB,IAAI,CAACvN,CAAL,GAASuN,IAAI,CAACd,KAAd,GAAsB4b,KAAtB,GAA6B,CAA3C;AACA,cAAMsT,KAAK,GAAGz7B,CAAd;AACA,cAAM07B,aAAa,GAAG,EAAtB;AACA,cAAMC,gBAAgB,GAAG,EAAzB;AACA59B,cAAI,CAACw1B,eAAL,CAAqB/vB,OAArB,CAA6B,UAACmO,EAAD,EAAQ;AACnC+pB,yBAAa,CAAC/pB,EAAE,CAAC,CAAD,CAAF,GAAQ,CAAT,CAAb,GAA2BA,EAA3B;AACAgqB,4BAAgB,CAAChqB,EAAE,CAAC,CAAD,CAAF,GAAQ,CAAT,CAAhB,GAA8BA,EAA9B;AACD,WAHD;;AAKA,cAAMpB,SAAQ,GAAGlD,IAAI,CAACkD,QAAL,GAAgB8iB,qBAAjC;;AACA,cAAMmH,SAAQ,GAAG,SAAXA,SAAW;AAAA,mBACfhP,SAAO,KACNA,SAAO,CAACpD,GAAR,KAAgB,GAAhB,IAAuBoD,SAAO,CAACpD,GAAR,KAAgB,GADjC,CAAP,IAEA7X,SAAQ,IAAIib,SAAO,CAACiP,WAAR,GAAsB,CAFlC,IAGAlqB,SAAQ,IAAIib,SAAO,CAACkP,WAAR,GAAsB,CAJnB;AAAA,WAAjB;;AAMA,cAAID,WAAJ,EAAiBC,YAAjB;;AACA,cAAME,cAAa,GAAG,SAAhBA,cAAgB,CAACL,IAAD,EAAOnS,GAAP,EAAYC,MAAZ,EAAuB;AAC3CtqB,gBAAI,CAAC+8B,uBAAL,CAA6B3zB,IAA7B,CAAkC;AAChCrH,eAAC,EAAE+6B,KAAK,GAAG,CADqB;AAEhC76B,eAAC,EAAEu6B,IAAI,GAAG,CAFsB;AAGhCQ,gBAAE,EAAEF,KAAK,GAAG1S,KAAR,GAAe,CAHa;AAIhC6S,gBAAE,EAAET,IAAI,GAAGpS,KAAP,GAAc,CAJc;AAKhCsS,yBAAW,EAAXA,WALgC;AAMhCC,yBAAW,EAAXA,YANgC;AAOhCtS,iBAAG,EAAHA;AAPgC,aAAlC;AASAF,+BAAmB,CAAC2S,KAAD,EAAQN,IAAR,EAAcpS,KAAd,EAAoBC,GAApB,EAAyBC,MAAzB,CAAnB;AACD,WAXD,CA5BA,CAuCG;;;AAEH,cAAIuT,OAAO,GAAGF,aAAa,CAACnrB,SAAD,CAA3B;;AACA,cAAIqrB,OAAJ,EAAa;AACX,gBAAMC,UAAU,GAAGJ,KAAK,GAAGpuB,IAAI,CAACnN,MAAb,GAAsBioB,KAAzC;AADW,2BAEkByT,OAFlB;;AAAA;;AAEVnB,uBAFU;AAEGC,wBAFH;;AAGXE,0BAAa,CAACiB,UAAD,EAAa,GAAb,EAAkBrB,SAAQ,EAA1B,CAAb;AACD;;AACDoB,iBAAO,GAAGD,gBAAgB,CAACprB,SAAD,CAA1B;;AACA,cAAIqrB,OAAJ,EAAa;AACX,gBAAMC,WAAU,GAAGJ,KAAnB;AADW,4BAEkBG,OAFlB;;AAAA;;AAEVnB,uBAFU;AAEGC,wBAFH;;AAGXE,0BAAa,CAACiB,WAAD,EAAa,GAAb,EAAkBrB,SAAQ,EAA1B,CAAb;AACD;AACF,SAtjB6D,CAujB9D;;;AAEA16B,SAAC,IAAIuN,IAAI,CAACd,KAAL,IAAcimB,EAAE,GAAG,CAAH,GAAOz0B,IAAI,CAAC6B,KAAL,CAAW2c,eAAlC,CAAL;AACA,eAAOlP,IAAI,CAACd,KAAZ;AACD,OA3jBD,CADkD,CA4jB/C;AACJ;;AACD,aAASktB,gBAAT,CAA0BpsB,IAA1B,EAAgCnL,EAAhC,EAAoC;AAClC,UAAI45B,IAAI,GAAGzuB,IAAI,CAACvN,CAAL,GAASuN,IAAI,CAACd,KAAd,GAAsBxO,IAAI,CAAC6B,KAAL,CAAWwsB,iBAAjC,GAAqD,CAAhE;AACA,UAAI2P,IAAI,GAAG1uB,IAAI,CAACrN,CAAL,GAASqN,IAAI,CAACnN,MAAd,GAAuBnC,IAAI,CAAC6B,KAAL,CAAWssB,kBAAlC,GAAuD,CAAlE;;AACA,UAAInuB,IAAI,CAACwE,aAAL,CAAmB,0BAAnB,EAA+CL,EAA/C,CAAJ,EAAwD;AACtD;AACD;;AACDnE,UAAI,CAAComB,GAAL,CAAS4U,IAAT;AACAh7B,UAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAWo8B,uBAAlC;AACAj+B,UAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWq8B,2BAAhC;;AACA,UAAI5uB,IAAI,CAAC8pB,YAAT,EAAuB;AACrBp5B,YAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWs8B,iCAAhC;AACD,OAFD,MAEO,IAAI7uB,IAAI,CAACme,OAAL,IAAgBztB,IAAI,CAAC0tB,MAAL,CAAY0Q,cAAhC,EAAgD;AACrDp+B,YAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWw8B,gCAAhC;AACD;;AACD5P,gBAAU,CACRsP,IADQ,EAERC,IAFQ,EAGRh+B,IAAI,CAAC6B,KAAL,CAAWwsB,iBAHH,EAIRruB,IAAI,CAAC6B,KAAL,CAAWssB,kBAJH,EAKRnuB,IAAI,CAAC6B,KAAL,CAAWy8B,wBALH,CAAV;AAOAt+B,UAAI,CAAComB,GAAL,CAAS0C,MAAT;AACA9oB,UAAI,CAAComB,GAAL,CAAS2D,IAAT;AACAmE,2BAAqB,CAAC6P,IAAD,EAAOC,IAAP,CAArB;AACAh+B,UAAI,CAAComB,GAAL,CAASpI,IAAT;AACAhe,UAAI,CAACwE,aAAL,CAAmB,yBAAnB,EAA8CL,EAA9C;AACAnE,UAAI,CAAComB,GAAL,CAASqV,OAAT;AACD;;AACD,aAAS8C,aAAT,CAAuBhK,OAAvB,EAAgC/hB,QAAhC,EAA0ComB,aAA1C,EAAyD;AACvD,UAAI54B,IAAI,CAACkJ,UAAL,CAAgBs1B,cAApB,EAAoC;AAClCz8B,SAAC,GAAG,CAAJ,CADkC,CAGlC;AACA;AACA;AACA;;AACA,YAAI08B,iBAAJ;AACA,YAAIz+B,IAAI,CAACmQ,QAAL,IAAiBqC,QAAQ,GAAGxS,IAAI,CAACmQ,QAAL,CAAc3K,MAA9C,EACEi5B,iBAAiB,GACfz+B,IAAI,CAAC0X,gCAAL,CAAsClF,QAAtC,IAAkD,CADpD,CADF,KAIEisB,iBAAiB,GAAGz+B,IAAI,CAAC4f,YAAL,GAChB5f,IAAI,CAAC4f,YAAL,CAAkBpa,MAAlB,GAA2B,CADX,GAEhBozB,aAAa,GAAG,CAFpB;AAIF,YAAI8F,cAAc,GAChB1+B,IAAI,CAAC2+B,gBAAL,MAA2B3+B,IAAI,CAAC4+B,oBAAL,EAA3B,GACIH,iBADJ,GAEIjsB,QAAQ,GAAG,CAHjB;AAIAksB,sBAAc,IAAIpJ,qBAAlB;AAEA,YAAMpB,cAAa,GAAG;AAAEA,uBAAa,EAAEwK;AAAjB,SAAtB;AACA,YAAMG,iBAAiB,GAAG;AACxB50B,cAAI,EAAE,eADkB;AAExBuE,eAAK,EAAExO,IAAI,CAACyW,KAAL,CAAWnD,OAAX,CAAmB,CAAC,CAApB,KAA0BtT,IAAI,CAAC6B,KAAL,CAAW+b,kBAFpB;AAGxB/b,eAAK,EAAE,eAHiB;AAIxBgJ,cAAI,EAAE,QAJkB;AAKxB3C,cAAI,EAAEw2B,cALkB;AAMxBh5B,eAAK,EAAE,CAAC;AANgB,SAA1B;AAQA0uB,eAAO,GAAGp0B,IAAI,CAACysB,YAAL,CAAkBja,QAAlB,CAAV;AACAmmB,gBAAQ,CAACzE,cAAD,EAAgB0E,aAAhB,EAA+BpmB,QAA/B,CAAR,CACEqsB,iBADF,EAEE,CAAC,CAFH,EAGE,CAAC,CAHH;;AAMA,YACEtJ,0BAA0B,CAAC,CAAD,CAA1B,IACAmJ,cAAc,IAAInJ,0BAA0B,CAAC,CAAD,CAA1B,CAA8Btb,IAFlD,EAGE;AAAA,sCACiBsb,0BAA0B,CAACuJ,KAA3B,EADjB;AAAA,cACQrJ,IADR,yBACQA,IADR;;AAEAH,+BAAqB,IAAIG,IAAzB;AACD;AACF;AACF;;AACD,aAASsJ,WAAT,GAAuB;AACrB,UAAIrpB,CAAJ;AAAA,UACEspB,CAAC,GAAG12B,MAAM,CAAC9C,MADb;AAAA,UAEEwB,CAFF;AAAA,UAGEi4B,CAHF;AAAA,UAIEC,gBAJF;AAAA,UAKE3vB,MALF;AAAA,UAME4vB,oBANF;;AAOA,eAASC,qBAAT,CAA+BC,KAA/B,EAAsCvsB,GAAtC,EAA2C;AACzCA,WAAG,GAAGsO,IAAI,CAACQ,GAAL,CAAS9O,GAAT,EAAcksB,CAAd,CAAN;;AACA,aAAKC,CAAC,GAAGI,KAAT,EAAgBJ,CAAC,GAAGnsB,GAApB,EAAyBmsB,CAAC,IAAI,CAA9B,EAAiC;AAC/Bj4B,WAAC,GAAGhH,IAAI,CAACqT,MAAL,CAAYC,OAAZ,CAAoB2rB,CAApB,CAAJ;AACA1vB,gBAAM,GAAGjH,MAAM,CAACtB,CAAD,CAAf;;AACA,cAAI,CAACuI,MAAM,CAACsG,MAAR,IAAkB,CAACkgB,wBAAwB,CAACkJ,CAAD,CAA/C,EAAoD;AAClDvpB,aAAC,GAAG;AACFzR,mBAAK,EAAEsL,MAAM,CAACtL,KADZ;AAEFgG,kBAAI,EAAEsF,MAAM,CAACtF,IAFX;AAGFuE,mBAAK,EAAEe,MAAM,CAACf,KAAP,IAAgBxO,IAAI,CAAC6B,KAAL,CAAWmV,SAHhC;AAIFnV,mBAAK,EAAE,kBAJL;AAKFgJ,kBAAI,EAAE,QALJ;AAMFnF,mBAAK,EAAEu5B,CANL;AAOF5nB,mBAAK,EAAErQ;AAPL,aAAJ;AASAk4B,4BAAgB,GAAG;AACjBA,8BAAgB,EAAE3vB,MAAM,CAACtL,KAAP,IAAgBsL,MAAM,CAACtF;AADxB,aAAnB;AAGAlI,aAAC,IAAI42B,QAAQ,CAACuG,gBAAD,EAAmB,CAAC,CAApB,EAAuB,CAAC,CAAxB,CAAR,CAAmCxpB,CAAnC,EAAsC1O,CAAtC,EAAyCi4B,CAAzC,CAAL;;AACA,gBAAIl9B,CAAC,GAAG/B,IAAI,CAACwO,KAAL,GAAaxO,IAAI,CAACsC,SAAL,CAAeC,UAApC,EAAgD;AAC9C;AACD;AACF;AACF;AACF;;AACDsyB,gBAAU,CAACpvB,OAAX,CAAmB,UAAU65B,KAAV,EAAiBC,OAAjB,EAA0B;AAC3Ct9B,SAAC,GAAGq9B,KAAK,CAAC,CAAD,CAAT;AACAroB,kBAAU,GAAGqoB,KAAK,CAAC,CAAD,CAAlB;;AACA,YAAIC,OAAO,KAAKv/B,IAAI,CAAC62B,SAArB,EAAgC;AAC9B72B,cAAI,CAAComB,GAAL,CAAS4U,IAAT;AACAvM,oBAAU,CACR,CADQ,EAERzuB,IAAI,CAACqvB,kBAFG,EAGRrvB,IAAI,CAACwO,KAHG,EAIRxO,IAAI,CAACmC,MAAL,GAAcnC,IAAI,CAACqvB,kBAJX,EAKR,CALQ,CAAV;AAOArvB,cAAI,CAAComB,GAAL,CAASpI,IAAT;AACD;;AACDugB,qBAAa,CAACe,KAAK,CAAC,CAAD,CAAN,EAAWA,KAAK,CAAC,CAAD,CAAhB,EAAqBA,KAAK,CAAC,CAAD,CAA1B,CAAb;AACD,OAfD;AAgBAt/B,UAAI,CAAComB,GAAL,CAASqV,OAAT;;AACA,UAAIz7B,IAAI,CAACkJ,UAAL,CAAgBs2B,iBAApB,EAAuC;AACrCz9B,SAAC,GACC,CAAC/B,IAAI,CAACsC,SAAL,CAAeC,UAAhB,GACAvC,IAAI,CAACy/B,eADL,GAEAz/B,IAAI,CAAC6B,KAAL,CAAW69B,2BAHb;;AAIA,YAAI1/B,IAAI,CAACkJ,UAAL,CAAgBs1B,cAApB,EAAoC;AAClCz8B,WAAC,IAAI6b,kBAAL;AACD;;AACD3b,SAAC,GAAG,CAAJ,CARqC,CASrC;;AACAgV,kBAAU,GAAGjX,IAAI,CAAC2d,yBAAL,EAAb;AACAyhB,6BAAqB,CAACp/B,IAAI,CAAC2/B,eAAN,EAAuBX,CAAvB,CAArB;AACAG,4BAAoB,GAAGp9B,CAAvB;AACAA,SAAC,GAAG/B,IAAI,CAAC6B,KAAL,CAAW69B,2BAAf;;AACA,YAAI1/B,IAAI,CAACkJ,UAAL,CAAgBs1B,cAApB,EAAoC;AAClCz8B,WAAC,IAAI6b,kBAAL;AACD;;AACDwhB,6BAAqB,CAAC,CAAD,EAAIp/B,IAAI,CAAC0zB,YAAT,CAArB,CAjBqC,CAkBrC;;AACA3xB,SAAC,GAAGo9B,oBAAJ;;AACA,YAAIp9B,CAAC,GAAGwb,CAAR,EAAW;AACTvO,WAAC,GAAG;AACF/E,gBAAI,EAAE,EADJ;AAEFuE,iBAAK,EAAExO,IAAI,CAAC6B,KAAL,CAAWic,cAFhB;AAGFjc,iBAAK,EAAE,qBAHL;AAIF+9B,8BAAkB,EAAE,IAJlB;AAKFlrB,iCAAqB,EAAE,IALrB;AAMF7J,gBAAI,EAAE,QANJ;AAOFnF,iBAAK,EAAE4C,MAAM,CAAC9C;AAPZ,WAAJ;AASAmzB,kBAAQ,CAAC;AAAEkH,kBAAM,EAAE;AAAV,WAAD,EAAiB,CAAC,CAAlB,EAAqB,CAAC,CAAtB,CAAR,CAAiC7wB,CAAjC,EAAoC,CAAC,CAArC,EAAwC,CAAC,CAAzC;AACD,SA/BoC,CAgCrC;;;AACA,YAAIhP,IAAI,CAACkJ,UAAL,CAAgBs1B,cAApB,EAAoC;AAClClK,oBAAU,GAAG;AAAEA,sBAAU,EAAE;AAAd,WAAb;AACAvyB,WAAC,GAAG,CAAJ;AACAiN,WAAC,GAAG;AACF/E,gBAAI,EAAE,YADJ;AAEFuE,iBAAK,EAAExO,IAAI,CAAC6B,KAAL,CAAW+b,kBAFhB;AAGF/b,iBAAK,EAAE,YAHL;AAIFgJ,gBAAI,EAAE,QAJJ;AAKFnF,iBAAK,EAAE,CAAC;AALN,WAAJ;AAOAizB,kBAAQ,CAACrE,UAAD,EAAa,CAAC,CAAd,EAAiB,CAAC,CAAlB,CAAR,CAA6BtlB,CAA7B,EAAgC,CAAC,CAAjC,EAAoC,CAAC,CAArC;AACD;AACF;AACF;;AACD,aAAS8wB,OAAT,CAAiBlH,aAAjB,EAAgCpmB,QAAhC,EAA0C;AACxC,UAAIiH,WAAJ;AAAA,UACEsmB,UADF;AAAA,UAEEC,iBAFF;AAAA,UAGE/pB,gBAHF;AAAA,UAIE+oB,CAAC,GAAG12B,MAAM,CAAC9C,MAJb;;AAKA,UAAIvD,CAAC,GAAGgV,UAAU,GAAG,CAAjB,GAAqBnF,CAAzB,EAA4B;AAC1B,eAAO,KAAP;AACD;;AACDyiB,aAAO,GAAGpkB,QAAQ,CAACyoB,aAAD,CAAlB;AACAxE,aAAO,GAAGp0B,IAAI,CAACysB,YAAL,CAAkBmM,aAAlB,CAAV;AACAoH,uBAAiB,GACf,CAAChgC,IAAI,CAACyW,KAAL,CAAWC,IAAX,CAAgBkiB,aAAhB,KAAkC54B,IAAI,CAAC6B,KAAL,CAAWoV,UAA9C,IAA4DjX,IAAI,CAACihB,KADnE;AAEA8e,gBAAU,GAAG,CAAC3L,OAAO,GAAGp0B,IAAI,CAACyW,KAAL,CAAWwpB,KAAX,CAAiBrH,aAAjB,CAAH,GAAqC,CAA7C,IAAkD54B,IAAI,CAACihB,KAApE;AACAoT,eAAS,GAAG2L,iBAAiB,GAAGD,UAAhC;;AACA,UAAI99B,CAAC,GAAG,CAACoyB,SAAT,EAAoB;AAClB,eAAO,KAAP;AACD;;AACD,UAAIr0B,IAAI,CAACkJ,UAAL,CAAgBs1B,cAApB,EAAoC;AAClCz8B,SAAC,IAAI6b,kBAAL;AACD;;AACD3G,gBAAU,GAAGod,SAAb,CArBwC,CAsBxC;;AACA,WACEpe,gBAAgB,GAAGjW,IAAI,CAAC2/B,eAD1B,EAEE1pB,gBAAgB,GAAG+oB,CAFrB,EAGE/oB,gBAAgB,IAAI,CAHtB,EAIE;AACA,YAAI,CAAC8f,wBAAwB,CAAC9f,gBAAD,CAA7B,EAAiD;AAC/CwD,qBAAW,GAAGzZ,IAAI,CAACqT,MAAL,CAAYC,OAAZ,CAAoB2C,gBAApB,CAAd;AACAlU,WAAC,IAAI42B,QAAQ,CAACpE,OAAD,EAAUqE,aAAV,EAAyBpmB,QAAzB,CAAR,CACHlK,MAAM,CAACmR,WAAD,CADH,EAEHA,WAFG,EAGHxD,gBAHG,CAAL;AAKD;;AACD,YAAIlU,CAAC,GAAG/B,IAAI,CAACwO,KAAb,EAAoB;AAClBxO,cAAI,CAACkgC,gBAAL,GAAwBjqB,gBAAxB;AACAjW,cAAI,CAACmgC,gBAAL,GAAwBp+B,CAAxB;AACA;AACD;AACF,OAzCuC,CA0CxC;;;AACAA,OAAC,GAAG,CAAJ;;AACA,UAAI/B,IAAI,CAACkJ,UAAL,CAAgBs1B,cAApB,EAAoC;AAClCz8B,SAAC,IAAI6b,kBAAL;AACD;;AACD,WACE3H,gBAAgB,GAAG,CADrB,EAEEA,gBAAgB,GAAGjW,IAAI,CAAC0zB,YAF1B,EAGEzd,gBAAgB,IAAI,CAHtB,EAIE;AACA,YAAI,CAAC8f,wBAAwB,CAAC9f,gBAAD,CAA7B,EAAiD;AAC/CwD,qBAAW,GAAGzZ,IAAI,CAACqT,MAAL,CAAYC,OAAZ,CAAoB2C,gBAApB,CAAd;AACAlU,WAAC,IAAI42B,QAAQ,CAACpE,OAAD,EAAUqE,aAAV,EAAyBpmB,QAAzB,CAAR,CACHlK,MAAM,CAACmR,WAAD,CADH,EAEHA,WAFG,EAGHxD,gBAHG,CAAL;AAKD;;AACD,YAAIlU,CAAC,GAAG/B,IAAI,CAACwO,KAAb,EAAoB;AAClB;AACD;AACF;;AACDxO,UAAI,CAACovB,qBAAL,GAA6BrtB,CAA7B,CAhEwC,CAiExC;;AACAkV,gBAAU,GAAGod,SAAb;AACAtyB,OAAC,GACC,CAAC/B,IAAI,CAACsC,SAAL,CAAeC,UAAhB,GACAvC,IAAI,CAACy/B,eADL,GAEAz/B,IAAI,CAAC6B,KAAL,CAAW2c,eAHb,CAnEwC,CAuExC;;AACA2V,cAAQ,GAAGn0B,IAAI,CAACqb,UAAL,CAAgBud,aAAhB,CAAX;;AACA,UAAIA,aAAa,KAAKzoB,QAAQ,CAAC3K,MAA3B,IAAqC4uB,OAAzC,EAAkD;AAChDD,gBAAQ,CAACH,OAAT,GAAmB,IAAnB;AACAG,gBAAQ,CAACjxB,UAAT,GAAsB;AACpBsY,mBAAS,EAAEvZ,CAAC,GAAG+9B,iBAAJ,GAAwBhgC,IAAI,CAAC+c,eADpB;AAEpBxB,oBAAU,EAAEqC,kBAAkB,GAAG,CAArB,GAAyB5d,IAAI,CAAC6c,gBAFtB;AAGpBtZ,sBAAY,EAAEw8B,UAHM;AAIpBvzB,qBAAW,EACTxM,IAAI,CAACwO,KAAL,GAAaoP,kBAAb,GAAkC5d,IAAI,CAAC6B,KAAL,CAAWic,cAA7C,GAA8D,CAL5C;AAMpBoB,sBAAY,EAAElf,IAAI,CAACmB,IAAL,CAAU+B,UANJ;AAOpBA,oBAAU,EAAElD,IAAI,CAACmB,IAAL,CAAU+B,UAPF;AAQpBrB,eAAK,EAAE7B,IAAI,CAAC6B,KARQ;AASpBya,kBAAQ,EAAE,sBATU;AAUpB9Z,mBAAS,EAAExC,IAAI,CAACsC,SAAL,CAAeE,SAVN;AAWpBD,oBAAU,EAAEvC,IAAI,CAACsC,SAAL,CAAeC,UAXP;AAYpBiQ,kBAAQ,EAAEomB,aAZU;AAapB/Z,gCAAsB,EAAEA,sBAbJ;AAcpBC,4BAAkB,EAAEA;AAdA,SAAtB;;AAgBA,YAAI9e,IAAI,CAACmB,IAAL,CAAU+B,UAAd,EAA0B;AAAA,sCAIpBlD,IAAI,CAACmB,IAAL,CAAU+B,UAJU;AAAA,cAEtB2b,uBAFsB,yBAEtBA,sBAFsB;AAAA,cAGtBC,mBAHsB,yBAGtBA,kBAHsB;AAKxBqV,kBAAQ,CAACjxB,UAAT,CAAoB2b,sBAApB,IACEA,uBAAsB,IAAI,CAD5B;AAEAsV,kBAAQ,CAACjxB,UAAT,CAAoB4b,kBAApB,IAA0CA,mBAAkB,IAAI,CAAhE;AACD;;AACD9e,YAAI,CAACs3B,YAAL,CAAkBC,OAAlB,CAA0B;AACxB/kB,kBAAQ,EAAEomB,aADc;AAExB3lB,qBAAW,EAAE,CAFW;AAGxBhR,WAAC,EAAEkyB,QAAQ,CAACjxB,UAAT,CAAoBsY,SAHC;AAIxBzZ,WAAC,EAAEoyB,QAAQ,CAACjxB,UAAT,CAAoBqY,UAJC;AAKxBpZ,gBAAM,EAAEgyB,QAAQ,CAAChyB,MALO;AAMxBqM,eAAK,EAAE2lB,QAAQ,CAAC3lB,KANQ;AAOxB3M,eAAK,EAAE,WAPiB;AAQxBgJ,cAAI,EAAEspB,QAAQ,CAACjxB,UAAT,CAAoBoZ;AARF,SAA1B;AAUA6X,gBAAQ,CAAC5e,IAAT;AACD,OAtCD,MAsCO,IAAI4e,QAAJ,EAAc;AACnBA,gBAAQ,CAACjxB,UAAT,CAAoBK,YAApB,GAAmC,CAAnC;AACA,eAAOvD,IAAI,CAACyW,KAAL,CAAWwpB,KAAX,CAAiBrH,aAAjB,CAAP;AACD;;AACD/D,gBAAU,CAACzrB,IAAX,CAAgB,CAACmrB,OAAD,EAAUqE,aAAV,EAAyBpmB,QAAzB,EAAmCvQ,CAAnC,EAAsCoyB,SAAtC,CAAhB;AACAr0B,UAAI,CAAC41B,iBAAL,CAAuBgD,aAAvB,IAAwCvE,SAAxC;AACApyB,OAAC,IAAIgV,UAAU,IAAIwd,EAAE,GAAG,CAAH,GAAOz0B,IAAI,CAAC6B,KAAL,CAAW2c,eAAxB,CAAf;AACA,aAAO,IAAP;AACD;;AACD,aAAS4hB,QAAT,GAAoB;AAClBpgC,UAAI,CAAC85B,WAAL,GAAmB,EAAnB;AACAxxB,YAAM,GAAGtI,IAAI,CAACkU,SAAL,EAAT;AACAlU,UAAI,CAACs3B,YAAL,GAAoB,EAApB;AACAt3B,UAAI,CAACqgC,aAAL,GAAqB,EAArB;AACArgC,UAAI,CAAC+8B,uBAAL,GAA+B,EAA/B;AACA/8B,UAAI,CAAC+c,eAAL,GAAuB/c,IAAI,CAACyb,WAAL,GAAmBzb,IAAI,CAACkD,UAAL,CAAgBsY,SAAnC,GAA+C,GAAtE;AACAxb,UAAI,CAAC6c,gBAAL,GAAwB7c,IAAI,CAACyb,WAAL,GACpBzb,IAAI,CAACkD,UAAL,CAAgBqY,UADI,GAEpB,CAAC,GAFL;AAGAzJ,OAAC,GAAG9R,IAAI,CAACmC,MAAT;AACAob,OAAC,GAAGvd,IAAI,CAACwO,KAAT,CAXkB,CAalB;;AACA,UAAM8xB,mBAAmB,GAAG/K,0BAA0B,CAAC,CAAD,CAAtD;;AACA,UAAI+K,mBAAmB,IAAIA,mBAAmB,CAACrmB,IAApB,KAA6B,CAAxD,EAA2D;AACzDqb,6BAAqB,GAAGgL,mBAAmB,CAAC7K,IAA5C;AACAF,kCAA0B,CAACuJ,KAA3B;AACD;AACF;;AACD,aAASyB,cAAT,GAA0B;AACxB9R,gBAAU,CAAC,CAAD,EAAI,CAAJ,EAAOlR,CAAP,EAAUzL,CAAV,EAAa,CAAb,CAAV;AACA9R,UAAI,CAAComB,GAAL,CAASpI,IAAT;AACAhe,UAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAW2+B,mBAAhC;AACAvW,cAAQ,CAAC,CAAD,EAAI,CAAJ,EAAO1M,CAAP,EAAUzL,CAAV,CAAR;AACD;;AACD,aAAS2uB,aAAT,GAAyB;AACvBzgC,UAAI,CAAComB,GAAL,CAASsa,SAAT,CAAmB5hB,kBAAnB,EAAuCD,sBAAvC;AACD;;AACD,aAAS8hB,aAAT,GAAyB;AACvB,UAAMC,EAAE,GAAG9hB,kBAAX;AACA,UAAM+hB,EAAE,GAAGhiB,sBAAX;AACA,UAAMiiB,kBAAkB,GAAGrN,qBAAqB,EAAhD;AACA,UAAMsN,gBAAgB,GACpB9L,mBAAmB,CAAChzB,CAApB,GAAwBgzB,mBAAmB,CAACnjB,CAA5C,GAAgD4L,sBADlD;AAEA,UAAMsjB,SAAS,GAAGhhC,IAAI,CAACkJ,UAAL,CAAgB+3B,4BAAhB,KAAiD,MAAnE;AACA,UAAMC,QAAQ,GAAGlhC,IAAI,CAACkJ,UAAL,CAAgBi4B,yBAAhB,KAA8C,KAA/D;AAEA;;AACA,UAAM/a,GAAG,GAAGpmB,IAAI,CAAComB,GAAjB;AACAA,SAAG,CAAC4U,IAAJ;AACA5U,SAAG,CAAC2E,SAAJ,GAAgB/qB,IAAI,CAAC6B,KAAL,CAAWu/B,2BAA3B;AACAnX,cAAQ,CAAC,CAAD,EAAI,CAAC4W,EAAL,EAAStjB,CAAT,EAAYsjB,EAAZ,CAAR;AACA5W,cAAQ,CAAC,CAAC2W,EAAF,EAAM,CAACC,EAAP,EAAWD,EAAX,EAAe9uB,CAAf,CAAR;AACAsU,SAAG,CAACqV,OAAJ,GAfuB,CAiBvB;;AACA;;AACA,UAAM/iB,cAAc,GAAG,EAAvB;;AACA,WAAK,IAAItI,GAAG,GAAG,CAAf,EAAkBA,GAAG,GAAGpQ,IAAI,CAAC0Y,cAAL,CAAoBlT,MAA5C,EAAoD4K,GAAG,EAAvD,EAA2D;AACzD,YAAMiI,MAAM,GAAGrY,IAAI,CAAC0Y,cAAL,CAAoBtI,GAApB,CAAf;;AACA,aAAK,IAAIkI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,MAAM,CAAC7S,MAA3B,EAAmC8S,CAAC,EAApC,EAAwC;AACtCI,wBAAc,CAACtP,IAAf,CAAoBnE,MAAM,CAACyO,MAAP,CAAc;AAAEtD,eAAG,EAAHA;AAAF,WAAd,EAAuBiI,MAAM,CAACC,CAAD,CAA7B,CAApB;AACD;AACF;;AACD,UAAII,cAAc,CAAClT,MAAf,GAAwB,CAA5B,EAA+B;AAAA;AAC7B,cAAM6uB,SAAS,GAAGr0B,IAAI,CAAC6B,KAAL,CAAWw/B,oBAA7B;AACA,cAAMC,gBAAgB,GAAGjN,SAAS,GAAG,GAArC;AACA,cAAMkN,mBAAmB,GAAG,CAAClN,SAAS,GAAGiN,gBAAb,IAAiC,GAA7D;;AAH6B,qCAKpBt6B,CALoB;AAM3B,gBAAMuR,KAAK,GAAGG,cAAc,CAAC1R,CAAD,CAA5B;AAN2B,gBAOnBoJ,GAPmB,GAOAmI,KAPA,CAOnBnI,GAPmB;AAAA,gBAOdgI,SAPc,GAOAG,KAPA,CAOdH,SAPc;AAS3B,gBAAMokB,IAAI,GAAG,CAACqE,EAAD,GAAMzwB,GAAG,GAAGikB,SAAzB;AACA,gBAAMmN,OAAO,GAAGhF,IAAI,GAAGnI,SAAS,GAAG,GAAnC;AACA,gBAAMoN,OAAO,GAAGjF,IAAI,GAAGnI,SAAP,GAAmBkN,mBAAnC;AACA,gBAAMG,SAAS,GACb9jB,kBAAkB,GAAG0jB,gBAArB,GAAwCC,mBAD1C;;AAGA,gBAAMI,kBAAkB,GAAG,SAArBA,kBAAqB,CAAC5/B,CAAD;AAAA,qBACzBioB,eAAe,CACbjoB,CADa,EAEby6B,IAAI,GAAG+E,mBAFM,EAGbD,gBAHa,EAIb/oB,KAAK,CAACH,SAJO,CADU;AAAA,aAA3B;;AAOA,gBAAMwpB,mBAAmB,GAAG,SAAtBA,mBAAsB,CAAC9E,KAAD,EAAQ+E,MAAR;AAAA,qBAC1B7hC,IAAI,CAACqgC,aAAL,CAAmBj3B,IAAnB,CAAwB;AACtByB,oBAAI,EAAE,GADgB;AAEtBuN,yBAAS,EAATA,SAFsB;AAGtB6B,oBAAI,EAAE1B,KAAK,CAAC0B,IAHU;AAItBC,kBAAE,EAAE3B,KAAK,CAAC2B,EAJY;AAKtB9J,mBAAG,EAAHA,GALsB;AAMtBrO,iBAAC,EAAE+6B,KAAK,GAAG8D,EANW;AAOtB3+B,iBAAC,EAAEu6B,IAAI,GAAGqE,EAPY;AAQtB7D,kBAAE,EAAE6E,MAAM,GAAGjB,EARS;AAStB3D,kBAAE,EAAEwE,OAAO,GAAGZ;AATQ,eAAxB,CAD0B;AAAA,aAA5B,CAtB2B,CAmC3B;;;AACA,gBAAMiB,cAAc,GAClBvpB,KAAK,CAAC0B,IAAN,GAAaja,IAAI,CAAC0zB,YAAlB,IAAkCnb,KAAK,CAAC2B,EAAN,IAAYla,IAAI,CAAC0zB,YADrD;AAEA,gBAAMqO,WAAW,GAAGxpB,KAAK,CAAC0B,IAAN,IAAcja,IAAI,CAAC0zB,YAAvC,CAtC2B,CAuC3B;;AAEA,gBAAItb,SAAJ,EAAe;AACb,kBAAI0kB,MAAK,GAAG4E,SAAS,GAAGJ,gBAAxB,CADa,CAEb;;;AACA,kBAAI/oB,KAAK,CAAC0B,IAAN,GAAa,CAAjB,EAAoB;AAClB,oBAAI+nB,QAAQ,GAAGzpB,KAAK,CAAC2B,EAAN,GAAW,CAA1B;AACA,oBAAI/D,GAAG,GAAG+e,oBAAoB,CAAC8M,QAAD,CAA9B;;AACA,oBAAI,CAAC7rB,GAAL,EAAU;AACR6rB,0BAAQ,GAAGzpB,KAAK,CAAC0B,IAAN,GAAa,CAAxB;AACA9D,qBAAG,GAAG+e,oBAAoB,CAAC8M,QAAD,CAA1B;AACA,sBAAI,CAAC7rB,GAAL,EAAU,kBAHF,CAGY;;AACpB2mB,wBAAK,GAAG3mB,GAAG,CAACpU,CAAJ,GAAQoU,GAAG,CAACoH,CAAZ,GAAgB+jB,gBAAgB,GAAG,GAA3C;AACD,iBALD,MAKO;AACLxE,wBAAK,GAAG3mB,GAAG,CAACpU,CAAJ,GAAQw/B,mBAAhB;AACD;;AACD,oBAAIS,QAAQ,IAAIhiC,IAAI,CAAC0zB,YAArB,EAAmC;AACjC,sBAAMjhB,OAAO,GACXquB,kBAAkB,GAAGljB,kBAArB,GAA0C2jB,mBAD5C,CADiC,CAGjC;;AACA,sBAAIzE,MAAK,GAAGrqB,OAAZ,EAAqB;AACtB;AACF;;AACD,kBAAMovB,OAAM,GAAG/E,MAAK,GAAGwE,gBAAvB;;AACAlb,iBAAG,CAAC4U,IAAJ;AACA5U,iBAAG,CAACyC,WAAJ,GAAkB7oB,IAAI,CAAC6B,KAAL,CAAWogC,mBAA7B;AACA7b,iBAAG,CAAC2E,SAAJ,GAAgB/qB,IAAI,CAAC6B,KAAL,CAAWqgC,6BAA3B;AACAP,gCAAkB,CAAC7E,MAAD,CAAlB;AACA1W,iBAAG,CAACqV,OAAJ;AACAmG,iCAAmB,CAAC9E,MAAD,EAAQ+E,OAAR,CAAnB;AACD,aArE0B,CAqEzB;;AAEF;;;AACA,gBAAIM,GAAG,SAAP;AACA,gBAAIngC,IAAI,GAAGkzB,oBAAoB,CAAC3c,KAAK,CAAC0B,IAAP,CAA/B;AACA,gBAAIlV,KAAK,GAAGmwB,oBAAoB,CAAC3c,KAAK,CAAC2B,EAAP,CAAhC;AAEA,gBAAIkoB,gBAAgB,GAAG,IAAvB;AACA,gBAAIC,WAAW,GAAG,IAAlB;AACAF,eAAG,GAAG5pB,KAAK,CAAC0B,IAAZ;;AACA,mBAAO,CAACjY,IAAD,IAASmgC,GAAG,GAAG5pB,KAAK,CAAC2B,EAA5B,EAAgC;AAC9BlY,kBAAI,GAAGkzB,oBAAoB,CAAC,EAAEiN,GAAH,CAA3B;AACAC,8BAAgB,GAAG,KAAnB;AACD;;AACDD,eAAG,GAAG5pB,KAAK,CAAC2B,EAAZ;;AACA,mBAAO,CAACnV,KAAD,IAAUo9B,GAAG,GAAG5pB,KAAK,CAAC0B,IAA7B,EAAmC;AACjClV,mBAAK,GAAGmwB,oBAAoB,CAAC,EAAEiN,GAAH,CAA5B;AACAE,yBAAW,GAAG,KAAd;AACD;;AACD,gBAAI,CAACrgC,IAAD,IAAS,CAAC+C,KAAd,EAAqB;AACrB,gBAAI88B,MAAM,GAAG98B,KAAK,CAAChD,CAAN,GAAUgD,KAAK,CAACwY,CAA7B;AACA,gBAAIuf,KAAK,GAAG96B,IAAI,CAACD,CAAjB;;AACA,gBAAI+/B,cAAJ,EAAoB;AAClB,kBAAMQ,YAAY,GAAGpN,oBAAoB,CAACl1B,IAAI,CAAC0zB,YAAL,GAAoB,CAArB,CAAzC;;AACA,kBAAI4O,YAAJ,EAAkB;AAChB,oBAAIC,QAAQ,GAAGD,YAAY,CAACvgC,CAAb,GAAiBugC,YAAY,CAAC/kB,CAA7C;AACA,oBAAI,CAACyjB,SAAL,EAAgBuB,QAAQ,IAAIjB,gBAAZ;;AAChB,oBAAIiB,QAAQ,IAAIV,MAAhB,EAAwB;AACtB98B,uBAAK,GAAGu9B,YAAR;AACAT,wBAAM,GAAG98B,KAAK,CAAChD,CAAN,GAAUgD,KAAK,CAACwY,CAAzB;AACA8kB,6BAAW,GAAG,KAAd;AACD;AACF;AACF;;AAED,gBAAIG,QAAQ,GACV5kB,kBAAkB,IAAImkB,WAAW,GAAGjB,kBAAH,GAAwB,CAAvC,CADpB;AAEA,gBAAIe,MAAM,IAAIb,SAAS,GAAG,CAAH,GAAOM,gBAApB,CAAN,GAA8CkB,QAAlD,EAA4D;AAE5DX,kBAAM,IAAIN,mBAAV;AACAzE,iBAAK,IAAIyE,mBAAT;AAEAnb,eAAG,CAAC4U,IAAJ;AACA5U,eAAG,CAACyC,WAAJ,GAAkB7oB,IAAI,CAAC6B,KAAL,CAAWogC,mBAA7B;AACA7b,eAAG,CAAC2E,SAAJ,GAAgB/qB,IAAI,CAAC6B,KAAL,CAAWqgC,6BAA3B;AACA,gBAAMO,UAAU,GAAG,EAAnB;;AAEA,gBAAIzB,SAAJ,EAAe;AACb;AACAwB,sBAAQ,IAAIjB,mBAAmB,GAAG,CAAlC;AACA,kBAAIzE,KAAK,GAAG0F,QAAZ,EAAsB1F,KAAK,GAAG0F,QAAR;AACtB,kBAAIjqB,KAAK,CAAC0B,IAAN,KAAe,CAAnB,EAAsB6iB,KAAK,IAAIyE,mBAAmB,GAAG,CAA/B;;AACtB,kBAAIM,MAAM,IAAI/E,KAAd,EAAqB;AACnB2F,0BAAU,CAACr5B,IAAX,CAAgB0zB,KAAhB,EAAuB0E,OAAvB,EAAgCK,MAAhC,EAAwCL,OAAxC;AACA,oBAAIa,WAAJ,EAAiBI,UAAU,CAACr5B,IAAX,CAAgBy4B,MAAhB,EAAwBJ,OAAxB;AAClB,eAHD,MAGO;AACLI,sBAAM,GAAG/E,KAAT;AACD;;AAEDA,mBAAK,IAAIwE,gBAAT;AACAK,gCAAkB,CAAC7E,KAAD,CAAlB,CAba,CAcb;;AACA+E,oBAAM,IAAIN,mBAAmB,GAAG,CAAhC;AACD,aAhBD,MAgBO;AACL;AACA,kBAAIzE,KAAK,GAAG0F,QAAZ,EAAsB1F,KAAK,GAAG0F,QAAR;AACtB,kBAAIjqB,KAAK,CAAC0B,IAAN,KAAe,CAAnB,EAAsB6iB,KAAK,IAAIyE,mBAAmB,GAAG,CAA/B;;AACtB,kBAAIc,WAAJ,EAAiB;AACf,oBAAI9pB,KAAK,CAAC2B,EAAN,KAAala,IAAI,CAAC0zB,YAAL,GAAoB,CAArC,EAAwC;AACtCmO,wBAAM,IAAIP,gBAAV;AACD,iBAFD,MAEO;AACLO,wBAAM,IAAIN,mBAAmB,GAAG,CAAhC;AACD;;AACDI,kCAAkB,CAACE,MAAD,CAAlB;AACD;;AACD,kBAAI/E,KAAK,GAAG+E,MAAZ,EAAoB;AAClB/E,qBAAK,GAAG+E,MAAR;AACD,eAFD,MAEO;AACL,oBAAItpB,KAAK,CAAC0B,IAAN,KAAe,CAAnB,EAAsB;AACpBmoB,kCAAgB,GAAG,IAAnB;AACAtF,uBAAK,GAAG4E,SAAS,GAAGJ,gBAApB;AACD;;AACD,oBAAIc,gBAAJ,EAAsBK,UAAU,CAACr5B,IAAX,CAAgB0zB,KAAhB,EAAuB2E,OAAvB;AACtBgB,0BAAU,CAACr5B,IAAX,CAAgB0zB,KAAhB,EAAuB0E,OAAvB,EAAgCK,MAAhC,EAAwCL,OAAxC;AACD,eArBI,CAuBL;;;AACA1E,mBAAK,IAAIyE,mBAAmB,GAAG,CAA/B;AACA,kBAAIc,WAAJ,EAAiBR,MAAM,IAAIP,gBAAV;AAClB;;AACDzX,qBAAS,CAAC4Y,UAAD,CAAT;AACArc,eAAG,CAACqV,OAAJ;AACAmG,+BAAmB,CAAC9E,KAAD,EAAQ+E,MAAR,CAAnB;AAjK2B;;AAK7B,eAAK,IAAI76B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0R,cAAc,CAAClT,MAAnC,EAA2CwB,CAAC,EAA5C,EAAgD;AAAA,6BAAvCA,CAAuC;;AAAA,qCAqGc;AAwD7D;AAlK4B;AAmK9B,OA7LsB,CA8LvB;AAEA;;AACA;;;AACA,UAAM8R,WAAW,GAAG,EAApB;;AACA,WAAK,IAAI3C,GAAG,GAAG,CAAf,EAAkBA,GAAG,GAAGnW,IAAI,CAAC8Y,WAAL,CAAiBtT,MAAzC,EAAiD2Q,GAAG,EAApD,EAAwD;AACtD,YAAMkC,OAAM,GAAGrY,IAAI,CAAC8Y,WAAL,CAAiB3C,GAAjB,CAAf;;AACA,aAAK,IAAImC,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGD,OAAM,CAAC7S,MAA3B,EAAmC8S,EAAC,EAApC,EAAwC;AACtCQ,qBAAW,CAAC1P,IAAZ,CAAiBnE,MAAM,CAACyO,MAAP,CAAc;AAAEyC,eAAG,EAAHA;AAAF,WAAd,EAAuBkC,OAAM,CAACC,EAAD,CAA7B,CAAjB;AACD;AACF;;AACD,UAAIQ,WAAW,CAACtT,MAAZ,GAAqB,CAAzB,EAA4B;AAAA;AAC1B,cAAMk9B,QAAQ,GAAG1iC,IAAI,CAAC6B,KAAL,CAAW8gC,mBAA5B;AACA,cAAMrB,gBAAgB,GAAGoB,QAAQ,GAAG,GAApC;AACA,cAAMnB,mBAAmB,GAAG,CAACmB,QAAQ,GAAGpB,gBAAZ,IAAgC,GAA5D;;AAH0B,uCAKjBt6B,CALiB;AAMxB,gBAAMuR,KAAK,GAAGO,WAAW,CAAC9R,CAAD,CAAzB;AANwB,gBAOhBmP,GAPgB,GAOGoC,KAPH,CAOhBpC,GAPgB;AAAA,gBAOXiC,SAPW,GAOGG,KAPH,CAOXH,SAPW;AASxB,gBAAM0kB,KAAK,GAAG,CAAC8D,EAAD,GAAMzqB,GAAG,GAAGusB,QAA1B;AACA,gBAAME,OAAO,GAAG9F,KAAK,GAAG4F,QAAQ,GAAG,GAAnC;AACA,gBAAMb,MAAM,GAAG/E,KAAK,GAAG4F,QAAR,GAAmBnB,mBAAlC;AACA,gBAAMsB,QAAQ,GACZnlB,sBAAsB,GAAG4jB,gBAAzB,GAA4CC,mBAD9C;;AAGA,gBAAMuB,kBAAkB,GAAG,SAArBA,kBAAqB,CAAC7gC,CAAD;AAAA,qBACzB+nB,eAAe,CACb8S,KAAK,GAAGyE,mBADK,EAEbt/B,CAFa,EAGbq/B,gBAHa,EAIb/oB,KAAK,CAACH,SAJO,CADU;AAAA,aAA3B;;AAOA,gBAAMwpB,mBAAmB,GAAG,SAAtBA,mBAAsB,CAACpF,IAAD,EAAOiF,OAAP;AAAA,qBAC1BzhC,IAAI,CAACqgC,aAAL,CAAmBj3B,IAAnB,CAAwB;AACtByB,oBAAI,EAAE,GADgB;AAEtBuN,yBAAS,EAATA,SAFsB;AAGtB6B,oBAAI,EAAE1B,KAAK,CAAC0B,IAHU;AAItBC,kBAAE,EAAE3B,KAAK,CAAC2B,EAJY;AAKtB/D,mBAAG,EAAHA,GALsB;AAMtBpU,iBAAC,EAAE+6B,KAAK,GAAG8D,EANW;AAOtB3+B,iBAAC,EAAEu6B,IAAI,GAAGqE,EAPY;AAQtB7D,kBAAE,EAAE6E,MAAM,GAAGjB,EARS;AAStB3D,kBAAE,EAAEwE,OAAO,GAAGZ;AATQ,eAAxB,CAD0B;AAAA,aAA5B,CAtBwB,CAmCxB;;;AACA,gBAAMiB,cAAc,GAClBvpB,KAAK,CAAC0B,IAAN,GAAaja,IAAI,CAAC62B,SAAlB,IAA+Bte,KAAK,CAAC2B,EAAN,IAAYla,IAAI,CAAC62B,SADlD;AAEA,gBAAMkL,WAAW,GAAGxpB,KAAK,CAAC0B,IAAN,IAAcja,IAAI,CAAC62B,SAAvC,CAtCwB,CAuCxB;;AAEA,gBAAIze,SAAJ,EAAe;AACb,kBAAIokB,KAAI,GAAGqG,QAAQ,GAAGvB,gBAAtB,CADa,CAEb;;;AACA,kBAAI/oB,KAAK,CAAC0B,IAAN,GAAa,CAAjB,EAAoB;AAClB,oBAAIzH,UAAQ,GAAG+F,KAAK,CAAC2B,EAAN,GAAW,CAA1B;;AACA,oBAAI9J,IAAG,GAAG4kB,iBAAiB,CAACxiB,UAAD,CAA3B;;AACA,oBAAI,CAACpC,IAAL,EAAU;AACRoC,4BAAQ,GAAG+F,KAAK,CAAC0B,IAAN,GAAa,CAAxB;AACA7J,sBAAG,GAAG4kB,iBAAiB,CAACxiB,UAAD,CAAvB;AACA,sBAAI,CAACpC,IAAL,EAAU,kBAHF,CAGY;;AACpBosB,uBAAI,GAAGpsB,IAAG,CAACnO,CAAJ,GAAQmO,IAAG,CAAC0B,CAAZ,GAAgBwvB,gBAAgB,GAAG,GAA1C;AACD,iBALD,MAKO;AACL9E,uBAAI,GAAGpsB,IAAG,CAACnO,CAAX;AACD;;AACD,oBAAIuQ,UAAQ,IAAIxS,IAAI,CAAC62B,SAArB,EAAgC;AAC9B,sBAAMpkB,OAAO,GACXsuB,gBAAgB,GAChBrjB,sBADA,GAEA6jB,mBAHF,CAD8B,CAK9B;;AACA,sBAAI/E,KAAI,GAAG/pB,OAAX,EAAoB;AACrB;AACF;;AACD,kBAAMgvB,QAAO,GAAGjF,KAAI,GAAG8E,gBAAvB;;AACAlb,iBAAG,CAAC4U,IAAJ;AACA5U,iBAAG,CAACyC,WAAJ,GAAkB7oB,IAAI,CAAC6B,KAAL,CAAWogC,mBAA7B;AACA7b,iBAAG,CAAC2E,SAAJ,GAAgB/qB,IAAI,CAAC6B,KAAL,CAAWqgC,6BAA3B;AACAY,gCAAkB,CAACtG,KAAD,CAAlB;AACApW,iBAAG,CAACqV,OAAJ;AACAmG,iCAAmB,CAACpF,KAAD,EAAOiF,QAAP,CAAnB;AACD,aAvEuB,CAuEtB;;AAEF;;;AACA,gBAAIU,GAAG,SAAP;AACA,gBAAIjgC,GAAG,GAAG8yB,iBAAiB,CAACzc,KAAK,CAAC0B,IAAP,CAA3B;AACA,gBAAItV,MAAM,GAAGqwB,iBAAiB,CAACzc,KAAK,CAAC2B,EAAP,CAA9B;AAEA,gBAAIkoB,gBAAgB,GAAG,IAAvB;AACA,gBAAIC,WAAW,GAAG,IAAlB;AACAF,eAAG,GAAG5pB,KAAK,CAAC0B,IAAZ;;AACA,mBAAO,CAAC/X,GAAD,IAAQigC,GAAG,GAAG5pB,KAAK,CAAC2B,EAA3B,EAA+B;AAC7BhY,iBAAG,GAAG8yB,iBAAiB,CAAC,EAAEmN,GAAH,CAAvB;AACAC,8BAAgB,GAAG,KAAnB;AACD;;AACDD,eAAG,GAAG5pB,KAAK,CAAC2B,EAAZ;;AACA,mBAAO,CAACvV,MAAD,IAAWw9B,GAAG,GAAG5pB,KAAK,CAAC0B,IAA9B,EAAoC;AAClCtV,oBAAM,GAAGqwB,iBAAiB,CAAC,EAAEmN,GAAH,CAA1B;AACAE,yBAAW,GAAG,KAAd;AACD;;AACD,gBAAI,CAACngC,GAAD,IAAQ,CAACyC,MAAb,EAAqB;AACrB,gBAAI88B,OAAO,GAAG98B,MAAM,CAAC1C,CAAP,GAAW0C,MAAM,CAACmN,CAAhC;AACA,gBAAI0qB,IAAI,GAAGt6B,GAAG,CAACD,CAAf;;AACA,gBAAI6/B,cAAJ,EAAoB;AAClB,kBAAMiB,aAAa,GAAG/N,iBAAiB,CAACh1B,IAAI,CAAC62B,SAAL,GAAiB,CAAlB,CAAvC;;AACA,kBAAIkM,aAAJ,EAAmB;AACjB,oBAAIC,QAAQ,GAAGD,aAAa,CAAC9gC,CAAd,GAAkB8gC,aAAa,CAACjxB,CAA/C;AACA,oBAAI,CAACovB,QAAL,EAAe8B,QAAQ,IAAI1B,gBAAZ;;AACf,oBAAI0B,QAAQ,IAAIvB,OAAhB,EAAyB;AACvB98B,wBAAM,GAAGo+B,aAAT;AACAtB,yBAAO,GAAG98B,MAAM,CAAC1C,CAAP,GAAW0C,MAAM,CAACmN,CAA5B;AACAuwB,6BAAW,GAAG,KAAd;AACD;AACF;AACF;;AAED,gBAAIY,OAAO,GACTvlB,sBAAsB,IAAIqkB,WAAW,GAAGhB,gBAAH,GAAsB,CAArC,CADxB;AAEA,gBAAIU,OAAO,IAAIP,QAAQ,GAAG,CAAH,GAAOI,gBAAnB,CAAP,GAA8C2B,OAAlD,EAA2D;AAE3DxB,mBAAO,IAAIF,mBAAX;AACA/E,gBAAI,IAAI+E,mBAAR;AAEAnb,eAAG,CAAC4U,IAAJ;AACA5U,eAAG,CAACyC,WAAJ,GAAkB7oB,IAAI,CAAC6B,KAAL,CAAWogC,mBAA7B;AACA7b,eAAG,CAAC2E,SAAJ,GAAgB/qB,IAAI,CAAC6B,KAAL,CAAWqgC,6BAA3B;AACA,gBAAMO,UAAU,GAAG,EAAnB;;AAEA,gBAAIvB,QAAJ,EAAc;AACZ;AACA+B,qBAAO,IAAI1B,mBAAmB,GAAG,CAAjC;AACA,kBAAI/E,IAAI,GAAGyG,OAAX,EAAoBzG,IAAI,GAAGyG,OAAP;AACpB,kBAAI1qB,KAAK,CAAC0B,IAAN,KAAe,CAAnB,EAAsBuiB,IAAI,IAAI+E,mBAAmB,GAAG,CAA9B;;AACtB,kBAAIE,OAAO,IAAIjF,IAAf,EAAqB;AACnBiG,0BAAU,CAACr5B,IAAX,CAAgBw5B,OAAhB,EAAyBpG,IAAzB,EAA+BoG,OAA/B,EAAwCnB,OAAxC;AACA,oBAAIY,WAAJ,EAAiBI,UAAU,CAACr5B,IAAX,CAAgBy4B,MAAhB,EAAwBJ,OAAxB;AAClB,eAHD,MAGO;AACLA,uBAAO,GAAGjF,IAAV;AACD;;AAEDA,kBAAI,IAAI8E,gBAAR;AACAwB,gCAAkB,CAACtG,IAAD,CAAlB,CAbY,CAeZ;;AACAiF,qBAAO,IAAIF,mBAAmB,GAAG,CAAjC;AACD,aAjBD,MAiBO;AACL;AACA,kBAAI/E,IAAI,GAAGyG,OAAX,EAAoBzG,IAAI,GAAGyG,OAAP;AACpB,kBAAI1qB,KAAK,CAAC0B,IAAN,KAAe,CAAnB,EAAsBuiB,IAAI,IAAI+E,mBAAmB,GAAG,CAA9B;;AACtB,kBAAIc,WAAJ,EAAiB;AACf,oBAAI9pB,KAAK,CAAC2B,EAAN,KAAala,IAAI,CAAC62B,SAAL,GAAiB,CAAlC,EAAqC;AACnC4K,yBAAO,IAAIH,gBAAX;AACD,iBAFD,MAEO,CACL;AACD;;AACDwB,kCAAkB,CAACrB,OAAD,CAAlB;AACD;;AACD,kBAAIjF,IAAI,GAAGiF,OAAX,EAAoB;AAClBjF,oBAAI,GAAGiF,OAAP;AACD,eAFD,MAEO;AACL,oBAAIlpB,KAAK,CAAC0B,IAAN,KAAe,CAAnB,EAAsB;AACpBmoB,kCAAgB,GAAG,IAAnB;AACA5F,sBAAI,GAAGqG,QAAQ,GAAGvB,gBAAlB;AACD;;AACD,oBAAIc,gBAAJ,EAAsBK,UAAU,CAACr5B,IAAX,CAAgBy4B,MAAhB,EAAwBrF,IAAxB;AACtBiG,0BAAU,CAACr5B,IAAX,CAAgBw5B,OAAhB,EAAyBpG,IAAzB,EAA+BoG,OAA/B,EAAwCnB,OAAxC,EANK,CAOL;;AACAjF,oBAAI,IAAI+E,mBAAmB,GAAG,CAA9B;AACD,eAvBI,CAwBL;;;AACA,kBAAIc,WAAJ,EAAiBZ,OAAO,IAAIH,gBAAX;AAClB;;AACDzX,qBAAS,CAAC4Y,UAAD,CAAT;AACArc,eAAG,CAACqV,OAAJ;AACAmG,+BAAmB,CAACpF,IAAD,EAAOiF,OAAP,CAAnB;AApKwB;;AAK1B,eAAK,IAAIz6B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8R,WAAW,CAACtT,MAAhC,EAAwCwB,CAAC,EAAzC,EAA6C;AAAA,+BAApCA,CAAoC;;AAAA,sCAuGgB;AAyD5D;AArKyB;AAsK3B,OA/WsB,CAgXvB;;AACD;;AACD,aAASk8B,cAAT,GAA0B;AACxB,UAAItK,aAAJ;AAAA,UACEuK,EAAE,GAAG/hB,IAAI,CAACQ,GAAL,CAASzR,QAAQ,CAAC3K,MAAlB,EAA0BxF,IAAI,CAAC62B,SAA/B,CADP;AAEA90B,OAAC,GACC,CAAC/B,IAAI,CAACsC,SAAL,CAAeC,UAAhB,GACAvC,IAAI,CAACy/B,eADL,GAEAz/B,IAAI,CAAC6B,KAAL,CAAW2c,eAHb;AAIAvc,OAAC,GAAGyb,sBAAJ;;AACA,WAAKlL,QAAQ,GAAG,CAAhB,EAAmBA,QAAQ,GAAG2wB,EAA9B,EAAkC3wB,QAAQ,IAAI,CAA9C,EAAiD;AAC/ComB,qBAAa,GAAG54B,IAAI,CAACqT,MAAL,CAAYqD,IAAZ,CAAiBlE,QAAjB,CAAhB;;AACA,YAAI,CAACstB,OAAO,CAAClH,aAAD,EAAgBpmB,QAAhB,CAAZ,EAAuC;AACrC;AACD;AACF;;AACD,UAAIxS,IAAI,CAACkJ,UAAL,CAAgBk6B,iBAApB,EAAuC;AACrC;AACA;AACA,YAAInhC,CAAC,GAAGyb,sBAAR,EAAgCzb,CAAC,IAAIjC,IAAI,CAAC6B,KAAL,CAAWwhC,iBAAhB;AAChCphC,SAAC,IAAIjC,IAAI,CAAC6B,KAAL,CAAWyhC,uBAAX,GAAqC,YAA1C;AACD;;AACDtjC,UAAI,CAACqvB,kBAAL,GAA0BptB,CAA1B;AACD;;AACD,aAASshC,QAAT,GAAoB;AAClBvjC,UAAI,CAAComB,GAAL,CAAS4U,IAAT;;AACA,UAAIh7B,IAAI,CAAC62B,SAAL,GAAiB,CAArB,EAAwB;AACtBpI,kBAAU,CACR,CADQ,EAERzuB,IAAI,CAACqvB,kBAFG,EAGRrvB,IAAI,CAACwO,KAHG,EAIRxO,IAAI,CAACmC,MAAL,GAAcnC,IAAI,CAACqvB,kBAJX,EAKR,CALQ,CAAV;AAOArvB,YAAI,CAAComB,GAAL,CAASpI,IAAT;AACD;;AACD,UAAI/H,gBAAJ;AAAA,UACE2iB,aADF;AAAA,UAEEnf,WAFF;AAAA,UAGEulB,CAAC,GAAG12B,MAAM,CAAC9C,MAHb;AAIAzD,OAAC,GACC,CAAC/B,IAAI,CAACsC,SAAL,CAAeC,UAAhB,GACAvC,IAAI,CAACy/B,eADL,GAEAz/B,IAAI,CAAC6B,KAAL,CAAW2c,eAHb;;AAIA,UAAI,CAACxe,IAAI,CAACkJ,UAAL,CAAgBs6B,SAArB,EAAgC;AAC9BvhC,SAAC,IACC,CAACjC,IAAI,CAACsC,SAAL,CAAeE,SAAhB,GACAxC,IAAI,CAACyjC,cADL,GAEAzjC,IAAI,CAAC6B,KAAL,CAAW2c,eAHb;AAID;;AACD,WACEhM,QAAQ,GAAGxS,IAAI,CAAC62B,SAAL,GAAiB72B,IAAI,CAAC0jC,cADnC,EAEElxB,QAAQ,GAAGyd,CAFb,EAGEzd,QAAQ,IAAI,CAHd,EAIE;AACAomB,qBAAa,GAAG54B,IAAI,CAACqT,MAAL,CAAYqD,IAAZ,CAAiBlE,QAAjB,CAAhB;AACAxS,YAAI,CAAC2jC,iBAAL,GAAyBnxB,QAAzB;AACAxS,YAAI,CAAC4jC,iBAAL,GAAyB3hC,CAAzB;AACA,YACEjC,IAAI,CAACy6B,QAAL,CAAc/jB,IAAd,CAAmBlR,MAAnB,GAA4B,CAA5B,IACAP,MAAM,CAAC8L,IAAP,CAAY/Q,IAAI,CAACy6B,QAAL,CAAc/jB,IAAd,CAAmBkiB,aAAnB,CAAZ,EAA+CpzB,MAA/C,GAAwD,CADxD,IAEAxF,IAAI,CAACy6B,QAAL,CAAc/jB,IAAd,CAAmBkiB,aAAnB,EAAkCiL,IAHpC,EAKE;;AACF,YAAI,CAAC/D,OAAO,CAAClH,aAAD,EAAgBpmB,QAAhB,CAAZ,EAAuC;AACrC;AACD;AACF;;AACD,UAAIxS,IAAI,CAACkJ,UAAL,CAAgB46B,UAApB,EAAgC;AAC9B,YAAI9jC,IAAI,CAACkJ,UAAL,CAAgBs1B,cAApB,EAAoC;AAClCz8B,WAAC,IAAI6b,kBAAL;AACD;;AACDyW,iBAAS,GAAGpd,UAAU,GAAGjX,IAAI,CAAC6B,KAAL,CAAWoV,UAApC;AACAmd,eAAO,GAAG,KAAV;;AACA,aACEne,gBAAgB,GAAGjW,IAAI,CAAC2/B,eAD1B,EAEE1pB,gBAAgB,GAAG+oB,CAFrB,EAGE/oB,gBAAgB,IAAI,CAHtB,EAIE;AACA,cAAI,CAAC8f,wBAAwB,CAAC9f,gBAAD,CAA7B,EAAiD;AAC/CwD,uBAAW,GAAGzZ,IAAI,CAACqT,MAAL,CAAYC,OAAZ,CAAoB2C,gBAApB,CAAd;AACAlU,aAAC,IAAI42B,QAAQ,CAAC34B,IAAI,CAAC+jC,MAAN,EAAc5zB,QAAQ,CAAC3K,MAAvB,EAA+B2K,QAAQ,CAAC3K,MAAxC,CAAR,CACH8C,MAAM,CAACmR,WAAD,CADH,EAEHA,WAFG,EAGHxD,gBAHG,CAAL;AAKD;;AACD,cAAIlU,CAAC,GAAG/B,IAAI,CAACwO,KAAL,GAAaxO,IAAI,CAACsC,SAAL,CAAeC,UAApC,EAAgD;AAC9C;AACD;AACF;;AACDsyB,kBAAU,CAACzrB,IAAX,CAAgB,CACdpJ,IAAI,CAAC+jC,MADS,EAEd5zB,QAAQ,CAAC3K,MAFK,EAGd2K,QAAQ,CAAC3K,MAHK,EAIdvD,CAJc,EAKdoyB,SALc,CAAhB;AAOD;;AACDr0B,UAAI,CAAComB,GAAL,CAASqV,OAAT;AACD;;AACD,aAASuI,eAAT,GAA2B;AACzB,UAAI,CAAChkC,IAAI,CAACu7B,eAAV,EAA2B;AACzB;AACD;;AACDv7B,UAAI,CAAComB,GAAL,CAAS0E,SAAT,GAAqB9qB,IAAI,CAAC6B,KAAL,CAAWoiC,sBAAhC;AACAjkC,UAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAWqiC,sBAAlC;AACAlkC,UAAI,CAAComB,GAAL,CAAS+d,WAAT,CAAqBnkC,IAAI,CAAC6B,KAAL,CAAWuiC,yBAAhC;AACAzP,iBAAW,CAAClvB,OAAZ,CAAoB,UAAUuJ,CAAV,EAAa;AAC/BghB,qBAAa,CAAChhB,CAAC,CAAC,CAAD,CAAF,EAAOA,CAAC,CAAC,CAAD,CAAR,CAAb;AACD,OAFD;AAGAhP,UAAI,CAAComB,GAAL,CAAS+d,WAAT,CAAqB,EAArB;AACD;;AACD,aAASE,kBAAT,GAA8B;AAC5B,UAAI,CAACrkC,IAAI,CAACskC,aAAV,EAAyB;AACvB;AACD;;AACD,UAAI3xB,CAAC,GAAG;AACJxQ,cAAM,EAAEnC,IAAI,CAACskC,aAAL,CAAmBniC,MADvB;AAEJqM,aAAK,EAAExO,IAAI,CAACskC,aAAL,CAAmB91B,KAFtB;AAGJzM,SAAC,EAAE/B,IAAI,CAACskC,aAAL,CAAmBviC,CAAnB,GAAuB/B,IAAI,CAACskC,aAAL,CAAmBC,UAAnB,CAA8BxiC,CAHpD;AAIJE,SAAC,EAAEjC,IAAI,CAACskC,aAAL,CAAmBriC,CAAnB,GAAuBjC,IAAI,CAACskC,aAAL,CAAmBC,UAAnB,CAA8BtiC;AAJpD,OAAR;AAAA,UAMEk0B,CAAC,GAAG;AACF3nB,aAAK,EAAE+O,CADL;AAEFpb,cAAM,EAAE2P,CAFN;AAGF/P,SAAC,EAAE,CAHD;AAIFE,SAAC,EAAE;AAJD,OANN;AAYAjC,UAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAW2iC,4BAAhC;AACAxkC,UAAI,CAAComB,GAAL,CAAS0E,SAAT,GAAqB9qB,IAAI,CAAC6B,KAAL,CAAW4iC,wBAAhC;AACAzkC,UAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAW6iC,wBAAlC;;AACA,UAAI1kC,IAAI,CAAC2kC,QAAL,KAAkB,aAAtB,EAAqC;AACnC,aAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG5kC,IAAI,CAACsS,UAAL,CAAgB9M,MAApC,EAA4Co/B,CAAC,EAA7C,EAAiD;AAC/C,cAAI,CAAC5kC,IAAI,CAACsS,UAAL,CAAgBsyB,CAAhB,CAAD,IAAuBA,CAAC,IAAI5kC,IAAI,CAACskC,aAAL,CAAmB9xB,QAAnD,EAA6D;AAC7DG,WAAC,CAACxQ,MAAF,IAAYnC,IAAI,CAAC6kC,YAAL,CAAkBD,CAAlB,CAAZ;AACD;;AACDjyB,SAAC,CAACnE,KAAF,GAAU+O,CAAV;AACA5K,SAAC,CAAC5Q,CAAF,GAAM,CAAN;AACAo0B,SAAC,CAAC3nB,KAAF,GAAU+O,CAAV;AACA4Y,SAAC,CAACh0B,MAAF,GAAWnC,IAAI,CAAC+0B,WAAL,CAAiB5yB,MAA5B;AACAg0B,SAAC,CAACl0B,CAAF,GAAMjC,IAAI,CAAC+0B,WAAL,CAAiB9yB,CAAvB;AACAgoB,gBAAQ,CAACtX,CAAC,CAAC5Q,CAAH,EAAM4Q,CAAC,CAAC1Q,CAAR,EAAW0Q,CAAC,CAACnE,KAAb,EAAoBmE,CAAC,CAACxQ,MAAtB,CAAR;AACA+nB,kBAAU,CAACvX,CAAC,CAAC5Q,CAAH,EAAM4Q,CAAC,CAAC1Q,CAAR,EAAW0Q,CAAC,CAACnE,KAAb,EAAoBmE,CAAC,CAACxQ,MAAtB,CAAV;AACAnC,YAAI,CAAComB,GAAL,CAAS0E,SAAT,GAAqB9qB,IAAI,CAAC6B,KAAL,CAAWijC,6BAAhC;AACA9kC,YAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAWkjC,6BAAlC;;AACA,YACE/kC,IAAI,CAACy5B,YAAL,CAAkBttB,OAAlB,CAA0BnM,IAAI,CAACglC,aAAL,CAAmB3K,YAA7C,MAA+D,CAAC,CAAhE,IACAr6B,IAAI,CAAC+0B,WAAL,CAAiBviB,QAAjB,KAA8BxS,IAAI,CAACskC,aAAL,CAAmB9xB,QADjD,IAEAxS,IAAI,CAAC+0B,WAAL,CAAiBviB,QAAjB,GAA4B,CAAC,CAF7B,IAGAxS,IAAI,CAAC+0B,WAAL,CAAiBviB,QAAjB,GAA4Byd,CAJ9B,EAKE;AACAD,uBAAa,CACXmG,CADW,EAEXn2B,IAAI,CAACglC,aAAL,CAAmB3K,YAAnB,GAAkCr6B,IAAI,CAACskC,aAAL,CAAmBjK,YAArD,GACI,GADJ,GAEI,GAJO,CAAb;AAMD;AACF,OA3BD,MA2BO,IAAIr6B,IAAI,CAAC2kC,QAAL,KAAkB,gBAAlB,IAAsC3kC,IAAI,CAACskC,aAA/C,EAA8D;AACnE,YAAI5K,eAAe,GAAG15B,IAAI,CAACsS,UAAL,CAAgB,CAAhB,CAAtB;;AACA,YAAIonB,eAAJ,EAAqB;AACnB,eAAK,IAAIkL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGlL,eAAe,CAACl0B,MAApC,EAA4Co/B,CAAC,EAA7C,EAAiD;AAC/CjyB,aAAC,CAACnE,KAAF,IAAWxO,IAAI,CAAC8zB,cAAL,CACT9zB,IAAI,CAACqT,MAAL,CAAYC,OAAZ,CAAoBomB,eAAe,CAACkL,CAAD,CAAnC,CADS,CAAX;AAGD;AACF;;AACDjyB,SAAC,CAACxQ,MAAF,GAAW2P,CAAX;AACAa,SAAC,CAAC1Q,CAAF,GAAM,CAAN;AACAk0B,SAAC,CAACh0B,MAAF,GAAW2P,CAAX;AACAqkB,SAAC,CAAC3nB,KAAF,GAAUxO,IAAI,CAAC+0B,WAAL,CAAiBvmB,KAA3B;AACA2nB,SAAC,CAACl0B,CAAF,GAAM,CAAN;AACAk0B,SAAC,CAACp0B,CAAF,GAAM/B,IAAI,CAAC+0B,WAAL,CAAiBhzB,CAAvB;AACAkoB,gBAAQ,CAACtX,CAAC,CAAC5Q,CAAH,EAAM4Q,CAAC,CAAC1Q,CAAR,EAAW0Q,CAAC,CAACnE,KAAb,EAAoBmE,CAAC,CAACxQ,MAAtB,CAAR;AACA+nB,kBAAU,CAACvX,CAAC,CAAC5Q,CAAH,EAAM4Q,CAAC,CAAC1Q,CAAR,EAAW0Q,CAAC,CAACnE,KAAb,EAAoBmE,CAAC,CAACxQ,MAAtB,CAAV;AACAnC,YAAI,CAAComB,GAAL,CAAS0E,SAAT,GAAqB9qB,IAAI,CAAC6B,KAAL,CAAWijC,6BAAhC;AACA9kC,YAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAWkjC,6BAAlC;;AACA,YACE/kC,IAAI,CAAC05B,eAAL,CAAqBvtB,OAArB,CAA6BnM,IAAI,CAACglC,aAAL,CAAmBxR,eAAhD,MACE,CAAC,CADH,IAEAxzB,IAAI,CAAC+0B,WAAL,CAAiBvB,eAAjB,KACExzB,IAAI,CAACskC,aAAL,CAAmB9Q,eAHrB,IAIAxzB,IAAI,CAACglC,aAAL,CAAmB/xB,WAAnB,KAAmCjT,IAAI,CAACskC,aAAL,CAAmBrxB,WAJtD,IAKAjT,IAAI,CAAC+0B,WAAL,CAAiBvB,eAAjB,GAAmC,CAAC,CALpC,IAMAxzB,IAAI,CAAC+0B,WAAL,CAAiBvB,eAAjB,GAAmClrB,MAAM,CAAC9C,MAP5C,EAQE;AACAwqB,uBAAa,CACXmG,CADW,EAEXn2B,IAAI,CAACglC,aAAL,CAAmB/xB,WAAnB,GAAiCjT,IAAI,CAACskC,aAAL,CAAmBrxB,WAApD,GACI,GADJ,GAEI,GAJO,CAAb;AAMD;AACF;AACF;;AACD,aAASgyB,UAAT,GAAsB;AACpBjlC,UAAI,CAAComB,GAAL,CAAS0E,SAAT,GAAqB9qB,IAAI,CAAC6B,KAAL,CAAWqjC,eAAhC;AACAllC,UAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAWsjC,eAAlC;AACAjb,gBAAU,CAAC,CAAD,EAAI,CAAJ,EAAOlqB,IAAI,CAACwO,KAAZ,EAAmBxO,IAAI,CAACmC,MAAxB,CAAV;AACD;;AACD,aAASijC,oBAAT,GAAgC;AAC9BplC,UAAI,CAAComB,GAAL,CAAS0E,SAAT,GAAqB9qB,IAAI,CAAC6B,KAAL,CAAWwjC,2BAAhC;AACArlC,UAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAWyjC,2BAAlC;;AACA,eAASC,GAAT,CAAav2B,CAAb,EAAgB;AACdghB,qBAAa,CAAChhB,CAAC,CAAC,CAAD,CAAF,EAAOA,CAAC,CAAC,CAAD,CAAR,CAAb;AACD;;AACD0lB,sBAAgB,CACbvtB,MADH,CACU,UAAU6H,CAAV,EAAa;AACnB,eACEA,CAAC,CAAC,CAAD,CAAD,CAAKwD,QAAL,GAAgBxS,IAAI,CAAC62B,SAArB,IACA7nB,CAAC,CAAC,CAAD,CAAD,CAAKiE,WAAL,GAAmBjT,IAAI,CAAC0zB,YAF1B;AAID,OANH,EAOGjuB,OAPH,CAOW8/B,GAPX;AAQAvlC,UAAI,CAAComB,GAAL,CAAS4U,IAAT;AACA9L,oBAAc,CAAC,CAAD,CAAd;AACAwF,sBAAgB,CACbvtB,MADH,CACU,UAAU6H,CAAV,EAAa;AACnB,eACEA,CAAC,CAAC,CAAD,CAAD,CAAKwD,QAAL,IAAiBxS,IAAI,CAAC62B,SAAtB,IACA7nB,CAAC,CAAC,CAAD,CAAD,CAAKiE,WAAL,IAAoBjT,IAAI,CAAC0zB,YAF3B;AAID,OANH,EAOGjuB,OAPH,CAOW8/B,GAPX;AAQAvlC,UAAI,CAAComB,GAAL,CAASqV,OAAT;AACAz7B,UAAI,CAAComB,GAAL,CAAS4U,IAAT;AACA9L,oBAAc,CAAC,CAAD,CAAd;AACAwF,sBAAgB,CACbvtB,MADH,CACU,UAAU6H,CAAV,EAAa;AACnB,eACEA,CAAC,CAAC,CAAD,CAAD,CAAKwD,QAAL,IAAiBxS,IAAI,CAAC62B,SAAtB,IACA7nB,CAAC,CAAC,CAAD,CAAD,CAAKiE,WAAL,GAAmBjT,IAAI,CAAC0zB,YAF1B;AAID,OANH,EAOGjuB,OAPH,CAOW8/B,GAPX;AAQAvlC,UAAI,CAAComB,GAAL,CAASqV,OAAT;AACAz7B,UAAI,CAAComB,GAAL,CAAS4U,IAAT;AACA9L,oBAAc,CAAC,CAAD,CAAd;AACAwF,sBAAgB,CACbvtB,MADH,CACU,UAAU6H,CAAV,EAAa;AACnB,eACEA,CAAC,CAAC,CAAD,CAAD,CAAKwD,QAAL,GAAgBxS,IAAI,CAAC62B,SAArB,IACA7nB,CAAC,CAAC,CAAD,CAAD,CAAKiE,WAAL,IAAoBjT,IAAI,CAAC0zB,YAF3B;AAID,OANH,EAOGjuB,OAPH,CAOW8/B,GAPX;AAQAvlC,UAAI,CAAComB,GAAL,CAASqV,OAAT;AACD;;AACD,aAAS+J,oBAAT,GAAgC;AAC9B,UAAIxlC,IAAI,CAACK,MAAL,IAAeL,IAAI,CAACkJ,UAAL,CAAgB4uB,oBAAnC,EAAyD;AACvD93B,YAAI,CAAComB,GAAL,CAAS0E,SAAT,GAAqB9qB,IAAI,CAAC6B,KAAL,CAAW4jC,0BAAhC;AACAzlC,YAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAW6jC,0BAAlC;AACA1lC,YAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAW8jC,oBAAhC;AACA/Q,wBAAgB,CAACnvB,OAAjB,CAAyB,UAAUuJ,CAAV,EAAa;AACpCygB,4BAAkB,CAACzgB,CAAC,CAAC,CAAD,CAAF,EAAOA,CAAC,CAAC,CAAD,CAAR,CAAlB;AACA,cAAI42B,EAAE,GAAG5lC,IAAI,CAACkJ,UAAL,CAAgB28B,qBAAhB,GAAwC,CAAjD;AAAA,cACEC,EAAE,GACA92B,CAAC,CAAC,CAAD,CAAD,CAAKjN,CAAL,IAAUiN,CAAC,CAAC,CAAD,CAAD,KAAS,IAAT,IAAiBA,CAAC,CAAC,CAAD,CAAD,KAAS,IAA1B,GAAiC,CAAjC,GAAqCA,CAAC,CAAC,CAAD,CAAD,CAAKR,KAApD,IAA6Do3B,EAFjE;AAAA,cAGEG,EAAE,GACA/2B,CAAC,CAAC,CAAD,CAAD,CAAK/M,CAAL,IAAU+M,CAAC,CAAC,CAAD,CAAD,KAAS,IAAT,IAAiBA,CAAC,CAAC,CAAD,CAAD,KAAS,IAA1B,GAAiCA,CAAC,CAAC,CAAD,CAAD,CAAK7M,MAAtC,GAA+C,CAAzD,IAA8DyjC,EAJlE;AAKA5lC,cAAI,CAACs3B,YAAL,CAAkBC,OAAlB,CAA0B;AACxBx1B,aAAC,EAAE+jC,EADqB;AAExB7jC,aAAC,EAAE8jC,EAFqB;AAGxB5jC,kBAAM,EAAEnC,IAAI,CAAC6B,KAAL,CAAW8tB,mBAAX,GAAiCiW,EAHjB;AAIxBp3B,iBAAK,EAAExO,IAAI,CAAC6B,KAAL,CAAW8tB,mBAAX,GAAiCiW,EAJhB;AAKxB/jC,iBAAK,EAAE,sBAAsBmN,CAAC,CAAC,CAAD;AALN,WAA1B;AAOD,SAdD;AAeD;AACF;;AACD,aAASg3B,cAAT,GAA0B;AACxB,UAAI,CAACxR,KAAL,EAAY;AACV;AACD;;AACDx0B,UAAI,CAAComB,GAAL,CAAS4U,IAAT;AACA,UAAIiL,EAAE,GACFjmC,IAAI,CAACs5B,UAAL,CAAgBrmB,WAAhB,GAA8B,CAA9B,GAAkCjT,IAAI,CAAC0zB,YAAvC,IACA1zB,IAAI,CAACs5B,UAAL,CAAgB9mB,QAAhB,GAA2B,CAA3B,GAA+BxS,IAAI,CAAC62B,SAFxC;AAAA,UAGEqP,GAAG,GAAGD,EAAE,GAAGjmC,IAAI,CAACovB,qBAAR,GAAgC,CAH1C;AAAA,UAIE+W,GAAG,GAAGF,EAAE,GAAGjmC,IAAI,CAACqvB,kBAAR,GAA6B,CAJvC;AAAA,UAKE+W,GAAG,GAAGH,EAAE,GAAGjmC,IAAI,CAACwO,KAAL,GAAaxO,IAAI,CAACovB,qBAArB,GAA6CpvB,IAAI,CAACwO,KAL5D;AAAA,UAME63B,GAAG,GAAGJ,EAAE,GAAGjmC,IAAI,CAACmC,MAAL,GAAcnC,IAAI,CAACqvB,kBAAtB,GAA2CrvB,IAAI,CAACmC,MAN1D;AAOAssB,gBAAU,CAACyX,GAAD,EAAMC,GAAN,EAAWC,GAAX,EAAgBC,GAAhB,EAAqB,CAArB,CAAV;AACArmC,UAAI,CAAComB,GAAL,CAASpI,IAAT;;AACA,UAAIhe,IAAI,CAACkJ,UAAL,CAAgBo9B,aAAhB,KAAkC,KAAtC,EAA6C;AAC3C,YAAItmC,IAAI,CAACs5B,UAAL,IAAmBt5B,IAAI,CAACs5B,UAAL,CAAgB9mB,QAAhB,KAA6BgiB,KAAK,CAAChiB,QAA1D,EAAoE;AAClExS,cAAI,CAAComB,GAAL,CAAS0E,SAAT,GAAqB9qB,IAAI,CAAC6B,KAAL,CAAW0kC,4BAAhC;AACAvmC,cAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAW2kC,4BAAlC;AACAtc,oBAAU,CACR,CADQ,EAERsK,KAAK,CAACvyB,CAFE,EAGRjC,IAAI,CAACymC,cAAL,KAAwB7oB,kBAHhB,EAIR5d,IAAI,CAAC41B,iBAAL,CAAuBpB,KAAK,CAAChiB,QAA7B,CAJQ,CAAV;AAMD;AACF,OAXD,MAWO;AACLxS,YAAI,CAAComB,GAAL,CAAS0E,SAAT,GAAqB9qB,IAAI,CAAC6B,KAAL,CAAW0kC,4BAAhC;AACAvmC,YAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAW2kC,4BAAlC;AACAtc,kBAAU,CAACsK,KAAK,CAACzyB,CAAP,EAAUyyB,KAAK,CAACvyB,CAAhB,EAAmBuyB,KAAK,CAAChmB,KAAzB,EAAgCgmB,KAAK,CAACryB,MAAtC,CAAV;AACD;;AACDnC,UAAI,CAAComB,GAAL,CAASqV,OAAT;AACD;;AACD,aAASiL,iBAAT,GAA6B;AAC3B,UAAI7F,EAAE,GAAG7gC,IAAI,CAACqvB,kBAAL,GAA0BrvB,IAAI,CAAC6B,KAAL,CAAWwhC,iBAA9C;AAAA,UACEzC,EAAE,GAAG5gC,IAAI,CAACovB,qBAAL,GAA6BpvB,IAAI,CAAC6B,KAAL,CAAWwhC,iBAD/C;AAAA,UAEEsD,MAAM,GACJ3mC,IAAI,CAAC+0B,WAAL,IAAoB/0B,IAAI,CAAC+0B,WAAL,CAAiBlzB,KAAjB,KAA2B,mBAHnD;AAAA,UAIE+kC,MAAM,GACJ5mC,IAAI,CAAC+0B,WAAL,IAAoB/0B,IAAI,CAAC+0B,WAAL,CAAiBlzB,KAAjB,KAA2B,sBALnD;AAMA,UAAI+b,kBAAkB,GAAG5d,IAAI,CAAC6d,qBAAL,EAAzB;AACA7d,UAAI,CAAComB,GAAL,CAAS0E,SAAT,GAAqB9qB,IAAI,CAAC6B,KAAL,CAAWyhC,uBAAhC;;AACA,UAAItjC,IAAI,CAACkJ,UAAL,CAAgB29B,oBAApB,EAA0C;AACxC,YACE,CAAC7mC,IAAI,CAAC8mC,oBAAN,IACC9mC,IAAI,CAAC8mC,oBAAL,IAA6B9mC,IAAI,CAAC2kC,QAAL,KAAkB,mBAFlD,EAGE;AACA,cAAI/D,EAAE,GAAG5gC,IAAI,CAAC6B,KAAL,CAAW+b,kBAApB,EAAwC;AACtC5d,gBAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWklC,iBAAhC;AACA/mC,gBAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAWmlC,uBAAlC;AACA/c,oBAAQ,CAAC2W,EAAD,EAAK,CAAL,EAAQ5gC,IAAI,CAAC6B,KAAL,CAAWwhC,iBAAnB,EAAsCrjC,IAAI,CAACmC,MAA3C,CAAR;AACA+nB,sBAAU,CAAC0W,EAAD,EAAK,CAAL,EAAQ5gC,IAAI,CAAC6B,KAAL,CAAWwhC,iBAAnB,EAAsCrjC,IAAI,CAACmC,MAA3C,CAAV;AACD;;AACDnC,cAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB6b,MAAM,GACvB5mC,IAAI,CAAC6B,KAAL,CAAWolC,sBADY,GAEvBjnC,IAAI,CAAC6B,KAAL,CAAWqlC,uBAFf;AAGAlnC,cAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB+d,MAAM,GACzB5mC,IAAI,CAAC6B,KAAL,CAAWslC,4BADc,GAEzBnnC,IAAI,CAAC6B,KAAL,CAAWqlC,uBAFf;AAGAjd,kBAAQ,CACN2W,EADM,EAEN,CAFM,EAGN5gC,IAAI,CAAC6B,KAAL,CAAWwhC,iBAHL,EAINrjC,IAAI,CAAC6B,KAAL,CAAW6b,sBAJL,CAAR;AAMAwM,oBAAU,CACR0W,EADQ,EAER,CAFQ,EAGR5gC,IAAI,CAAC6B,KAAL,CAAWwhC,iBAHH,EAIRrjC,IAAI,CAAC6B,KAAL,CAAW6b,sBAJH,CAAV;AAMD;;AAED,YACE,CAAC1d,IAAI,CAAConC,eAAN,IACCpnC,IAAI,CAAConC,eAAL,IACCpnC,IAAI,CAAConC,eAAL,CAAqBvlC,KAArB,KAA+B,eAHnC,EAIE;AACA7B,cAAI,CAACs3B,YAAL,CAAkBC,OAAlB,CAA0B;AACxBx1B,aAAC,EAAE6+B,EADqB;AAExB3+B,aAAC,EAAE,CAFqB;AAGxBE,kBAAM,EAAEnC,IAAI,CAACmC,MAHW;AAIxBqM,iBAAK,EAAExO,IAAI,CAAC6B,KAAL,CAAWwhC,iBAJM;AAIa;AACrCxhC,iBAAK,EAAE;AALiB,WAA1B;AAOD;AACF;;AACD,UAAI7B,IAAI,CAACkJ,UAAL,CAAgBk6B,iBAApB,EAAuC;AACrC,YACE,CAACpjC,IAAI,CAAC8mC,oBAAN,IACC9mC,IAAI,CAAC8mC,oBAAL,IACC9mC,IAAI,CAAC2kC,QAAL,KAAkB,sBAHtB,EAIE;AACA,cAAI9D,EAAE,GAAGjjB,kBAAT,EAA6B;AAC3B5d,gBAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWklC,iBAAhC;AACA/mC,gBAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAWmlC,uBAAlC;AACA/c,oBAAQ,CAAC,CAAD,EAAI4W,EAAJ,EAAQ7gC,IAAI,CAACwO,KAAb,EAAoBxO,IAAI,CAAC6B,KAAL,CAAWwhC,iBAA/B,CAAR;AACAnZ,sBAAU,CAAC,CAAD,EAAI2W,EAAJ,EAAQ7gC,IAAI,CAACwO,KAAb,EAAoBxO,IAAI,CAAC6B,KAAL,CAAWwhC,iBAA/B,CAAV;AACD;;AACDrjC,cAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB4b,MAAM,GACvB3mC,IAAI,CAAC6B,KAAL,CAAWolC,sBADY,GAEvBjnC,IAAI,CAAC6B,KAAL,CAAWqlC,uBAFf;AAGAlnC,cAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB8d,MAAM,GACzB3mC,IAAI,CAAC6B,KAAL,CAAWslC,4BADc,GAEzBnnC,IAAI,CAAC6B,KAAL,CAAWqlC,uBAFf;AAGAjd,kBAAQ,CAAC,CAAD,EAAI4W,EAAJ,EAAQjjB,kBAAR,EAA4B5d,IAAI,CAAC6B,KAAL,CAAWwhC,iBAAvC,CAAR;AACAnZ,oBAAU,CAAC,CAAD,EAAI2W,EAAJ,EAAQjjB,kBAAR,EAA4B5d,IAAI,CAAC6B,KAAL,CAAWwhC,iBAAvC,CAAV;AACD;;AACD,YAAIlhC,MAAM,GACRnC,IAAI,CAAC6B,KAAL,CAAWwhC,iBAAX,GAA+BrjC,IAAI,CAAC6B,KAAL,CAAWyhC,uBAD5C;;AAEA,YACE,CAACtjC,IAAI,CAAConC,eAAN,IACCpnC,IAAI,CAAConC,eAAL,IACCpnC,IAAI,CAAConC,eAAL,CAAqBvlC,KAArB,KAA+B,kBAHnC,EAIE;AACA7B,cAAI,CAACs3B,YAAL,CAAkBC,OAAlB,CAA0B;AACxBx1B,aAAC,EAAE,CADqB;AAExBE,aAAC,EAAE4+B,EAFqB;AAGxB1+B,kBAAM,EAAEA,MAHgB;AAIxBqM,iBAAK,EAAExO,IAAI,CAACwO,KAJY;AAKxB3M,iBAAK,EAAE;AALiB,WAA1B;AAOD;;AACDozB,2BAAmB,GAAG;AAAEhzB,WAAC,EAAE4+B,EAAL;AAAS/uB,WAAC,EAAE3P;AAAZ,SAAtB;AACD;;AACD,UAAInC,IAAI,CAAC8mC,oBAAT,EAA+B;AAC7B9mC,YAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWwlC,uBAAhC;AACArnC,YAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAWylC,6BAAlC;;AACA,YAAItnC,IAAI,CAAC2kC,QAAL,KAAkB,sBAAtB,EAA8C;AAC5C,cAAI5G,IAAI,GAAG/9B,IAAI,CAAC8mC,oBAAL,CAA0B/kC,CAArC;AACA,cAAIwlC,QAAQ,GAAGvnC,IAAI,CAAC0c,SAAL,CAAeqhB,IAAf,EAAqB,CAArB,CAAf;AACA,cAAI/9B,IAAI,CAAC8mC,oBAAL,CAA0BU,MAA9B,EAAsCzJ,IAAI,GAAG6C,EAAP;;AACtC,cAAI7C,IAAI,GAAGngB,kBAAX,EAA+B;AAC7B,gBAAI7b,EAAC,GACHwlC,QAAQ,CAACxlC,CAAT,GACA/B,IAAI,CAAC6B,KAAL,CAAWwhC,iBADX,GAEArjC,IAAI,CAAC6B,KAAL,CAAWyhC,uBAHb;;AAIA,gBAAIvF,IAAI,GAAGh8B,EAAC,GAAGwlC,QAAQ,CAAC/4B,KAAT,GAAiB,CAAhC,EAAmCzM,EAAC,GAAGA,EAAC,GAAGwlC,QAAQ,CAAC/4B,KAAjB;AACnCxO,gBAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWklC,iBAAhC;AACA/mC,gBAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAWmlC,uBAAlC;AACA/c,oBAAQ,CAACloB,EAAD,EAAI,CAAJ,EAAO/B,IAAI,CAAC6B,KAAL,CAAWwhC,iBAAlB,EAAqCrjC,IAAI,CAACmC,MAA1C,CAAR;AACA+nB,sBAAU,CAACnoB,EAAD,EAAI,CAAJ,EAAO/B,IAAI,CAAC6B,KAAL,CAAWwhC,iBAAlB,EAAqCrjC,IAAI,CAACmC,MAA1C,CAAV;AACAnC,gBAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWqlC,uBAAhC;AACAlnC,gBAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAWqlC,uBAAlC;AACAjd,oBAAQ,CACNloB,EADM,EAEN,CAFM,EAGN/B,IAAI,CAAC6B,KAAL,CAAWwhC,iBAHL,EAINrjC,IAAI,CAAC6B,KAAL,CAAW6b,sBAJL,CAAR;AAMAwM,sBAAU,CACRnoB,EADQ,EAER,CAFQ,EAGR/B,IAAI,CAAC6B,KAAL,CAAWwhC,iBAHH,EAIRrjC,IAAI,CAAC6B,KAAL,CAAW6b,sBAJH,CAAV;AAMD;;AACD1d,cAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAW4lC,6BAAhC;AACAznC,cAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAWylC,6BAAlC;AACArd,kBAAQ,CACN8T,IADM,EAEN,CAFM,EAGN/9B,IAAI,CAAC6B,KAAL,CAAWwhC,iBAHL,EAINrjC,IAAI,CAAC6B,KAAL,CAAW6b,sBAJL,CAAR;AAMAwM,oBAAU,CACR6T,IADQ,EAER,CAFQ,EAGR/9B,IAAI,CAAC6B,KAAL,CAAWwhC,iBAHH,EAIRrjC,IAAI,CAAC6B,KAAL,CAAW6b,sBAJH,CAAV;AAMA1d,cAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWwlC,uBAAhC;AACApd,kBAAQ,CAAC8T,IAAD,EAAO,CAAP,EAAU/9B,IAAI,CAAC6B,KAAL,CAAWwhC,iBAArB,EAAwCrjC,IAAI,CAACmC,MAA7C,CAAR;AACA+nB,oBAAU,CAAC6T,IAAD,EAAO,CAAP,EAAU/9B,IAAI,CAAC6B,KAAL,CAAWwhC,iBAArB,EAAwCrjC,IAAI,CAACmC,MAA7C,CAAV;AACD,SA9CD,MA8CO;AACL,cAAI67B,IAAI,GAAGh+B,IAAI,CAAC8mC,oBAAL,CAA0B7kC,CAArC;;AACA,cAAIslC,SAAQ,GAAGvnC,IAAI,CAAC0c,SAAL,CAAe,CAAf,EAAkBshB,IAAlB,CAAf;;AACA,cAAIh+B,IAAI,CAAC8mC,oBAAL,CAA0BU,MAA9B,EAAsCxJ,IAAI,GAAG6C,EAAP;;AACtC,cAAI7C,IAAI,GAAGh+B,IAAI,CAAC6B,KAAL,CAAW6b,sBAAtB,EAA8C;AAC5C,gBAAIzb,EAAC,GACHslC,SAAQ,CAACtlC,CAAT,GACAjC,IAAI,CAAC6B,KAAL,CAAWwhC,iBADX,GAEArjC,IAAI,CAAC6B,KAAL,CAAWyhC,uBAHb;;AAIA,gBAAItF,IAAI,GAAG/7B,EAAC,GAAGslC,SAAQ,CAACplC,MAAT,GAAkB,CAAjC,EAAoCF,EAAC,GAAGA,EAAC,GAAGslC,SAAQ,CAACplC,MAAjB;AACpCnC,gBAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWklC,iBAAhC;AACA/mC,gBAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAWmlC,uBAAlC;AACA/c,oBAAQ,CAAC,CAAD,EAAIhoB,EAAJ,EAAOjC,IAAI,CAACwO,KAAZ,EAAmBxO,IAAI,CAAC6B,KAAL,CAAWwhC,iBAA9B,CAAR;AACAnZ,sBAAU,CAAC,CAAD,EAAIjoB,EAAJ,EAAOjC,IAAI,CAACwO,KAAZ,EAAmBxO,IAAI,CAAC6B,KAAL,CAAWwhC,iBAA9B,CAAV;AACArjC,gBAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWqlC,uBAAhC;AACAlnC,gBAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAWqlC,uBAAlC;AACAjd,oBAAQ,CAAC,CAAD,EAAIhoB,EAAJ,EAAO2b,kBAAP,EAA2B5d,IAAI,CAAC6B,KAAL,CAAWwhC,iBAAtC,CAAR;AACAnZ,sBAAU,CAAC,CAAD,EAAIjoB,EAAJ,EAAO2b,kBAAP,EAA2B5d,IAAI,CAAC6B,KAAL,CAAWwhC,iBAAtC,CAAV;AACD;;AACDrjC,cAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAW4lC,6BAAhC;AACAznC,cAAI,CAAComB,GAAL,CAASyC,WAAT,GAAuB7oB,IAAI,CAAC6B,KAAL,CAAWylC,6BAAlC;AACArd,kBAAQ,CAAC,CAAD,EAAI+T,IAAJ,EAAUpgB,kBAAV,EAA8B5d,IAAI,CAAC6B,KAAL,CAAWwhC,iBAAzC,CAAR;AACAnZ,oBAAU,CAAC,CAAD,EAAI8T,IAAJ,EAAUpgB,kBAAV,EAA8B5d,IAAI,CAAC6B,KAAL,CAAWwhC,iBAAzC,CAAV;AACArjC,cAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWwlC,uBAAhC;AACApd,kBAAQ,CAAC,CAAD,EAAI+T,IAAJ,EAAUh+B,IAAI,CAACwO,KAAf,EAAsBxO,IAAI,CAAC6B,KAAL,CAAWwhC,iBAAjC,CAAR;AACAnZ,oBAAU,CAAC,CAAD,EAAI8T,IAAJ,EAAUh+B,IAAI,CAACwO,KAAf,EAAsBxO,IAAI,CAAC6B,KAAL,CAAWwhC,iBAAjC,CAAV;AACD;AACF;AACF;;AACD,aAASqE,aAAT,GAAyB;AACvB,UAAI,CAAC1nC,IAAI,CAACkJ,UAAL,CAAgBy+B,eAArB,EAAsC;AACpC;AACD;;AACD,UAAIrU,EAAE,GAAG,GAAT;AAAA,UACEsU,EAAE,GACA5nC,IAAI,CAACwO,KAAL,GACA8kB,EADA,GAEAtzB,IAAI,CAAC6B,KAAL,CAAWic,cAFX,GAGA9d,IAAI,CAAC6B,KAAL,CAAWy0B,oBAAX,GAAkC,CALtC;AAAA,UAMEuR,EAAE,GAAGnqB,sBANP;AAAA,UAOEoqB,EAAE,GAAG,GAPP;;AAQA,UAAIlgB,mBAAmB,CAACpiB,MAApB,KAA+B,CAAnC,EAAsC;AACpCoiB,2BAAmB,GAAGG,SAAS,CAAC,CAAD,EAAIN,cAAJ,EAAoB,CAApB,EAAuB,YAAY;AAChE,iBAAO,CAAC,CAAD,EAAI,CAAJ,CAAP;AACD,SAF8B,CAA/B;AAGD;;AACD,UAAII,gBAAgB,CAACriB,MAAjB,KAA4B,CAAhC,EAAmC;AACjCqiB,wBAAgB,GAAGE,SAAS,CAAC,CAAD,EAAIN,cAAJ,EAAoB,CAApB,EAAuB,YAAY;AAC7D,iBAAO,CAAC,CAAD,EAAI,CAAJ,CAAP;AACD,SAF2B,CAA5B;AAGD;;AACD,UAAIC,WAAW,CAACliB,MAAZ,KAAuB,CAA3B,EAA8B;AAC5BkiB,mBAAW,GAAGK,SAAS,CAAC,CAAD,EAAIN,cAAJ,EAAoB,CAApB,EAAuB,CAAvB,CAAvB;AACD;;AACDznB,UAAI,CAAComB,GAAL,CAAS0E,SAAT,GAAqB,GAArB;;AACA,eAASid,GAAT,CAAa99B,IAAb,EAAmBme,OAAnB,EAA4BC,QAA5B,EAAsC1G,GAAtC,EAA2C1T,KAA3C,EAAkDqa,MAAlD,EAA0D9V,QAA1D,EAAoE;AAClE,YAAI4W,CAAJ;AACAjB,oBAAY,CAACmL,EAAD,EAAKwU,EAAL,EAASF,EAAT,EAAaC,EAAb,EAAiBzf,OAAjB,EAA0BC,QAA1B,EAAoC1G,GAApC,EAAyC1T,KAAzC,EAAgDqa,MAAhD,CAAZ;AACAtoB,YAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB9c,KAArB;AACAgc,gBAAQ,CAAC,IAAI2d,EAAL,EAASC,EAAE,GAAG,CAAL,GAASr1B,QAAQ,GAAG,EAA7B,EAAiC,CAAjC,EAAoC,CAApC,CAAR;AACAxS,YAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWmmC,uBAAhC;AACA5e,SAAC,GAAGf,QAAQ,KAAKzmB,SAAb,GAAyBwmB,OAAO,CAAC,CAAD,CAAP,CAAWC,QAAX,CAAzB,GAAgDD,OAAO,CAAC,CAAD,CAA3D;AACAwG,gBAAQ,CACN3kB,IAAI,GAAG,GAAP,GAAa,CAAC3E,KAAK,CAAC8jB,CAAD,CAAL,GAAW,CAAX,GAAeA,CAAhB,EAAmB6e,OAAnB,CAA2B,CAA3B,CADP,EAEN,KAAKL,EAFC,EAGNC,EAAE,GAAG,EAAL,GAAUr1B,QAAQ,GAAG,EAHf,CAAR;AAKD;;AACDxS,UAAI,CAAComB,GAAL,CAASjY,SAAT,GAAqB,MAArB;AACAnO,UAAI,CAAComB,GAAL,CAAS8M,IAAT,GAAgBlzB,IAAI,CAAC6B,KAAL,CAAWsxB,SAA3B;AACAnzB,UAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWqmC,wBAAhC;AACAje,cAAQ,CAAC2d,EAAD,EAAKC,EAAL,EAASvU,EAAT,EAAawU,EAAb,CAAR;AACA,OACE,CACE,eADF,EAEElgB,mBAFF,EAGE,CAHF,EAIE5nB,IAAI,CAACsC,SAAL,CAAeuK,YAJjB,EAKE7M,IAAI,CAAC6B,KAAL,CAAWsmC,sBALb,EAME,KANF,CADF,EASE,CACE,cADF,EAEEvgB,mBAFF,EAGE,CAHF,EAIE5nB,IAAI,CAACsC,SAAL,CAAeq0B,WAJjB,EAKE32B,IAAI,CAAC6B,KAAL,CAAWumC,qBALb,EAME,KANF,CATF,EAiBE,CACE,aADF,EAEE9gB,YAFF,EAGE1lB,SAHF,EAIE,GAJF,EAKE5B,IAAI,CAAC6B,KAAL,CAAWwmC,qBALb,EAME,KANF,CAjBF,EAyBE,CACE,UADF,EAEE3gB,WAFF,EAGE9lB,SAHF,EAIE,IAJF,EAKE5B,IAAI,CAAC6B,KAAL,CAAWymC,kBALb,EAME,KANF,CAzBF,EAiCE,CACE,WADF,EAEEzgB,gBAFF,EAGE,CAHF,EAIE,IAJF,EAKE7nB,IAAI,CAAC6B,KAAL,CAAW0mC,mBALb,EAME,IANF,CAjCF,EAyCE,CACE,WADF,EAEE1gB,gBAFF,EAGE,CAHF,EAIE,IAJF,EAKE7nB,IAAI,CAAC6B,KAAL,CAAW2mC,mBALb,EAME,IANF,CAzCF,EAiDE/iC,OAjDF,CAiDU,UAAUuB,CAAV,EAAatB,KAAb,EAAoB;AAC5BsB,SAAC,CAACoC,IAAF,CAAO1D,KAAP;AACAqiC,WAAG,CAAC3jC,KAAJ,CAAU,IAAV,EAAgB4C,CAAhB;AACD,OApDD;AAqDAhH,UAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWqmC,wBAAhC;AACAxgB,iBAAW,CAAC+gB,GAAZ;AACA/gB,iBAAW,CAAC6P,OAAZ,CAAoBv3B,IAAI,CAACs3B,YAAL,CAAkB9xB,MAAtC;AACAoiB,yBAAmB,CAAC6gB,GAApB;AACA7gB,yBAAmB,CAAC2P,OAApB,CAA4B,CAC1Bv3B,IAAI,CAACsC,SAAL,CAAeE,SADW,EAE1BxC,IAAI,CAACsC,SAAL,CAAeC,UAFW,CAA5B;AAIAslB,sBAAgB,CAAC4gB,GAAjB;AACA5gB,sBAAgB,CAAC0P,OAAjB,CAAyB,CAACv3B,IAAI,CAAC0oC,IAAN,EAAY1oC,IAAI,CAAC2oC,IAAjB,CAAzB;AACD;;AACD,aAASC,SAAT,GAAqB;AACnB5oC,UAAI,CAAComB,GAAL,CAAS4U,IAAT;AACA,UAAItlB,CAAJ;;AACA,UAAI1V,IAAI,CAACkJ,UAAL,CAAgBy+B,eAAhB,IAAmC3nC,IAAI,CAACkJ,UAAL,CAAgB+pB,KAAvD,EAA8D;AAC5D,YAAI3L,YAAY,CAAC9hB,MAAb,KAAwB,CAA5B,EAA+B;AAC7B8hB,sBAAY,GAAGS,SAAS,CAAC,CAAD,EAAIN,cAAJ,EAAoB,CAApB,EAAuB,CAAvB,CAAxB;AACD;;AACDH,oBAAY,CAACmhB,GAAb;AACAnhB,oBAAY,CAACiQ,OAAb,CAAqB7B,WAAW,CAACC,GAAZ,KAAoBrvB,CAAzC;AACD;;AACD,UAAI,CAACtG,IAAI,CAACkJ,UAAL,CAAgB+pB,KAArB,EAA4B;AAC1BjzB,YAAI,CAAComB,GAAL,CAASqV,OAAT;AACA;AACD;;AACDz7B,UAAI,CAAComB,GAAL,CAAS8M,IAAT,GAAgBlzB,IAAI,CAAC6B,KAAL,CAAWsxB,SAA3B;AACAzd,OAAC,GAAG,EAAJ;AACAA,OAAC,CAACmzB,IAAF,GAAS,CACPvhB,YAAY,CAACtS,MAAb,CAAoB,UAAUtH,CAAV,EAAaiF,CAAb,EAAgB;AAClC,eAAOjF,CAAC,GAAGiF,CAAX;AACD,OAFD,EAEG,CAFH,IAEQyO,IAAI,CAACQ,GAAL,CAAS4F,SAAT,EAAoBF,YAAY,CAAC9hB,MAAjC,CAHD,EAIPyiC,OAJO,CAIC,CAJD,CAAT;AAKAvyB,OAAC,CAACozB,SAAF,GAAcxhB,YAAY,CAAC,CAAD,CAAZ,CAAgB2gB,OAAhB,CAAwB,CAAxB,CAAd;AACAvyB,OAAC,CAACorB,kBAAF,GAAuBrN,qBAAqB,EAA5C;AACA/d,OAAC,CAACqzB,UAAF,GAAe9jC,MAAM,CAAC8L,IAAP,CAAY/Q,IAAI,CAAC8nB,cAAjB,EAAiCtiB,MAAhD;AACAkQ,OAAC,CAAC4uB,aAAF,GACE,QACA,CAACtkC,IAAI,CAACskC,aAAL,IAAsB;AAAErxB,mBAAW,EAAE;AAAf,OAAvB,EAA2CA,WAD3C,GAEA,OAFA,GAGA,CAACjT,IAAI,CAACskC,aAAL,IAAsB;AAAE9xB,gBAAQ,EAAE;AAAZ,OAAvB,EAAwCA,QAJ1C;AAKAkD,OAAC,CAACsvB,aAAF,GACE,QACA,CAAChlC,IAAI,CAACglC,aAAL,IAAsB;AAAE/xB,mBAAW,EAAE;AAAf,OAAvB,EAA2CA,WAD3C,GAEA,OAFA,GAGA,CAACjT,IAAI,CAACglC,aAAL,IAAsB;AAAExyB,gBAAQ,EAAE;AAAZ,OAAvB,EAAwCA,QAJ1C;AAKAkD,OAAC,CAACuL,KAAF,GAAUjhB,IAAI,CAACihB,KAAf;AACAvL,OAAC,CAACszB,UAAF,GAAehpC,IAAI,CAACgpC,UAApB;AACAtzB,OAAC,CAACuzB,UAAF,GAAejpC,IAAI,CAACipC,UAApB;AACAvzB,OAAC,CAACwzB,cAAF,GAAmBlpC,IAAI,CAACkpC,cAAxB;AACAxzB,OAAC,CAACyzB,WAAF,GAAgBnpC,IAAI,CAACmpC,WAArB;AACAzzB,OAAC,CAAC0zB,OAAF,GACE,SACA,CAACppC,IAAI,CAACqpC,aAAL,IAAsB;AAAEpnC,SAAC,EAAE;AAAL,OAAvB,EAAiCA,CADjC,GAEA,OAFA,GAGA,CAACjC,IAAI,CAACspC,cAAL,IAAuB;AAAErnC,SAAC,EAAE;AAAL,OAAxB,EAAkCA,CAJpC;AAKAyT,OAAC,CAACpT,SAAF,GAActC,IAAI,CAACsC,SAAL,CAAeinB,QAAf,EAAd;AACA7T,OAAC,CAAC6zB,WAAF,GACE,QAAQvpC,IAAI,CAAC2/B,eAAb,GAA+B,OAA/B,GAAyC3/B,IAAI,CAAC0jC,cADhD;AAEAhuB,OAAC,CAAC8zB,WAAF,GACE,QAAQxpC,IAAI,CAACy/B,eAAb,GAA+B,OAA/B,GAAyCz/B,IAAI,CAACyjC,cADhD;AAEA/tB,OAAC,CAAC+zB,YAAF,GACE,QAAQzpC,IAAI,CAAC6c,gBAAb,GAAgC,OAAhC,GAA0C7c,IAAI,CAAC+c,eADjD;AAEArH,OAAC,CAACg0B,UAAF,GAAe,QAAQ1pC,IAAI,CAAC0pC,UAAL,CAAgB3nC,CAAxB,GAA4B,OAA5B,GAAsC/B,IAAI,CAAC0pC,UAAL,CAAgBznC,CAArE;AACAyT,OAAC,CAACi0B,cAAF,GACE,QAAQ3pC,IAAI,CAAC2pC,cAAL,CAAoB5nC,CAA5B,GAAgC,OAAhC,GAA0C/B,IAAI,CAAC2pC,cAAL,CAAoB1nC,CADhE;AAEAyT,OAAC,CAACk0B,eAAF,GACE,QAAQ5pC,IAAI,CAAC4pC,eAAL,CAAqB7nC,CAA7B,GAAiC,OAAjC,GAA2C/B,IAAI,CAAC4pC,eAAL,CAAqB3nC,CADlE;AAEAyT,OAAC,CAACm0B,QAAF,GAAa,QAAQ7pC,IAAI,CAAC2oC,IAAb,GAAoB,OAApB,GAA8B3oC,IAAI,CAAC0oC,IAAhD;AACAhzB,OAAC,CAACo0B,SAAF,GAAc,QAAQ9pC,IAAI,CAAC+pC,KAAb,GAAqB,OAArB,GAA+B/pC,IAAI,CAACgqC,KAAlD;AACAt0B,OAAC,CAACu0B,aAAF,GAAkBjqC,IAAI,CAACiqC,aAAvB;AACAv0B,OAAC,CAACw0B,mBAAF,GAAwBlqC,IAAI,CAACkqC,mBAAL,GACpBlqC,IAAI,CAACkqC,mBAAL,CAAyBnoC,CAAzB,GAA6B,IAA7B,GAAoC/B,IAAI,CAACkqC,mBAAL,CAAyBjoC,CADzC,GAEpB,EAFJ;AAGAyT,OAAC,CAAC0U,IAAF,GAAS,QAAQpqB,IAAI,CAACwO,KAAb,GAAqB,OAArB,GAA+BxO,IAAI,CAACmC,MAA7C;AACAuT,OAAC,CAACy0B,KAAF,GAAU,QAAQnqC,IAAI,CAACmqC,KAAL,CAAWpoC,CAAnB,GAAuB,OAAvB,GAAiC/B,IAAI,CAACmqC,KAAL,CAAWloC,CAAtD;AACAyT,OAAC,CAAC00B,KAAF,GAAU,CAACpqC,IAAI,CAACqqC,UAAN,GACN,EADM,GAEN,QAAQrqC,IAAI,CAACqqC,UAAL,CAAgBtoC,CAAxB,GAA4B,OAA5B,GAAsC/B,IAAI,CAACqqC,UAAL,CAAgBpoC,CAF1D;AAGAyT,OAAC,CAACwgB,QAAF,GAAal2B,IAAI,CAACs3B,YAAL,CAAkB9xB,MAA/B;AACAkQ,OAAC,CAACjH,QAAF,GAAazO,IAAI,CAACyO,QAAlB;AACAiH,OAAC,CAACivB,QAAF,GAAa3kC,IAAI,CAAC2kC,QAAlB;;AACA,UAAI3kC,IAAI,CAAC+0B,WAAT,EAAsB;AACpBrf,SAAC,CAACzC,WAAF,GAAgBjT,IAAI,CAAC+0B,WAAL,CAAiB9hB,WAAjC;AACAyC,SAAC,CAAClD,QAAF,GAAaxS,IAAI,CAAC+0B,WAAL,CAAiBviB,QAA9B;AACAkD,SAAC,CAAC8d,eAAF,GAAoBxzB,IAAI,CAAC+0B,WAAL,CAAiBvB,eAArC;AACA9d,SAAC,CAAC2kB,YAAF,GAAiBr6B,IAAI,CAAC+0B,WAAL,CAAiBsF,YAAlC;AACA3kB,SAAC,CAAC2Q,OAAF,GAAYrmB,IAAI,CAAC+0B,WAAL,CAAiB1O,OAA7B;AACA3Q,SAAC,CAAC40B,WAAF,GAAgBtqC,IAAI,CAAC+0B,WAAL,CAAiBuV,WAAjC;AACA50B,SAAC,CAAC7T,KAAF,GAAU7B,IAAI,CAAC+0B,WAAL,CAAiBlzB,KAA3B;AACA6T,SAAC,CAAC7K,IAAF,GAAS7K,IAAI,CAAC+0B,WAAL,CAAiBlqB,IAA1B;AACD;;AACD7K,UAAI,CAAComB,GAAL,CAASjY,SAAT,GAAqB,OAArB;AACAnO,UAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAW0oC,oBAAhC;AACAtgB,cAAQ,CAAC,CAAD,EAAI,CAAJ,EAAOjqB,IAAI,CAACwO,KAAZ,EAAmBxO,IAAI,CAACmC,MAAxB,CAAR;AACA8C,YAAM,CAAC8L,IAAP,CAAY2E,CAAZ,EAAejQ,OAAf,CAAuB,UAAUyL,GAAV,EAAexL,KAAf,EAAsB;AAC3C,YAAIywB,CAAC,GAAGjlB,GAAG,GAAG,IAAN,GAAawE,CAAC,CAACxE,GAAD,CAAtB;AAAA,YACEs5B,EAAE,GAAG,EADP;AAEAxqC,YAAI,CAAComB,GAAL,CAAS2E,SAAT,GAAqB/qB,IAAI,CAAC6B,KAAL,CAAWuxB,UAAhC;AACAxE,gBAAQ,CACNuH,CADM,EAEN5Y,CAAC,GAAG,EAFE,EAGN,CAACvd,IAAI,CAACkJ,UAAL,CAAgBy+B,eAAhB,GAAkC,GAAlC,GAAwC,EAAzC,IAA+CjiC,KAAK,GAAG8kC,EAHjD,CAAR;AAKD,OATD;AAUAxqC,UAAI,CAAComB,GAAL,CAASqV,OAAT;AACD;;AACDz7B,QAAI,CAAComB,GAAL,CAAS4U,IAAT;AACAoF,YAAQ;AACRG,kBAAc;AACdE,iBAAa;AACbyC,kBAAc;AACdK,YAAQ;AACRyC,kBAAc;AACdjH,eAAW;AACX2H,qBAAiB;AACjBlB,wBAAoB;AACpBnB,sBAAkB;AAClBL,mBAAe;AACfiB,cAAU;AACVG,wBAAoB;AACpBpP,kBAAc;;AACd,QAAI/B,iBAAJ,EAAuB;AACrBj0B,UAAI,CAACiI,MAAL,CAAY,IAAZ;AACD;;AACD04B,iBAAa;AACbiI,aAAS;AACTlB,iBAAa;;AACb,QAAI1nC,IAAI,CAACwE,aAAL,CAAmB,WAAnB,EAAgC,EAAhC,CAAJ,EAAyC;AACvC;AACD;;AACDxE,QAAI,CAAComB,GAAL,CAASqV,OAAT;AACD,GA3tED;AA4tED,C;;;;;;;;;;;;;;;;;;;;;;ACr7FD;;AACA;AACa;;;;;;;;AAEb;AACA;AAEA,6BAAe,oCAAUz7B,IAAV,EAAgB;AAC7B,MAAIyqC,QAAJ;;AACAzqC,MAAI,CAAC6Q,eAAL,GAAuB,UAAUjL,CAAV,EAAa;AAClCA,KAAC,CAACiL,eAAF;AACD,GAFD;AAGA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACE7Q,MAAI,CAACM,gBAAL,GAAwB,UAAU6D,EAAV,EAAcumC,EAAd,EAAkB;AACxC1qC,QAAI,CAAC2qC,MAAL,CAAYxmC,EAAZ,IAAkBnE,IAAI,CAAC2qC,MAAL,CAAYxmC,EAAZ,KAAmB,EAArC;AACAnE,QAAI,CAAC2qC,MAAL,CAAYxmC,EAAZ,EAAgBozB,OAAhB,CAAwBmT,EAAxB;AACD,GAHD;AAIA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACE1qC,MAAI,CAAC2F,mBAAL,GAA2B,UAAUxB,EAAV,EAAcumC,EAAd,EAAkB;AAC3C,KAAC1qC,IAAI,CAAC2qC,MAAL,CAAYxmC,EAAZ,KAAmB,EAApB,EAAwBsB,OAAxB,CAAgC,SAASmlC,kBAAT,CAA4BC,GAA5B,EAAiCtmC,GAAjC,EAAsC;AACpE,UAAImmC,EAAE,KAAKG,GAAX,EAAgB;AACd7qC,YAAI,CAAC2qC,MAAL,CAAYxmC,EAAZ,EAAgB+H,MAAhB,CAAuB3H,GAAvB,EAA4B,CAA5B;AACD;AACF,KAJD;AAKD,GAND;AAOA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEvE,MAAI,CAACwE,aAAL,GAAqB,UAAUL,EAAV,EAAcyB,CAAd,EAAiB;AACpCA,KAAC,GAAGzB,EAAE,CAAC0G,IAAH,GAAU1G,EAAV,GAAeyB,CAAC,IAAI,EAAxB;AACAzB,MAAE,GAAGA,EAAE,CAAC0G,IAAH,IAAW1G,EAAhB;AACA,QAAI2mC,gBAAJ;;AACA,aAASv5B,cAAT,GAA0B;AACxBu5B,sBAAgB,GAAG,IAAnB;AACD;;AACD,QAAI,CAAC9qC,IAAI,CAAC2qC,MAAL,CAAYxmC,EAAZ,CAAL,EAAsB;AACpB;AACD;;AACDnE,QAAI,CAAC2qC,MAAL,CAAYxmC,EAAZ,EAAgBsB,OAAhB,CAAwB,SAASslC,iBAAT,CAA2BL,EAA3B,EAA+B;AACrD9kC,OAAC,CAACwgB,GAAF,GAAQpmB,IAAI,CAAComB,GAAb;AACAxgB,OAAC,CAAC2L,cAAF,GAAmBA,cAAnB;AACAm5B,QAAE,CAACtmC,KAAH,CAASpE,IAAI,CAACmB,IAAd,EAAoB,CAACyE,CAAD,CAApB;AACD,KAJD;AAKA,WAAOklC,gBAAP;AACD,GAhBD;;AAiBA9qC,MAAI,CAACgrC,QAAL,GAAgB,YAAY;AAC1B,WAAO5pB,IAAI,CAACQ,GAAL,CACL5hB,IAAI,CAACkJ,UAAL,CAAgB+hC,aADX,EAEL,CAACrmC,MAAM,CAACsmC,gBAAP,IAA2B,CAA5B,KACGlrC,IAAI,CAAComB,GAAL,CAAS+kB,4BAAT,IACCnrC,IAAI,CAAComB,GAAL,CAASglB,yBADV,IAECprC,IAAI,CAAComB,GAAL,CAASilB,wBAFV,IAGCrrC,IAAI,CAAComB,GAAL,CAASklB,uBAHV,IAICtrC,IAAI,CAAComB,GAAL,CAASmlB,sBAJV,IAKC,CANJ,CAFK,CAAP;AAUD,GAXD;AAYA;AACF;AACA;;;AACEvrC,MAAI,CAACwrC,mBAAL,GAA2B,YAAY;AACrC,QAAM/pC,CAAC,GAAGzB,IAAI,CAACkU,SAAL,EAAV;AACAlU,QAAI,CAACw2B,WAAL,CAAiBz0B,CAAjB,GAAqB,EAArB;AAEA;;AACA,QAAI0pC,WAAW,GAAG,CAAlB;AAEA,QAAMtW,qBAAqB,GAAGn1B,IAAI,CAAC4zB,wBAAL,EAA9B;;AACA,QAAM8X,iBAAiB,GAAG,SAApBA,iBAAoB,CAACz4B,WAAD;AAAA,aACxBkiB,qBAAqB,CAACxhB,SAAtB,CACE,UAAC4E,KAAD;AAAA,eAAWtF,WAAW,IAAIsF,KAAK,CAAC0B,IAArB,IAA6BhH,WAAW,IAAIsF,KAAK,CAAC2B,EAA7D;AAAA,OADF,KAEK,CAHmB;AAAA,KAA1B;;AAKA,QAAMyxB,SAAS,GACblqC,CAAC,CAACuT,MAAF,CAAS,SAAS42B,YAAT,CAAsBC,WAAtB,EAAmCl2B,MAAnC,EAA2C1C,WAA3C,EAAwD;AAC/D;AACA,UAAMO,WAAW,GAAGxT,IAAI,CAACqT,MAAL,CAAYC,OAAZ,CAAoBL,WAApB,CAApB;AACA,UAAM8D,WAAW,GAAG/W,IAAI,CAAC8zB,cAAL,CAAoBtgB,WAApB,CAApB;AACAmC,YAAM,GAAGlU,CAAC,CAAC+R,WAAD,CAAV;AACA,UAAI,CAACmC,MAAM,CAACE,MAAR,IAAkB,CAAC61B,iBAAiB,CAACz4B,WAAD,CAAxC,EACE44B,WAAW,IAAI90B,WAAf;;AACF,UAAI9D,WAAW,GAAGjT,IAAI,CAAC0zB,YAAvB,EAAqC;AACnC1zB,YAAI,CAACw2B,WAAL,CAAiBz0B,CAAjB,CAAmBkR,WAAnB,IAAkC44B,WAAlC;AACAJ,mBAAW,GAAGI,WAAd;AACD,OAHD,MAGO;AACL7rC,YAAI,CAACw2B,WAAL,CAAiBz0B,CAAjB,CAAmBkR,WAAnB,IAAkCmO,IAAI,CAACO,GAAL,CAChC8pB,WAAW,GAAG10B,WADkB,EAEhC80B,WAFgC,CAAlC;AAID;;AACD,aAAOA,WAAP;AACD,KAjBD,EAiBG,CAjBH,KAiBS,CAlBX;AAmBA,WAAOF,SAAP;AACD,GAjCD;;AAkCA3rC,MAAI,CAACiI,MAAL,GAAc,UAAU6jC,eAAV,EAA2B;AACvC,QAAI,CAAC9rC,IAAI,CAAC2B,MAAV,EAAkB;AAChB;AACD;;AACD,QAAII,CAAJ;AAAA,QACEqnB,CAAC,GAAG;AACFrnB,OAAC,EAAE,CADD;AAEFE,OAAC,EAAE,CAFD;AAGFE,YAAM,EAAE,CAHN;AAIFqM,WAAK,EAAE,CAJL;AAKF3M,WAAK,EAAE;AALL,KADN;AAAA,QAQE6G,CAAC,GAAG;AACF3G,OAAC,EAAE,CADD;AAEFE,OAAC,EAAE,CAFD;AAGFE,YAAM,EAAE,CAHN;AAIFqM,WAAK,EAAE,CAJL;AAKF3M,WAAK,EAAE;AALL,KARN;AAAA,QAeEkqC,EAAE,GAAG;AACHhqC,OAAC,EAAE,CADA;AAEHE,OAAC,EAAE,CAFA;AAGHE,YAAM,EAAE,CAHL;AAIHqM,WAAK,EAAE,CAJJ;AAKH3M,WAAK,EAAE;AALJ,KAfP;AAAA,QAsBEmqC,EAAE,GAAG;AACHjqC,OAAC,EAAE,CADA;AAEHE,OAAC,EAAE,CAFA;AAGHE,YAAM,EAAE,CAHL;AAIHqM,WAAK,EAAE,CAJJ;AAKH3M,WAAK,EAAE;AALJ,KAtBP;AAAA,QA6BEoqC,EAAE,GAAG;AACHlqC,OAAC,EAAE,CADA;AAEHE,OAAC,EAAE,CAFA;AAGHE,YAAM,EAAE,CAHL;AAIHqM,WAAK,EAAE,CAJJ;AAKHoG,cAAQ,EAAE,IALP;AAMHs3B,uBAAiB,EAAE,IANhB;AAOHrqC,WAAK,EAAE;AAPJ,KA7BP;AAAA,QAsCEs0B,CAAC,GAAGn2B,IAAI,CAAC6B,KAAL,CAAWu0B,kBAAX,GAAgC,CAtCtC;AAAA,QAuCEzjB,CAAC,GAAG3S,IAAI,CAAC6B,KAAL,CAAWy0B,oBAAX,GAAkC,CAvCxC;AAAA,QAwCE5gB,CAAC,GAAG1V,IAAI,CAAC6B,KAAL,CAAWu0B,kBAAX,GAAgC,GAxCtC;AAAA,QAyCE+V,GAAG,GAAGnsC,IAAI,CAAC6B,KAAL,CAAWic,cAAX,GAA4B9d,IAAI,CAAC6B,KAAL,CAAWy0B,oBAAX,GAAkC,CAzCtE;AAAA,QA0CE8V,KAAK,GAAGpsC,IAAI,CAACgrC,QAAL,EA1CV;AAAA,QA2CE3sB,EAAE,GAAGre,IAAI,CAAC6B,KAAL,CAAWyc,kBAAX,KAAkC,UAAlC,GAA+C,CAA/C,GAAmD,CA3C1D;AAAA,QA4CE+tB,UAAU,GAAGrsC,IAAI,CAAC6B,KAAL,CAAW2c,eAAX,GAA6BH,EA5C5C;AAAA,QA6CEiuB,sBAAsB,GAAGtsC,IAAI,CAAC6B,KAAL,CAAW69B,2BAAX,GAAyCrhB,EA7CpE;AAAA,QA8CEkuB,UAAU,GAAG,CA9Cf;AAAA,QA+CEZ,SAAS,GAAG,CA/Cd;AAAA,QAgDEa,IAhDF;AAAA,QAiDEvc,CAAC,GAAG,CAACjwB,IAAI,CAACmQ,QAAL,IAAiB,EAAlB,EAAsB3K,MAjD5B;AAAA,QAkDEkY,sBAAsB,GAAG1d,IAAI,CAAC2d,yBAAL,EAlD3B;AAAA,QAmDEC,kBAAkB,GAAG5d,IAAI,CAAC6d,qBAAL,EAnDvB;AAAA,QAoDE4uB,kBAAkB,GAAGzsC,IAAI,CAAC+X,wBAAL,EApDvB;AAAA,QAqDE20B,kBAAkB,GAAG1sC,IAAI,CAACiY,oBAAL,EArDvB;AAAA,QAsDE00B,EAAE,GAAG3sC,IAAI,CAAC6B,KAAL,CAAWoV,UAtDlB,CAJuC,CA2DvC;;AACA,aAAS21B,wBAAT,GAAoC;AAClC5sC,UAAI,CAACsC,SAAL,CAAe00B,oBAAf,GACGh3B,IAAI,CAAC6B,KAAL,CAAW2M,KAAX,KAAqB,MAArB,IACCm9B,SAAS,GAAG3rC,IAAI,CAACsC,SAAL,CAAekM,KAD5B,IAECxO,IAAI,CAAC6B,KAAL,CAAWgrC,SAAX,KAAyB,QAF3B,IAGA7sC,IAAI,CAAC6B,KAAL,CAAWgrC,SAAX,KAAyB,QAJ3B;AAKA7sC,UAAI,CAACsC,SAAL,CAAe60B,oBAAf,GAAsCwU,SAAS,GAAG3rC,IAAI,CAACsC,SAAL,CAAekM,KAAjE;AACAxO,UAAI,CAACsC,SAAL,CAAek1B,kBAAf,GACGx3B,IAAI,CAAC6B,KAAL,CAAWM,MAAX,KAAsB,MAAtB,IACCoqC,UAAU,GAAGvsC,IAAI,CAACsC,SAAL,CAAeH,MAD7B,IAECnC,IAAI,CAAC6B,KAAL,CAAWirC,SAAX,KAAyB,QAF3B,IAGA9sC,IAAI,CAAC6B,KAAL,CAAWirC,SAAX,KAAyB,QAJ3B;AAKA9sC,UAAI,CAACsC,SAAL,CAAem1B,kBAAf,GAAoC8U,UAAU,GAAGvsC,IAAI,CAACsC,SAAL,CAAeH,MAAhE;AACD;;AACD,aAAS4qC,gBAAT,GAA4B;AAC1B/sC,UAAI,CAACsC,SAAL,CAAekM,KAAf,GACExO,IAAI,CAACwO,KAAL,GAAaoP,kBAAb,GAAkC8uB,kBADpC;AAEA1sC,UAAI,CAACsC,SAAL,CAAeH,MAAf,GACEnC,IAAI,CAACmC,MAAL,GAAcub,sBAAd,GAAuC+uB,kBADzC;AAED;;AACD,aAASO,aAAT,GAAyB;AACvB,UAAIhtC,IAAI,CAACyb,WAAT,EAAsB;AACpB;AACD;;AACD+wB,UAAI,GAAG;AACL;AACArqC,cAAM,EACJub,sBAAsB,GACtB+uB,kBADA,GAEAF,UAFA,GAGAF,UAHA,GAIA,CAPG;AAQL79B,aAAK,EAAEm9B,SAAS,GAAG/tB,kBAAZ,GAAiCyuB,UAAjC,GAA8CK;AARhD,OAAP;AAUA,OAAC,OAAD,EAAU,QAAV,EAAoBjnC,OAApB,CAA4B,UAAUwnC,GAAV,EAAe;AACzC;AACA,YACE,CAAC,MAAD,EAASrrC,SAAT,EAAoBuK,OAApB,CAA4BnM,IAAI,CAAC6B,KAAL,CAAWorC,GAAX,CAA5B,MAAiD,CAAC,CAAlD,IACA,CAAC,MAAD,EAASrrC,SAAT,EAAoBuK,OAApB,CAA4BnM,IAAI,CAACktC,mBAAL,CAAyBD,GAAzB,CAA5B,MAA+D,CAAC,CAFlE,EAGE;AACAjtC,cAAI,CAAC4mB,eAAL,CAAqBqmB,GAArB,IAA4BT,IAAI,CAACS,GAAD,CAAJ,GAAY,IAAxC;AACD,SALD,MAKO,IACL,CAAC,MAAD,EAASrrC,SAAT,EAAoBuK,OAApB,CAA4BnM,IAAI,CAAC6B,KAAL,CAAWorC,GAAX,CAA5B,KAAgD,CAAC,CAAjD,IACA,CAAC,MAAD,EAASrrC,SAAT,EAAoBuK,OAApB,CAA4BnM,IAAI,CAACktC,mBAAL,CAAyBD,GAAzB,CAA5B,KAA8D,CAAC,CAF1D,EAGL;AACAjtC,cAAI,CAAC4mB,eAAL,CAAqBqmB,GAArB,IAA4BjtC,IAAI,CAAC6B,KAAL,CAAWorC,GAAX,CAA5B;;AACA,cAAIjtC,IAAI,CAACsH,WAAT,EAAsB;AACpBtH,gBAAI,CAAC2B,MAAL,CAAYE,KAAZ,CAAkBorC,GAAlB,IAAyBjtC,IAAI,CAAC6B,KAAL,CAAWorC,GAAX,CAAzB;AACD;AACF;AACF,OAhBD;AAiBD;;AACDtB,aAAS,GAAG3rC,IAAI,CAACwrC,mBAAL,EAAZ;AACAxrC,QAAI,CAACw2B,WAAL,CAAiBv0B,CAAjB,GAAqB,EAArB;;AACA,SAAKF,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkuB,CAAhB,EAAmBluB,CAAC,IAAI,CAAxB,EAA2B;AACzB/B,UAAI,CAACw2B,WAAL,CAAiBv0B,CAAjB,CAAmBF,CAAnB,IAAwBwqC,UAAxB;AACAA,gBAAU,IACR,CAAC,CAACvsC,IAAI,CAACyW,KAAL,CAAWC,IAAX,CAAgB3U,CAAhB,KAAsB4qC,EAAvB,KAA8B3sC,IAAI,CAACyW,KAAL,CAAWwpB,KAAX,CAAiBl+B,CAAjB,KAAuB,CAArD,CAAD,IAA4D/B,IAAI,CAACihB,KAAjE,KACA;AACCjhB,UAAI,CAAC62B,SAAL,GAAiB90B,CAAjB,GAAqB/B,IAAI,CAACyW,KAAL,CAAWwpB,KAAX,CAAiBl+B,CAAjB,KAAuB,CAA5C,GAAgD,CAFjD,CADF;AAID;;AACD,QAAIkuB,CAAC,GAAG,CAAR,EAAW;AACTjwB,UAAI,CAACw2B,WAAL,CAAiBv0B,CAAjB,CAAmBF,CAAnB,IAAwBwqC,UAAxB;AACD;;AACD,QAAIvsC,IAAI,CAACkJ,UAAL,CAAgB46B,UAApB,EAAgC;AAC9ByI,gBAAU,IAAII,EAAd;AACD;;AACD,QAAI3sC,IAAI,CAACkJ,UAAL,CAAgBs6B,SAApB,EAA+B;AAC7B+I,gBAAU,IAAIvsC,IAAI,CAAC6B,KAAL,CAAWoV,UAAzB;AACD;;AACD+1B,iBAAa;;AACb,QAAIhtC,IAAI,CAACyb,WAAT,EAAsB;AACpBzb,UAAI,CAACwO,KAAL,GAAaxO,IAAI,CAACkD,UAAL,CAAgBsJ,WAA7B;AACAxM,UAAI,CAACmC,MAAL,GAAcnC,IAAI,CAACkD,UAAL,CAAgBK,YAA9B;AACD,KAHD,MAGO,IACLvD,IAAI,CAACmC,MAAL,KAAgBnC,IAAI,CAAC2B,MAAL,CAAY4B,YAA5B,IACAvD,IAAI,CAACwO,KAAL,KAAexO,IAAI,CAAC2B,MAAL,CAAY6K,WAFtB,EAGL;AACAxM,UAAI,CAACmC,MAAL,GAAcnC,IAAI,CAAC2B,MAAL,CAAY4B,YAA1B;AACAvD,UAAI,CAACwO,KAAL,GAAaxO,IAAI,CAAC2B,MAAL,CAAY6K,WAAzB;AACAxM,UAAI,CAAC6c,gBAAL,GAAwB7c,IAAI,CAACmtC,IAAL,CAAUtwB,gBAAV,IAA8B,CAAtD;AACA7c,UAAI,CAAC+c,eAAL,GAAuB/c,IAAI,CAACmtC,IAAL,CAAUpwB,eAAV,IAA6B,CAApD;AACD,KA9IsC,CA+IvC;AACA;;;AACA/c,QAAI,CAACsC,SAAL,CAAeJ,GAAf,GACEwb,sBAAsB,GAAG+uB,kBAAzB,GAA8CH,sBADhD;AAEAtsC,QAAI,CAACsC,SAAL,CAAeN,IAAf,GAAsB4b,kBAAkB,GAAG8uB,kBAA3C,CAnJuC,CAoJvC;;AACAK,oBAAgB,GArJuB,CAsJvC;;AACAH,4BAAwB,GAvJe,CAwJvC;AACA;;AACA,QAAI5sC,IAAI,CAACsC,SAAL,CAAe00B,oBAAnB,EAAyC;AACvC,UAAIh3B,IAAI,CAAC6B,KAAL,CAAWM,MAAX,KAAsB,MAAtB,IAAgC,CAACnC,IAAI,CAACyb,WAA1C,EAAuD;AACrDzb,YAAI,CAACmC,MAAL,IAAegqC,GAAf;AACD;;AACDI,gBAAU,IAAIJ,GAAd;AACAa,mBAAa;AACbD,sBAAgB;AAChBH,8BAAwB;AACzB;;AACD,QAAI5sC,IAAI,CAACsC,SAAL,CAAek1B,kBAAnB,EAAuC;AACrC,UAAIx3B,IAAI,CAAC6B,KAAL,CAAW2M,KAAX,KAAqB,MAArB,IAA+B,CAACxO,IAAI,CAACyb,WAAzC,EAAsD;AACpDzb,YAAI,CAACwO,KAAL,IAAc29B,GAAd;AACD;;AACDR,eAAS,IAAIQ,GAAb;AACAa,mBAAa;AACbD,sBAAgB;AAChBH,8BAAwB;AACzB,KA3KsC,CA4KvC;;;AACAG,oBAAgB;AAChB/sC,QAAI,CAACsC,SAAL,CAAeq0B,WAAf,GAA6BgV,SAAS,GAAG3rC,IAAI,CAACsC,SAAL,CAAekM,KAAxD;AACAxO,QAAI,CAACsC,SAAL,CAAeuK,YAAf,GAA8B0/B,UAAU,GAAGvsC,IAAI,CAACsC,SAAL,CAAeH,MAA1D;;AACA,QAAInC,IAAI,CAAC0zB,YAAL,GAAoB,CAAxB,EAA2B;AACzB1zB,UAAI,CAACsC,SAAL,CAAe8qC,aAAf,GACE,CAACptC,IAAI,CAACsC,SAAL,CAAekM,KAAf,GAAuBxO,IAAI,CAACw2B,WAAL,CAAiBz0B,CAAjB,CAAmB/B,IAAI,CAAC0zB,YAAL,GAAoB,CAAvC,CAAxB,IACAiY,SAFF;AAGD,KAJD,MAIO;AACL3rC,UAAI,CAACsC,SAAL,CAAe8qC,aAAf,GAA+BptC,IAAI,CAACsC,SAAL,CAAekM,KAAf,GAAuBm9B,SAAtD;AACD;;AACD3rC,QAAI,CAACsC,SAAL,CAAeo0B,cAAf,GACE12B,IAAI,CAACsC,SAAL,CAAekM,KAAf,GAAuBxO,IAAI,CAACsC,SAAL,CAAe8qC,aAAtC,GACAptC,IAAI,CAAC6B,KAAL,CAAWic,cADX,GAEAnL,CAFA,GAGA+C,CAJF,CAvLuC,CA4LvC;AACA;AACA;AACA;AACA;;AACA1V,QAAI,CAACsC,SAAL,CAAe+qC,cAAf,GACE,CAACrtC,IAAI,CAACsC,SAAL,CAAeH,MAAf,GACCub,sBADD,GAEC+uB,kBAFD,GAGCzsC,IAAI,CAACw2B,WAAL,CAAiBv0B,CAAjB,CAAmBjC,IAAI,CAAC62B,SAAxB,CAHF,IAIA0V,UALF;AAMAvsC,QAAI,CAACsC,SAAL,CAAey0B,eAAf,GACE/2B,IAAI,CAACsC,SAAL,CAAeH,MAAf,GAAwBnC,IAAI,CAACsC,SAAL,CAAe+qC,cAAvC,GACArtC,IAAI,CAAC6B,KAAL,CAAWic,cADX,GAEAnL,CAFA,GAGA+C,CAJF;AAKA1V,QAAI,CAACsC,SAAL,CAAeo0B,cAAf,GAAgCtV,IAAI,CAACO,GAAL,CAC9B3hB,IAAI,CAACsC,SAAL,CAAeo0B,cADe,EAE9B12B,IAAI,CAAC6B,KAAL,CAAWyrC,mBAFmB,CAAhC;AAIAttC,QAAI,CAACsC,SAAL,CAAey0B,eAAf,GAAiC3V,IAAI,CAACO,GAAL,CAC/B3hB,IAAI,CAACsC,SAAL,CAAey0B,eADgB,EAE/B/2B,IAAI,CAAC6B,KAAL,CAAWyrC,mBAFoB,CAAjC,CAhNuC,CAoNvC;;AACA5kC,KAAC,CAAC3G,CAAF,IAAO6b,kBAAP;AACAlV,KAAC,CAACzG,CAAF,IAAOjC,IAAI,CAACmC,MAAL,GAAcnC,IAAI,CAAC6B,KAAL,CAAWic,cAAzB,GAA0CpI,CAA1C,GAA8C+2B,kBAArD;AACA/jC,KAAC,CAAC8F,KAAF,GACExO,IAAI,CAACwO,KAAL,GACAxO,IAAI,CAAC6B,KAAL,CAAWic,cADX,GAEAF,kBAFA,GAGA8uB,kBAHA,GAIAh3B,CAJA,GAKAygB,CANF;AAOAztB,KAAC,CAACvG,MAAF,GAAWnC,IAAI,CAAC6B,KAAL,CAAWic,cAAX,GAA4B9d,IAAI,CAAC6B,KAAL,CAAWy0B,oBAAvC,GAA8D5gB,CAAzE,CA9NuC,CA+NvC;;AACAs2B,MAAE,CAAC/pC,CAAH,GAAOyG,CAAC,CAACzG,CAAF,GAAMjC,IAAI,CAAC6B,KAAL,CAAWu0B,kBAAxB;AACA4V,MAAE,CAACx9B,KAAH,GAAWxO,IAAI,CAACsC,SAAL,CAAeo0B,cAA1B;AACAsV,MAAE,CAAC7pC,MAAH,GAAYnC,IAAI,CAAC6B,KAAL,CAAW0rC,iBAAvB,CAlOuC,CAmOvC;;AACAnkB,KAAC,CAACrnB,CAAF,IACE/B,IAAI,CAACwO,KAAL,GACAk+B,kBADA,GAEA1sC,IAAI,CAAC6B,KAAL,CAAWic,cAFX,GAGA9d,IAAI,CAAC6B,KAAL,CAAWy0B,oBAHX,GAIA5gB,CALF;AAMA0T,KAAC,CAACnnB,CAAF,IAAOyb,sBAAsB,GAAG1d,IAAI,CAACw2B,WAAL,CAAiBv0B,CAAjB,CAAmBjC,IAAI,CAAC62B,SAAxB,CAAhC;AACAzN,KAAC,CAAC5a,KAAF,GAAUxO,IAAI,CAAC6B,KAAL,CAAWic,cAAX,GAA4B9d,IAAI,CAAC6B,KAAL,CAAWy0B,oBAAvC,GAA8D5gB,CAAxE;AACA0T,KAAC,CAACjnB,MAAF,GACEnC,IAAI,CAACmC,MAAL,GACAub,sBADA,GAEA+uB,kBAFA,GAGAzsC,IAAI,CAAC6B,KAAL,CAAWic,cAHX,GAIApI,CAJA,GAKAygB,CANF,CA5OuC,CAmPvC;;AACA4V,MAAE,CAAChqC,CAAH,GAAOqnB,CAAC,CAACrnB,CAAF,GAAM/B,IAAI,CAAC6B,KAAL,CAAWu0B,kBAAxB;AACA2V,MAAE,CAAC9pC,CAAH,IAAQjC,IAAI,CAACw2B,WAAL,CAAiBv0B,CAAjB,CAAmBjC,IAAI,CAAC62B,SAAxB,CAAR;AACAkV,MAAE,CAACv9B,KAAH,GAAWxO,IAAI,CAAC6B,KAAL,CAAW0rC,iBAAtB;AACAxB,MAAE,CAAC5pC,MAAH,GAAYnC,IAAI,CAACsC,SAAL,CAAey0B,eAA3B,CAvPuC,CAwPvC;;AACAkV,MAAE,CAAClqC,CAAH,GAAO2G,CAAC,CAAC3G,CAAF,GAAM2G,CAAC,CAAC8F,KAAR,GAAgB2nB,CAAvB;AACA8V,MAAE,CAAChqC,CAAH,GAAOmnB,CAAC,CAACnnB,CAAF,GAAMmnB,CAAC,CAACjnB,MAAR,GAAiBg0B,CAAxB;AACA8V,MAAE,CAACz9B,KAAH,GAAWxO,IAAI,CAAC6B,KAAL,CAAWic,cAAX,GAA4B9d,IAAI,CAAC6B,KAAL,CAAWy0B,oBAAlD;AACA2V,MAAE,CAAC9pC,MAAH,GAAYnC,IAAI,CAAC6B,KAAL,CAAWic,cAAX,GAA4B9d,IAAI,CAAC6B,KAAL,CAAWy0B,oBAAnD;AACAt2B,QAAI,CAACsC,SAAL,CAAe4zB,QAAf,GAA0B;AACxBO,mBAAa,EAAE/tB,CADS;AAExB6tB,mBAAa,EAAEyV,EAFS;AAGxBlV,iBAAW,EAAE1N,CAHW;AAIxBwN,iBAAW,EAAEmV,EAJW;AAKxBnU,YAAM,EAAEqU;AALgB,KAA1B;AAOAjsC,QAAI,CAACsC,SAAL,CAAekrC,GAAf,GAAqB;AACnBpkB,OAAC,EAAEA,CADgB;AAEnBtX,OAAC,EAAEpJ;AAFgB,KAArB;AAIA1I,QAAI,CAACsC,SAAL,CAAemrC,GAAf,GAAqB;AACnBrkB,OAAC,EAAE2iB,EADgB;AAEnBj6B,OAAC,EAAEk6B;AAFgB,KAArB,CAxQuC,CA4QvC;;AACAhsC,QAAI,CAAC0tC,IAAL,GAAYtsB,IAAI,CAACO,GAAL,CACV,CADU,EAEV3hB,IAAI,CAAC85B,WAAL,CAAiBt0B,MAAjB,GAA0B,CAA1B,GAA8BxF,IAAI,CAACkJ,UAAL,CAAgBykC,iBAFpC,CAAZ,CA7QuC,CAiRvC;;AACA,QAAI,CAAC3tC,IAAI,CAACyb,WAAV,EAAuB;AACrB,UAAMmyB,QAAQ,GAAG5tC,IAAI,CAACwO,KAAL,GAAa49B,KAA9B;AACA,UAAMyB,SAAS,GAAG7tC,IAAI,CAACmC,MAAL,GAAciqC,KAAhC,CAFqB,CAGrB;AACA;AACA;AACA;;AACA,UAAIpsC,IAAI,CAAC2B,MAAL,CAAY6M,KAAZ,KAAsBo/B,QAAtB,IAAkC5tC,IAAI,CAAC2B,MAAL,CAAYQ,MAAZ,KAAuB0rC,SAA7D,EAAwE;AACtE7tC,YAAI,CAAC2B,MAAL,CAAY6M,KAAZ,GAAoBo/B,QAApB;AACA5tC,YAAI,CAAC2B,MAAL,CAAYQ,MAAZ,GAAqB0rC,SAArB;AACA7tC,YAAI,CAAComB,GAAL,CAASnF,KAAT,CAAemrB,KAAf,EAAsBA,KAAtB;AACD;AACF,KA9RsC,CA+RvC;;;AACApsC,QAAI,CAACke,eAAL;AACAle,QAAI,CAAC8tC,MAAL,CAAY,IAAZ;;AACA,QAAIhC,eAAJ,EAAqB;AACnB9rC,UAAI,CAACuV,IAAL,CAAU,IAAV;AACD;;AACDvV,QAAI,CAACwE,aAAL,CAAmB,QAAnB,EAA6B,EAA7B;AACA,WAAO,IAAP;AACD,GAvSD;;AAwSAxE,MAAI,CAAC8tC,MAAL,GAAc,UAAUC,QAAV,EAAoB;AAChC,QAAItsC,CAAC,GAAGzB,IAAI,CAACkU,SAAL,EAAR;AAAA,QACE+b,CAAC,GAAG,CAACjwB,IAAI,CAACmQ,QAAL,IAAiB,EAAlB,EAAsB3K,MAD5B;AAAA,QAEEmnC,EAAE,GAAG3sC,IAAI,CAAC6B,KAAL,CAAWoV,UAFlB,CADgC,CAIhC;;AACAjX,QAAI,CAAC0jC,cAAL,GAAsBtiB,IAAI,CAAC4sB,KAAL,CACpB/d,CAAC,IAAIjwB,IAAI,CAACsC,SAAL,CAAeE,SAAf,GAA2BxC,IAAI,CAACsC,SAAL,CAAeuK,YAA9C,CAAD,GAA+D,GAD3C,CAAtB;AAGA7M,QAAI,CAAC0jC,cAAL,GAAsBtiB,IAAI,CAACO,GAAL,CAAS3hB,IAAI,CAAC0jC,cAAd,EAA8B,CAA9B,CAAtB;AACA1jC,QAAI,CAACyjC,cAAL,GAAsBzjC,IAAI,CAACw2B,WAAL,CAAiBv0B,CAAjB,CAAmBjC,IAAI,CAAC0jC,cAAxB,CAAtB,CATgC,CAUhC;;AACA,QAAI1jC,IAAI,CAACsC,SAAL,CAAeuK,YAAf,KAAgC,CAApC,EAAuC;AACrC7M,UAAI,CAAC0jC,cAAL,GAAsB,CAAtB;AACD;;AACD1jC,QAAI,CAACyjC,cAAL,GAAsB,CAAtB;AACAzjC,QAAI,CAAC2/B,eAAL,GAAuB3/B,IAAI,CAAC0zB,YAA5B;AACA1zB,QAAI,CAACy/B,eAAL,GAAuB,CAAvB;;AACA,WACEz/B,IAAI,CAACyjC,cAAL,GAAsBzjC,IAAI,CAACsC,SAAL,CAAeE,SAArC,IACAxC,IAAI,CAAC0jC,cAAL,GAAsB1jC,IAAI,CAACmQ,QAAL,CAAc3K,MAFtC,EAGE;AACA;AACAxF,UAAI,CAAC0jC,cAAL,IAAuB,CAAvB;AACA1jC,UAAI,CAACyjC,cAAL,GAAsBzjC,IAAI,CAACw2B,WAAL,CAAiBv0B,CAAjB,CAAmBjC,IAAI,CAAC0jC,cAAxB,CAAtB;AACD;;AACD,WACE1jC,IAAI,CAACy/B,eAAL,GAAuBz/B,IAAI,CAACsC,SAAL,CAAeC,UAAf,GAA4B,CAAnD,IACAvC,IAAI,CAAC2/B,eAAL,GAAuBl+B,CAAC,CAAC+D,MAF3B,EAGE;AACAxF,UAAI,CAACy/B,eAAL,GAAuBz/B,IAAI,CAACw2B,WAAL,CAAiBz0B,CAAjB,CAAmB/B,IAAI,CAAC2/B,eAAxB,CAAvB;AACA3/B,UAAI,CAAC2/B,eAAL,IAAwB,CAAxB;AACD;;AACD,QAAIl+B,CAAC,CAAC+D,MAAF,GAAW,CAAf,EAAkB;AAChBxF,UAAI,CAAC2/B,eAAL,GAAuBve,IAAI,CAACO,GAAL,CAAS3hB,IAAI,CAAC2/B,eAAL,GAAuB,CAAhC,EAAmC,CAAnC,CAAvB;AACA3/B,UAAI,CAACy/B,eAAL,IAAwBz/B,IAAI,CAAC8zB,cAAL,CACtB9zB,IAAI,CAACqT,MAAL,CAAYC,OAAZ,CAAoBtT,IAAI,CAAC2/B,eAAzB,CADsB,CAAxB;AAGD;;AACD,QAAI,CAAC3/B,IAAI,CAACmQ,QAAL,IAAiB,EAAlB,EAAsB3K,MAAtB,GAA+B,CAAnC,EAAsC;AACpCxF,UAAI,CAAC0jC,cAAL,GAAsBtiB,IAAI,CAACO,GAAL,CAAS3hB,IAAI,CAAC0jC,cAAL,GAAsB,CAA/B,EAAkC,CAAlC,CAAtB;AACA1jC,UAAI,CAACyjC,cAAL,GAAsBriB,IAAI,CAACO,GAAL,CACpB3hB,IAAI,CAACyjC,cAAL,GACE,CAACzjC,IAAI,CAACmQ,QAAL,CAAcnQ,IAAI,CAAC0jC,cAAnB,IACG,CAAC1jC,IAAI,CAACyW,KAAL,CAAWC,IAAX,CAAgB1W,IAAI,CAAC0jC,cAArB,KAAwCiJ,EAAzC,KACC3sC,IAAI,CAACyW,KAAL,CAAWwpB,KAAX,CAAiBjgC,IAAI,CAAC0jC,cAAtB,KAAyC,CAD1C,CADH,GAGGiJ,EAHJ,IAIE3sC,IAAI,CAACihB,KANW,EAOpB,CAPoB,CAAtB;AASD;;AACDjhB,QAAI,CAACmwB,aAAL,GAAqB,EAArB;;AACA,QAAI,CAAC4d,QAAL,EAAe;AACb/tC,UAAI,CAACuV,IAAL,CAAU,IAAV;AACD,KArD+B,CAsDhC;AACA;;;AACAlS,yBAAqB,CAACrD,IAAI,CAACke,eAAN,CAArB;AACAle,QAAI,CAACwE,aAAL,CAAmB,QAAnB,EAA6B;AAC3BtC,SAAG,EAAElC,IAAI,CAACsC,SAAL,CAAeE,SADO;AAE3BR,UAAI,EAAEhC,IAAI,CAACsC,SAAL,CAAeC;AAFM,KAA7B;AAID,GA7DD;;AA8DAvC,MAAI,CAAC+mB,SAAL,GAAiB,UAAUnhB,CAAV,EAAawV,WAAb,EAA0B;AACzC,QAAIpb,IAAI,CAACgM,WAAL,IAAoBhM,IAAI,CAACme,KAA7B,EAAoC;AAClC;AACD,KAHwC,CAKzC;;;AACA,QAAIne,IAAI,CAACiuC,YAAL,IAAqBroC,CAAC,CAACsoC,KAAF,KAAY,CAArC,EAAwC;AACtCluC,UAAI,CAACmuC,cAAL,CAAoBvoC,CAApB;AACA5F,UAAI,CAACkb,OAAL,CAAatV,CAAb;AACA;AACD;;AAED5F,QAAI,CAACmqC,KAAL,GAAa/uB,WAAW,IAAIpb,IAAI,CAACwc,WAAL,CAAiB5W,CAAjB,CAA5B;AACA,QAAIwoC,IAAI,GACJ,CAACxoC,CAAC,CAACyoC,OAAF,IAAazoC,CAAC,CAAC0oC,OAAf,IAA0BtuC,IAAI,CAACkJ,UAAL,CAAgBqlC,uBAA3C,KACA,CAACvuC,IAAI,CAACkJ,UAAL,CAAgBslC,mBAFrB;AAAA,QAGExnC,CAHF;AAAA,QAIEvF,CAAC,GAAGzB,IAAI,CAACkU,SAAL,EAJN;AAAA,QAKEu6B,UALF;AAAA,QAMEC,OANF;AAAA,QAOE3sC,CAAC,GAAG/B,IAAI,CAACmqC,KAAL,CAAWpoC,CAPjB;AAAA,QAQEE,CAAC,GAAGjC,IAAI,CAACmqC,KAAL,CAAWloC,CARjB;AAAA,QASEqN,IAAI,GAAGtP,IAAI,CAAC0c,SAAL,CAAe3a,CAAf,EAAkBE,CAAlB,CATT;AAAA,QAUE0sC,KAVF;AAAA,QAWExqC,EAAE,GAAG;AAAEsY,iBAAW,EAAE7W,CAAf;AAAkB0J,UAAI,EAAEA,IAAxB;AAA8BvN,OAAC,EAAEA,CAAjC;AAAoCE,OAAC,EAAEA;AAAvC,KAXP;AAAA,QAYE2sC,YAAY,GAAG5uC,IAAI,CAAC+0B,WAZtB;AAaAhnB,gBAAY,CAAC/N,IAAI,CAAC6uC,WAAN,CAAZ;;AACA,QAAI,CAAC7uC,IAAI,CAAC8uC,QAAL,CAAc;AAAE/sC,OAAC,EAAEA,CAAL;AAAQE,OAAC,EAAEA;AAAX,KAAd,CAAL,EAAoC;AAClCjC,UAAI,CAACyO,QAAL,GAAgB,KAAhB;AACD;;AACD,QAAIzO,IAAI,CAACwE,aAAL,CAAmB,WAAnB,EAAgCL,EAAhC,CAAJ,EAAyC;AACvC;AACD;;AACD,QAAImL,IAAI,IAAItP,IAAI,CAAC+0B,WAAjB,EAA8B;AAC5B/0B,UAAI,CAAC+uC,kBAAL,GAA0B/uC,IAAI,CAAC+0B,WAAL,CAAiBviB,QAAjB,KAA8BlD,IAAI,CAACkD,QAA7D;AACAxS,UAAI,CAACgvC,qBAAL,GACEhvC,IAAI,CAAC+0B,WAAL,CAAiB9hB,WAAjB,KAAiC3D,IAAI,CAAC2D,WADxC;AAEAjT,UAAI,CAACivC,mBAAL,GACEjvC,IAAI,CAAC+uC,kBAAL,IAA2B/uC,IAAI,CAACgvC,qBADlC;AAEA,OAAC,KAAD,EAAQ,QAAR,EAAkB,MAAlB,EAA0BvpC,OAA1B,CAAkC,UAAUypC,MAAV,EAAkB;AAClD,YAAIlvC,IAAI,CAACkvC,MAAM,GAAG,iBAAV,CAAR,EAAsC;AACpC/qC,YAAE,CAACmL,IAAH,GAAUs/B,YAAV;AACA5uC,cAAI,CAACwE,aAAL,CAAmB0qC,MAAM,GAAG,UAA5B,EAAwC/qC,EAAxC;AACAA,YAAE,CAACmL,IAAH,GAAUA,IAAV;AACAtP,cAAI,CAACwE,aAAL,CAAmB0qC,MAAM,GAAG,WAA5B,EAAyC/qC,EAAzC;AACD;AACF,OAPD;AAQD;;AACDnE,QAAI,CAAC+0B,WAAL,GAAmBzlB,IAAnB;;AAEA,QACE,CAACtP,IAAI,CAACiuC,YAAN,IAAsB;AACtB3+B,QADA,KAECA,IAAI,CAAC+W,OAAL,KAAiB,MAAjB,IAA2B/W,IAAI,CAAC+W,OAAL,KAAiBrmB,IAAI,CAACmvC,UAFlD,CADF,EAIE;AACA,UAAMC,SAAS,GAAGpvC,IAAI,CAACqvC,kBAAL,CAAwBrvC,IAAI,CAACmqC,KAAL,CAAWpoC,CAAnC,EAAsC/B,IAAI,CAACmqC,KAAL,CAAWloC,CAAjD,CAAlB;;AACA,UAAImtC,SAAJ,EAAe;AACbpvC,YAAI,CAACsiB,MAAL,GAAc,SAAd;AACAtiB,YAAI,CAAC0tB,MAAL,GAAc;AAAE2O,yBAAe,EAAE+S;AAAnB,SAAd;AACApvC,YAAI,CAACuV,IAAL;AACA;AACD;AACF;;AAEDvV,QAAI,CAAC0tB,MAAL,GAAc,EAAd;;AACA,QAAI,CAAC1tB,IAAI,CAACiuC,YAAN,IAAsB3+B,IAA1B,EAAgC;AAC9BtP,UAAI,CAACsvC,QAAL,GAAgBhgC,IAAhB;AACAtP,UAAI,CAAC2kC,QAAL,GAAgBr1B,IAAI,CAACg7B,WAArB;AACAtqC,UAAI,CAACsiB,MAAL,GAAchT,IAAI,CAAC+W,OAAnB;;AACA,UAAI/W,IAAI,CAAC+W,OAAL,KAAiB,MAArB,EAA6B;AAC3BrmB,YAAI,CAACsiB,MAAL,GAAc,SAAd;AACAtiB,YAAI,CAAC0tB,MAAL,GAAc;AACZlb,kBAAQ,EAAElD,IAAI,CAACkD,QADH;AAEZS,qBAAW,EAAE3D,IAAI,CAAC2D,WAFN;AAGZmrB,wBAAc,EAAE,KAHJ;AAIZzQ,wBAAc,EAAE;AAJJ,SAAd;;AAMA,YACEre,IAAI,CAAC0pB,YAAL,IACAj3B,CAAC,GACCuN,IAAI,CAACvN,CAAL,GACEuN,IAAI,CAACd,KADP,GAEExO,IAAI,CAAC6c,gBAFP,GAGE7c,IAAI,CAAC6B,KAAL,CAAWwsB,iBALf,IAMAtsB,CAAC,GAAGuN,IAAI,CAACvN,CAAL,GAASuN,IAAI,CAACd,KAAd,GAAsBxO,IAAI,CAAC6c,gBAN/B,IAOA5a,CAAC,GACCqN,IAAI,CAACrN,CAAL,GACEqN,IAAI,CAACnN,MADP,GAEEnC,IAAI,CAAC+c,eAFP,GAGE/c,IAAI,CAAC6B,KAAL,CAAWssB,kBAXf,IAYAlsB,CAAC,GAAGqN,IAAI,CAACrN,CAAL,GAASqN,IAAI,CAACnN,MAAd,GAAuBnC,IAAI,CAAC+c,eAblC,EAcE;AACA/c,cAAI,CAAC0tB,MAAL,CAAY0Q,cAAZ,GAA6B,IAA7B;AACAp+B,cAAI,CAACuV,IAAL;AACD;;AACD,YAAIjG,IAAI,CAACkrB,SAAL,IAAkBlrB,IAAI,CAACqrB,YAA3B,EAAyC;AACvC,cAAM4U,EAAE,GAAGjgC,IAAI,CAACkrB,SAAL,GACPx6B,IAAI,CAACy6B,QAAL,CAAc/jB,IAAd,CAAmBpH,IAAI,CAACkD,QAAxB,EAAkCqa,WAD3B,GAEP,CAFJ;AAGA,cAAM2iB,EAAE,GAAGxvC,IAAI,CAAC6B,KAAL,CAAWkrB,iBAAX,GAA+B/sB,IAAI,CAACihB,KAA/C;AAAA,cACEwuB,EAAE,GACAngC,IAAI,CAACvN,CAAL,GACAuN,IAAI,CAAC+d,WADL,GAEArtB,IAAI,CAAC6c,gBAFL,GAGA7c,IAAI,CAAC6B,KAAL,CAAWurB,sBAHX,GAIAmiB,EAAE,IAAIC,EAAE,GAAGlgC,IAAI,CAAC+d,WAAd,CANN;AAAA,cAOEqiB,EAAE,GACApgC,IAAI,CAACrN,CAAL,GACAjC,IAAI,CAAC+c,eADL,GAEA/c,IAAI,CAAC6B,KAAL,CAAWorB,qBAAX,GAAmCjtB,IAAI,CAACihB,KAV5C;;AAWA,cAAIlf,CAAC,IAAI0tC,EAAL,IAAW1tC,CAAC,IAAI0tC,EAAE,GAAGD,EAArB,IAA2BvtC,CAAC,IAAIytC,EAAhC,IAAsCztC,CAAC,GAAGytC,EAAE,GAAGF,EAAnD,EAAuD;AACrDxvC,gBAAI,CAAC0tB,MAAL,CAAYC,cAAZ,GAA6B,IAA7B;AACA3tB,gBAAI,CAACuV,IAAL;AACD;AACF;AACF;;AACD,UAAIvV,IAAI,CAAC2vC,SAAL,IAAkB3vC,IAAI,CAACskC,aAA3B,EAA0C;AACxCqK,aAAK,GAAG;AACN5sC,WAAC,EAAEqf,IAAI,CAACuH,GAAL,CAAS3oB,IAAI,CAAC4vC,SAAL,CAAe7tC,CAAf,GAAmBA,CAA5B,CADG;AAENE,WAAC,EAAEmf,IAAI,CAACuH,GAAL,CAAS3oB,IAAI,CAAC4vC,SAAL,CAAe3tC,CAAf,GAAmBA,CAA5B;AAFG,SAAR;;AAIA,YAAIjC,IAAI,CAAConC,eAAL,CAAqBn0B,WAArB,KAAqC,CAAC,CAAtC,IAA2CrN,CAAC,CAAC8b,QAAjD,EAA2D;AACzD1hB,cAAI,CAAConC,eAAL,GAAuB;AACrB50B,oBAAQ,EAAExS,IAAI,CAACs5B,UAAL,CAAgB9mB,QADL;AAErBS,uBAAW,EAAEjT,IAAI,CAACs5B,UAAL,CAAgBrmB;AAFR,WAAvB;AAID;;AACDw7B,kBAAU,GAAG;AACXvsC,aAAG,EAAEkf,IAAI,CAACQ,GAAL,CAAS5hB,IAAI,CAAConC,eAAL,CAAqB50B,QAA9B,EAAwClD,IAAI,CAACkD,QAA7C,CADM;AAEXxQ,cAAI,EAAEof,IAAI,CAACQ,GAAL,CAAS5hB,IAAI,CAAConC,eAAL,CAAqBn0B,WAA9B,EAA2C3D,IAAI,CAAC2D,WAAhD,CAFK;AAGXtO,gBAAM,EAAEyc,IAAI,CAACO,GAAL,CAAS3hB,IAAI,CAAConC,eAAL,CAAqB50B,QAA9B,EAAwClD,IAAI,CAACkD,QAA7C,CAHG;AAIXzN,eAAK,EAAEqc,IAAI,CAACO,GAAL,CAAS3hB,IAAI,CAAConC,eAAL,CAAqBn0B,WAA9B,EAA2C3D,IAAI,CAAC2D,WAAhD;AAJI,SAAb;;AAMA,YAAIjT,IAAI,CAAConC,eAAL,CAAqBn0B,WAArB,KAAqC,CAAC,CAA1C,EAA6C;AAC3Cy7B,iBAAO,GAAG1uC,IAAI,CAAC6vC,kBAAL,EAAV;AACApB,oBAAU,CAACzsC,IAAX,GAAkB,CAAC,CAAnB;AACAysC,oBAAU,CAAC1pC,KAAX,GAAmBtD,CAAC,CAAC+D,MAAF,GAAW,CAA9B;AACAipC,oBAAU,CAACvsC,GAAX,GAAiBkf,IAAI,CAACQ,GAAL,CAAS8sB,OAAO,CAACxsC,GAAjB,EAAsBoN,IAAI,CAACkD,QAA3B,CAAjB;AACAi8B,oBAAU,CAAC9pC,MAAX,GAAoByc,IAAI,CAACO,GAAL,CAAS+sB,OAAO,CAAC/pC,MAAjB,EAAyB2K,IAAI,CAACkD,QAA9B,CAApB;AACA,cAAIi8B,UAAU,CAACvsC,GAAX,GAAiB,CAArB,EAAwBusC,UAAU,CAACvsC,GAAX,GAAiB,CAAjB;AACzB;;AAED,YAAIlC,IAAI,CAAConC,eAAL,CAAqB50B,QAArB,KAAkC,CAAC,CAAvC,EAA0C;AACxCk8B,iBAAO,GAAG1uC,IAAI,CAAC6vC,kBAAL,EAAV;AACApB,oBAAU,CAACzsC,IAAX,GACEsN,IAAI,CAAC2D,WAAL,KAAqBrR,SAArB,GACI8sC,OAAO,CAAC1sC,IADZ,GAEIof,IAAI,CAACQ,GAAL,CAAS8sB,OAAO,CAAC1sC,IAAjB,EAAuBsN,IAAI,CAAC2D,WAA5B,CAHN;AAIAw7B,oBAAU,CAAC1pC,KAAX,GACEuK,IAAI,CAAC2D,WAAL,KAAqBrR,SAArB,GACI8sC,OAAO,CAAC3pC,KADZ,GAEIqc,IAAI,CAACO,GAAL,CAAS+sB,OAAO,CAAC3pC,KAAjB,EAAwBuK,IAAI,CAAC2D,WAA7B,CAHN;AAIAw7B,oBAAU,CAACvsC,GAAX,GAAiB,CAAC,CAAlB;AACAusC,oBAAU,CAAC9pC,MAAX,GAAoB3E,IAAI,CAACmQ,QAAL,CAAc3K,MAAd,GAAuB,CAA3C;AACA,cAAIipC,UAAU,CAACzsC,IAAX,GAAkB,CAAtB,EAAyBysC,UAAU,CAACzsC,IAAX,GAAkB,CAAlB;AACzB,cAAIysC,UAAU,CAACzsC,IAAX,IAAmBysC,UAAU,CAAC1pC,KAAlC,EACE/E,IAAI,CAAC8vC,sBAAL,GAA8B,IAA9B,CADF,KAEK9vC,IAAI,CAAC+vC,mBAAL,GAA2B,KAA3B;AACN;;AAED,YACE/vC,IAAI,CAAConC,eAAL,CAAqB50B,QAArB,KAAkClD,IAAI,CAACkD,QAAvC,IACAxS,IAAI,CAAConC,eAAL,CAAqBn0B,WAArB,KAAqC3D,IAAI,CAAC2D,WAF5C,EAGE;AACAjT,cAAI,CAACgwC,eAAL,GAAuB,IAAvB;AACD;;AACD,YACEhwC,IAAI,CAACivC,mBAAL,IACCN,KAAK,CAAC5sC,CAAN,KAAY,CAAZ,IAAiB4sC,KAAK,CAAC1sC,CAAN,KAAY,CAD9B,IAEAjC,IAAI,CAACkJ,UAAL,CAAgBo9B,aAAhB,KAAkC,KAHpC,EAIE;AACA,cACEh3B,IAAI,CAACkD,QAAL,KAAkB5Q,SAAlB,KACC5B,IAAI,CAACkJ,UAAL,CAAgBo9B,aAAhB,KAAkC,KAAlC,IACCtmC,IAAI,CAAConC,eAAL,CAAqBn0B,WAArB,KAAqC,CAAC,CAFxC,KAGAjT,IAAI,CAAC+uC,kBAJP,EAKE;AACA,gBAAI/uC,IAAI,CAAConC,eAAL,CAAqB50B,QAArB,GAAgClD,IAAI,CAACkD,QAAzC,EAAmD;AACjDi8B,wBAAU,CAACvsC,GAAX,GAAiBlC,IAAI,CAAConC,eAAL,CAAqB50B,QAAtC;AACAi8B,wBAAU,CAAC9pC,MAAX,GAAoB2K,IAAI,CAACkD,QAAzB;AACD,aAHD,MAGO;AACLi8B,wBAAU,CAACvsC,GAAX,GAAiBoN,IAAI,CAACkD,QAAtB;AACAi8B,wBAAU,CAAC9pC,MAAX,GAAoB3E,IAAI,CAAConC,eAAL,CAAqB50B,QAAzC;AACD;AACF,WAbD,MAaO,IACLlD,IAAI,CAACkD,QAAL,KAAkB5Q,SAAlB,KACC5B,IAAI,CAACkJ,UAAL,CAAgBo9B,aAAhB,KAAkC,QAAlC,IACCtmC,IAAI,CAAConC,eAAL,CAAqB50B,QAArB,KAAkC,CAAC,CAFrC,KAGAxS,IAAI,CAACgvC,qBAJA,EAKL;AACA,gBAAIhvC,IAAI,CAAConC,eAAL,CAAqBn0B,WAArB,GAAmC3D,IAAI,CAAC2D,WAA5C,EAAyD;AACvDw7B,wBAAU,CAACzsC,IAAX,GAAkBhC,IAAI,CAAConC,eAAL,CAAqBn0B,WAAvC;AACAw7B,wBAAU,CAAC1pC,KAAX,GAAmBuK,IAAI,CAAC2D,WAAxB;AACD,aAHD,MAGO;AACLw7B,wBAAU,CAACzsC,IAAX,GAAkBsN,IAAI,CAAC2D,WAAvB;AACAw7B,wBAAU,CAAC1pC,KAAX,GAAmB/E,IAAI,CAAConC,eAAL,CAAqBn0B,WAAxC;AACD;AACF,WAbM,MAaA,IAAIjT,IAAI,CAACkJ,UAAL,CAAgBo9B,aAAhB,KAAkC,KAAtC,EAA6C;AAClD,gBAAIh3B,IAAI,CAACme,OAAL,IAAgBztB,IAAI,CAAC0tB,MAAL,CAAY0Q,cAAhC,EAAgD;AAC9C,kBAAI9uB,IAAI,CAAC8pB,YAAT,EAAuB;AACrB9pB,oBAAI,CAAC8pB,YAAL,GAAoB,KAApB;AACAp5B,oBAAI,CAACq5B,oBAAL,GAA4B;AAC1BpmB,6BAAW,EAAE,CAAC,CADY;AAE1BT,0BAAQ,EAAE,CAAC;AAFe,iBAA5B;AAID,eAND,MAMO;AACLxS,oBAAI,CAACq5B,oBAAL,CAA0B7mB,QAA1B,GAAqClD,IAAI,CAACkD,QAA1C;AACAxS,oBAAI,CAACq5B,oBAAL,CAA0BpmB,WAA1B,GAAwC3D,IAAI,CAAC2D,WAA7C;AACAjT,oBAAI,CAACmb,gBAAL,CAAsBvV,CAAtB,EAAyB;AACvB7D,mBAAC,EAAEuN,IAAI,CAACvN,CAAL,GAASuN,IAAI,CAACd,KAAd,GAAsBxO,IAAI,CAAC6B,KAAL,CAAWwsB,iBADb;AAEvBpsB,mBAAC,EAAEqN,IAAI,CAACrN,CAAL,GAASqN,IAAI,CAACnN,MAFM;AAGvBuB,sBAAI,EAAE;AAAE1B,wBAAI,EAAE,CAAR;AAAWE,uBAAG,EAAE;AAAhB;AAHiB,iBAAzB;AAKD;;AACDlC,kBAAI,CAACuV,IAAL;AACA;AACD,aAlBD,MAkBO,IACLjG,IAAI,CAACme,OAAL,IACAztB,IAAI,CAAC0tB,MAAL,CAAYC,cADZ,IAEA/nB,CAAC,CAACiF,IAAF,IAAU,WAHL,EAIL;AACA7K,kBAAI,CAACiwC,kBAAL,CAAwB3gC,IAAI,CAACkD,QAA7B,EAAuClD,IAAI,CAAC2D,WAA5C;AACA;AACD,aAPM,MAOA;AACLjT,kBAAI,CAACq5B,oBAAL,GAA4B;AAC1BpmB,2BAAW,EAAE,CAAC,CADY;AAE1BT,wBAAQ,EAAE,CAAC;AAFe,eAA5B;AAIA,kBAAIxS,IAAI,CAAC0tB,MAAL,CAAY0Q,cAAhB,EAAgC;AAChC,kBAAIp+B,IAAI,CAAC0tB,MAAL,CAAYC,cAAhB,EAAgC;;AAChC,kBAAI,CAAC3tB,IAAI,CAACkwC,kBAAN,IAA4B5gC,IAAI,CAACkD,QAAL,KAAkB5Q,SAAlD,EAA6D;AAC3D,oBACE5B,IAAI,CAACsS,UAAL,CAAgBhD,IAAI,CAACkD,QAArB,KACAxS,IAAI,CAACsS,UAAL,CAAgBhD,IAAI,CAACkD,QAArB,EAA+BrG,OAA/B,CAAuCmD,IAAI,CAAC2D,WAA5C,MACE,CAAC,CAHL,EAIE;AACAjT,sBAAI,CAACsS,UAAL,CAAgBhD,IAAI,CAACkD,QAArB,EAA+BtG,MAA/B,CACElM,IAAI,CAACsS,UAAL,CAAgBhD,IAAI,CAACkD,QAArB,EAA+BrG,OAA/B,CAAuCmD,IAAI,CAAC2D,WAA5C,CADF,EAEE,CAFF;AAID;AACF,eAXD,MAWO;AACLjT,oBAAI,CAACsS,UAAL,CAAgBhD,IAAI,CAACkD,QAArB,IACExS,IAAI,CAACsS,UAAL,CAAgBhD,IAAI,CAACkD,QAArB,KAAkC,EADpC;;AAEA,oBACExS,IAAI,CAACsS,UAAL,CAAgBhD,IAAI,CAACkD,QAArB,EAA+BrG,OAA/B,CAAuCmD,IAAI,CAAC2D,WAA5C,MACA,CAAC,CAFH,EAGE;AACAjT,sBAAI,CAACsS,UAAL,CAAgBhD,IAAI,CAACkD,QAArB,EAA+BpJ,IAA/B,CAAoCkG,IAAI,CAAC2D,WAAzC;AACA,sBAAI+H,KAAK,GAAG;AACV1I,8BAAU,EAAEtS,IAAI,CAACsS,UADP;AAEV69B,gCAAY,EAAEnwC,IAAI,CAACowC,eAAL,EAFJ;AAGVC,iCAAa,EAAErwC,IAAI,CAACswC,gBAAL,EAHL;AAIVC,mCAAe,EAAEvwC,IAAI,CAAC6vC,kBAAL;AAJP,mBAAZ;AAMA7vC,sBAAI,CAACwE,aAAL,CAAmB,kBAAnB,EAAuCwW,KAAvC;AACD;AACF;AACF;AACF;AACF;;AACD,YACE,CAAC,CAAChb,IAAI,CAACuwC,eAAN,IACC9B,UAAU,CAACvsC,GAAX,KAAmBlC,IAAI,CAACuwC,eAAL,CAAqBruC,GADzC,IAECusC,UAAU,CAACzsC,IAAX,KAAoBhC,IAAI,CAACuwC,eAAL,CAAqBvuC,IAF1C,IAGCysC,UAAU,CAAC9pC,MAAX,KAAsB3E,IAAI,CAACuwC,eAAL,CAAqB5rC,MAH5C,IAIC8pC,UAAU,CAAC1pC,KAAX,KAAqB/E,IAAI,CAACuwC,eAAL,CAAqBxrC,KAJ5C,KAKA,CAACqpC,IANH,EAOE;AACA,cAAI,EAAE9+B,IAAI,CAACme,OAAL,IAAgBztB,IAAI,CAAC0tB,MAAL,CAAY0Q,cAA9B,CAAJ,EAAmD;AACjDp+B,gBAAI,CAACsS,UAAL,GAAkB,EAAlB;AACAtS,gBAAI,CAACy5B,YAAL,GAAoB,EAApB;AACAz5B,gBAAI,CAAC05B,eAAL,GAAuB,EAAvB;AACD;;AACD,cAAI+U,UAAU,CAACvsC,GAAX,KAAmB,CAAC,CAAxB,EAA2B;AACzBusC,sBAAU,CAACvsC,GAAX,GAAiB,CAAjB;AACD;;AACDwsC,iBAAO,GAAGD,UAAV;;AACA,cAAIzuC,IAAI,CAACkJ,UAAL,CAAgBo9B,aAAhB,KAAkC,KAAtC,EAA6C;AAC3C,iBAAKt/B,CAAC,GAAG0nC,OAAO,CAACxsC,GAAjB,EAAsB8E,CAAC,IAAI0nC,OAAO,CAAC/pC,MAAnC,EAA2CqC,CAAC,IAAI,CAAhD,EAAmD;AACjDhH,kBAAI,CAACwwC,SAAL,CAAexpC,CAAf,EAAkB,IAAlB,EAAwB,IAAxB,EAA8B,IAA9B;AACD;AACF,WAJD,MAIO;AACLhH,gBAAI,CAACywC,UAAL,CAAgB/B,OAAhB,EAAyB,IAAzB;AACA1uC,gBAAI,CAACs5B,UAAL,CAAgB9mB,QAAhB,GAA2Bk8B,OAAO,CAACxsC,GAAnC;AACAlC,gBAAI,CAACs5B,UAAL,CAAgBrmB,WAAhB,GAA8By7B,OAAO,CAAC1sC,IAAtC;;AACA,gBAAI0sC,OAAO,CAAC1sC,IAAR,IAAgB,CAAC,CAAjB,IAAsB0sC,OAAO,CAACxsC,GAAR,KAAgBwsC,OAAO,CAAC/pC,MAAlD,EAA0D;AACxD3E,kBAAI,CAACs5B,UAAL,CAAgBrmB,WAAhB,GAA8B,CAA9B;AACAjT,kBAAI,CAAC+vC,mBAAL,GAA2B,IAA3B;AACA/vC,kBAAI,CAAC8vC,sBAAL,GAA8B,KAA9B;AACD;AACF;AACF;;AAED,YAAI9vC,IAAI,CAACkJ,UAAL,CAAgBwnC,qBAApB,EAA2C;AACzC,cAAIC,eAAe,GAAGhC,KAAK,CAAC1sC,CAAN,GAAUjC,IAAI,CAACkJ,UAAL,CAAgB0nC,gBAAhD;AACA,cAAIC,iBAAiB,GAAGlC,KAAK,CAAC5sC,CAAN,GAAU/B,IAAI,CAACkJ,UAAL,CAAgB0nC,gBAAlD;AAEA,cAAID,eAAe,IAAI,CAACE,iBAAxB,EACE7wC,IAAI,CAAC8wC,cAAL,CAAoBlrC,CAApB,EAAuB,CAAC,CAAxB,EAA2B3D,CAA3B,EAA8BmsC,IAA9B,EADF,KAEK,IAAIyC,iBAAiB,IAAI,CAACF,eAA1B,EACH3wC,IAAI,CAAC8wC,cAAL,CAAoBlrC,CAApB,EAAuB7D,CAAvB,EAA0B,CAAC,CAA3B,EAA8BqsC,IAA9B,EADG,KAEA,IAAIyC,iBAAiB,IAAIF,eAAzB,EACH3wC,IAAI,CAAC8wC,cAAL,CAAoBlrC,CAApB,EAAuB7D,CAAvB,EAA0BE,CAA1B,EAA6BmsC,IAA7B;AACH,SAVD,MAUO;AACLpuC,cAAI,CAAC8wC,cAAL,CAAoBlrC,CAApB,EAAuB7D,CAAvB,EAA0BE,CAA1B,EAA6BmsC,IAA7B;AACD;AACF;AACF;;AACD,QAAM2C,WAAW,GAAG/wC,IAAI,CAACgxC,gBAAL,CAAsBhxC,IAAI,CAACmqC,KAAL,CAAWpoC,CAAjC,EAAoC/B,IAAI,CAACmqC,KAAL,CAAWloC,CAA/C,CAApB;AACA,QAAI8uC,WAAJ,EAAiB/wC,IAAI,CAACsiB,MAAL,GAAc,SAAd;AAEjB,QAAM2uB,QAAQ,GAAGjxC,IAAI,CAACkxC,aAAL,CAAmBlxC,IAAI,CAACmqC,KAAL,CAAWpoC,CAA9B,EAAiC/B,IAAI,CAACmqC,KAAL,CAAWloC,CAA5C,CAAjB;AACA,QAAIgvC,QAAJ,EAAcjxC,IAAI,CAACsiB,MAAL,GAAc,SAAd;AAEdtiB,QAAI,CAACivC,mBAAL,GAA2B,KAA3B;AACAjvC,QAAI,CAAC+uC,kBAAL,GAA0B,KAA1B;AACA/uC,QAAI,CAACgvC,qBAAL,GAA6B,KAA7B;AACAhvC,QAAI,CAACuV,IAAL,CAAU,IAAV;AACD,GA/TD;;AAgUAvV,MAAI,CAACkE,KAAL,GAAa,UAAU0B,CAAV,EAAawV,WAAb,EAA0B;AACrC,QAAIpU,CAAJ;AAAA,QACEmqC,cAAc,GAAG/oC,IAAI,CAACirB,SAAL,CAAerzB,IAAI,CAAC6vC,kBAAL,EAAf,CADnB;AAAA,QAEEzB,IAAI,GACF,CAACxoC,CAAC,CAACyoC,OAAF,IAAazoC,CAAC,CAAC0oC,OAAf,IAA0BtuC,IAAI,CAACkJ,UAAL,CAAgBqlC,uBAA3C,KACA,CAACvuC,IAAI,CAACkJ,UAAL,CAAgBslC,mBAJrB;AAAA,QAKE7tC,GAAG,GAAGya,WAAW,IAAIpb,IAAI,CAACwc,WAAL,CAAiB5W,CAAjB,CALvB;AAMA5F,QAAI,CAAC+0B,WAAL,GAAmB/0B,IAAI,CAAC0c,SAAL,CAAe/b,GAAG,CAACoB,CAAnB,EAAsBpB,GAAG,CAACsB,CAA1B,CAAnB;;AACA,QAAIjC,IAAI,CAAC+0B,WAAL,CAAiBnZ,IAAjB,KAA0Bha,SAA9B,EAAyC;AACvC;AACD;;AACD,aAASwvC,oBAAT,GAAgC;AAC9B,UAAIjtC,EAAJ;AAAA,UACEktC,EAAE,GAAGrxC,IAAI,CAAC6vC,kBAAL,EADP;;AAGA,UAAIsB,cAAc,KAAK/oC,IAAI,CAACirB,SAAL,CAAege,EAAf,CAAvB,EAA2C;AACzC;AACD;;AACDltC,QAAE,GAAG;AACHmO,kBAAU,EAAEtS,IAAI,CAACsS,UADd;AAEHi+B,uBAAe,EAAEvwC,IAAI,CAAC6vC,kBAAL,EAFd;AAGHQ,qBAAa,EAAErwC,IAAI,CAACswC,gBAAL;AAHZ,OAAL;AAKArrC,YAAM,CAACC,cAAP,CAAsBf,EAAtB,EAA0B,cAA1B,EAA0C;AACxCgB,WAAG,EAAE,eAAY;AACf,iBAAOnF,IAAI,CAACowC,eAAL,EAAP;AACD;AAHuC,OAA1C;AAKApwC,UAAI,CAACwE,aAAL,CAAmB,kBAAnB,EAAuCL,EAAvC;AACD;;AACD,QAAInE,IAAI,CAACme,KAAT,EAAgB;AACdne,UAAI,CAACsf,OAAL;AACD;;AACD,QAAItf,IAAI,CAACgwC,eAAT,EAA0B;AACxBhwC,UAAI,CAACgwC,eAAL,GAAuB,KAAvB;AACA;AACD;;AACDhpC,KAAC,GAAGhH,IAAI,CAAC+0B,WAAT;;AACA,QACE/0B,IAAI,CAACwE,aAAL,CAAmB,OAAnB,EAA4B;AAAEiY,iBAAW,EAAE7W,CAAf;AAAkB0J,UAAI,EAAEtP,IAAI,CAAC+0B;AAA7B,KAA5B,CADF,EAEE;AACA;AACD;;AAED,QAAMsH,eAAe,GAAGr8B,IAAI,CAACqvC,kBAAL,CAAwB1uC,GAAG,CAACoB,CAA5B,EAA+BpB,GAAG,CAACsB,CAAnC,CAAxB;;AACA,QAAIo6B,eAAJ,EAAqB;AAAA,UACXhS,GADW,GACuBgS,eADvB,CACXhS,GADW;AAAA,UACNqS,WADM,GACuBL,eADvB,CACNK,WADM;AAAA,UACOC,WADP,GACuBN,eADvB,CACOM,WADP;AAEnB,UAAItS,GAAG,KAAK,GAAR,IAAeA,GAAG,KAAK,GAA3B,EACErqB,IAAI,CAACsxC,aAAL,CAAmB5U,WAAnB,EAAgCC,WAAhC,EADF,KAEK38B,IAAI,CAACuxC,UAAL,CAAgB7U,WAAhB,EAA6BC,WAA7B;AACL;AACD;;AAED,QAAIpkB,KAAK,GAAGvY,IAAI,CAACgxC,gBAAL,CAAsBrwC,GAAG,CAACoB,CAA1B,EAA6BpB,GAAG,CAACsB,CAAjC,CAAZ;AACA,QAAI,CAACsW,KAAL,EAAYA,KAAK,GAAGvY,IAAI,CAACkxC,aAAL,CAAmBvwC,GAAG,CAACoB,CAAvB,EAA0BpB,GAAG,CAACsB,CAA9B,CAAR;;AACZ,QAAIsW,KAAJ,EAAW;AACT,UAAIvY,IAAI,CAACwxC,WAAL,CAAiBj5B,KAAjB,CAAJ,EAA6B;AAC3BvY,YAAI,CAAC8V,cAAL;AACA9V,YAAI,CAACwY,OAAL;AACA;AACD;AACF;;AAED,QAAI,CAACxY,IAAI,CAACyO,QAAV,EAAoB;AAClB;AACD;;AAED,QAAMgjC,UAAU,GAAGzxC,IAAI,CAACiY,oBAAL,EAAnB;AACA,QAAMy5B,SAAS,GAAG1xC,IAAI,CAAC+X,wBAAL,EAAlB;AACA,QAAM45B,OAAO,GAAGhxC,GAAG,CAACoB,CAAJ,GAAQ0vC,UAAxB;AACA,QAAMG,OAAO,GAAGjxC,GAAG,CAACsB,CAAJ,GAAQyvC,SAAxB;;AACA,QACE,CAAC,eAAD,EAAkB,kBAAlB,EAAsCvlC,OAAtC,CAA8CnM,IAAI,CAAC+0B,WAAL,CAAiBlzB,KAA/D,MACE,CAAC,CADH,IAEA,CAACusC,IAHH,EAIE;AACA,UAAI,CAACpuC,IAAI,CAAC0tB,MAAL,CAAY0Q,cAAjB,EAAiC;AAC/Bp+B,YAAI,CAAC2gB,aAAL,CAAmB3Z,CAAC,CAACiM,WAArB,EAAkCjM,CAAC,CAACwL,QAApC;AACD;AACF;;AACD,QAAIxS,IAAI,CAAC+0B,WAAL,CAAiB1O,OAAjB,KAA6B,MAAjC,EAAyC;AACvC,UAAIrmB,IAAI,CAAC+0B,WAAL,CAAiBlzB,KAAjB,KAA2B,YAA/B,EAA6C;AAC3C7B,YAAI,CAAC6xC,SAAL;AACA7xC,YAAI,CAACuV,IAAL;AACA67B,4BAAoB;AACpB;AACD;;AACD,UAAIpxC,IAAI,CAAC+0B,WAAL,CAAiBlzB,KAAjB,KAA2B,kBAA/B,EAAmD;AACjD,YAAI7B,IAAI,CAACkJ,UAAL,CAAgB4oC,yBAAhB,KAA8C,MAAlD,EAA0D;AACxD,cAAI9xC,IAAI,CAACo7B,OAAL,KAAiBp0B,CAAC,CAACuI,MAAF,CAAStF,IAA9B,EAAoC;AAClCjK,gBAAI,CAACgsB,cAAL,GACEhsB,IAAI,CAACgsB,cAAL,KAAwB,KAAxB,GAAgC,MAAhC,GAAyC,KAD3C;AAED,WAHD,MAGO;AACLhsB,gBAAI,CAACgsB,cAAL,GAAsB,KAAtB;AACD;;AACDhsB,cAAI,CAACqX,KAAL,CAAWrQ,CAAC,CAACuI,MAAF,CAAStF,IAApB,EAA0BjK,IAAI,CAACgsB,cAA/B;AACAolB,8BAAoB;AACpB;AACD;AACF;;AACDpxC,UAAI,CAACsS,UAAL,CAAgBtL,CAAC,CAACwL,QAAlB,IAA8BxS,IAAI,CAACsS,UAAL,CAAgBtL,CAAC,CAACwL,QAAlB,KAA+B,EAA7D;;AACA,UACExS,IAAI,CAACkJ,UAAL,CAAgBo9B,aAAhB,KAAkC,KAAlC,IACAtmC,IAAI,CAAC+0B,WAAL,CAAiBlzB,KAAjB,KAA2B,eAF7B,EAGE;AACA,YACE7B,IAAI,CAAC+0B,WAAL,CAAiBlzB,KAAjB,KAA2B,eAA3B,IACA7B,IAAI,CAACkJ,UAAL,CAAgByjB,IADhB,IAEAglB,OAAO,GAAG,CAFV,IAGAA,OAAO,GAAG3xC,IAAI,CAAC+0B,WAAL,CAAiBhzB,CAA3B,GACE/B,IAAI,CAAC6B,KAAL,CAAWwqB,cAAX,GACErsB,IAAI,CAAC6B,KAAL,CAAWuqB,mBADb,GAEEpsB,IAAI,CAAC6B,KAAL,CAAWsqB,oBAFb,GAGEnsB,IAAI,CAAC6B,KAAL,CAAWkwC,oBAPf,IAQAH,OAAO,GAAG5xC,IAAI,CAAC+0B,WAAL,CAAiB9yB,CAA3B,GACEjC,IAAI,CAAC6B,KAAL,CAAWyqB,eAAX,GACEtsB,IAAI,CAAC6B,KAAL,CAAWqqB,kBADb,GAEElsB,IAAI,CAAC6B,KAAL,CAAWkwC,oBAXf,IAYAH,OAAO,GAAG,CAbZ,EAcE;AACA5xC,cAAI,CAACgyC,UAAL,CAAgBhrC,CAAC,CAACwL,QAAlB;AACA;AACD;AACF;;AACD,UAAI5M,CAAC,CAAC8b,QAAF,IAAc,CAAC0sB,IAAnB,EAAyB;AACvBpuC,YAAI,CAACuwC,eAAL,GAAuBvwC,IAAI,CAAC6vC,kBAAL,EAAvB;AACA7vC,YAAI,CAACywC,UAAL,CAAgB7uC,SAAhB,EAA2B,KAA3B;AACD;AACF;;AACDwvC,wBAAoB;AACpBpxC,QAAI,CAACuV,IAAL,CAAU,IAAV;AACD,GAnID;;AAoIAvV,MAAI,CAACiyC,gBAAL,GAAwB,UAAUrsC,CAAV,EAAa;AACnC,QAAIjF,GAAJ,EAASoB,CAAT,EAAYE,CAAZ;AACAtB,OAAG,GAAGX,IAAI,CAACwc,WAAL,CAAiB5W,CAAjB,CAAN;AACA7D,KAAC,GAAG/B,IAAI,CAACkyC,qBAAL,GAA6BvxC,GAAG,CAACoB,CAAjC,GAAqC/B,IAAI,CAAC4vC,SAAL,CAAe7tC,CAAxD;AACAE,KAAC,GAAGjC,IAAI,CAACmyC,sBAAL,GAA8BxxC,GAAG,CAACsB,CAAlC,GAAsCjC,IAAI,CAAC4vC,SAAL,CAAe3tC,CAAzD;;AACA,QAAIF,CAAC,GAAG/B,IAAI,CAAC6B,KAAL,CAAWuwC,cAAnB,EAAmC;AACjCrwC,OAAC,GAAG/B,IAAI,CAAC6B,KAAL,CAAWuwC,cAAf;AACD;;AACD,QAAInwC,CAAC,GAAGjC,IAAI,CAAC6B,KAAL,CAAWwwC,YAAnB,EAAiC;AAC/BpwC,OAAC,GAAGjC,IAAI,CAAC6B,KAAL,CAAWwwC,YAAf;AACD;;AACD,QACEryC,IAAI,CAACwE,aAAL,CAAmB,cAAnB,EAAmC;AACjCzC,OAAC,EAAEA,CAD8B;AAEjCE,OAAC,EAAEA,CAF8B;AAGjCgsC,kBAAY,EAAEjuC,IAAI,CAACiuC;AAHc,KAAnC,CADF,EAME;AACA,aAAO,KAAP;AACD;;AACD,QACEjuC,IAAI,CAACsC,SAAL,CAAeC,UAAf,GACEvC,IAAI,CAACsC,SAAL,CAAeq0B,WAAf,GAA6B32B,IAAI,CAACkJ,UAAL,CAAgBopC,gBAD/C,IAEAtyC,IAAI,CAAC2kC,QAAL,KAAkB,WAHpB,EAIE;AACA3kC,UAAI,CAACiI,MAAL,CAAY,IAAZ;AACD;;AACD,QAAIjI,IAAI,CAAC2kC,QAAL,KAAkB,WAAtB,EAAmC;AACjC3kC,UAAI,CAACyW,KAAL,CAAWnD,OAAX,CACEtT,IAAI,CAACiuC,YAAL,CAAkB1+B,MAAlB,CAAyB1N,KAAzB,KAAmC,eAAnC,GACI,YADJ,GAEI7B,IAAI,CAACiuC,YAAL,CAAkBza,eAHxB,IAIIzxB,CAJJ;;AAKA,UACE,CAAC,eAAD,EAAkB,YAAlB,EAAgCoK,OAAhC,CACEnM,IAAI,CAACiuC,YAAL,CAAkB1+B,MAAlB,CAAyB1N,KAD3B,MAEM,CAAC,CAHT,EAIE;AACA7B,YAAI,CAACiI,MAAL,CAAY,IAAZ;AACD;;AACDjI,UAAI,CAACuyC,gBAAL;AACA;AACD;;AACD,QAAIvyC,IAAI,CAAC2kC,QAAL,KAAkB,WAAtB,EAAmC;AACjC,UAAI3kC,IAAI,CAACiuC,YAAL,CAAkB7Z,OAAtB,EAA+B;AAC7Bp0B,YAAI,CAACyW,KAAL,CAAWwpB,KAAX,CAAiBjgC,IAAI,CAACiuC,YAAL,CAAkBz7B,QAAnC,IAA+CvQ,CAA/C;AACD,OAFD,MAEO,IAAIjC,IAAI,CAACkJ,UAAL,CAAgBspC,eAApB,EAAqC;AAC1CxyC,YAAI,CAAC6B,KAAL,CAAWoV,UAAX,GAAwBhV,CAAxB;AACD,OAFM,MAEA;AACLjC,YAAI,CAACyW,KAAL,CAAWC,IAAX,CAAgB1W,IAAI,CAACiuC,YAAL,CAAkBz7B,QAAlC,IAA8CvQ,CAA9C;AACD;;AACDjC,UAAI,CAACwE,aAAL,CAAmB,WAAnB,EAAgC;AAAE4L,WAAG,EAAEnO;AAAP,OAAhC;AACAjC,UAAI,CAACuyC,gBAAL;AACA;AACD;;AACDvyC,QAAI,CAACmwB,aAAL,GAAqB,EAArB;AACD,GAxDD;;AAyDAnwB,MAAI,CAACyyC,cAAL,GAAsB,UAAUz3B,KAAV,EAAiB;AACrC,QAAMra,GAAG,GAAGX,IAAI,CAACwc,WAAL,CAAiBxB,KAAjB,CAAZ;;AAEA,QAAIhb,IAAI,CAAC2kC,QAAL,KAAkB,WAAtB,EAAmC;AACjC,UAAM+N,QAAQ,GAAG,CAAC,EAAE/xC,GAAG,CAACoB,CAAJ,GAAQ/B,IAAI,CAAC4vC,SAAL,CAAe7tC,CAAzB,CAAlB,CADiC,CAEjC;;AACA,UAAM4wC,kBAAkB,GAAG3yC,IAAI,CAAC0Z,gBAAL,CACzB1Z,IAAI,CAACsvC,QAAL,CAAcr8B,WADW,CAA3B;;AAIA,UAAIy/B,QAAQ,IAAIC,kBAAhB,EAAoC;AAClC,YAAMnkC,KAAK,GAAG4S,IAAI,CAACO,GAAL,CACZ3hB,IAAI,CAACkyC,qBAAL,GAA6BvxC,GAAG,CAACoB,CAAjC,GAAqC/B,IAAI,CAAC4vC,SAAL,CAAe7tC,CADxC,EAEZ/B,IAAI,CAAC6B,KAAL,CAAWuwC,cAFC,CAAd,CADkC,CAKlC;;AACApyC,YAAI,CAAC4yC,kBAAL,CAAwBpkC,KAAxB;AACD;AACF;;AAEDxO,QAAI,CAACiI,MAAL;AACArD,UAAM,CAACe,mBAAP,CAA2B,WAA3B,EAAwC3F,IAAI,CAACiyC,gBAA7C,EAA+D,KAA/D;AACArtC,UAAM,CAACe,mBAAP,CAA2B,SAA3B,EAAsC3F,IAAI,CAACyyC,cAA3C,EAA2D,KAA3D;AACAzyC,QAAI,CAAC8V,cAAL;AACA9V,QAAI,CAACuV,IAAL,CAAU,IAAV;AACAvV,QAAI,CAACgwC,eAAL,GAAuB,IAAvB;AACD,GA1BD;;AA2BAhwC,MAAI,CAAC6yC,UAAL,GAAkB,UAAUjtC,CAAV,EAAa;AAC7B,QAAIjF,GAAG,GAAGX,IAAI,CAACwc,WAAL,CAAiB5W,CAAjB,CAAV;;AACA,QACE5F,IAAI,CAACkJ,UAAL,CAAgB4pC,iBAAhB,IACA9yC,IAAI,CAACkqC,mBADL,IAEA,CAAC,uBAAD,EAA0B,qBAA1B,EAAiD/9B,OAAjD,CACEnM,IAAI,CAAC+yC,eADP,MAEM,CAAC,CALT,EAME;AACA/yC,UAAI,CAACkqC,mBAAL,CAAyBnoC,CAAzB,IAA8B6D,CAAC,CAACotC,SAAhC;AACAhzC,UAAI,CAACkqC,mBAAL,CAAyBjoC,CAAzB,IAA8B2D,CAAC,CAACqtC,SAAhC;AACAjzC,UAAI,CAACkqC,mBAAL,CAAyBnoC,CAAzB,GAA6Bqf,IAAI,CAACQ,GAAL,CAC3B5hB,IAAI,CAACwO,KAAL,GAAaxO,IAAI,CAAC6B,KAAL,CAAWic,cADG,EAE3BsD,IAAI,CAACO,GAAL,CAAS,CAAT,EAAY3hB,IAAI,CAACkqC,mBAAL,CAAyBnoC,CAArC,CAF2B,CAA7B;AAIA/B,UAAI,CAACkqC,mBAAL,CAAyBjoC,CAAzB,GAA6Bmf,IAAI,CAACQ,GAAL,CAC3B5hB,IAAI,CAACmC,MAAL,GAAcnC,IAAI,CAAC6B,KAAL,CAAWic,cADE,EAE3BsD,IAAI,CAACO,GAAL,CAAS,CAAT,EAAY3hB,IAAI,CAACkqC,mBAAL,CAAyBjoC,CAArC,CAF2B,CAA7B;AAIAtB,SAAG,GAAGX,IAAI,CAACkqC,mBAAX;AACD;;AACDlqC,QAAI,CAACkzC,UAAL,GAAkBlzC,IAAI,CAAC0c,SAAL,CAAe/b,GAAG,CAACoB,CAAnB,EAAsBpB,GAAG,CAACsB,CAA1B,EAA6BokB,OAA/C;;AACA,QACErmB,IAAI,CAACkzC,UAAL,KAAoB,uBAApB,IACAlzC,IAAI,CAAC+yC,eAAL,KAAyB,uBAF3B,EAGE;AACA/yC,UAAI,CAAC+yC,eAAL,GAAuB,uBAAvB;AACA/yC,UAAI,CAAC4vC,SAAL,GAAiBjvC,GAAjB;AACAX,UAAI,CAACmzC,WAAL,CAAiBnxC,IAAjB,GAAwBhC,IAAI,CAACsC,SAAL,CAAeC,UAAvC;AACAwL,kBAAY,CAAC/N,IAAI,CAAC6uC,WAAN,CAAZ;AACA;AACD;;AACD,QACE7uC,IAAI,CAACkzC,UAAL,KAAoB,qBAApB,IACAlzC,IAAI,CAAC+yC,eAAL,KAAyB,qBAF3B,EAGE;AACA/yC,UAAI,CAAC+yC,eAAL,GAAuB,qBAAvB;AACA/yC,UAAI,CAAC4vC,SAAL,GAAiBjvC,GAAjB;AACAX,UAAI,CAACmzC,WAAL,CAAiBjxC,GAAjB,GAAuBlC,IAAI,CAACsC,SAAL,CAAeE,SAAtC;AACAuL,kBAAY,CAAC/N,IAAI,CAAC6uC,WAAN,CAAZ;AACA;AACD;;AACD,QACE7uC,IAAI,CAAC+yC,eAAL,KAAyB,qBAAzB,IACA/yC,IAAI,CAACkzC,UAAL,KAAoB,qBAFtB,EAGE;AACAlzC,UAAI,CAACkzC,UAAL,GAAkB,qBAAlB;AACD;;AACD,QACElzC,IAAI,CAAC+yC,eAAL,KAAyB,uBAAzB,IACA/yC,IAAI,CAACkzC,UAAL,KAAoB,uBAFtB,EAGE;AACAlzC,UAAI,CAACkzC,UAAL,GAAkB,uBAAlB;AACD;;AACDnlC,gBAAY,CAAC/N,IAAI,CAAC6uC,WAAN,CAAZ;;AACA,QAAI7uC,IAAI,CAACozC,WAAL,CAAiBjnC,OAAjB,CAAyBnM,IAAI,CAACkzC,UAA9B,MAA8C,CAAC,CAAnD,EAAsD;AACpD;AACD;;AACD,QAAIlzC,IAAI,CAACkzC,UAAL,KAAoB,qBAAxB,EAA+C;AAC7ClzC,UAAI,CAACsC,SAAL,CAAeE,SAAf,GACExC,IAAI,CAACmzC,WAAL,CAAiBjxC,GAAjB,GACA,CAACvB,GAAG,CAACsB,CAAJ,GAAQjC,IAAI,CAAC4vC,SAAL,CAAe3tC,CAAxB,IAA6BjC,IAAI,CAACsC,SAAL,CAAe+qC,cAF9C;AAGD,KAJD,MAIO,IAAIrtC,IAAI,CAACkzC,UAAL,KAAoB,qBAAxB,EAA+C;AACpDlzC,UAAI,CAACsC,SAAL,CAAeE,SAAf,IAA4BxC,IAAI,CAAC0tC,IAAL,GAAY1tC,IAAI,CAAC6B,KAAL,CAAWoV,UAAnD;AACAjX,UAAI,CAAC6uC,WAAL,GAAmBjhC,UAAU,CAC3B5N,IAAI,CAAC6yC,UADsB,EAE3B7yC,IAAI,CAACkJ,UAAL,CAAgBmqC,gBAFW,EAG3BztC,CAH2B,CAA7B;AAKD,KAPM,MAOA,IAAI5F,IAAI,CAACkzC,UAAL,KAAoB,wBAAxB,EAAkD;AACvDlzC,UAAI,CAACsC,SAAL,CAAeE,SAAf,IAA4BxC,IAAI,CAAC0tC,IAAL,GAAY1tC,IAAI,CAAC6B,KAAL,CAAWoV,UAAnD;AACAjX,UAAI,CAAC6uC,WAAL,GAAmBjhC,UAAU,CAC3B5N,IAAI,CAAC6yC,UADsB,EAE3B7yC,IAAI,CAACkJ,UAAL,CAAgBmqC,gBAFW,EAG3BztC,CAH2B,CAA7B;AAKD;;AACD,QAAI5F,IAAI,CAACkzC,UAAL,KAAoB,uBAAxB,EAAiD;AAC/ClzC,UAAI,CAACsC,SAAL,CAAeC,UAAf,GACEvC,IAAI,CAACmzC,WAAL,CAAiBnxC,IAAjB,GACA,CAACrB,GAAG,CAACoB,CAAJ,GAAQ/B,IAAI,CAAC4vC,SAAL,CAAe7tC,CAAxB,IAA6B/B,IAAI,CAACsC,SAAL,CAAe8qC,aAF9C;AAGD,KAJD,MAIO,IAAIptC,IAAI,CAACkzC,UAAL,KAAoB,yBAAxB,EAAmD;AACxDlzC,UAAI,CAACsC,SAAL,CAAeC,UAAf,IAA6BvC,IAAI,CAACkJ,UAAL,CAAgBoqC,wBAA7C;AACAtzC,UAAI,CAAC6uC,WAAL,GAAmBjhC,UAAU,CAC3B5N,IAAI,CAAC6yC,UADsB,EAE3B7yC,IAAI,CAACkJ,UAAL,CAAgBmqC,gBAFW,EAG3BztC,CAH2B,CAA7B;AAKD,KAPM,MAOA,IAAI5F,IAAI,CAACkzC,UAAL,KAAoB,wBAAxB,EAAkD;AACvDlzC,UAAI,CAACsC,SAAL,CAAeC,UAAf,IAA6BvC,IAAI,CAACkJ,UAAL,CAAgBoqC,wBAA7C;AACAtzC,UAAI,CAAC6uC,WAAL,GAAmBjhC,UAAU,CAC3B5N,IAAI,CAAC6yC,UADsB,EAE3B7yC,IAAI,CAACkJ,UAAL,CAAgBmqC,gBAFW,EAG3BztC,CAH2B,CAA7B;AAKD;AACF,GAhGD;;AAiGA5F,MAAI,CAACuzC,cAAL,GAAsB,YAAY;AAChCxlC,gBAAY,CAAC/N,IAAI,CAAC6uC,WAAN,CAAZ;;AACA,QAAI9tC,QAAQ,CAACyyC,eAAb,EAA8B;AAC5BzyC,cAAQ,CAACyyC,eAAT;AACD;;AACD5uC,UAAM,CAACe,mBAAP,CAA2B,WAA3B,EAAwC3F,IAAI,CAAC6yC,UAA7C,EAAyD,KAAzD;AACD,GAND;;AAOA7yC,MAAI,CAACyzC,WAAL,GAAmB,UAAU7tC,CAAV,EAAa;AAC9B,QAAIjF,GAAJ;AAAA,QACEoB,CADF;AAAA,QAEEE,CAFF;AAAA,QAGEyxC,YAAY,GAAG1zC,IAAI,CAAC2kC,QAAL,KAAkB,gBAHnC;AAAA,QAIEgP,UAAU,GAAG3zC,IAAI,CAAC2kC,QAAL,KAAkB,aAJjC;AAKAhkC,OAAG,GAAGX,IAAI,CAACwc,WAAL,CAAiB5W,CAAjB,CAAN;AACA7D,KAAC,GAAGpB,GAAG,CAACoB,CAAJ,GAAQ/B,IAAI,CAAC4vC,SAAL,CAAe7tC,CAA3B;AACAE,KAAC,GAAGtB,GAAG,CAACsB,CAAJ,GAAQjC,IAAI,CAAC4vC,SAAL,CAAe3tC,CAA3B;;AACA,QAAI,CAACjC,IAAI,CAACkJ,UAAL,CAAgB0qC,qBAAjB,IAA0CF,YAA9C,EAA4D;AAC1D;AACD;;AACD,QAAI,CAAC1zC,IAAI,CAACkJ,UAAL,CAAgB2qC,kBAAjB,IAAuCF,UAA3C,EAAuD;AACrD;AACD;;AACD,QAAI,CAAC/tC,CAAC,CAACyoC,OAAF,IAAazoC,CAAC,CAAC0oC,OAAf,IAA0B1oC,CAAC,CAAC8b,QAA7B,KAA0C1hB,IAAI,CAACskC,aAAnD,EAAkE;AAChE,UAAItkC,IAAI,CAAC2kC,QAAL,KAAkB,gBAAlB,IAAsC,CAAC3kC,IAAI,CAAC8vC,sBAAhD,EAAwE;AACtE9vC,YAAI,CAAC8zC,YAAL,CAAkB9zC,IAAI,CAACiuC,YAAL,CAAkB1+B,MAAlB,CAAyB7J,KAA3C,EAAkD,KAAlD,EAAyD,KAAzD;AACD;AACF;;AACD,QACE1F,IAAI,CAACwE,aAAL,CAAmB,YAAnB,EAAiC;AAC/BiY,iBAAW,EAAE7W,CADkB;AAE/BmuC,YAAM,EAAE/zC,IAAI,CAAConC,eAFkB;AAG/B18B,YAAM,EAAE1K,IAAI,CAAC+0B,WAHkB;AAI/B4P,cAAQ,EAAE3kC,IAAI,CAAC2kC;AAJgB,KAAjC,CADF,EAOE;AACA;AACD;;AACD,QACEvjB,IAAI,CAACuH,GAAL,CAAS5mB,CAAT,IAAc/B,IAAI,CAACkJ,UAAL,CAAgB8qC,eAA9B,IACA5yB,IAAI,CAACuH,GAAL,CAAS1mB,CAAT,IAAcjC,IAAI,CAACkJ,UAAL,CAAgB8qC,eAFhC,EAGE;AACAh0C,UAAI,CAACskC,aAAL,GAAqBtkC,IAAI,CAACiuC,YAA1B;AACA,UAAIjuC,IAAI,CAAC+vC,mBAAT,EACE/vC,IAAI,CAACskC,aAAL,GAAqBtkC,IAAI,CAACye,qBAAL,CACnB,CAAC,CADkB,EAEnBze,IAAI,CAACs5B,UAAL,CAAgB9mB,QAFG,CAArB;AAIF,UAAIxS,IAAI,CAAC8vC,sBAAT,EACE9vC,IAAI,CAACskC,aAAL,GAAqBtkC,IAAI,CAACye,qBAAL,CACnBze,IAAI,CAACs5B,UAAL,CAAgBrmB,WADG,EAEnB,CAAC,CAFkB,CAArB;AAIF,UAAI,CAACjT,IAAI,CAACskC,aAAV,EAAyB;AACzBtkC,UAAI,CAACglC,aAAL,GAAqBhlC,IAAI,CAAC+0B,WAA1B;AACA/0B,UAAI,CAACskC,aAAL,CAAmBC,UAAnB,GAAgC;AAC9BxiC,SAAC,EAAEA,CAD2B;AAE9BE,SAAC,EAAEA;AAF2B,OAAhC;AAIAjC,UAAI,CAAC8wC,cAAL,CACElrC,CADF,EAEE8tC,YAAY,GAAG/yC,GAAG,CAACoB,CAAP,GAAW,CAAC,CAF1B,EAGE4xC,UAAU,GAAGhzC,GAAG,CAACsB,CAAP,GAAW,CAAC,CAHxB,EAIE,KAJF;AAMD;AACF,GA1DD;;AA2DAjC,MAAI,CAACi0C,eAAL,GAAuB,UAAUruC,CAAV,EAAa;AAClC,QAAIsuC,MAAJ;AAAA,QACEC,MADF;AAAA,QAEEC,KAAK,GAAG,EAFV;AAAA,QAGEC,EAAE,GAAG;AACH,qBAAer0C,IAAI,CAACqT,MAAL,CAAYqD,IADxB;AAEH,wBAAkB1W,IAAI,CAACqT,MAAL,CAAYC;AAF3B,KAHP;AAAA,QAOEtM,CAAC,GAAG;AACF,qBAAe,UADb;AAEF,wBAAkB;AAFhB,MAGFhH,IAAI,CAAC2kC,QAHH,CAPN;AAWA//B,UAAM,CAACe,mBAAP,CAA2B,WAA3B,EAAwC3F,IAAI,CAACyzC,WAA7C,EAA0D,KAA1D;AACA7uC,UAAM,CAACe,mBAAP,CAA2B,SAA3B,EAAsC3F,IAAI,CAACi0C,eAA3C,EAA4D,KAA5D;;AACA,QACEj0C,IAAI,CAACskC,aAAL,IACAtkC,IAAI,CAACglC,aADL,KAEEhlC,IAAI,CAAC2kC,QAAL,KAAkB,gBAAlB,IACA3kC,IAAI,CAACglC,aAAL,CAAmBxR,eAAnB,GAAqC,CAAC,CADtC,IAEAxzB,IAAI,CAACglC,aAAL,CAAmBxR,eAAnB,GAAqCxzB,IAAI,CAACkU,SAAL,GAAiB1O,MAFvD,IAGExF,IAAI,CAAC2kC,QAAL,KAAkB,aAAlB,IACC3kC,IAAI,CAACglC,aAAL,CAAmBxyB,QAAnB,GAA8B,CAAC,CADhC,IAECxS,IAAI,CAACglC,aAAL,CAAmBxyB,QAAnB,GAA8BxS,IAAI,CAACmQ,QAAL,CAAc3K,MAPhD,KAQAxF,IAAI,CAACskC,aAAL,CAAmBt9B,CAAnB,MAA0BhH,IAAI,CAACglC,aAAL,CAAmBh+B,CAAnB,CAR1B,IASA,CAAChH,IAAI,CAACwE,aAAL,CAAmB,SAAnB,EAA8B;AAC7BiY,iBAAW,EAAE7W,CADgB;AAE7BmuC,YAAM,EAAE/zC,IAAI,CAACskC,aAFgB;AAG7B55B,YAAM,EAAE1K,IAAI,CAACglC,aAHgB;AAI7BL,cAAQ,EAAE3kC,IAAI,CAAC2kC;AAJc,KAA9B,CAVH,EAgBE;AACA3kC,UAAI,CAACgwC,eAAL,GAAuB,IAAvB;AACAkE,YAAM,GAAGG,EAAE,CAACr0C,IAAI,CAAC2kC,QAAN,CAAF,CAAkBx4B,OAAlB,CAA0BnM,IAAI,CAACskC,aAAL,CAAmBt9B,CAAnB,CAA1B,CAAT;AACAmtC,YAAM,GAAGE,EAAE,CAACr0C,IAAI,CAAC2kC,QAAN,CAAF,CAAkBx4B,OAAlB,CAA0BnM,IAAI,CAACglC,aAAL,CAAmBh+B,CAAnB,CAA1B,CAAT;;AACA,UAAIhH,IAAI,CAAC2kC,QAAL,KAAkB,gBAAtB,EAAwC;AACtC,YAAI2P,iBAAiB,GAAG,EAAxB;AACA,YAAIC,qBAAqB,GAAG,EAA5B;;AACA,YAAIv0C,IAAI,CAACsS,UAAL,CAAgB,CAAhB,CAAJ,EAAwB;AACtB4hC,gBAAM,GAAGl0C,IAAI,CAACsS,UAAL,CAAgB,CAAhB,EAAmB,CAAnB,CAAT;AACAtS,cAAI,CAACsS,UAAL,CAAgB,CAAhB,EAAmB7M,OAAnB,CAA2B,UAAUJ,KAAV,EAAiB;AAC1CivC,6BAAiB,CAAClrC,IAAlB,CAAuBpJ,IAAI,CAACqT,MAAL,CAAYC,OAAZ,CAAoBjO,KAApB,CAAvB;AACD,WAFD;AAGD;;AACD,YAAImvC,WAAW,GAAGF,iBAAiB,CAAC9uC,MAApC;;AACA,YACE2uC,MAAM,GAAGD,MAAT,IACCC,MAAM,GAAGD,MAAT,IAAmB9yB,IAAI,CAACuH,GAAL,CAASwrB,MAAM,GAAGD,MAAlB,KAA6BM,WAFnD,EAGE;AACAH,YAAE,CAACr0C,IAAI,CAAC2kC,QAAN,CAAF,CAAkBz4B,MAAlB,CAAyBgoC,MAAzB,EAAiCM,WAAjC;AACA,cAAIL,MAAM,GAAGD,MAAb,EAAqBC,MAAM,GAAGA,MAAM,IAAIK,WAAW,GAAG,CAAlB,CAAf;AAErBx0C,cAAI,CAAC05B,eAAL,GAAuB,EAAvB;;AACA,eAAK,IAAI1yB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGstC,iBAAiB,CAAC9uC,MAAtC,EAA8CwB,CAAC,EAA/C,EAAmD;AACjD,gBAAIA,CAAC,KAAK,CAAV,EAAahH,IAAI,CAACs5B,UAAL,CAAgBrmB,WAAhB,GAA8BkhC,MAA9B;AACbI,iCAAqB,CAACnrC,IAAtB,CAA2B+qC,MAAM,GAAGntC,CAApC;AACAhH,gBAAI,CAAC05B,eAAL,CAAqBtwB,IAArB,CAA0BkrC,iBAAiB,CAACttC,CAAD,CAA3C;AACAqtC,cAAE,CAACr0C,IAAI,CAAC2kC,QAAN,CAAF,CAAkBz4B,MAAlB,CAAyBioC,MAAM,GAAGntC,CAAlC,EAAqC,CAArC,EAAwCstC,iBAAiB,CAACttC,CAAD,CAAzD;AACD;;AAEDhH,cAAI,CAACqT,MAAL,CAAYC,OAAZ,GAAsB+gC,EAAE,CAACr0C,IAAI,CAAC2kC,QAAN,CAAxB;AACA3kC,cAAI,CAACmQ,QAAL,CAAc1K,OAAd,CAAsB,UAAU2K,GAAV,EAAeoC,QAAf,EAAyB;AAC7CxS,gBAAI,CAACsS,UAAL,CAAgBE,QAAhB,IAA4B+hC,qBAA5B;AACD,WAFD;AAGD;AACF,OA9BD,MA8BO;AACL,YAAI9a,YAAY,GAAG,EAAnB;AACAz5B,YAAI,CAACsS,UAAL,CAAgB7M,OAAhB,CAAwB,UAAU2K,GAAV,EAAeoC,QAAf,EAAyB;AAC/C,cAAIpC,GAAJ,EAAS;AACPqpB,wBAAY,CAACrwB,IAAb,CAAkBgH,GAAlB;AACAgkC,iBAAK,CAAChrC,IAAN,CAAWpJ,IAAI,CAACmQ,QAAL,CAAcqC,QAAd,CAAX;AACD;AACF,SALD;;AAMA,YACE2hC,MAAM,GAAGD,MAAT,IACCC,MAAM,GAAGD,MAAT,IAAmB9yB,IAAI,CAACuH,GAAL,CAASwrB,MAAM,GAAGD,MAAlB,KAA6BE,KAAK,CAAC5uC,MAFzD,EAGE;AACAxF,cAAI,CAACmQ,QAAL,CAAcjE,MAAd,CAAqBgoC,MAArB,EAA6BE,KAAK,CAAC5uC,MAAnC;AACAxF,cAAI,CAACsS,UAAL,GAAkB,EAAlB;AACAtS,cAAI,CAACy5B,YAAL,GAAoB,EAApB;AACA,cAAI0a,MAAM,GAAGD,MAAb,EAAqBC,MAAM,GAAGA,MAAM,IAAIC,KAAK,CAAC5uC,MAAN,GAAe,CAAnB,CAAf;AACrBxF,cAAI,CAACs5B,UAAL,CAAgB9mB,QAAhB,GAA2B2hC,MAA3B;;AAEA,eAAK,IAAIntC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGotC,KAAK,CAAC5uC,MAA1B,EAAkCwB,CAAC,EAAnC,EAAuC;AACrChH,gBAAI,CAACmQ,QAAL,CAAcjE,MAAd,CAAqBioC,MAAM,GAAGntC,CAA9B,EAAiC,CAAjC,EAAoCotC,KAAK,CAACptC,CAAD,CAAzC;AACAhH,gBAAI,CAACsS,UAAL,CAAgB6hC,MAAM,GAAGntC,CAAzB,IAA8ByyB,YAAY,CAACzyB,CAAD,CAA1C;AACAhH,gBAAI,CAACy5B,YAAL,CAAkBrwB,IAAlB,CAAuB+qC,MAAM,GAAGntC,CAAhC;AACD;AACF;AACF;;AACDhH,UAAI,CAACiI,MAAL;AACAjI,UAAI,CAAC8V,cAAL;AACD;;AACD9V,QAAI,CAACskC,aAAL,GAAqB1iC,SAArB;AACA5B,QAAI,CAACglC,aAAL,GAAqBpjC,SAArB;AACA5B,QAAI,CAACuV,IAAL,CAAU,IAAV;AACD,GA/FD;;AAgGAvV,MAAI,CAACy0C,QAAL,GAAgB,UAAU7uC,CAAV,EAAa;AAC3B,QACE5F,IAAI,CAACwE,aAAL,CAAmB,QAAnB,EAA6B;AAAEiY,iBAAW,EAAE7W,CAAf;AAAkB0J,UAAI,EAAEtP,IAAI,CAAC+0B;AAA7B,KAA7B,CADF,EAEE;AACA;AACD;;AACD,QAAIp0B,GAAG,GAAGX,IAAI,CAACwc,WAAL,CAAiB5W,CAAjB,CAAV;AACA5F,QAAI,CAACw7B,UAAL,GAAkB;AAChBz5B,OAAC,EAAE/B,IAAI,CAAC+0B,WAAL,CAAiB9hB,WAAjB,GAA+BjT,IAAI,CAAConC,eAAL,CAAqBn0B,WADvC;AAEhBhR,OAAC,EAAEjC,IAAI,CAAC+0B,WAAL,CAAiBviB,QAAjB,GAA4BxS,IAAI,CAAConC,eAAL,CAAqB50B;AAFpC,KAAlB;;AAIA,QACE4O,IAAI,CAACuH,GAAL,CAAShoB,GAAG,CAACoB,CAAb,IAAkB/B,IAAI,CAACkJ,UAAL,CAAgB8qC,eAAlC,IACA5yB,IAAI,CAACuH,GAAL,CAAShoB,GAAG,CAACsB,CAAb,IAAkBjC,IAAI,CAACkJ,UAAL,CAAgB8qC,eAFpC,EAGE;AACApmC,gBAAU,CAAC,YAAY;AACrB5N,YAAI,CAAC8wC,cAAL,CAAoBlrC,CAApB,EAAuBjF,GAAG,CAACoB,CAA3B,EAA8BpB,GAAG,CAACsB,CAAlC,EAAqC,KAArC;AACD,OAFS,EAEP,CAFO,CAAV;AAGD;AACF,GAnBD;;AAoBAjC,MAAI,CAAC00C,YAAL,GAAoB,UAAU9uC,CAAV,EAAa;AAC/BhB,UAAM,CAACe,mBAAP,CAA2B,WAA3B,EAAwC3F,IAAI,CAACy0C,QAA7C,EAAuD,KAAvD;AACA7vC,UAAM,CAACe,mBAAP,CAA2B,SAA3B,EAAsC3F,IAAI,CAAC00C,YAA3C,EAAyD,KAAzD;AACA,QAAI/hC,CAAC,GAAG3S,IAAI,CAAC6vC,kBAAL,EAAR;;AACA,QACE7vC,IAAI,CAACwE,aAAL,CAAmB,SAAnB,EAA8B;AAAEiY,iBAAW,EAAE7W,CAAf;AAAkB0J,UAAI,EAAEtP,IAAI,CAAC+0B;AAA7B,KAA9B,CADF,EAEE;AACA/0B,UAAI,CAACu7B,eAAL,GAAuB35B,SAAvB;AACA5B,UAAI,CAACw7B,UAAL,GAAkB55B,SAAlB;AACA5B,UAAI,CAACuV,IAAL,CAAU,IAAV;AACA;AACD;;AACD,QAAIvV,IAAI,CAACw7B,UAAT,EAAqB;AACnBx7B,UAAI,CAACwoB,MAAL,CACExoB,IAAI,CAACu7B,eADP,EAEE5oB,CAAC,CAAC3Q,IAAF,GAAShC,IAAI,CAACw7B,UAAL,CAAgBz5B,CAF3B,EAGE4Q,CAAC,CAACzQ,GAAF,GAAQlC,IAAI,CAACw7B,UAAL,CAAgBv5B,CAH1B;AAKAjC,UAAI,CAAC20C,aAAL,CAAmB30C,IAAI,CAACw7B,UAAL,CAAgBz5B,CAAnC,EAAsC/B,IAAI,CAACw7B,UAAL,CAAgBv5B,CAAtD;AACD;;AACDjC,QAAI,CAACu7B,eAAL,GAAuB35B,SAAvB;AACA5B,QAAI,CAACw7B,UAAL,GAAkB55B,SAAlB;AACA5B,QAAI,CAACuV,IAAL,CAAU,IAAV;AACD,GAvBD;;AAwBAvV,MAAI,CAAC40C,UAAL,GAAkB,UAAUhvC,CAAV,EAAa;AAC7B,QACE5F,IAAI,CAACwE,aAAL,CAAmB,cAAnB,EAAmC;AACjCiY,iBAAW,EAAE7W,CADoB;AAEjC0J,UAAI,EAAEtP,IAAI,CAAC+0B;AAFsB,KAAnC,CADF,EAKE;AACA;AACD;;AACD,QAAIp0B,GAAG,GAAGX,IAAI,CAACwc,WAAL,CAAiB5W,CAAjB,CAAV;AAEA5F,QAAI,CAACgwC,eAAL,GAAuB,IAAvB;AACAhwC,QAAI,CAAC8mC,oBAAL,GAA4BnmC,GAA5B;AACAA,OAAG,CAACoB,CAAJ,IAAS/B,IAAI,CAACiY,oBAAL,EAAT;AACAtX,OAAG,CAACsB,CAAJ,IAASjC,IAAI,CAAC+X,wBAAL,EAAT;;AACA,QACEqJ,IAAI,CAACuH,GAAL,CAAShoB,GAAG,CAACoB,CAAb,IAAkB/B,IAAI,CAACkJ,UAAL,CAAgB8qC,eAAlC,IACA5yB,IAAI,CAACuH,GAAL,CAAShoB,GAAG,CAACsB,CAAb,IAAkBjC,IAAI,CAACkJ,UAAL,CAAgB8qC,eAFpC,EAGE;AACApmC,gBAAU,CAAC,YAAY;AACrB5N,YAAI,CAAC8wC,cAAL,CAAoBlrC,CAApB,EAAuBjF,GAAG,CAACoB,CAA3B,EAA8BpB,GAAG,CAACsB,CAAlC,EAAqC,KAArC;AACD,OAFS,EAEP,CAFO,CAAV;AAGD;AACF,GAvBD;;AAwBAjC,MAAI,CAACmuC,cAAL,GAAsB,UAAUvoC,CAAV,EAAa;AACjC,QAAIjF,GAAG,GAAGX,IAAI,CAACwc,WAAL,CAAiB5W,CAAjB,CAAV;AAAA,QACEyY,EAAE,GAAGre,IAAI,CAAC6B,KAAL,CAAWyc,kBAAX,KAAkC,UAAlC,GAA+C,CAA/C,GAAmD,CAD1D;AAAA,QAEEguB,sBAAsB,GAAGtsC,IAAI,CAAC6B,KAAL,CAAW69B,2BAAX,GAAyCrhB,EAFpE;AAAA,QAGEX,sBAAsB,GAAG1d,IAAI,CAAC2d,yBAAL,EAH3B;AAAA,QAIEC,kBAAkB,GAAG5d,IAAI,CAAC6d,qBAAL,EAJvB;AAKAld,OAAG,CAACoB,CAAJ,IAAS/B,IAAI,CAACiY,oBAAL,EAAT;AACAtX,OAAG,CAACsB,CAAJ,IAASjC,IAAI,CAAC+X,wBAAL,EAAT;;AAEA,QACE/X,IAAI,CAAC+0B,WAAL,IACA/0B,IAAI,CAAC+0B,WAAL,CAAiBviB,QAAjB,KAA8B5Q,SAD9B,IAEA5B,IAAI,CAAC2kC,QAAL,KAAkB,mBAHpB,EAIE;AACA3kC,UAAI,CAACsC,SAAL,CAAeE,SAAf,GAA2B,CAA3B;AACAxC,UAAI,CAAC62B,SAAL,GAAiB72B,IAAI,CAAC+0B,WAAL,CAAiBviB,QAAjB,GAA4B,CAA7C;AACAxS,UAAI,CAACsC,SAAL,CAAekrC,GAAf,CAAmBpkB,CAAnB,CAAqBnnB,CAArB,GACEyb,sBAAsB,GACtB4uB,sBADA,GAEAtsC,IAAI,CAACw2B,WAAL,CAAiBv0B,CAAjB,CAAmBjC,IAAI,CAAC62B,SAAxB,CAHF;AAIA72B,UAAI,CAACsC,SAAL,CAAemrC,GAAf,CAAmBrkB,CAAnB,CAAqBnnB,CAArB,GACEyb,sBAAsB,GACtB4uB,sBADA,GAEAtsC,IAAI,CAACw2B,WAAL,CAAiBv0B,CAAjB,CAAmBjC,IAAI,CAAC62B,SAAxB,CAHF;AAIA,UAAI0V,UAAU,GAAGvsC,IAAI,CAACw2B,WAAL,CAAiBv0B,CAAjB,CAAmBjC,IAAI,CAACw2B,WAAL,CAAiBv0B,CAAjB,CAAmBuD,MAAnB,GAA4B,CAA/C,CAAjB;AACAxF,UAAI,CAACsC,SAAL,CAAe+qC,cAAf,GACE,CAACrtC,IAAI,CAACsC,SAAL,CAAeH,MAAf,GACCub,sBADD,GAEC1d,IAAI,CAACw2B,WAAL,CAAiBv0B,CAAjB,CAAmBjC,IAAI,CAAC62B,SAAxB,CAFF,IAGA0V,UAJF;AAKAvsC,UAAI,CAACsC,SAAL,CAAey0B,eAAf,GACE/2B,IAAI,CAACsC,SAAL,CAAeH,MAAf,GAAwBnC,IAAI,CAACsC,SAAL,CAAe+qC,cAAvC,GACArtC,IAAI,CAAC6B,KAAL,CAAWic,cAFb;AAGA9d,UAAI,CAACsC,SAAL,CAAey0B,eAAf,GAAiC3V,IAAI,CAACO,GAAL,CAC/B3hB,IAAI,CAACsC,SAAL,CAAey0B,eADgB,EAE/B/2B,IAAI,CAAC6B,KAAL,CAAWyrC,mBAFoB,CAAjC;AAIAttC,UAAI,CAACsC,SAAL,CAAemrC,GAAf,CAAmBrkB,CAAnB,CAAqBjnB,MAArB,GAA8BnC,IAAI,CAACsC,SAAL,CAAey0B,eAA7C;AACD;;AACD,QACE/2B,IAAI,CAAC+0B,WAAL,IACA/0B,IAAI,CAAC+0B,WAAL,CAAiB9hB,WAAjB,KAAiCrR,SADjC,IAEA5B,IAAI,CAAC2kC,QAAL,KAAkB,sBAHpB,EAIE;AACA,UAAMgH,SAAS,GAAG3rC,IAAI,CAACwrC,mBAAL,EAAlB;AACAxrC,UAAI,CAACsC,SAAL,CAAeC,UAAf,GAA4B,CAA5B;AACA,UAAIR,CAAC,GACH/B,IAAI,CAAC+0B,WAAL,CAAiBhzB,CAAjB,GACA/B,IAAI,CAAC6B,KAAL,CAAWwhC,iBADX,GAEArjC,IAAI,CAAC6B,KAAL,CAAWyhC,uBAHb;AAIA,UAAI3iC,GAAG,CAACoB,CAAJ,GAAQA,CAAC,GAAG/B,IAAI,CAAC+0B,WAAL,CAAiBvmB,KAAjB,GAAyB,CAAzC,EACExO,IAAI,CAAC0zB,YAAL,GAAoB1zB,IAAI,CAAC+0B,WAAL,CAAiB9hB,WAAjB,GAA+B,CAAnD,CADF,KAEK,IAAIjT,IAAI,CAAC+0B,WAAL,CAAiB9hB,WAAjB,IAAgC,CAApC,EACHjT,IAAI,CAAC0zB,YAAL,GAAoB1zB,IAAI,CAAC+0B,WAAL,CAAiB9hB,WAArC;AACFjT,UAAI,CAACsC,SAAL,CAAekrC,GAAf,CAAmB17B,CAAnB,CAAqB/P,CAArB,GACE6b,kBAAkB,GAAG5d,IAAI,CAACw2B,WAAL,CAAiBz0B,CAAjB,CAAmB/B,IAAI,CAAC0zB,YAAxB,CADvB;AAEA1zB,UAAI,CAACsC,SAAL,CAAe8qC,aAAf,GACE,CAACptC,IAAI,CAACsC,SAAL,CAAekM,KAAf,GAAuBxO,IAAI,CAACw2B,WAAL,CAAiBz0B,CAAjB,CAAmB/B,IAAI,CAAC0zB,YAAxB,CAAxB,IACAiY,SAFF;AAGA3rC,UAAI,CAACsC,SAAL,CAAeo0B,cAAf,GACE12B,IAAI,CAACsC,SAAL,CAAekM,KAAf,GAAuBxO,IAAI,CAACsC,SAAL,CAAe8qC,aAAtC,GACAptC,IAAI,CAAC6B,KAAL,CAAWic,cAFb;AAGA9d,UAAI,CAACsC,SAAL,CAAeo0B,cAAf,GAAgCtV,IAAI,CAACO,GAAL,CAC9B3hB,IAAI,CAACsC,SAAL,CAAeo0B,cADe,EAE9B12B,IAAI,CAAC6B,KAAL,CAAWyrC,mBAFmB,CAAhC;AAIAttC,UAAI,CAACsC,SAAL,CAAemrC,GAAf,CAAmB37B,CAAnB,CAAqBtD,KAArB,GAA6BxO,IAAI,CAACsC,SAAL,CAAeo0B,cAA5C;AACD;;AACD,QACEtV,IAAI,CAACuH,GAAL,CAAShoB,GAAG,CAACoB,CAAb,IAAkB/B,IAAI,CAACkJ,UAAL,CAAgB8qC,eAAlC,IACA5yB,IAAI,CAACuH,GAAL,CAAShoB,GAAG,CAACsB,CAAb,IAAkBjC,IAAI,CAACkJ,UAAL,CAAgB8qC,eAFpC,EAGE;AACApmC,gBAAU,CAAC,YAAY;AACrB5N,YAAI,CAAC8wC,cAAL,CAAoBlrC,CAApB,EAAuBjF,GAAG,CAACoB,CAA3B,EAA8BpB,GAAG,CAACsB,CAAlC,EAAqC,KAArC;AACD,OAFS,EAEP,CAFO,CAAV;AAGD;;AAED2C,UAAM,CAACe,mBAAP,CAA2B,WAA3B,EAAwC3F,IAAI,CAAC40C,UAA7C,EAAyD,KAAzD;AACAhwC,UAAM,CAACe,mBAAP,CAA2B,SAA3B,EAAsC3F,IAAI,CAACmuC,cAA3C,EAA2D,KAA3D;AACAnuC,QAAI,CAAC8mC,oBAAL,GAA4BllC,SAA5B;;AACA,QACE5B,IAAI,CAACwE,aAAL,CAAmB,eAAnB,EAAoC;AAClCiY,iBAAW,EAAE7W,CADqB;AAElC0J,UAAI,EAAEtP,IAAI,CAAC+0B;AAFuB,KAApC,CADF,EAKE;AACA/0B,UAAI,CAAC62B,SAAL,GAAiB72B,IAAI,CAAC60C,eAAL,CAAqB9yC,CAAtC;AACA/B,UAAI,CAAC0zB,YAAL,GAAoB1zB,IAAI,CAAC60C,eAAL,CAAqB5yC,CAAzC;AACAjC,UAAI,CAACuV,IAAL,CAAU,IAAV;AACA;AACD;;AACDvV,QAAI,CAACuV,IAAL,CAAU,IAAV;AACAvV,QAAI,CAACiI,MAAL;AACD,GA7FD;;AA8FAjI,MAAI,CAACib,SAAL,GAAiB,UAAUrV,CAAV,EAAawV,WAAb,EAA0B;AACzCpb,QAAI,CAAC80C,mBAAL,GAA2BlvC,CAAC,CAAC8E,MAA7B;;AACA,QACE1K,IAAI,CAACwE,aAAL,CAAmB,WAAnB,EAAgC;AAC9BiY,iBAAW,EAAE7W,CADiB;AAE9B0J,UAAI,EAAEtP,IAAI,CAAC+0B;AAFmB,KAAhC,CADF,EAKE;AACA;AACD;;AACD,QAAI,CAAC/0B,IAAI,CAACyO,QAAV,EAAoB;AAClB;AACD;;AACD,QAAI7I,CAAC,CAACpF,MAAF,KAAa,CAAb,IAAkBR,IAAI,CAACme,KAA3B,EAAkC;AAChC;AACD;;AACD,QAAIiwB,IAAI,GAAGxoC,CAAC,CAACyoC,OAAF,IAAazoC,CAAC,CAAC0oC,OAA1B;AAAA,QACEyG,IAAI,GAAG,QAAQlsC,IAAR,CAAa7I,IAAI,CAAC2kC,QAAlB,CADT;AAAA,QAEEqQ,MAAM,GAAG,yCAAyCnsC,IAAzC,CAA8C7I,IAAI,CAAC2kC,QAAnD,CAFX;AAAA,QAGE18B,MAAM,GAAG,UAAUY,IAAV,CAAe7I,IAAI,CAAC2kC,QAApB,CAHX;AAIA,QAAMsQ,iBAAiB,GAAGj1C,IAAI,CAAC0tB,MAAL,IAAe1tB,IAAI,CAAC0tB,MAAL,CAAY2O,eAArD;AACAr8B,QAAI,CAAC4vC,SAAL,GAAiBx0B,WAAW,IAAIpb,IAAI,CAACwc,WAAL,CAAiB5W,CAAjB,CAAhC;AACA5F,QAAI,CAACmzC,WAAL,GAAmB;AACjBnxC,UAAI,EAAEhC,IAAI,CAACsC,SAAL,CAAeC,UADJ;AAEjBL,SAAG,EAAElC,IAAI,CAACsC,SAAL,CAAeE;AAFH,KAAnB;AAIAxC,QAAI,CAAConC,eAAL,GAAuBpnC,IAAI,CAAC0c,SAAL,CAAe1c,IAAI,CAAC4vC,SAAL,CAAe7tC,CAA9B,EAAiC/B,IAAI,CAAC4vC,SAAL,CAAe3tC,CAAhD,CAAvB;AACAjC,QAAI,CAACkwC,kBAAL,GAA0B,CAAClwC,IAAI,CAAConC,eAAL,CAAqBlO,QAAhD;;AACA,QACE,CAACkV,IAAD,IACA,CAACxoC,CAAC,CAAC8b,QADH,IAEA,CAAC,yCAAyC7Y,IAAzC,CACC7I,IAAI,CAAConC,eAAL,CAAqB/gB,OADtB,CAFD,IAKArmB,IAAI,CAAC+0B,WALL,IAMA,CAAC/0B,IAAI,CAAC+0B,WAAL,CAAiB5b,cANlB,IAOA,CAAC47B,IAPD,IAQA,CAACC,MARD,IASA,CAAC/sC,MAVH,EAWE;AACA,UACE,EAAEjI,IAAI,CAAC2kC,QAAL,IAAiB,aAAjB,IAAkC3kC,IAAI,CAAC+vC,mBAAzC,KACA,EAAE/vC,IAAI,CAAC+0B,WAAL,CAAiBtH,OAAjB,IAA4BztB,IAAI,CAAC0tB,MAAL,CAAY0Q,cAA1C,CAFF,EAGE;AACAp+B,YAAI,CAACsS,UAAL,GAAkB,EAAlB;AACAtS,YAAI,CAACy5B,YAAL,GAAoB,EAApB;AACAz5B,YAAI,CAAC05B,eAAL,GAAuB,EAAvB;AACD;AACF;;AACD,QAAI15B,IAAI,CAAConC,eAAL,CAAqBzqB,MAAzB,EAAiC;AAC/B;AACD;;AACD,QACE3c,IAAI,CAACozC,WAAL,CAAiBjnC,OAAjB,CAAyBnM,IAAI,CAAConC,eAAL,CAAqB/gB,OAA9C,MAA2D,CAAC,CAA5D,IACA,CAAC4uB,iBAFH,EAGE;AACAj1C,UAAI,CAACkzC,UAAL,GAAkBlzC,IAAI,CAAConC,eAAL,CAAqB/gB,OAAvC;AACArmB,UAAI,CAAC+yC,eAAL,GAAuB/yC,IAAI,CAAConC,eAAL,CAAqB/gB,OAA5C;AACArmB,UAAI,CAAC6yC,UAAL,CAAgBjtC,CAAhB;;AACA,UACE5F,IAAI,CAACkJ,UAAL,CAAgB4pC,iBAAhB,IACA,CAAC,uBAAD,EAA0B,qBAA1B,EAAiD3mC,OAAjD,CACEnM,IAAI,CAAC+yC,eADP,MAEM,CAAC,CAJT,EAKE;AACA/yC,YAAI,CAACkqC,mBAAL,GAA2B;AACzBnoC,WAAC,EAAE/B,IAAI,CAAC4vC,SAAL,CAAe7tC,CADO;AAEzBE,WAAC,EAAEjC,IAAI,CAAC4vC,SAAL,CAAe3tC;AAFO,SAA3B;AAIAjC,YAAI,CAAC2B,MAAL,CAAYuzC,kBAAZ;AACD;;AACDtwC,YAAM,CAACtE,gBAAP,CAAwB,WAAxB,EAAqCN,IAAI,CAAC6yC,UAA1C,EAAsD,KAAtD;AACAjuC,YAAM,CAACtE,gBAAP,CAAwB,SAAxB,EAAmCN,IAAI,CAACuzC,cAAxC,EAAwD,KAAxD;AACAvzC,UAAI,CAACgwC,eAAL,GAAuB,IAAvB;AACA;AACD;;AACD,QAAIhwC,IAAI,CAAC2kC,QAAL,KAAkB,MAAtB,EAA8B;AAC5B3kC,UAAI,CAAC2vC,SAAL,GAAiB,IAAjB;;AACA,UACE,CAAC3vC,IAAI,CAACkJ,UAAL,CAAgBo9B,aAAhB,KAAkC,KAAlC,IACCtmC,IAAI,CAAConC,eAAL,CAAqBn0B,WAArB,KAAqC,CAAC,CADxC,KAEAjT,IAAI,CAAConC,eAAL,CAAqB50B,QAArB,GAAgC,CAAC,CAHnC,EAIE;AACAxS,YAAI,CAACwwC,SAAL,CAAexwC,IAAI,CAAConC,eAAL,CAAqB50B,QAApC,EAA8C47B,IAA9C,EAAoD,IAApD;AACD,OAND,MAMO,IACL,CAACpuC,IAAI,CAACkJ,UAAL,CAAgBo9B,aAAhB,KAAkC,QAAlC,IACCtmC,IAAI,CAAConC,eAAL,CAAqB50B,QAArB,KAAkC,CAAC,CADrC,KAEAxS,IAAI,CAAConC,eAAL,CAAqBn0B,WAArB,GAAmC,CAAC,CAH/B,EAIL;AACAjT,YAAI,CAAC8zC,YAAL,CAAkB9zC,IAAI,CAAC+0B,WAAL,CAAiBxlB,MAAjB,CAAwB7J,KAA1C,EAAiD0oC,IAAjD,EAAuDxoC,CAAC,CAAC8b,QAAzD;AACA;AACD;;AACD,UAAI1hB,IAAI,CAACkJ,UAAL,CAAgBo9B,aAAhB,KAAkC,KAAtC,EAA6C;AAC3CtmC,YAAI,CAAC+mB,SAAL,CAAenhB,CAAf;AACD;;AACD;AACD;;AACD,QAAImvC,IAAJ,EAAU;AACR/0C,UAAI,CAACiuC,YAAL,GAAoBjuC,IAAI,CAACsvC,QAAzB;AACAtvC,UAAI,CAACu7B,eAAL,GAAuBv7B,IAAI,CAACsS,UAAL,CAAgBtB,MAAhB,CAAuB,EAAvB,CAAvB;AACAhR,UAAI,CAACm1C,QAAL,GAAgBn1C,IAAI,CAAConC,eAArB;;AACA,UACEpnC,IAAI,CAACwE,aAAL,CAAmB,WAAnB,EAAgC;AAC9BiY,mBAAW,EAAE7W,CADiB;AAE9B0J,YAAI,EAAEtP,IAAI,CAAC+0B;AAFmB,OAAhC,CADF,EAKE;AACA;AACD;;AACDnwB,YAAM,CAACtE,gBAAP,CAAwB,WAAxB,EAAqCN,IAAI,CAACy0C,QAA1C,EAAoD,KAApD;AACA7vC,YAAM,CAACtE,gBAAP,CAAwB,SAAxB,EAAmCN,IAAI,CAAC00C,YAAxC,EAAsD,KAAtD;AACA,aAAO10C,IAAI,CAAC+mB,SAAL,CAAenhB,CAAf,CAAP;AACD;;AACD,QAAIovC,MAAJ,EAAY;AACVh1C,UAAI,CAACiuC,YAAL,GAAoBjuC,IAAI,CAACsvC,QAAzB;AACAtvC,UAAI,CAAC60C,eAAL,GAAuB;AACrB9yC,SAAC,EAAE/B,IAAI,CAAC62B,SADa;AAErB50B,SAAC,EAAEjC,IAAI,CAAC0zB;AAFa,OAAvB;;AAIA,UAAI1zB,IAAI,CAACwE,aAAL,CAAmB,iBAAnB,EAAsC;AAAEiY,mBAAW,EAAE7W;AAAf,OAAtC,CAAJ,EAA+D;AAC7D;AACD;;AAED5F,UAAI,CAAC8mC,oBAAL,GAA4B9mC,IAAI,CAACwc,WAAL,CAAiB5W,CAAjB,CAA5B;AACA5F,UAAI,CAAC8mC,oBAAL,CAA0BU,MAA1B,GAAmC,IAAnC;AAEA5iC,YAAM,CAACtE,gBAAP,CAAwB,WAAxB,EAAqCN,IAAI,CAAC40C,UAA1C,EAAsD,KAAtD;AACAhwC,YAAM,CAACtE,gBAAP,CAAwB,SAAxB,EAAmCN,IAAI,CAACmuC,cAAxC,EAAwD,KAAxD;AACA,aAAOnuC,IAAI,CAAC+mB,SAAL,CAAenhB,CAAf,CAAP;AACD;;AACD,QAAIqC,MAAM,IAAI,CAACgtC,iBAAf,EAAkC;AAChCj1C,UAAI,CAACiuC,YAAL,GAAoBjuC,IAAI,CAACsvC,QAAzB;;AACA,UAAItvC,IAAI,CAACiuC,YAAL,CAAkB7Z,OAAtB,EAA+B;AAC7Bp0B,YAAI,CAACmyC,sBAAL,GACEnyC,IAAI,CAACyW,KAAL,CAAWwpB,KAAX,CAAiBjgC,IAAI,CAACiuC,YAAL,CAAkBz7B,QAAnC,CADF;AAED,OAHD,MAGO;AACLxS,YAAI,CAACmyC,sBAAL,GACEnyC,IAAI,CAACyW,KAAL,CAAWC,IAAX,CAAgB1W,IAAI,CAACiuC,YAAL,CAAkBz7B,QAAlC,KAA+CxS,IAAI,CAAC6B,KAAL,CAAWoV,UAD5D;AAED;;AACDjX,UAAI,CAACkyC,qBAAL,GACElyC,IAAI,CAACyW,KAAL,CAAWnD,OAAX,CACEtT,IAAI,CAACiuC,YAAL,CAAkB1+B,MAAlB,CAAyB1N,KAAzB,KAAmC,eAAnC,GACI,YADJ,GAEI7B,IAAI,CAACiuC,YAAL,CAAkBza,eAHxB,KAIKxzB,IAAI,CAACiuC,YAAL,CAAkBz/B,KALzB;AAMA5J,YAAM,CAACtE,gBAAP,CAAwB,WAAxB,EAAqCN,IAAI,CAACiyC,gBAA1C,EAA4D,KAA5D;AACArtC,YAAM,CAACtE,gBAAP,CAAwB,SAAxB,EAAmCN,IAAI,CAACyyC,cAAxC,EAAwD,KAAxD;AACA;AACD;;AACD,QAAI,CAAC,aAAD,EAAgB,gBAAhB,EAAkCtmC,OAAlC,CAA0CnM,IAAI,CAAC2kC,QAA/C,MAA6D,CAAC,CAAlE,EAAqE;AACnE3kC,UAAI,CAACiuC,YAAL,GAAoBjuC,IAAI,CAAConC,eAAzB;;AACA,UAAIpnC,IAAI,CAAC2kC,QAAL,KAAkB,gBAAlB,IAAsC,CAAC3kC,IAAI,CAAC8vC,sBAAhD,EAAwE;AACtE9vC,YAAI,CAAC8zC,YAAL,CAAkB9zC,IAAI,CAAC+0B,WAAL,CAAiBxlB,MAAjB,CAAwB7J,KAA1C,EAAiD0oC,IAAjD,EAAuDxoC,CAAC,CAAC8b,QAAzD;AACD,OAFD,MAEO,IAAI1hB,IAAI,CAAC2kC,QAAL,KAAkB,aAAlB,IAAmC,CAAC3kC,IAAI,CAAC+vC,mBAA7C,EAAkE;AACvE/vC,YAAI,CAACwwC,SAAL,CAAexwC,IAAI,CAAConC,eAAL,CAAqB50B,QAApC,EAA8C47B,IAA9C,EAAoD,IAApD;AACD;;AACDxpC,YAAM,CAACtE,gBAAP,CAAwB,WAAxB,EAAqCN,IAAI,CAACyzC,WAA1C,EAAuD,KAAvD;AACA7uC,YAAM,CAACtE,gBAAP,CAAwB,SAAxB,EAAmCN,IAAI,CAACi0C,eAAxC,EAAyD,KAAzD;AACA;AACD;AACF,GAhKD;;AAiKAj0C,MAAI,CAACkb,OAAL,GAAe,UAAUtV,CAAV,EAAa;AAC1BmI,gBAAY,CAAC/N,IAAI,CAAC6uC,WAAN,CAAZ;AACA7uC,QAAI,CAACivC,mBAAL,GAA2B,IAA3B;AACAjvC,QAAI,CAAC+uC,kBAAL,GAA0B,IAA1B;AACA/uC,QAAI,CAACgvC,qBAAL,GAA6B,IAA7B;AACAhvC,QAAI,CAAC2vC,SAAL,GAAiB/tC,SAAjB;AACA5B,QAAI,CAACiuC,YAAL,GAAoBrsC,SAApB;AACA5B,QAAI,CAAConC,eAAL,GAAuBxlC,SAAvB;;AACA,QACE5B,IAAI,CAACwE,aAAL,CAAmB,SAAnB,EAA8B;AAAEiY,iBAAW,EAAE7W,CAAf;AAAkB0J,UAAI,EAAEtP,IAAI,CAAC+0B;AAA7B,KAA9B,CADF,EAEE;AACA;AACD;;AACD,QAAI,CAAC/0B,IAAI,CAACyO,QAAN,IAAkB7I,CAAC,CAAC8E,MAAF,KAAa1K,IAAI,CAAC2B,MAAxC,EAAgD;AAC9C;AACD;;AACD,QAAI3B,IAAI,CAAC+0B,WAAL,IAAoB/0B,IAAI,CAAC+0B,WAAL,CAAiBnZ,IAAjB,KAA0Bha,SAAlD,EAA6D;AAC3D;AACD;;AACD,QAAI5B,IAAI,CAACgM,WAAL,IAAoBhM,IAAI,CAACme,KAA7B,EAAoC;AAClC;AACD;;AACD,QAAIne,IAAI,CAAC4vC,SAAL,IAAkB5vC,IAAI,CAAC8uC,QAAL,CAAc9uC,IAAI,CAAC4vC,SAAnB,CAAtB,EAAqD;AACnD5vC,UAAI,CAACkS,YAAL,CAAkBC,KAAlB;AACD;;AACDvM,KAAC,CAAC2L,cAAF;AACD,GA1BD,CA9iD6B,CAykD7B;;;AACAvR,MAAI,CAAC4gB,gBAAL,GAAwB,YAAY;AAClC,QAAI7e,CAAJ;AAAA,QACEiF,CADF;AAAA,QAEEvF,CAAC,GAAGzB,IAAI,CAACkU,SAAL,EAFN;AAAA,QAGE+qB,CAAC,GAAG,EAHN;;AAIA,SAAKl9B,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGN,CAAC,CAAC+D,MAAlB,EAA0BzD,CAAC,IAAI,CAA/B,EAAkC;AAChCiF,OAAC,GAAGhH,IAAI,CAACqT,MAAL,CAAYC,OAAZ,CAAoBvR,CAApB,CAAJ;;AACA,UAAI,CAACN,CAAC,CAACuF,CAAD,CAAD,CAAK6O,MAAV,EAAkB;AAChB,YAAIopB,CAAC,CAACnd,KAAF,KAAYlgB,SAAhB,EAA2B;AACzBq9B,WAAC,CAACnd,KAAF,GAAU/f,CAAV;AACAk9B,WAAC,CAACj9B,IAAF,GAASD,CAAT;AACD;;AACDk9B,SAAC,CAACpd,IAAF,GAAS9f,CAAT;;AACA,YAAIA,CAAC,GAAG/B,IAAI,CAACs5B,UAAL,CAAgBrmB,WAApB,IAAmCgsB,CAAC,CAACl6B,KAAF,KAAYnD,SAAnD,EAA8D;AAC5Dq9B,WAAC,CAACl6B,KAAF,GAAUhD,CAAV;AACD;;AACD,YAAIA,CAAC,GAAG/B,IAAI,CAACs5B,UAAL,CAAgBrmB,WAAxB,EAAqC;AACnCgsB,WAAC,CAACj9B,IAAF,GAASD,CAAT;AACD;AACF;AACF;;AACD,QAAIk9B,CAAC,CAACl6B,KAAF,KAAYnD,SAAhB,EAA2B;AACzBq9B,OAAC,CAACl6B,KAAF,GAAUk6B,CAAC,CAACpd,IAAZ;AACD;;AACD,WAAOod,CAAP;AACD,GAzBD;;AA0BAj/B,MAAI,CAACqnB,OAAL,GAAe,UAAUzhB,CAAV,EAAa;AAC1B,QAAIoB,CAAJ;AAAA,QACE7C,EADF;AAAA,QAEEkc,aAAa,GAAGrgB,IAAI,CAAC4gB,gBAAL,EAFlB;AAAA,QAGE7e,CAAC,GAAGqf,IAAI,CAACO,GAAL,CAAS3hB,IAAI,CAACs5B,UAAL,CAAgBrmB,WAAzB,EAAsC,CAAtC,CAHN;AAAA,QAIEhR,CAAC,GAAGmf,IAAI,CAACO,GAAL,CAAS3hB,IAAI,CAACs5B,UAAL,CAAgB9mB,QAAzB,EAAmC,CAAnC,CAJN;AAAA,QAKE47B,IAAI,GAAGxoC,CAAC,CAACyoC,OAAF,IAAazoC,CAAC,CAAC0oC,OALxB;AAAA,QAMEzsB,IAAI,GAAG7hB,IAAI,CAACmQ,QAAL,CAAc3K,MAAd,GAAuB,CANhC;AAAA,QAOE/D,CAAC,GAAGzB,IAAI,CAACkU,SAAL,EAPN;AAAA,QAQEkhC,IAAI,GAAG3zC,CAAC,CAAC+D,MAAF,GAAW,CARpB;AAUA,QAAIslC,gBAAgB,GAAG9qC,IAAI,CAACwE,aAAL,CAAmB,SAAnB,EAA8B;AACnDiY,iBAAW,EAAE7W,CADsC;AAEnD0J,UAAI,EAAEtP,IAAI,CAAC+0B;AAFwC,KAA9B,CAAvB;;AAKA,QAAI+V,gBAAJ,EAAsB;AACpB;AACD;;AAED,QAAI,CAAC9qC,IAAI,CAACkJ,UAAL,CAAgBmsC,mBAAjB,IAAwC,CAACr1C,IAAI,CAACyO,QAAlD,EAA4D;AAC1D;AACD,KAtByB,CAwB1B;;;AACA,QAAI6mC,6DAAmB,CAAC1vC,CAAD,CAAnB,IAA0B,CAACwoC,IAA/B,EAAqC;AACnC,aAAOpuC,IAAI,CAACkgB,WAAL,CAAiBne,CAAjB,EAAoBE,CAApB,EAAuB2D,CAAvB,EAA0B,IAA1B,CAAP;AACD;;AAED,QAAI5F,IAAI,CAACkJ,UAAL,CAAgB46B,UAApB,EAAgC;AAC9BjiB,UAAI,IAAI,CAAR;AACD;;AAED,QAAIjc,CAAC,CAACsL,GAAF,KAAU,KAAd,EAAqB;AACnBtL,OAAC,CAAC2L,cAAF;AACD;;AAED,QAAI3L,CAAC,CAACsL,GAAF,KAAU,QAAd,EAAwB;AACtBlR,UAAI,CAACu1C,UAAL;AACD,KAFD,MAEO,IAAInH,IAAI,IAAIxoC,CAAC,CAACsL,GAAF,KAAU,GAAtB,EAA2B;AAChClR,UAAI,CAAC6xC,SAAL;AACD,KAFM,MAEA,IAAI,CAAC,WAAD,EAAc,QAAd,EAAwBphC,QAAxB,CAAiC7K,CAAC,CAACsL,GAAnC,CAAJ,EAA6C;AAClDlR,UAAI,CAACw1C,kBAAL;AACD,KAFM,MAEA,IAAI5vC,CAAC,CAACsL,GAAF,KAAU,WAAd,EAA2B;AAChCjP,OAAC,IAAI,CAAL;AACD,KAFM,MAEA,IAAI2D,CAAC,CAACsL,GAAF,KAAU,SAAd,EAAyB;AAC9BjP,OAAC,IAAI,CAAL;AACD,KAFM,MAEA,IACJ2D,CAAC,CAACsL,GAAF,KAAU,WAAV,IAAyB,CAACk9B,IAA3B,IACCxoC,CAAC,CAAC8b,QAAF,IAAc9b,CAAC,CAACsL,GAAF,KAAU,KAFpB,EAGL;AACAnP,OAAC,GAAGse,aAAa,CAACre,IAAlB;AACD,KALM,MAKA,IACJ4D,CAAC,CAACsL,GAAF,KAAU,YAAV,IAA0B,CAACk9B,IAA5B,IACC,CAACxoC,CAAC,CAAC8b,QAAH,IAAe9b,CAAC,CAACsL,GAAF,KAAU,KAFrB,EAGL;AACAnP,OAAC,GAAGse,aAAa,CAACtb,KAAlB;AACD,KALM,MAKA,IAAIa,CAAC,CAACsL,GAAF,KAAU,QAAd,EAAwB;AAC7BjP,OAAC,IAAIjC,IAAI,CAAC0tC,IAAV;AACA9nC,OAAC,CAAC2L,cAAF;AACD,KAHM,MAGA,IAAI3L,CAAC,CAACsL,GAAF,KAAU,UAAd,EAA0B;AAC/BjP,OAAC,IAAIjC,IAAI,CAAC0tC,IAAV;AACA9nC,OAAC,CAAC2L,cAAF;AACD,KAHM,MAGA,IAAI3L,CAAC,CAACsL,GAAF,KAAU,MAAV,IAAqBk9B,IAAI,IAAIxoC,CAAC,CAACsL,GAAF,KAAU,SAA3C,EAAuD;AAC5DjP,OAAC,GAAG,CAAJ;AACD,KAFM,MAEA,IAAI2D,CAAC,CAACsL,GAAF,KAAU,KAAV,IAAoBk9B,IAAI,IAAIxoC,CAAC,CAACsL,GAAF,KAAU,WAA1C,EAAwD;AAC7DjP,OAAC,GAAGjC,IAAI,CAACmQ,QAAL,CAAc3K,MAAd,GAAuB,CAA3B;AACD,KAFM,MAEA,IAAI4oC,IAAI,IAAIxoC,CAAC,CAACsL,GAAF,KAAU,YAAtB,EAAoC;AACzCnP,OAAC,GAAGse,aAAa,CAACwB,IAAlB;AACD,KAFM,MAEA,IAAIusB,IAAI,IAAIxoC,CAAC,CAACsL,GAAF,KAAU,WAAtB,EAAmC;AACxCnP,OAAC,GAAGse,aAAa,CAACyB,KAAlB;AACD;;AAED,QAAIlc,CAAC,CAACsL,GAAF,KAAU,OAAd,EAAuB;AACrBtL,OAAC,CAAC2L,cAAF;AACA,aAAOvR,IAAI,CAACkgB,WAAL,CAAiBne,CAAjB,EAAoBE,CAApB,EAAuB2D,CAAvB,CAAP;AACD;;AACD,QAAI7D,CAAC,GAAG,CAAJ,IAAS0zC,MAAM,CAACnwC,KAAP,CAAavD,CAAb,CAAb,EAA8B;AAC5BA,OAAC,GAAGse,aAAa,CAACyB,KAAlB;AACD;;AACD,QAAI7f,CAAC,GAAG4f,IAAR,EAAc;AACZ5f,OAAC,GAAG4f,IAAJ;AACD;;AACD,QAAI5f,CAAC,GAAG,CAAJ,IAASwzC,MAAM,CAACnwC,KAAP,CAAarD,CAAb,CAAb,EAA8B;AAC5BA,OAAC,GAAG,CAAJ;AACD;;AACD,QAAIF,CAAC,GAAGqzC,IAAR,EAAc;AACZrzC,OAAC,GAAGse,aAAa,CAACwB,IAAlB;AACD,KAxFyB,CA0F1B;AACA;;;AACA,QAAI6zB,UAAU,GAAG,CACf,WADe,EAEf,SAFe,EAGf,YAHe,EAIf,WAJe,EAKfjlC,QALe,CAKN7K,CAAC,CAACsL,GALI,CAAjB,CA5F0B,CAmG1B;;AACA,QAAItL,CAAC,CAAC8b,QAAF,IAAcg0B,UAAlB,EAA8B;AAC5B,UAAMC,qBAAqB,GAAG31C,IAAI,CAACsS,UAAL,CAAgBqB,SAAhB,CAA0B,UAACzI,EAAD;AAAA,eAAQ,CAAC,CAACA,EAAV;AAAA,OAA1B,CAA9B;AACA,UAAM0qC,gBAAgB,GAAG51C,IAAI,CAACsS,UAAL,CAAgBqjC,qBAAhB,CAAzB;AACA,UAAME,wBAAwB,GAAGD,gBAAgB,CAAC,CAAD,CAAjD;AACA,UAAME,kBAAkB,GAAGF,gBAAgB,CAACA,gBAAgB,CAACpwC,MAAjB,GAA0B,CAA3B,CAA3C;AACA,UAAMuwC,MAAM,GAAG9zC,CAAC,KAAK,CAArB;AACA,UAAM+zC,SAAS,GAAG/zC,CAAC,KAAK4f,IAAxB;AACA,UAAMo0B,OAAO,GAAGl0C,CAAC,KAAK,CAAtB;AACA,UAAMm0C,QAAQ,GAAGn0C,CAAC,KAAKqzC,IAAvB;;AAEA,UAAIxvC,CAAC,CAACsL,GAAF,KAAU,SAAd,EAAyB;AACvB,YAAIjP,CAAC,GAAG,CAAJ,GAAQ0zC,qBAAR,IAAiC,CAACI,MAAtC,EAA8C;AAC5C/1C,cAAI,CAACsS,UAAL,CAAgBm2B,GAAhB;AACD,SAFD,MAEO,IAAIxmC,CAAC,GAAG0zC,qBAAR,EAA+B;AACpC31C,cAAI,CAACsS,UAAL,CAAgBrQ,CAAhB,IAAqBjC,IAAI,CAACsS,UAAL,CAAgBrQ,CAAhB,KAAsB,EAA3C;AACAjC,cAAI,CAACsS,UAAL,CAAgBrQ,CAAhB,EAAmBmH,IAAnB,CAAwBrH,CAAxB;AACD,SAHM,MAGA,IAAIg0C,MAAM,IAAI/1C,IAAI,CAACs5B,UAAL,CAAgB9mB,QAAhB,KAA6B,CAA3C,EAA8C;AACnDxS,cAAI,CAACsS,UAAL,CAAgBm2B,GAAhB;AACD;AACF;;AAED,UAAI7iC,CAAC,CAACsL,GAAF,KAAU,WAAd,EAA2B;AACzB,YAAIjP,CAAC,GAAG0zC,qBAAJ,IAA6B1zC,CAAC,KAAKjC,IAAI,CAACsS,UAAL,CAAgB9M,MAAvD,EAA+D;AAC7DxF,cAAI,CAACsS,UAAL,CAAgBrQ,CAAhB,IAAqBjC,IAAI,CAACsS,UAAL,CAAgBrQ,CAAhB,KAAsB,EAA3C;AACAjC,cAAI,CAACsS,UAAL,CAAgBrQ,CAAhB,EAAmBmH,IAAnB,CAAwBrH,CAAxB;AACD,SAHD,MAGO,IAAIE,CAAC,IAAI0zC,qBAAL,IAA8B,CAACK,SAAnC,EAA8C;AACnD,iBAAOh2C,IAAI,CAACsS,UAAL,CAAgBrQ,CAAC,GAAG,CAApB,CAAP;AACD,SAFM,MAEA,IAAI+zC,SAAS,IAAIh2C,IAAI,CAACs5B,UAAL,CAAgB9mB,QAAhB,KAA6BqP,IAA9C,EAAoD;AACzD,iBAAO7hB,IAAI,CAACsS,UAAL,CAAgBrQ,CAAC,GAAG,CAApB,CAAP;AACD;AACF;;AA9B2B,iDAgCJjC,IAAI,CAACsS,UAhCD;AAAA;;AAAA;AAgC5B,4DAAyC;AAAA,cAA9BC,SAA8B;;AACvC,cAAI3M,CAAC,CAACsL,GAAF,KAAU,YAAV,IAA0BqB,SAA9B,EAAyC;AACvC,gBAAIxQ,CAAC,GAAG+zC,kBAAR,EAA4B;AAC1BvjC,uBAAS,CAACnJ,IAAV,CAAerH,CAAf;AACD,aAFD,MAEO,IAAIA,CAAC,IAAI+zC,kBAAL,IAA2B,CAACI,QAAhC,EAA0C;AAC/C3jC,uBAAS,CAACusB,KAAV;AACD,aAFM,MAEA,IAAIoX,QAAQ,IAAIl2C,IAAI,CAACs5B,UAAL,CAAgBrmB,WAAhB,KAAgCmiC,IAAhD,EAAsD;AAC3D7iC,uBAAS,CAACusB,KAAV;AACD;AACF;;AAED,cAAIl5B,CAAC,CAACsL,GAAF,KAAU,WAAV,IAAyBqB,SAA7B,EAAwC;AACtC,gBAAIxQ,CAAC,GAAG8zC,wBAAR,EAAkC;AAChCtjC,uBAAS,CAACglB,OAAV,CAAkBx1B,CAAlB;AACD,aAFD,MAEO,IAAIA,CAAC,IAAI8zC,wBAAL,IAAiC,CAACI,OAAtC,EAA+C;AACpD1jC,uBAAS,CAACk2B,GAAV;AACD,aAFM,MAEA,IAAIwN,OAAO,IAAIj2C,IAAI,CAACs5B,UAAL,CAAgBrmB,WAAhB,KAAgC,CAA/C,EAAkD;AACvDV,uBAAS,CAACk2B,GAAV;AACD;AACF;AACF;AApD2B;AAAA;AAAA;AAAA;AAAA;;AAsD5BzoC,UAAI,CAACuwC,eAAL,GAAuBvwC,IAAI,CAAC6vC,kBAAL,EAAvB;AACA7vC,UAAI,CAACywC,UAAL,CAAgB7uC,SAAhB,EAA2BwsC,IAA3B;AAEApuC,UAAI,CAACuV,IAAL,CAAU,IAAV;AACD;;AAED,QAAIxT,CAAC,KAAK/B,IAAI,CAACs5B,UAAL,CAAgBrmB,WAAtB,IAAqChR,CAAC,KAAKjC,IAAI,CAACs5B,UAAL,CAAgB9mB,QAA/D,EAAyE;AACvExS,UAAI,CAAC0gB,cAAL,CACE3e,CAAC,KAAK/B,IAAI,CAACs5B,UAAL,CAAgBrmB,WAAtB,GAAoClR,CAApC,GAAwCH,SAD1C,EAEEK,CAAC,KAAKjC,IAAI,CAACs5B,UAAL,CAAgB9mB,QAAtB,IAAkC,CAACijC,MAAM,CAACnwC,KAAP,CAAarD,CAAb,CAAnC,GAAqDA,CAArD,GAAyDL,SAF3D;AAKA5B,UAAI,CAAC2gB,aAAL,CAAmB5e,CAAnB,EAAsBE,CAAtB;;AACA,UAAI,CAAC2D,CAAC,CAAC8b,QAAH,IAAe1hB,IAAI,CAACkJ,UAAL,CAAgBitC,0BAAnC,EAA+D;AAC7D,YAAI,CAAC/H,IAAL,EAAW;AACTpuC,cAAI,CAACsS,UAAL,GAAkB,EAAlB;AACAtS,cAAI,CAACy5B,YAAL,GAAoB,EAApB;AACAz5B,cAAI,CAAC05B,eAAL,GAAuB,EAAvB;AACD;;AACD15B,YAAI,CAACsS,UAAL,CAAgBrQ,CAAhB,IAAqBjC,IAAI,CAACsS,UAAL,CAAgBrQ,CAAhB,KAAsB,EAA3C;AACAjC,YAAI,CAACsS,UAAL,CAAgBrQ,CAAhB,EAAmBmH,IAAnB,CAAwBrH,CAAxB;AACAoC,UAAE,GAAG;AACHgsC,sBAAY,EAAEnwC,IAAI,CAACowC,eAAL,EADX;AAEH99B,oBAAU,EAAEtS,IAAI,CAACsS,UAFd;AAGHi+B,yBAAe,EAAEvwC,IAAI,CAAC6vC,kBAAL,EAHd;AAIHQ,uBAAa,EAAErwC,IAAI,CAACswC,gBAAL;AAJZ,SAAL;AAMArrC,cAAM,CAACC,cAAP,CAAsBf,EAAtB,EAA0B,cAA1B,EAA0C;AACxCgB,aAAG,EAAE,eAAY;AACf,mBAAOnF,IAAI,CAACowC,eAAL,EAAP;AACD;AAHuC,SAA1C;AAKApwC,YAAI,CAACwE,aAAL,CAAmB,kBAAnB,EAAuCL,EAAvC;AACD;;AACDnE,UAAI,CAACuV,IAAL,CAAU,IAAV;AACD;AACF,GA9LD;;AA+LAvV,MAAI,CAAConB,KAAL,GAAa,UAAUxhB,CAAV,EAAa;AACxB,QACE5F,IAAI,CAACwE,aAAL,CAAmB,OAAnB,EAA4B;AAAEiY,iBAAW,EAAE7W,CAAf;AAAkB0J,UAAI,EAAEtP,IAAI,CAAC+0B;AAA7B,KAA5B,CADF,EAEE;AACA;AACD;;AACD,QAAI,CAAC/0B,IAAI,CAACyO,QAAV,EAAoB;AAClB;AACD;AACF,GATD;;AAUAzO,MAAI,CAACmnB,QAAL,GAAgB,UAAUvhB,CAAV,EAAa;AAC3B,QAAI,CAAC5F,IAAI,CAACyO,QAAV,EAAoB;AAClB;AACD;;AACD,QACEzO,IAAI,CAACwE,aAAL,CAAmB,UAAnB,EAA+B;AAAEiY,iBAAW,EAAE7W,CAAf;AAAkB0J,UAAI,EAAEtP,IAAI,CAAC+0B;AAA7B,KAA/B,CADF,EAEE;AACA;AACD;AACF,GATD;;AAUA/0B,MAAI,CAAC8mB,QAAL,GAAgB,UAAUlhB,CAAV,EAAa;AAC3B,QACE5F,IAAI,CAACwE,aAAL,CAAmB,UAAnB,EAA+B;AAAEiY,iBAAW,EAAE7W,CAAf;AAAkB0J,UAAI,EAAEtP,IAAI,CAAC+0B;AAA7B,KAA/B,CADF,EAEE;AACA;AACD;;AACD,QAAI,CAAC/0B,IAAI,CAACyO,QAAV,EAAoB;AAClB;AACD;;AACD,QACEzO,IAAI,CAAC+0B,WAAL,CAAiB1O,OAAjB,KAA6B,WAA7B,IACArmB,IAAI,CAAC+0B,WAAL,CAAiBlzB,KAAjB,KAA2B,kBAF7B,EAGE;AACA;AACA,UAAMu0C,qBAAqB,GAAGp2C,IAAI,CAAC0Z,gBAAL,CAC5B1Z,IAAI,CAAC+0B,WAAL,CAAiB9hB,WADW,CAA9B;;AAIA,UAAImjC,qBAAJ,EAA2B;AACzB;AACAp2C,YAAI,CAAC4yC,kBAAL;AACD,OAHD,MAGO;AACL5yC,YAAI,CAACq2C,iBAAL,CAAuBr2C,IAAI,CAAC+0B,WAAL,CAAiBxlB,MAAjB,CAAwBtF,IAA/C;AACD;AACF,KAfD,MAeO,IACLjK,IAAI,CAAC+0B,WAAL,CAAiB1O,OAAjB,KAA6B,WAA7B,IACArmB,IAAI,CAAC+0B,WAAL,CAAiBlzB,KAAjB,KAA2B,YAFtB,EAGL;AACA7B,UAAI,CAACs2C,QAAL;AACD,KALM,MAKA,IACL,CAAC,MAAD,EAAS,YAAT,EAAuB7lC,QAAvB,CAAgCzQ,IAAI,CAAC+0B,WAAL,CAAiBlzB,KAAjD,KACA,CAAC7B,IAAI,CAAC0tB,MAAL,CAAY0Q,cADb,IAEA,CAACp+B,IAAI,CAAC0tB,MAAL,CAAYC,cAHR,EAIL;AACA,UAAI3tB,IAAI,CAAC+0B,WAAL,CAAiByF,SAAjB,IAA8Bx6B,IAAI,CAAC+0B,WAAL,CAAiB4F,YAAnD,EAAiE;AAC/D36B,YAAI,CAACu2C,sBAAL,CACEv2C,IAAI,CAAC+0B,WAAL,CAAiBviB,QADnB,EAEExS,IAAI,CAAC+0B,WAAL,CAAiB9hB,WAFnB;AAIAjT,YAAI,CAACuV,IAAL;AACD,OAND,MAMO;AACLvV,YAAI,CAACkgB,WAAL,CACElgB,IAAI,CAAC+0B,WAAL,CAAiB9hB,WADnB,EAEEjT,IAAI,CAAC+0B,WAAL,CAAiBviB,QAFnB;AAID;AACF;AACF,GA/CD;;AAgDAxS,MAAI,CAACgnB,WAAL,GAAmB,UAAUphB,CAAV,EAAa;AAC9B,QAAIqqB,CAAJ;AAAA,QACExiB,CADF;AAAA,QAEEtJ,EAAE,GAAGyB,CAFP;AAAA,QAGE+I,MAAM,GAAG/I,CAAC,CAAC+I,MAAF,KAAa/M,SAAb,GAAyBgE,CAAC,CAAC6W,WAAF,CAAc9N,MAAvC,GAAgD/I,CAAC,CAAC+I,MAH7D;AAAA,QAIED,MAAM,GAAG9I,CAAC,CAAC8I,MAAF,KAAa9M,SAAb,GAAyBgE,CAAC,CAAC6W,WAAF,CAAc/N,MAAvC,GAAgD9I,CAAC,CAAC8I,MAJ7D;AAAA,QAKE8nC,SAAS,GACP5wC,CAAC,CAAC4wC,SAAF,KAAgB50C,SAAhB,GAA4BgE,CAAC,CAAC6W,WAAF,CAAc+5B,SAA1C,GAAsD5wC,CAAC,CAAC4wC,SAN5D;AAOA,QAAI5wC,CAAC,GAAGA,CAAC,CAAC6W,WAAF,IAAiB7W,CAAzB;;AACA,QAAI6kC,QAAJ,EAAc;AACZtmC,QAAE,CAACoN,cAAH,CAAkB3L,CAAlB;AACA;AACD;;AACD,QAAI5F,IAAI,CAACwE,aAAL,CAAmB,OAAnB,EAA4B;AAAEiY,iBAAW,EAAE7W;AAAf,KAA5B,CAAJ,EAAqD;AACnD;AACD;;AACD5F,QAAI,CAACy2C,kBAAL,GAA0B,IAA1B;AACAxmB,KAAC,GAAGjwB,IAAI,CAACsC,SAAL,CAAeC,UAAnB;AACAkL,KAAC,GAAGzN,IAAI,CAACsC,SAAL,CAAeE,SAAnB;;AACA,QAAIxC,IAAI,CAACyO,QAAT,EAAmB;AACjB;AACA;AACA,UAAI+nC,SAAS,KAAK,CAAlB,EAAqB;AACnB;AACA9nC,cAAM,GAAGA,MAAM,GAAG,EAAlB;AACD;;AACD,UACG1O,IAAI,CAACsC,SAAL,CAAeE,SAAf,GAA2BxC,IAAI,CAACsC,SAAL,CAAeuK,YAA1C,IACC6B,MAAM,GAAG,CADX,IAEC1O,IAAI,CAACsC,SAAL,CAAeC,UAAf,GAA4BvC,IAAI,CAACsC,SAAL,CAAeq0B,WAA3C,IACChoB,MAAM,GAAG,CAHX,IAIC3O,IAAI,CAACsC,SAAL,CAAeE,SAAf,GAA2B,CAA3B,IAAgCkM,MAAM,GAAG,CAJ1C,IAKC1O,IAAI,CAACsC,SAAL,CAAeC,UAAf,GAA4B,CAA5B,IAAiCoM,MAAM,GAAG,CAN7C,EAOE;AACAxK,UAAE,CAACoN,cAAH,CAAkB3L,CAAlB;AACD;;AACD6kC,cAAQ,GAAG78B,UAAU,CAAC,YAAY;AAChC68B,gBAAQ,GAAG7oC,SAAX;AACA5B,YAAI,CAACsC,SAAL,CAAeo0C,QAAf,CAAwB/nC,MAAM,GAAGshB,CAAjC,EAAoCvhB,MAAM,GAAGjB,CAA7C;AACD,OAHoB,EAGlB,CAHkB,CAArB;AAID;AACF,GAzCD;;AA0CAzN,MAAI,CAAC22C,SAAL,GAAiB,UACfC,UADe,EAEfC,QAFe,EAGfC,aAHe,EAIfC,aAJe,EAKf;AACA,QAAIF,QAAQ,KAAK,WAAb,IAA4B,CAACG,sDAAe,CAACJ,UAAD,CAAhD,EAA8D;AAC5Dp8B,aAAO,CAACC,IAAR,CACE,qGADF;AAGAD,aAAO,CAACC,IAAR,CACE,wFADF;AAIA;AACD;;AACD,QAAInS,MAAM,GAAGtI,IAAI,CAACkU,SAAL,EAAb;AACA,QAAIwC,IAAI,GAAGugC,gDAAS,CAACL,UAAD,EAAaC,QAAb,CAApB,CAZA,CAcA;AACA;;AACA,QAAIngC,IAAI,CAAClR,MAAL,KAAgB,CAAhB,IAAqBkR,IAAI,CAAC,CAAD,CAAJ,CAAQlR,MAAR,KAAmB,CAA5C,EAA+C;AAC7C,UAAI0xC,QAAQ,GAAGxgC,IAAI,CAAC,CAAD,CAAJ,CAAQ,CAAR,EAAWrR,KAAX,CAAiB4L,GAAjB,CAAqB,UAACpN,IAAD;AAAA,eAAUA,IAAI,CAACwB,KAAf;AAAA,OAArB,EAA2C+Q,IAA3C,EAAf;AAEApW,UAAI,CAACm3C,mBAAL,CAAyB,UAAUjvC,IAAV,EAAgBsK,QAAhB,EAA0B4kC,OAA1B,EAAmC;AAC1DlvC,YAAI,CAACsK,QAAD,CAAJ,CAAe4kC,OAAf,IAA0BF,QAA1B;AACD,OAFD;AAGD,KAND,MAMO;AACL,UAAI5kC,UAAU,GAAG,EAAjB;AACAtS,UAAI,CAACy5B,YAAL,GAAoB,EAApB;AACAz5B,UAAI,CAAC05B,eAAL,GAAuB,EAAvB;;AACA,WAAK,IAAIlnB,QAAQ,GAAG,CAApB,EAAuBA,QAAQ,GAAGkE,IAAI,CAAClR,MAAvC,EAA+CgN,QAAQ,EAAvD,EAA2D;AACzD;AACA;AACA,YAAI6kC,YAAY,GAAGr3C,IAAI,CAACqT,MAAL,CAAYqD,IAAZ,CAAiBogC,aAAa,GAAGtkC,QAAjC,CAAnB;AACA,YAAI8kC,KAAK,GAAG5gC,IAAI,CAAClE,QAAD,CAAhB;AAEA,YAAI+kC,eAAe,GAAGv3C,IAAI,CAACmQ,QAAL,CAAcknC,YAAd,CAAtB;AACA,YAAIG,UAAU,GAAGvyC,MAAM,CAACyO,MAAP,CAAc,EAAd,EAAkB6jC,eAAlB,CAAjB;AAEAjlC,kBAAU,CAAC+kC,YAAD,CAAV,GAA2B,EAA3B;AACAr3C,YAAI,CAACy5B,YAAL,CAAkBrwB,IAAlB,CAAuBiuC,YAAvB;;AAEA,aAAK,IAAIrV,QAAQ,GAAG,CAApB,EAAuBA,QAAQ,GAAGsV,KAAK,CAAC9xC,MAAxC,EAAgDw8B,QAAQ,EAAxD,EAA4D;AAC1D,cAAIrsB,MAAM,GAAGrN,MAAM,CAACyuC,aAAa,GAAG/U,QAAjB,CAAnB;;AAEA,cAAI,CAACrsB,MAAL,EAAa;AACX6E,mBAAO,CAACC,IAAR,CAAa,4CAAb;AACA;AACD;;AAED,cAAIg9B,UAAU,GAAG9hC,MAAM,CAAC1L,IAAxB;AACA,cAAIitC,QAAQ,GAAGI,KAAK,CAACtV,QAAD,CAAL,CAAgB38B,KAAhB,CACZ4L,GADY,CACR,UAACpN,IAAD;AAAA,mBAAUA,IAAI,CAACwB,KAAf;AAAA,WADQ,EAEZ+Q,IAFY,CAEP,EAFO,CAAf;;AAIA,cAAI8gC,QAAQ,KAAKt1C,SAAb,IAA0Bs1C,QAAQ,KAAK,IAA3C,EAAiD;AAC/CM,sBAAU,CAACC,UAAD,CAAV,GAAyBF,eAAe,CAACE,UAAD,CAAxC;AACA;AACD;;AAEDnlC,oBAAU,CAAC+kC,YAAD,CAAV,CAAyBjuC,IAAzB,CAA8B2tC,aAAa,GAAG/U,QAA9C;AAEAwV,oBAAU,CAACC,UAAD,CAAV,GAAyBP,QAAzB;AACA,cAAIl3C,IAAI,CAAC05B,eAAL,CAAqBvtB,OAArB,CAA6B4qC,aAAa,GAAG/U,QAA7C,MAA2D,CAAC,CAAhE,EACEhiC,IAAI,CAAC05B,eAAL,CAAqBtwB,IAArB,CAA0B2tC,aAAa,GAAG/U,QAA1C;AACH;;AAEDhiC,YAAI,CAAC4f,YAAL,CAAkB5f,IAAI,CAAC03C,gBAAL,CAAsBvyC,GAAtB,CAA0BkyC,YAA1B,CAAlB,IAA6DG,UAA7D,CArCyD,CAsCzD;AACA;AACA;AACA;;AACAx3C,YAAI,CAACmQ,QAAL,CAAcknC,YAAd,IAA8BG,UAA9B;AACD;;AACDx3C,UAAI,CAACsS,UAAL,GAAkBA,UAAlB;AACD,KAvED,CAyEA;;;AACA,QAAIqlC,aAAa,GAAG,EAApB;AAEA33C,QAAI,CAACsS,UAAL,CAAgB7M,OAAhB,CAAwB,UAAU2K,GAAV,EAAeoC,QAAf,EAAyB;AAC/C,UAAIA,QAAQ,KAAK5Q,SAAjB,EAA4B;AAE5BwO,SAAG,CAAC3K,OAAJ,CAAY,UAAUwN,WAAV,EAAuB;AACjC0kC,qBAAa,CAACvuC,IAAd,CAAmB,CACjBoJ,QADiB,EAEjBS,WAFiB,EAGjBjT,IAAI,CAAC0X,gCAAL,CAAsClF,QAAtC,CAHiB,EAIjBxS,IAAI,CAACo6B,sCAAL,CAA4CnnB,WAA5C,CAJiB,CAAnB;AAMD,OAPD;AAQD,KAXD;AAaAjT,QAAI,CAACwE,aAAL,CAAmB,YAAnB,EAAiC;AAC/B8yC,WAAK,EAAEK;AADwB,KAAjC;AAIA,WAAOjhC,IAAI,CAAClR,MAAZ;AACD,GAnGD;;AAoGAxF,MAAI,CAAC43C,yBAAL,GAAiC,UAAUC,kBAAV,EAA8B;AAC7D,QAAI91C,CAAJ;AAAA,QACEN,CAAC,GAAGzB,IAAI,CAAC83C,gBAAL,EADN;;AAEA,SAAK/1C,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGN,CAAC,CAAC+D,MAAlB,EAA0BzD,CAAC,IAAI,CAA/B,EAAkC;AAChC,UAAIN,CAAC,CAACM,CAAD,CAAD,CAAKkR,WAAL,KAAqB4kC,kBAAzB,EAA6C;AAC3C,eAAOp2C,CAAC,CAACM,CAAC,GAAG,CAAL,CAAD,CAASkR,WAAhB;AACD;AACF;;AACD,WAAO,CAAC,CAAR;AACD,GATD;;AAUAjT,MAAI,CAAC+3C,uBAAL,GAA+B,UAAU9kC,WAAV,EAAuB;AACpD,QAAIlR,CAAJ;AAAA,QACEN,CAAC,GAAGzB,IAAI,CAAC83C,gBAAL,EADN;;AAEA,SAAK/1C,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGN,CAAC,CAAC+D,MAAlB,EAA0BzD,CAAC,IAAI,CAA/B,EAAkC;AAChC,UAAIN,CAAC,CAACM,CAAD,CAAD,CAAKkR,WAAL,KAAqBA,WAAzB,EAAsC;AACpC,eAAOlR,CAAP;AACD;AACF;;AACD,WAAO,CAAC,CAAR;AACD,GATD;;AAUA/B,MAAI,CAACsV,KAAL,GAAa,UAAU0F,KAAV,EAAiB;AAC5B,QAAI,CAAChb,IAAI,CAACkJ,UAAL,CAAgBkX,QAArB,EAA+B;AAC7B;AACD;;AAED,QAAI0qB,gBAAgB,GAAG9qC,IAAI,CAACwE,aAAL,CAAmB,aAAnB,EAAkC;AACvDiY,iBAAW,EAAEzB;AAD0C,KAAlC,CAAvB;;AAIA,QAAI8vB,gBAAJ,EAAsB;AACpB;AACD;;AAED,QAAIkN,cAAc,GAAG,IAAI5jC,GAAJ,CACnBhT,KAAK,CAAC6Y,IAAN,CAAWe,KAAK,CAACi9B,aAAN,CAAoBr3C,KAA/B,EAAsCqQ,GAAtC,CAA0C,UAACpN,IAAD;AAAA,aAAU,CAACA,IAAI,CAACgH,IAAN,EAAYhH,IAAZ,CAAV;AAAA,KAA1C,CADmB,CAArB,CAb4B,CAiB5B;;AACA,QAAIq0C,kBAAkB,GAAG,CAAC,WAAD,EAAc,UAAd,EAA0B,YAA1B,CAAzB,CAlB4B,CAoB5B;AACA;AACA;AACA;;AACA,QAAIC,cAAc,GAAGD,kBAAkB,CACpCjnC,GADkB,CACd,UAAC4lC,QAAD;AAAA,aAAcmB,cAAc,CAAC7yC,GAAf,CAAmB0xC,QAAnB,CAAd;AAAA,KADc,EAElB1vC,MAFkB,CAEX,UAACtD,IAAD;AAAA,aAAU,CAAC,CAACA,IAAZ;AAAA,KAFW,CAArB,CAxB4B,CA0BC;;AAE7B,QAAIs0C,cAAc,CAAC3yC,MAAf,KAA0B,CAA9B,EAAiC;AAC/BgV,aAAO,CAACC,IAAR,CACE,iEADF,EAEEy9B,kBAAkB,CAAC9hC,IAAnB,CAAwB,IAAxB,CAFF;AAIA;AACD;;AAED,QAAIgiC,WAAW,GAAGD,cAAc,CAAC,CAAD,CAAhC;AAEA,QAAIE,SAAS,GAAG,EAAhB;;AACA,SACE,IAAI7lC,QAAQ,GAAG,CAAf,EAAkB8lC,GAAG,GAAGt4C,IAAI,CAACsS,UAAL,CAAgB9M,MAD1C,EAEEgN,QAAQ,GAAG8lC,GAFb,EAGE9lC,QAAQ,EAHV,EAIE;AACA,UAAMpC,GAAG,GAAGpQ,IAAI,CAACsS,UAAL,CAAgBE,QAAhB,CAAZ;;AACA,UAAIpC,GAAJ,EAAS;AACP,YAAIA,GAAG,CAAC,CAAD,CAAH,KAAWxO,SAAf,EAA0B;AAC1By2C,iBAAS,GAAG,CAAC7lC,QAAD,EAAWpC,GAAG,CAAC,CAAD,CAAH,GAAS,CAAT,GAAaA,GAAG,CAAC,CAAD,CAAhB,GAAsBA,GAAG,CAAC,CAAD,CAApC,CAAZ;AACA;AACD;AACF,KAlD2B,CAoD5B;AACA;;;AACA,QAAImoC,SAAS,GAAGH,WAAW,CAACvtC,IAA5B;AAEAutC,eAAW,CAACI,WAAZ,CAAwB,UAAU5B,UAAV,EAAsB;AAC5C52C,UAAI,CAAC22C,SAAL,CAAeC,UAAf,EAA2B2B,SAA3B,EAAsCF,SAAS,CAAC,CAAD,CAA/C,EAAoDA,SAAS,CAAC,CAAD,CAA7D;AAEAr4C,UAAI,CAACuV,IAAL;AACD,KAJD;AAKD,GA7DD;;AA8DAvV,MAAI,CAACknB,GAAL,GAAW,UAAUlM,KAAV,EAAiB;AAC1B,QAAIhb,IAAI,CAACwE,aAAL,CAAmB,KAAnB,EAA0B;AAAEiY,iBAAW,EAAEzB;AAAf,KAA1B,CAAJ,EAAuD;AACrD;AACD,KAHyB,CAK1B;;;AACA,QAAI,CAAChb,IAAI,CAACyO,QAAN,IAAkB,CAACuM,KAAK,CAACi9B,aAA7B,EAA4C;AAC1C;AACD;;AAEDj4C,QAAI,CAACy4C,4BAAL,CAAkCz9B,KAAK,CAACi9B,aAAxC;AAEA,QAAMN,aAAa,GAAG33C,IAAI,CAAC04C,kBAAL,EAAtB;AAEA14C,QAAI,CAACwE,aAAL,CAAmB,UAAnB,EAA+B;AAC7B8yC,WAAK,EAAEK;AADsB,KAA/B;AAIAt0C,yBAAqB,CAAC;AAAA,aAAMrD,IAAI,CAACuV,IAAL,EAAN;AAAA,KAAD,CAArB;AACAyF,SAAK,CAACzJ,cAAN;AACD,GApBD;;AAqBAvR,MAAI,CAACinB,IAAL,GAAY,UAAUjM,KAAV,EAAiB;AAC3B,QAAIhb,IAAI,CAACwE,aAAL,CAAmB,MAAnB,EAA2B;AAAEiY,iBAAW,EAAEzB;AAAf,KAA3B,CAAJ,EAAwD;AACtD;AACD,KAH0B,CAK3B;;;AACA,QAAI,CAAChb,IAAI,CAACyO,QAAN,IAAkB,CAACuM,KAAK,CAACi9B,aAA7B,EAA4C;AAC1C;AACD;;AAEDj4C,QAAI,CAACy4C,4BAAL,CAAkCz9B,KAAK,CAACi9B,aAAxC;AAEAj9B,SAAK,CAACzJ,cAAN;AACD,GAbD;;AAcA;AACD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClnEY;;;;;;;;AAEb,IAAMylC,eAAe,GAAG,SAAlBA,eAAkB,CAAUJ,UAAV,EAAsB;AAC5C;AACA;AACA;AACA,MAAM+B,UAAU,GAAG,sCAAnB;AACA,MAAMC,WAAW,GAAG,uCAApB;AACA,MAAMC,YAAY,GAAG,wCAArB,CAN4C,CAMmB;;AAC/D,MAAMC,UAAU,GAAG,0CAAnB;AACA,MAAMC,aAAa,GAAG,0CAAtB;AAEA,SAAO,CACLJ,UADK,EAELE,YAFK,EAGLD,WAHK,EAILE,UAJK,EAKLC,aALK,EAMLC,IANK,CAMA,UAACC,UAAD;AAAA,WAAgBA,UAAU,CAACpwC,IAAX,CAAgB+tC,UAAhB,CAAhB;AAAA,GANA,CAAP;AAOD,CAjBD,C,CAmBA;;;AACA,IAAMsC,gBAAgB,GAAG,CAAC,CAAD,EAAI,CAAJ,CAAzB,C,CAAiC;;AAEjC,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAAUvC,UAAV,EAAsB;AACxC,SAAO,gCAAgC/tC,IAAhC,CAAqC+tC,UAArC,CAAP;AACD,CAFD;;AAIA,IAAMwC,mBAAmB,GAAG,SAAtBA,mBAAsB,CAAUrsC,OAAV,EAAmB;AAC7C;AACA,MAAIssC,WAAW,GAAGtsC,OAAO,CAACuP,QAAR,KAAqB,CAArB,GAAyBvP,OAAO,CAACusC,SAAjC,GAA6CvsC,OAAO,CAAC7E,IAAvE;AAEA,SAAOoI,MAAM,CAAC+oC,WAAD,CAAN,CAAoBhzC,OAApB,CAA4B,MAA5B,EAAoC,GAApC,EAAyCkK,IAAzC,EAAP;AACD,CALD;;AAOA,IAAMgpC,aAAa,GAAG,SAAhBA,aAAgB,CAAUrxC,IAAV,EAAgB;AACpC,MAAMsxC,GAAG,GAAG,IAAIC,SAAJ,GAAgBC,eAAhB,CAAgCxxC,IAAhC,EAAsC,WAAtC,CAAZ;AACA,MAAM6E,OAAO,GAAGysC,GAAG,CAACG,aAAJ,CAAkB,KAAlB,KAA4BH,GAAG,CAACG,aAAJ,CAAkB,MAAlB,CAA5C;AACA,MAAMN,WAAW,GAAGD,mBAAmB,CAACrsC,OAAD,CAAvC;AAEA,SAAOssC,WAAW,CACf1oB,KADI,CACE,IADF,EAEJ1f,GAFI,CAEA,UAACpN,IAAD;AAAA,WAAUA,IAAI,CAAC8sB,KAAL,CAAW,IAAX,EAAiB1f,GAAjB,CAAqB,UAAC5L,KAAD;AAAA,aAAY;AAAEA,aAAK,EAAE,CAAC;AAAEA,eAAK,EAALA;AAAF,SAAD;AAAT,OAAZ;AAAA,KAArB,CAAV;AAAA,GAFA,CAAP;AAGD,CARD;;AAUA,IAAMu0C,cAAc,GAAG,SAAjBA,cAAiB,CAAU1xC,IAAV,EAAgB;AACrC,MAAMsxC,GAAG,GAAG,IAAIC,SAAJ,GAAgBC,eAAhB,CAAgCxxC,IAAhC,EAAsC,WAAtC,CAAZ;AACA,MAAM2xC,GAAG,GAAGL,GAAG,CAACvuC,gBAAJ,CAAqB,UAArB,CAAZ;AACA,MAAMyL,IAAI,GAAG,EAAb;;AAHqC,6CAKpBmjC,GALoB;AAAA;;AAAA;AAKrC,wDAAsB;AAAA,UAAXjqB,EAAW;AACpB,UAAMxf,GAAG,GAAG,EAAZ;;AADoB,kDAGIwf,EAAE,CAACkqB,UAHP;AAAA;;AAAA;AAGpB,+DAAuC;AAAA,cAA5BC,SAA4B;AACrC,cAAIb,gBAAgB,CAACzoC,QAAjB,CAA0BspC,SAAS,CAACz9B,QAApC,CAAJ,EAAmD;AAEnD,cAAMnG,GAAG,GAAG;AAAE9Q,iBAAK,EAAE;AAAT,WAAZ;AACA,cAAMA,KAAK,GAAG+zC,mBAAmB,CAACW,SAAD,CAAjC;AAEA,cAAI10C,KAAJ,EAAW8Q,GAAG,CAAC9Q,KAAJ,CAAU+D,IAAV,CAAe;AAAE/D,iBAAK,EAALA;AAAF,WAAf;AAEX+K,aAAG,CAAChH,IAAJ,CAAS+M,GAAT;AACD;AAZmB;AAAA;AAAA;AAAA;AAAA;;AAcpBO,UAAI,CAACtN,IAAL,CAAUgH,GAAV;AACD;AApBoC;AAAA;AAAA;AAAA;AAAA;;AAsBrC,SAAOsG,IAAP;AACD,CAvBD;;AAyBA,IAAMsjC,SAAS,GAAG,SAAZA,SAAY,CAAU9xC,IAAV,EAAgB;AAChC,SAAOA,IAAI,CACRyoB,KADI,CACE,IADF,EAEJ1f,GAFI,CAEA,UAACpN,IAAD;AAAA,WAAUA,IAAI,CAAC8sB,KAAL,CAAW,IAAX,EAAiB1f,GAAjB,CAAqB,UAAC5L,KAAD;AAAA,aAAY;AAAEA,aAAK,EAAE,CAAC;AAAEA,eAAK,EAALA;AAAF,SAAD;AAAT,OAAZ;AAAA,KAArB,CAAV;AAAA,GAFA,CAAP;AAGD,CAJD;;AAMA,IAAM4xC,SAAS,GAAG,SAAZA,SAAY,CAAU/uC,IAAV,EAAgB2uC,QAAhB,EAA0B;AAC1C,MAAIA,QAAQ,KAAK,WAAb,IAA4BsC,WAAW,CAACjxC,IAAD,CAA3C,EAAmD;AACjD,WAAO0xC,cAAc,CAAC1xC,IAAD,CAArB;AACD,GAFD,MAEO,IAAI2uC,QAAQ,KAAK,WAAjB,EAA8B;AACnC,WAAO0C,aAAa,CAACrxC,IAAD,CAApB;AACD,GALyC,CAO1C;AACA;;;AACA,SAAO8xC,SAAS,CAAC9xC,IAAD,CAAhB;AACD,CAVD;;AAYA,IAAM+xC,QAAQ,GAAG,SAAXA,QAAW,CAAU50C,KAAV,EAAiB;AAChC,MAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAOA,KAAP;AAE/B,SAAOA,KAAK,CAACgB,OAAN,CAAc,IAAd,EAAoB,MAApB,EAA4BA,OAA5B,CAAoC,IAApC,EAA0C,MAA1C,CAAP;AACD,CAJD;;AAMA,IAAM6zC,gBAAgB,GAAG,SAAnBA,gBAAmB,CAAU/J,YAAV,EAAwBgK,MAAxB,EAAgC;AACvD;AACA;AACA,MAAI,CAACA,MAAL,EACE,OAAOhK,YAAY,CAACl/B,GAAb,CAAiB,UAACb,GAAD;AAAA,WAASnL,MAAM,CAACm1C,MAAP,CAAchqC,GAAd,EAAmBgG,IAAnB,CAAwB,EAAxB,CAAT;AAAA,GAAjB,EAAuDA,IAAvD,CAA4D,EAA5D,CAAP,CAJqD,CAMvD;;AACA,SAAO+5B,YAAY,CAACl/B,GAAb,CAAiB,UAACb,GAAD;AAAA,WAASnL,MAAM,CAACm1C,MAAP,CAAchqC,GAAd,EAAmBgG,IAAnB,CAAwB,IAAxB,CAAT;AAAA,GAAjB,EAAyDA,IAAzD,CAA8D,IAA9D,CAAP;AACD,CARD;;AAUA,IAAMikC,gBAAgB,GAAG,SAAnBA,gBAAmB,CAAUlK,YAAV,EAAwBgK,MAAxB,EAAgC;AACvD,MAAI,CAACA,MAAL,EAAa,OAAOD,gBAAgB,CAAC/J,YAAD,EAAegK,MAAf,CAAvB,CAD0C,CAGvD;;AACA,MAAIG,UAAU,GAAG,SAAjB;AACAA,YAAU,IAAInK,YAAY,CACvBl/B,GADW,CAEV,UAACb,GAAD;AAAA,WACE,SACAnL,MAAM,CAACm1C,MAAP,CAAchqC,GAAd,EACGa,GADH,CACO,UAAC5L,KAAD;AAAA,aAAW,CAAC,MAAD,EAAS40C,QAAQ,CAAC50C,KAAD,CAAjB,EAA0B,OAA1B,EAAmC+Q,IAAnC,CAAwC,EAAxC,CAAX;AAAA,KADP,EAEGA,IAFH,CAEQ,EAFR,CADA,GAIA,OALF;AAAA,GAFU,EASXA,IATW,CASN,EATM,CAAd;AAUAkkC,YAAU,IAAI,UAAd;AAEA,SAAOA,UAAP;AACD,CAlBD;;;;;;;;;;;;;;;;;;;;;ACxGa;AAEb;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AACA,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAuB,CAAU/kB,eAAV,EAA2BglB,QAA3B,EAAqC;AAAA,iCAC3BA,QAD2B;AAAA,MACzD1e,aADyD;AAAA,MAC1CC,WAD0C;;AAEhE,MAAIA,WAAW,GAAGD,aAAlB,EAAiC,OAAO,KAAP;AACjC,MAAI2e,QAAQ,GAAG,KAAf;;AACA,OAAK,IAAIzzC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwuB,eAAe,CAAChwB,MAApC,EAA4CwB,CAAC,EAA7C,EAAiD;AAC/C,QAAMoM,KAAK,GAAGoiB,eAAe,CAACxuB,CAAD,CAA7B;AACA,QAAI80B,aAAa,GAAG1oB,KAAK,CAAC,CAAD,CAAL,GAAW,CAA/B,EAAkC;;AAClC,QAAI0oB,aAAa,IAAI1oB,KAAK,CAAC,CAAD,CAAtB,IAA6B2oB,WAAW,IAAI3oB,KAAK,CAAC,CAAD,CAArD,EAA0D;AACxDoiB,qBAAe,CAACxuB,CAAD,CAAf,GAAqB,CAAC80B,aAAD,EAAgB1a,IAAI,CAACO,GAAL,CAASoa,WAAT,EAAsB3oB,KAAK,CAAC,CAAD,CAA3B,CAAhB,CAArB;AACAqnC,cAAQ,GAAG,IAAX;AACA;AACD;;AACD,QAAI3e,aAAa,IAAI1oB,KAAK,CAAC,CAAD,CAA1B,EAA+B;AAC7BoiB,qBAAe,CAACxuB,CAAD,CAAf,GAAqB,CAACoM,KAAK,CAAC,CAAD,CAAN,EAAWgO,IAAI,CAACO,GAAL,CAASoa,WAAT,EAAsB3oB,KAAK,CAAC,CAAD,CAA3B,CAAX,CAArB;AACAqnC,cAAQ,GAAG,IAAX;AACA;AACD;AACF;;AACD,MAAI,CAACA,QAAL,EAAejlB,eAAe,CAACpsB,IAAhB,CAAqB,CAAC0yB,aAAD,EAAgBC,WAAhB,CAArB,EAlBiD,CAmBhE;;AACAvG,iBAAe,CAAC9iB,IAAhB,CAAqB,UAAChF,CAAD,EAAIiF,CAAJ;AAAA,WAAUjF,CAAC,CAAC,CAAD,CAAD,GAAOiF,CAAC,CAAC,CAAD,CAAlB;AAAA,GAArB;;AACA,OAAK,IAAI3L,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGwuB,eAAe,CAAChwB,MAAhB,GAAyB,CAA7C,EAAgDwB,GAAC,EAAjD,EAAqD;AACnD,QAAMoM,MAAK,GAAGoiB,eAAe,CAACxuB,GAAD,CAA7B;AACA,QAAM0zC,SAAS,GAAGllB,eAAe,CAACxuB,GAAC,GAAG,CAAL,CAAjC;;AACA,QAAI0zC,SAAS,CAAC,CAAD,CAAT,IAAgBtnC,MAAK,CAAC,CAAD,CAAL,GAAW,CAA/B,EAAkC;AAChCoiB,qBAAe,CAACxuB,GAAD,CAAf,GAAqB,CAACoM,MAAK,CAAC,CAAD,CAAN,EAAWgO,IAAI,CAACO,GAAL,CAASvO,MAAK,CAAC,CAAD,CAAd,EAAmBsnC,SAAS,CAAC,CAAD,CAA5B,CAAX,CAArB;AACAllB,qBAAe,CAACtpB,MAAhB,CAAuBlF,GAAC,GAAG,CAA3B,EAA8B,CAA9B;AACAA,SAAC;AACF;AACF;;AACD,SAAO,IAAP;AACD,CA/BD;;;;;;;;;;;;;;;;;;;;;;ACRA;;AACA;AACa;;;;;;;;;;;;;;;;;;;;;;;;;;AAEb;AAEA,6BAAe,oCAAUhH,IAAV,EAAgB26C,IAAhB,EAAsB;AACnC36C,MAAI,CAACihB,KAAL,GAAa,CAAb;AACAjhB,MAAI,CAACqT,MAAL,GAAc;AACZqD,QAAI,EAAE,EADM;AAEZpD,WAAO,EAAE;AAFG,GAAd;AAIAtT,MAAI,CAACktC,mBAAL,GAA2B,EAA3B;AACAltC,MAAI,CAAC+4B,kBAAL,GAA0B,EAA1B;AACA/4B,MAAI,CAAC46C,kBAAL,GAA0B,EAA1B;AACA56C,MAAI,CAAC41B,iBAAL,GAAyB,EAAzB;AACA51B,MAAI,CAACyO,QAAL,GAAgB,KAAhB;AACAzO,MAAI,CAACs5B,UAAL,GAAkB;AAChBrmB,eAAW,EAAE,CADG;AAEhBT,YAAQ,EAAE;AAFM,GAAlB;AAIAxS,MAAI,CAACyC,SAAL,GAAiB,EAAjB;AACAzC,MAAI,CAAC66C,WAAL,GAAmB,gBAAnB;AACA76C,MAAI,CAAC86C,qBAAL,GAA6B,uCAA7B;AACA96C,MAAI,CAAC+6C,2BAAL,GAAmC,oCAAnC;AACA/6C,MAAI,CAACgK,QAAL,GAAgB,+BAAhB;AACAhK,MAAI,CAACo7B,OAAL,GAAe,IAAf;AACAp7B,MAAI,CAACgsB,cAAL,GAAsB,KAAtB;AACAhsB,MAAI,CAACuU,SAAL,GAAiB;AACfjB,WAAO,EAAE,EADM;AAEf0nC,OAAG,EAAE,aAAU5f,OAAV,EAAmBpP,cAAnB,EAAmCivB,YAAnC,EAAiD;AACpDj7C,UAAI,CAACuU,SAAL,CAAejB,OAAf,GAAyBtT,IAAI,CAACuU,SAAL,CAAejB,OAAf,CAAuBnM,MAAvB,CAA8B,UAAUgP,GAAV,EAAe;AACpE,eAAOA,GAAG,CAACilB,OAAJ,KAAgBA,OAAvB;AACD,OAFwB,CAAzB;AAGAp7B,UAAI,CAACuU,SAAL,CAAejB,OAAf,CAAuBlK,IAAvB,CAA4B;AAC1BgyB,eAAO,EAAEA,OADiB;AAE1BpP,sBAAc,EAAEA,cAFU;AAG1BivB,oBAAY,EAAEA;AAHY,OAA5B;AAKD,KAXc;AAYfvoC,QAAI,EAAE,gBAAY;AAChB8H,aAAO,CAACC,IAAR,CACE,qEADF;AAIAza,UAAI,CAACuU,SAAL,CAAejB,OAAf,CAAuB7N,OAAvB,CAA+B,UAAU0Q,GAAV,EAAe;AAC5CnW,YAAI,CAACmQ,QAAL,CAAcuC,IAAd,CAAmByD,GAAG,CAAC8kC,YAAJ,CAAiB9kC,GAAG,CAACilB,OAArB,EAA8BjlB,GAAG,CAAC6V,cAAlC,CAAnB;AACD,OAFD;AAGD;AApBc,GAAjB;AAsBAhsB,MAAI,CAAC0R,aAAL,GAAqB,EAArB;AACA1R,MAAI,CAACk7C,OAAL,GAAe,EAAf;AACAl7C,MAAI,CAAC62B,SAAL,GAAiB,CAAjB;AACA72B,MAAI,CAAC0zB,YAAL,GAAoB,CAApB;AACA1zB,MAAI,CAACmwB,aAAL,GAAqB,EAArB;AACAnwB,MAAI,CAACw2B,WAAL,GAAmB;AAAEz0B,KAAC,EAAE,EAAL;AAASE,KAAC,EAAE;AAAZ,GAAnB;AACAjC,MAAI,CAACsC,SAAL,GAAiB,EAAjB;AACAtC,MAAI,CAAC85B,WAAL,GAAmB,EAAnB;AACA95B,MAAI,CAACs3B,YAAL,GAAoB,EAApB;AACA;AACF;AACA;AACA;AACA;AACA;;AACEt3B,MAAI,CAAC+8B,uBAAL,GAA+B,EAA/B;AACA;AACF;AACA;AACA;AACA;;AACE/8B,MAAI,CAACw1B,eAAL,GAAuB,EAAvB;AACA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACEx1B,MAAI,CAACqgC,aAAL,GAAqB,EAArB;AACArgC,MAAI,CAACyW,KAAL,GAAa;AACXC,QAAI,EAAE,EADK;AAEXpD,WAAO,EAAE,EAFE;AAGX2sB,SAAK,EAAE;AAHI,GAAb;AAKAjgC,MAAI,CAACsS,UAAL,GAAkB,EAAlB;AACAtS,MAAI,CAACy5B,YAAL,GAAoB,EAApB;AACAz5B,MAAI,CAAC05B,eAAL,GAAuB,EAAvB;AACA15B,MAAI,CAACi5B,UAAL,GAAkB;AAChBviB,QAAI,EAAE,EADU;AAEhBpD,WAAO,EAAE;AAFO,GAAlB;AAIAtT,MAAI,CAACq5B,oBAAL,GAA4B;AAC1BpmB,eAAW,EAAE,CAAC,CADY;AAE1BT,YAAQ,EAAE,CAAC;AAFe,GAA5B;AAIAxS,MAAI,CAACy6B,QAAL,GAAgB;AACd/jB,QAAI,EAAE,EADQ;AAEdpD,WAAO,EAAE,EAFK;AAGd6nC,cAAU,EAAE,EAHE;AAIdzgB,mBAAe,EAAE,CAJH;AAKd0gB,2BAAuB,EAAE,CALX;AAMdC,yBAAqB,EAAE,CANT;AAOdC,UAAM,EAAE;AACN5kC,UAAI,EAAE,EADA;AAENpD,aAAO,EAAE;AAFH;AAPM,GAAhB;AAYAtT,MAAI,CAAC0tB,MAAL,GAAc,EAAd;AACA1tB,MAAI,CAACkJ,UAAL,GAAkB,EAAlB;AACAlJ,MAAI,CAAC6B,KAAL,GAAa,EAAb;AACA7B,MAAI,CAAC4Q,UAAL,GAAkB,EAAlB;AACA5Q,MAAI,CAACu7C,OAAL,GAAe,EAAf;AACAv7C,MAAI,CAACw7C,OAAL,GAAe,EAAf;AACAx7C,MAAI,CAACy7C,YAAL,GAAoB,EAApB;AACAz7C,MAAI,CAAC2qC,MAAL,GAAc,EAAd;AACA3qC,MAAI,CAAC2f,OAAL,GAAe,EAAf;AACA3f,MAAI,CAAC0jC,cAAL,GAAsB,CAAtB;AACA1jC,MAAI,CAACyjC,cAAL,GAAsB,CAAtB;AACAzjC,MAAI,CAAC2/B,eAAL,GAAuB,CAAvB;AACA3/B,MAAI,CAACy/B,eAAL,GAAuB,CAAvB;AACAz/B,MAAI,CAACqb,UAAL,GAAkB,EAAlB;AACArb,MAAI,CAACysB,YAAL,GAAoB,EAApB;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACEzsB,MAAI,CAAC0Y,cAAL,GAAsB,EAAtB;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACE1Y,MAAI,CAAC8Y,WAAL,GAAmB,EAAnB;AAEA9Y,MAAI,CAACozC,WAAL,GAAmB,CACjB,qBADiB,EAEjB,qBAFiB,EAGjB,wBAHiB,EAIjB,uBAJiB,EAKjB,yBALiB,EAMjB,wBANiB,CAAnB;AAQApzC,MAAI,CAAC07C,iBAAL,GAAyB,EAAzB;AACA17C,MAAI,CAAC27C,UAAL,GAAkB,CAChB,WADgB,EAEhB,iBAFgB,EAGhB,yBAHgB,EAIhB,kBAJgB,EAKhB,kBALgB,EAMhB,iBANgB,EAOhB,sBAPgB,EAQhB,YARgB,EAShB,eATgB,EAUhB,kBAVgB,EAWhB,sBAXgB,EAYhB,0BAZgB,EAahB,WAbgB,EAchB,cAdgB,EAehB,eAfgB,EAgBhB,OAhBgB,EAiBhB,cAjBgB,EAkBhB,YAlBgB,EAmBhB,cAnBgB,EAoBhB,aApBgB,EAqBhB,MArBgB,EAsBhB,aAtBgB,EAuBhB,UAvBgB,EAwBhB,SAxBgB,EAyBhB,YAzBgB,EA0BhB,iBA1BgB,EA2BhB,SA3BgB,EA4BhB,UA5BgB,EA6BhB,OA7BgB,EA8BhB,WA9BgB,EA+BhB,WA/BgB,EAgChB,SAhCgB,EAiChB,QAjCgB,EAkChB,aAlCgB,EAmChB,YAnCgB,EAoChB,gBApCgB,EAqChB,oBArCgB,EAsChB,YAtCgB,EAuChB,iBAvCgB,EAwChB,SAxCgB,EAyChB,YAzCgB,EA0ChB,QA1CgB,EA2ChB,cA3CgB,EA4ChB,WA5CgB,EA6ChB,eA7CgB,EA8ChB,QA9CgB,EA+ChB,kBA/CgB,EAgDhB,cAhDgB,EAiDhB,aAjDgB,EAkDhB,UAlDgB,EAmDhB,WAnDgB,EAoDhB,YApDgB,EAqDhB,OArDgB,CAAlB;AAuDA37C,MAAI,CAACmqC,KAAL,GAAa;AAAEpoC,KAAC,EAAE,CAAL;AAAQE,KAAC,EAAE;AAAX,GAAb;;AACAjC,MAAI,CAACowC,eAAL,GAAuB,UAAUwL,WAAV,EAAuB;AAC5C,QAAMzL,YAAY,GAAG,EAArB;AACA,QAAM7nC,MAAM,GAAGtI,IAAI,CAACkU,SAAL,EAAf;AACA,QAAM2nC,cAAc,GAAG77C,IAAI,CAACmQ,QAAL,CAAc3K,MAArC;;AAEA,QAAIq2C,cAAc,KAAK,CAAvB,EAA0B;AACxB,aAAO,EAAP;AACD,KAP2C,CAS5C;AACA;AACA;;;AACA77C,QAAI,CAACsS,UAAL,CAAgB7M,OAAhB,CAAwB,UAAU2K,GAAV,EAAeqH,YAAf,EAA6B;AACnD,UAAI,CAACrH,GAAL,EAAU;AACR;AACD;;AAED,UAAIqH,YAAY,KAAKokC,cAArB,EAAqC;AACnC;AACD;;AAED,UAAIzrC,GAAG,CAAC5K,MAAJ,KAAe,CAAnB,EAAsB;AACpB2qC,oBAAY,CAAC14B,YAAD,CAAZ,GAA6B,IAA7B;AACA;AACD;;AAED04B,kBAAY,CAAC14B,YAAD,CAAZ,GAA6B,EAA7B;AAEArH,SAAG,CAAC3K,OAAJ,CAAY,UAAU0Q,GAAV,EAAe;AACzB,YAAIA,GAAG,KAAK,CAAC,CAAT,IAAc,CAAC7N,MAAM,CAAC6N,GAAD,CAAzB,EAAgC;AAC9B;AACD;;AAED,YAAM2lC,YAAY,GAAG97C,IAAI,CAACqT,MAAL,CAAYC,OAAZ,CAAoB6C,GAApB,CAArB;;AAEA,YAAI,CAACylC,WAAD,IAAgBtzC,MAAM,CAACwzC,YAAD,CAAN,CAAqBjmC,MAAzC,EAAiD;AAC/C;AACD;;AAED,YAAI7V,IAAI,CAACmQ,QAAL,CAAcsH,YAAd,CAAJ,EAAiC;AAC/B04B,sBAAY,CAAC14B,YAAD,CAAZ,CAA2BnP,MAAM,CAACwzC,YAAD,CAAN,CAAqB7xC,IAAhD,IACEjK,IAAI,CAACmQ,QAAL,CAAcsH,YAAd,EAA4BnP,MAAM,CAACwzC,YAAD,CAAN,CAAqB7xC,IAAjD,CADF;AAED;AACF,OAfD;AAgBD,KAhCD;AAkCA,WAAOkmC,YAAP;AACD,GA/CD;;AAgDAnwC,MAAI,CAACswC,gBAAL,GAAwB,UAAUsL,WAAV,EAAuB;AAC7C,QAAMvL,aAAa,GAAG,EAAtB;AACA,QAAM/nC,MAAM,GAAGtI,IAAI,CAACkU,SAAL,EAAf;AACA,QAAM2nC,cAAc,GAAG77C,IAAI,CAACmQ,QAAL,CAAc3K,MAArC;;AAEA,QAAIq2C,cAAc,KAAK,CAAvB,EAA0B;AACxB,aAAO,EAAP;AACD;;AAP4C,+CASX77C,IAAI,CAACsS,UAAL,CAAgBypC,OAAhB,EATW;AAAA;;AAAA;AAS7C,0DAA6D;AAAA;AAAA,YAAjDtkC,YAAiD;AAAA,YAAnCrH,GAAmC;;AAC3D,YAAI,CAACA,GAAD,IAAQA,GAAG,CAAC5K,MAAJ,KAAe,CAA3B,EAA8B;;AAD6B,oDAGzB4K,GAAG,CAAC2rC,OAAJ,EAHyB;AAAA;;AAAA;AAG3D,iEAAiD;AAAA;AAAA,gBAAnC7hB,eAAmC;;AAC/C,gBAAIA,eAAe,KAAK,CAAC,CAArB,IAA0B,CAAC5xB,MAAM,CAAC4xB,eAAD,CAArC,EAAwD;AACtD;AACD;;AAED,gBAAMC,gBAAgB,GAAGn6B,IAAI,CAACo6B,sCAAL,CACvBF,eADuB,CAAzB;;AAIA,gBAAI,CAAC0hB,WAAD,IAAgBtzC,MAAM,CAAC6xB,gBAAD,CAAN,CAAyBtkB,MAA7C,EAAqD;AACnD;AACD;;AAED,gBAAI7V,IAAI,CAACmQ,QAAL,CAAcsH,YAAd,CAAJ,EAAiC;AAC/B,kBAAMlI,MAAM,GAAGjH,MAAM,CAAC6xB,gBAAD,CAArB;AACA,kBAAM90B,KAAK,GAAGrF,IAAI,CAACmQ,QAAL,CAAcsH,YAAd,EAA4BlI,MAAM,CAACtF,IAAnC,CAAd;AACA,kBAAM4V,aAAa,GAAG7f,IAAI,CAAC0X,gCAAL,CACpBD,YADoB,CAAtB;AAIA,kBAAMnI,IAAI,GAAG;AACXjK,qBAAK,EAALA,KADW;AAEXkK,sBAAM,EAANA,MAFW;AAGXsQ,6BAAa,EAAbA,aAHW;AAIXsa,gCAAgB,EAAhBA,gBAJW;AAKX1iB,4BAAY,EAAZA,YALW;AAMXyiB,+BAAe,EAAfA;AANW,eAAb;AASAmW,2BAAa,CAACjnC,IAAd,CAAmBkG,IAAnB;AACD;AACF;AAlC0D;AAAA;AAAA;AAAA;AAAA;AAmC5D;AA5C4C;AAAA;AAAA;AAAA;AAAA;;AA8C7C,WAAO+gC,aAAP;AACD,GA/CD;;AAgDArwC,MAAI,CAACy4C,4BAAL,GAAoC,UAAUR,aAAV,EAAyB;AAC3D,QAAM9H,YAAY,GAAG,EAArB;AACA,QAAM7nC,MAAM,GAAGtI,IAAI,CAACkU,SAAL,EAAf;AACA,QAAI8nC,gBAAJ;AACA,QAAI7B,MAAM,GAAG,IAAb,CAJ2D,CAIxC;;AAJwC,gDAM7Bn6C,IAAI,CAACsS,UAAL,CAAgBypC,OAAhB,EAN6B;AAAA;;AAAA;AAM3D,6DAAyD;AAAA;AAAA,YAA7CvpC,QAA6C;AAAA,YAAnCpC,GAAmC;;AACvD;AACA,YAAI,CAACA,GAAL,EAAU,SAF6C,CAIvD;;AACA,YAAM6rC,WAAW,GAAG7rC,GAAG,CAACgG,IAAJ,CAAS,GAAT,EAAcmT,QAAd,EAApB;AACA,YAAM2yB,OAAO,GAAG,EAAhB;AAEA,YAAI,CAACF,gBAAL,EAAuBA,gBAAgB,GAAG5rC,GAAG,CAACgG,IAAJ,CAAS,GAAT,EAAcmT,QAAd,EAAnB;AACvB,YAAI4wB,MAAM,IAAI8B,WAAW,KAAKD,gBAA9B,EAAgD7B,MAAM,GAAG,KAAT;AAEhD,YAAMt6B,aAAa,GAAG7f,IAAI,CAAC0X,gCAAL,CAAsClF,QAAtC,CAAtB;;AAXuD,oDAa/BpC,GAb+B;AAAA;;AAAA;AAavD,iEAA6B;AAAA,gBAApB6C,WAAoB;AAC3B;AACA,gBAAIA,WAAW,GAAG,CAAlB,EAAqB;AAErB,gBAAMknB,gBAAgB,GAAGn6B,IAAI,CAACo6B,sCAAL,CACvBnnB,WADuB,CAAzB;AAGA,gBAAMwkC,UAAU,GAAGnvC,MAAM,CAAC6xB,gBAAD,CAAN,CAAyBlwB,IAA5C;AAEA,gBAAM5E,KAAK,GAAGrF,IAAI,CAAC4f,YAAL,CAAkBC,aAAlB,EAAiC43B,UAAjC,CAAd;AAEAyE,mBAAO,CAACzE,UAAD,CAAP,GAAsBpyC,KAAtB;AACD;AAzBsD;AAAA;AAAA;AAAA;AAAA;;AA0BvD8qC,oBAAY,CAAC/mC,IAAb,CAAkB8yC,OAAlB;AACD;AAjC0D;AAAA;AAAA;AAAA;AAAA;;AAmC3D,QAAI/L,YAAY,CAAC3qC,MAAb,GAAsB,CAA1B,EAA6B;AAC3B,UAAM22C,UAAU,GAAGjC,8DAAgB,CAAC/J,YAAD,EAAegK,MAAf,CAAnC;AACA,UAAMG,UAAU,GAAGD,8DAAgB,CAAClK,YAAD,EAAegK,MAAf,CAAnC;AAEA,UAAMiC,UAAU,GAAG;AACjB,sBAAcD,UADG;AAEjB,qBAAa7B,UAFI;AAGjB,oBAAY6B,UAHK;AAIjB,4BAAoB/zC,IAAI,CAACirB,SAAL,CAAe8c,YAAf;AAJH,OAAnB;;AAOA,0CAA+BlrC,MAAM,CAAC82C,OAAP,CAAeK,UAAf,CAA/B,uCAA2D;AAAA;AAAA,YAA/CvF,QAA+C;AAAA,YAArC3uC,IAAqC;;AACzD+vC,qBAAa,CAACoE,OAAd,CAAsBxF,QAAtB,EAAgC3uC,IAAhC;AACD;AACF;AACF,GAlDD;;AAmDAlI,MAAI,CAAC04C,kBAAL,GAA0B,YAAY;AACpC,QAAMpwC,MAAM,GAAGtI,IAAI,CAACkU,SAAL,EAAf;AACA,QAAMyjC,aAAa,GAAG,EAAtB;;AAFoC,gDAIN33C,IAAI,CAACsS,UAAL,CAAgBypC,OAAhB,EAJM;AAAA;;AAAA;AAIpC,6DAAyD;AAAA;AAAA,YAA7CvpC,QAA6C;AAAA,YAAnCpC,GAAmC;;AACvD;AACA,YAAI,CAACA,GAAL,EAAU;AAEV,YAAMyP,aAAa,GAAG7f,IAAI,CAAC0X,gCAAL,CAAsClF,QAAtC,CAAtB;;AAJuD,oDAM/BpC,GAN+B;AAAA;;AAAA;AAMvD,iEAA6B;AAAA,gBAApB6C,WAAoB;AAC3B;AACA,gBAAIA,WAAW,GAAG,CAAlB,EAAqB;AAErB,gBAAMknB,gBAAgB,GAAGn6B,IAAI,CAACo6B,sCAAL,CACvBnnB,WADuB,CAAzB;AAGA,gBAAMwkC,UAAU,GAAGnvC,MAAM,CAAC6xB,gBAAD,CAAN,CAAyBlwB,IAA5C;AAEAjK,gBAAI,CAACmQ,QAAL,CAAc0P,aAAd,EAA6B43B,UAA7B,IAA2C,EAA3C;AAEAE,yBAAa,CAACvuC,IAAd,CAAmB,CACjBoJ,QADiB,EAEjBS,WAFiB,EAGjB4M,aAHiB,EAIjBsa,gBAJiB,CAAnB;AAMD;AAvBsD;AAAA;AAAA;AAAA;AAAA;AAwBxD;AA5BmC;AAAA;AAAA;AAAA;AAAA;;AA8BpC,WAAOwd,aAAP;AACD,GA/BD;;AAgCA33C,MAAI,CAAC0X,gCAAL,GAAwC,UAAUD,YAAV,EAAwB;AAC9D,QAAIzX,IAAI,CAAC03C,gBAAL,IAAyB13C,IAAI,CAAC03C,gBAAL,CAAsB4E,GAAtB,CAA0B7kC,YAA1B,CAA7B,EAAsE;AACpE,aAAOzX,IAAI,CAAC03C,gBAAL,CAAsBvyC,GAAtB,CAA0BsS,YAA1B,CAAP;AACD;;AAED,WAAO7V,SAAP;AACD,GAND;;AAOA5B,MAAI,CAACo6B,sCAAL,GAA8C,UAAUF,eAAV,EAA2B;AACvE,WAAOl6B,IAAI,CAACqT,MAAL,CAAYC,OAAZ,CAAoB4mB,eAApB,CAAP;AACD,GAFD;AAGA;AACF;AACA;;;AACEl6B,MAAI,CAAC+X,wBAAL,GAAgC,YAAY;AAC1C,QAAI,CAAC/X,IAAI,CAACkJ,UAAL,CAAgBgQ,oBAArB,EAA2C;AACzC,aAAO,CAAP;AACD;;AACD,QAAMb,MAAM,GAAGrY,IAAI,CAAC0Y,cAAL,CAAoBlT,MAAnC;AACA,QAAMuB,IAAI,GAAG/G,IAAI,CAAC6B,KAAL,CAAWw/B,oBAAX,GAAkCrhC,IAAI,CAACihB,KAApD;AACA,WAAOla,IAAI,GAAGsR,MAAd;AACD,GAPD;AAQA;AACF;AACA;;;AACErY,MAAI,CAACiY,oBAAL,GAA4B,YAAY;AACtC,QAAI,CAACjY,IAAI,CAACkJ,UAAL,CAAgBoQ,iBAArB,EAAwC;AACtC,aAAO,CAAP;AACD;;AACD,QAAMjB,MAAM,GAAGrY,IAAI,CAAC8Y,WAAL,CAAiBtT,MAAhC;AACA,QAAMuB,IAAI,GAAG/G,IAAI,CAAC6B,KAAL,CAAW8gC,mBAAX,GAAiC3iC,IAAI,CAACihB,KAAnD;AACA,WAAOla,IAAI,GAAGsR,MAAd;AACD,GAPD;;AAQArY,MAAI,CAAC4zB,wBAAL,GAAgC,YAAY;AAC1C,QAAM2oB,MAAM,GAAG,EAAf;;AACA,SAAK,IAAI/pC,QAAQ,GAAG,CAApB,EAAuBA,QAAQ,GAAGxS,IAAI,CAAC0Y,cAAL,CAAoBlT,MAAtD,EAA8DgN,QAAQ,EAAtE,EAA0E;AACxE,UAAM6F,MAAM,GAAGrY,IAAI,CAAC0Y,cAAL,CAAoBlG,QAApB,CAAf;;AACA,WAAK,IAAIgqC,UAAU,GAAG,CAAtB,EAAyBA,UAAU,GAAGnkC,MAAM,CAAC7S,MAA7C,EAAqDg3C,UAAU,EAA/D,EAAmE;AACjE,YAAMjkC,KAAK,GAAGF,MAAM,CAACmkC,UAAD,CAApB;AACA,YAAIjkC,KAAK,CAACH,SAAV,EAAqBmkC,MAAM,CAACnzC,IAAP,CAAYmP,KAAZ;AACtB;AACF;;AACD,WAAOgkC,MAAP;AACD,GAVD;;AAWAv8C,MAAI,CAACq1B,qBAAL,GAA6B,YAAY;AACvC,QAAMknB,MAAM,GAAG,EAAf;;AACA,SAAK,IAAI/pC,QAAQ,GAAG,CAApB,EAAuBA,QAAQ,GAAGxS,IAAI,CAAC8Y,WAAL,CAAiBtT,MAAnD,EAA2DgN,QAAQ,EAAnE,EAAuE;AACrE,UAAM6F,MAAM,GAAGrY,IAAI,CAAC8Y,WAAL,CAAiBtG,QAAjB,CAAf;;AACA,WAAK,IAAIgqC,UAAU,GAAG,CAAtB,EAAyBA,UAAU,GAAGnkC,MAAM,CAAC7S,MAA7C,EAAqDg3C,UAAU,EAA/D,EAAmE;AACjE,YAAMjkC,KAAK,GAAGF,MAAM,CAACmkC,UAAD,CAApB;AACA,YAAIjkC,KAAK,CAACH,SAAV,EAAqBmkC,MAAM,CAACnzC,IAAP,CAAYmP,KAAZ;AACtB;AACF;;AACD,WAAOgkC,MAAP;AACD,GAVD;AAWA;AACF;AACA;AACA;;;AACEv8C,MAAI,CAACwxC,WAAL,GAAmB,UAAUj5B,KAAV,EAAiB;AAClC,QAAIA,KAAK,CAAC1N,IAAN,KAAe,GAAnB,EAAwB;AAAA,UACdoP,IADc,GACD1B,KADC,CACd0B,IADc;AAAA,UACRC,EADQ,GACD3B,KADC,CACR2B,EADQ;AAEtB;;AACA,UAAIuiC,YAAJ;AACA;;AACA,UAAMtkC,SAAS,GAAGnY,IAAI,CAAC0Y,cAAvB;;AACA,WAAK,IAAI1R,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmR,SAAS,CAAC3S,MAA9B,EAAsCwB,CAAC,EAAvC,EAA2C;AACzC,YAAMqR,MAAM,GAAGF,SAAS,CAACnR,CAAD,CAAxB;;AACA,aAAK,IAAI01C,EAAE,GAAG,CAAd,EAAiBA,EAAE,GAAGrkC,MAAM,CAAC7S,MAA7B,EAAqCk3C,EAAE,EAAvC,EAA2C;AACzC,cAAMnkC,MAAK,GAAGF,MAAM,CAACqkC,EAAD,CAApB;;AACA,cAAInkC,MAAK,CAAC0B,IAAN,KAAeA,IAAf,IAAuB1B,MAAK,CAAC2B,EAAN,KAAaA,EAAxC,EAA4C;AAC1CuiC,wBAAY,GAAGlkC,MAAf;AACA;AACD;AACF;;AACD,YAAIkkC,YAAJ,EAAkB;AACnB;;AACD,UAAI,CAACA,YAAL,EAAmB;AACnB,UAAME,aAAa,GAAG,CAACF,YAAY,CAACrkC,SAApC;AACAqkC,kBAAY,CAACrkC,SAAb,GAAyBukC,aAAzB;AACA,aAAO,IAAP;AACD;;AACD,QAAIpkC,KAAK,CAAC1N,IAAN,KAAe,GAAnB,EAAwB;AAAA,UACdoP,KADc,GACD1B,KADC,CACd0B,IADc;AAAA,UACRC,GADQ,GACD3B,KADC,CACR2B,EADQ;AAEtB;;AACA,UAAIuiC,aAAJ;AACA;;;AACA,UAAMtkC,UAAS,GAAGnY,IAAI,CAAC8Y,WAAvB;;AACA,WAAK,IAAI9R,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGmR,UAAS,CAAC3S,MAA9B,EAAsCwB,GAAC,EAAvC,EAA2C;AACzC,YAAMqR,OAAM,GAAGF,UAAS,CAACnR,GAAD,CAAxB;;AACA,aAAK,IAAI01C,GAAE,GAAG,CAAd,EAAiBA,GAAE,GAAGrkC,OAAM,CAAC7S,MAA7B,EAAqCk3C,GAAE,EAAvC,EAA2C;AACzC,cAAMnkC,OAAK,GAAGF,OAAM,CAACqkC,GAAD,CAApB;;AACA,cAAInkC,OAAK,CAAC0B,IAAN,KAAeA,KAAf,IAAuB1B,OAAK,CAAC2B,EAAN,KAAaA,GAAxC,EAA4C;AAC1CuiC,yBAAY,GAAGlkC,OAAf;AACA;AACD;AACF;;AACD,YAAIkkC,aAAJ,EAAkB;AACnB;;AACD,UAAI,CAACA,aAAL,EAAmB;;AACnB,UAAME,cAAa,GAAG,CAACF,aAAY,CAACrkC,SAApC;;AACAqkC,mBAAY,CAACrkC,SAAb,GAAyBukC,cAAzB;AACA,aAAO,IAAP;AACD;;AACD,WAAO,KAAP;AACD,GA9CD;;AA+CA38C,MAAI,CAAC2Z,oBAAL,GAA4B,UAAUijC,WAAV,EAAuB3iC,IAAvB,EAA6BC,EAA7B,EAAiC;AAC3D,SAAK,IAAIlT,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG41C,WAAW,CAACp3C,MAAhC,EAAwCwB,CAAC,EAAzC,EAA6C;AAC3C,UAAMqR,MAAM,GAAGukC,WAAW,CAAC51C,CAAD,CAA1B;;AACA,WAAK,IAAI61C,MAAM,GAAG,CAAlB,EAAqBA,MAAM,GAAGxkC,MAAM,CAAC7S,MAArC,EAA6Cq3C,MAAM,EAAnD,EAAuD;AACrD,YAAMtkC,KAAK,GAAGF,MAAM,CAACwkC,MAAD,CAApB;AACA,YAAI5iC,IAAI,KAAK1B,KAAK,CAAC2B,EAAN,GAAW,CAAxB,EAA2B,OAAO,KAAP;AAC3B,YAAID,IAAI,GAAG1B,KAAK,CAAC2B,EAAjB,EAAqB;;AAErB,YAAID,IAAI,KAAK1B,KAAK,CAAC0B,IAAnB,EAAyB;AACvB,cAAIC,EAAE,KAAK3B,KAAK,CAAC2B,EAAjB,EAAqB,OAAO,KAAP;AACrB,cAAIA,EAAE,GAAG3B,KAAK,CAAC2B,EAAf,EAAmB,OAAO,IAAP;AACnB,gBAHuB,CAGhB;AACR;;AACD,YAAID,IAAI,GAAG1B,KAAK,CAAC0B,IAAjB,EAAuB;AACrB,cAAIC,EAAE,GAAG3B,KAAK,CAAC2B,EAAf,EAAmB,OAAO,KAAP;AACnB,gBAFqB,CAEd;AACR;;AACD,YAAIA,EAAE,GAAG3B,KAAK,CAAC2B,EAAf,EAAmB,OAAO,KAAP;AACnB,eAAO,IAAP;AACD;AACF;;AACD,WAAO,IAAP;AACD,GAtBD;;AAuBAla,MAAI,CAAC2d,yBAAL,GAAiC,YAAY;AAC3C,QAAI,CAAC3d,IAAI,CAACkJ,UAAL,CAAgBs2B,iBAArB,EAAwC;AACtC,aAAO,CAAP;AACD;;AACD,WACE,CAACx/B,IAAI,CAACyW,KAAL,CAAWC,IAAX,CAAgB,CAAC,CAAjB,KAAuB1W,IAAI,CAAC6B,KAAL,CAAW6b,sBAAnC,IAA6D1d,IAAI,CAACihB,KADpE;AAGD,GAPD;;AAQAjhB,MAAI,CAAC6d,qBAAL,GAA6B,YAAY;AACvC,QAAI,CAAC7d,IAAI,CAACkJ,UAAL,CAAgBs1B,cAArB,EAAqC;AACnC,aAAO,CAAP;AACD;;AACD,WACE,CAACx+B,IAAI,CAACyW,KAAL,CAAWnD,OAAX,CAAmB,CAAC,CAApB,KAA0BtT,IAAI,CAAC6B,KAAL,CAAW+b,kBAAtC,IAA4D5d,IAAI,CAACihB,KADnE;AAGD,GAPD;;AAQAjhB,MAAI,CAAC8V,cAAL,GAAsB,YAAY;AAChC,QAAI,CAAC9V,IAAI,CAACkJ,UAAL,CAAgBqN,cAAjB,IAAmC,CAACvW,IAAI,CAACkJ,UAAL,CAAgBe,IAAxD,EAA8D;AAC5D;AACD;;AACD,QAAI6yC,UAAU,GAAG,EAAjB;AACA98C,QAAI,CAACkU,SAAL,GAAiBzO,OAAjB,CAAyB,UAAUkQ,MAAV,EAAkB;AACzCmnC,gBAAU,CAACnnC,MAAM,CAAC1L,IAAR,CAAV,GAA0B,CAAC0L,MAAM,CAACE,MAAlC;AACD,KAFD;AAGAknC,gBAAY,CAACC,OAAb,CACEh9C,IAAI,CAAC66C,WAAL,GAAmB,GAAnB,GAAyB76C,IAAI,CAACkJ,UAAL,CAAgBe,IAD3C,EAEE7B,IAAI,CAACirB,SAAL,CAAe;AACb5c,WAAK,EAAE;AACLC,YAAI,EAAE1W,IAAI,CAACyW,KAAL,CAAWC,IADZ;AAELpD,eAAO,EAAEtT,IAAI,CAACyW,KAAL,CAAWnD;AAFf,OADM;AAKbD,YAAM,EAAE;AACNqD,YAAI,EAAE1W,IAAI,CAACqT,MAAL,CAAYqD,IADZ;AAENpD,eAAO,EAAEtT,IAAI,CAACqT,MAAL,CAAYC;AAFf,OALK;AASb8nB,aAAO,EAAEp7B,IAAI,CAACo7B,OATD;AAUbpP,oBAAc,EAAEhsB,IAAI,CAACgsB,cAVR;AAWb8wB,gBAAU,EAAEA;AAXC,KAAf,CAFF;AAgBD,GAxBD;;AAyBA98C,MAAI,CAACkU,SAAL,GAAiB,YAAY;AAC3B,WAAOlU,IAAI,CAACsI,MAAL,IAAetI,IAAI,CAACm7C,UAApB,IAAkC,EAAzC;AACD,GAFD;;AAGA,WAASpzB,SAAT,CAAmBC,GAAnB,EAAwBC,IAAxB,EAA8B;AAC5B,QAAIjhB,CAAC,GAAG,EAAR;AAAA,QACEjF,CADF;;AAEA,SAAKA,CAAC,GAAGimB,GAAT,EAAcjmB,CAAC,IAAIkmB,IAAnB,EAAyBlmB,CAAC,IAAI,CAA9B,EAAiC;AAC/BiF,OAAC,CAACjF,CAAD,CAAD,GAAOA,CAAP;AACD;;AACD,WAAOiF,CAAP;AACD;;AACDhH,MAAI,CAAC6W,kBAAL,GAA0B,YAAY;AACpC,QAAIpV,CAAC,GAAGzB,IAAI,CAACkU,SAAL,EAAR;AACAlU,QAAI,CAACqT,MAAL,CAAYC,OAAZ,GAAsByU,SAAS,CAAC,CAAD,EAAItmB,CAAC,CAAC+D,MAAF,GAAW,CAAf,CAA/B;AACD,GAHD;;AAIAxF,MAAI,CAAC4W,eAAL,GAAuB,YAAY;AACjC5W,QAAI,CAACqT,MAAL,CAAYqD,IAAZ,GAAmBqR,SAAS,CAAC,CAAD,EAAI/nB,IAAI,CAAC4f,YAAL,CAAkBpa,MAAlB,GAA2B,CAA/B,CAA5B;AACD,GAFD;;AAGAxF,MAAI,CAAC4yC,kBAAL,GAA0B,UAAUpkC,KAAV,EAAiB;AACzC,QAAMkrB,eAAe,GAAG15B,IAAI,CAACsS,UAAL,CAAgB,CAAhB,CAAxB;AACA,QAAMhK,MAAM,GAAGtI,IAAI,CAACkU,SAAL,EAAf;;AAFyC,gDAIZwlB,eAJY;AAAA;;AAAA;AAIzC,6DAA8C;AAAA,YAAnCujB,cAAmC;;AAC5C;AACA,YAAIA,cAAc,IAAI,CAAlB,IAAuBj9C,IAAI,CAAC0Z,gBAAL,CAAsBujC,cAAtB,CAA3B,EAAkE;AAChE,cAAI33C,KAAK,CAACkJ,KAAD,CAAT,EAAkB;AAChB,gBAAMmH,MAAM,GAAGrN,MAAM,CAACtI,IAAI,CAACqT,MAAL,CAAYC,OAAZ,CAAoB2pC,cAApB,CAAD,CAArB;AACAj9C,gBAAI,CAACq2C,iBAAL,CAAuB1gC,MAAM,CAAC1L,IAA9B;AACD,WAHD,MAGO;AACLjK,gBAAI,CAACyW,KAAL,CAAWnD,OAAX,CAAmB2pC,cAAnB,IAAqCzuC,KAArC;AACAxO,gBAAI,CAACwE,aAAL,CAAmB,cAAnB,EAAmC;AACjCzC,eAAC,EAAEyM,KAD8B;AAEjCvM,eAAC,EAAEjC,IAAI,CAACmyC,sBAFyB;AAGjClE,0BAAY,EAAEjuC,IAAI,CAAC+0B;AAHc,aAAnC;AAKD;AACF;AACF;AAnBwC;AAAA;AAAA;AAAA;AAAA;AAoB1C,GApBD;;AAqBA/0B,MAAI,CAAC83C,gBAAL,GAAwB,YAAY;AAClC,WAAO93C,IAAI,CAACkU,SAAL,GAAiB/M,MAAjB,CAAwB,UAAUgP,GAAV,EAAe;AAC5C,aAAO,CAACA,GAAG,CAACN,MAAZ;AACD,KAFM,CAAP;AAGD,GAJD;;AAKA7V,MAAI,CAACk9C,iBAAL,GAAyB,UAAU9sC,GAAV,EAAeb,MAAf,EAAuBiD,QAAvB,EAAiC;AACxD,QAAIkD,CAAC,GAAGnG,MAAM,CAACuQ,YAAP,IAAuB,EAA/B;;AACA,QAAI,OAAOpK,CAAP,KAAa,UAAjB,EAA6B;AAC3BA,OAAC,GAAGA,CAAC,CAACtR,KAAF,CAAQpE,IAAI,CAACmB,IAAb,EAAmB,CAACoO,MAAD,EAASiD,QAAT,CAAnB,CAAJ;AACD;;AACDpC,OAAG,CAACb,MAAM,CAACtF,IAAR,CAAH,GAAmByL,CAAnB;AACD,GAND;;AAOA1V,MAAI,CAACigB,gBAAL,GAAwB,YAAY;AAClCjgB,QAAI,CAAC+jC,MAAL,GAAc,EAAd,CADkC,CAGlC;AACA;AACA;AACA;;AACA,QAAMoZ,WAAW,GAAGv7C,SAApB;AAEA5B,QAAI,CAACkU,SAAL,GAAiBzO,OAAjB,CAAyB,SAAS23C,aAAT,CAAuB7tC,MAAvB,EAA+B;AACtDvP,UAAI,CAACk9C,iBAAL,CAAuBl9C,IAAI,CAAC+jC,MAA5B,EAAoCx0B,MAApC,EAA4C4tC,WAA5C;AACD,KAFD;AAGD,GAZD;;AAaAn9C,MAAI,CAACq9C,iBAAL,GAAyB,UAAUnsC,GAAV,EAAe;AACtC,QAAIxI,CAAC,GAAG,CAAR;;AACA,WAAO1I,IAAI,CAACy7C,YAAL,CAAkBvqC,GAAlB,CAAP,EAA+B;AAC7BxI,OAAC,IAAI,CAAL;AACAwI,SAAG,GAAGA,GAAG,GAAGxI,CAAZ;AACD;;AACD,WAAOwI,GAAP;AACD,GAPD;;AAQAlR,MAAI,CAACmH,MAAL,GAAc,UAAU0D,IAAV,EAAgB;AAC5B,QAAI8uB,CAAC,GAAG35B,IAAI,CAACk7C,OAAL,CAAarwC,IAAb,CAAR;;AACA,QAAI,CAAC8uB,CAAD,IAAM9uB,IAAI,KAAKjJ,SAAnB,EAA8B;AAC5B4Y,aAAO,CAACC,IAAR,CACE,kEADF,EAEE5P,IAFF;AAIA8uB,OAAC,GAAG35B,IAAI,CAACk7C,OAAL,CAAapyC,MAAjB;AACD;;AACD,WAAO6wB,CAAP;AACD,GAVD;;AAWA35B,MAAI,CAAC2+B,gBAAL,GAAwB,YAAY;AAClC,WAAO3+B,IAAI,CAAC0R,aAAL,IAAsBzM,MAAM,CAAC8L,IAAP,CAAY/Q,IAAI,CAAC0R,aAAjB,EAAgClM,MAAhC,GAAyC,CAAtE;AACD,GAFD;;AAGAxF,MAAI,CAAC4+B,oBAAL,GAA4B,YAAY;AACtC,SAAK,IAAI53B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGhH,IAAI,CAAC8Y,WAAL,CAAiBtT,MAArC,EAA6CwB,CAAC,EAA9C,EAAkD;AAChD,UAAMqR,MAAM,GAAGrY,IAAI,CAAC8Y,WAAL,CAAiB9R,CAAjB,CAAf;;AACA,WAAK,IAAIsR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,MAAM,CAAC7S,MAA3B,EAAmC8S,CAAC,EAApC,EAAwC;AACtC,YAAM0mB,CAAC,GAAG3mB,MAAM,CAACC,CAAD,CAAhB;AACA,YAAI0mB,CAAC,CAAC5mB,SAAN,EAAiB,OAAO,IAAP;AAClB;AACF;;AACD,WAAO,KAAP;AACD,GATD;;AAUApY,MAAI,CAACs9C,4BAAL,GAAoC,UAAU19B,YAAV,EAAwB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA,QAAI29B,WAAW,GAAG39B,YAAY,CAAC3O,GAAb,CAAiB,UAACb,GAAD,EAAMotC,gBAAN;AAAA,aAA2B,CAC5DptC,GAD4D,EAE5DotC,gBAF4D,CAA3B;AAAA,KAAjB,CAAlB,CAP0D,CAY1D;;AACA,QAAIx9C,IAAI,CAACw1B,eAAL,CAAqBhwB,MAArB,GAA8B,CAAlC,EAAqC;AACnC,UAAMoN,MAAM,GAAG5S,IAAI,CAACw1B,eAAL,CAAqB9iB,IAArB,CAA0B,UAAChF,CAAD,EAAIiF,CAAJ;AAAA,eAAUA,CAAC,CAAC,CAAD,CAAD,GAAOjF,CAAC,CAAC,CAAD,CAAlB;AAAA,OAA1B,CAAf;;AACA,WAAK,IAAI1G,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4L,MAAM,CAACpN,MAA3B,EAAmCwB,CAAC,EAApC,EAAwC;AAAA,uCACD4L,MAAM,CAAC5L,CAAD,CADL;AAAA,YAC/B80B,aAD+B;AAAA,YAChBC,WADgB;;AAEtC,YAAM0hB,WAAW,GAAG1hB,WAAW,GAAGD,aAAd,GAA8B,CAAlD;AACAyhB,mBAAW,CAACrxC,MAAZ,CAAmB4vB,aAAnB,EAAkC2hB,WAAlC;AACD;AACF,KApByD,CAsB1D;;;AAtB0D;AAAA;AAAA,UAuB9CC,UAvB8C;AAAA,UAuBlCC,UAvBkC;;AAwBxD,UAAMpuC,MAAM,GAAGvP,IAAI,CAAC+R,eAAL,CAAqB2rC,UAArB,CAAf;;AAEA,UAAI,CAACnuC,MAAL,EAAa;AACX;AACD;;AAED,UAAMquC,qBAAqB,GACzBruC,MAAM,CAACpI,MAAP,IAAiBnH,IAAI,CAACmH,MAAL,CAAYoI,MAAM,CAAC1E,IAAP,IAAe,QAA3B,CADnB;AAGA0yC,iBAAW,GAAGA,WAAW,CAACp2C,MAAZ,CAAmB,gBAAmC;AAAA;AAAA,YAAxBiJ,GAAwB;AAAA,YAAnBotC,gBAAmB;;AAClE,YACEx9C,IAAI,CAACkJ,UAAL,CAAgBk6B,iBAAhB,IACA,CAACpjC,IAAI,CAACkJ,UAAL,CAAgB20C,gBADjB,IAEAL,gBAAgB,GAAGx9C,IAAI,CAAC62B,SAH1B,EAKE,OAAO,IAAP;AAEF,eAAO+mB,qBAAqB,CAACxtC,GAAG,CAACstC,UAAD,CAAJ,EAAkBC,UAAlB,CAA5B;AACD,OATa,CAAd;AAjCwD;;AAuB1D,yCAAuC14C,MAAM,CAAC82C,OAAP,CAAe/7C,IAAI,CAAC0R,aAApB,CAAvC,wCAA2E;AAAA;;AAAA,+BAIvE;AAgBH,KA3CyD,CA6C1D;;AACA;;;AACA,QAAIiiB,eAAe,GAAG,EAAtB;;AACA,SAAK,IAAI3sB,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGhH,IAAI,CAAC8Y,WAAL,CAAiBtT,MAArC,EAA6CwB,GAAC,EAA9C,EAAkD;AAChD,UAAM0P,IAAI,GAAG1W,IAAI,CAAC8Y,WAAL,CAAiB9R,GAAjB,CAAb;;AACA,WAAK,IAAIsR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG5B,IAAI,CAAClR,MAAzB,EAAiC8S,CAAC,EAAlC,EAAsC;AACpC,YAAMrR,CAAC,GAAGyP,IAAI,CAAC4B,CAAD,CAAd;AACA,YAAI,CAACrR,CAAC,CAACmR,SAAP,EAAkB;AAClBub,uBAAe,CAACvqB,IAAhB,CAAqB,CAACnC,CAAC,CAACgT,IAAH,EAAShT,CAAC,CAACiT,EAAX,CAArB;AACD;AACF;;AACD,QAAIyZ,eAAe,CAACnuB,MAAhB,GAAyB,CAA7B,EAAgC;AAC9B;AACAmuB,qBAAe,CAACjhB,IAAhB,CAAqB,UAAChF,CAAD,EAAIiF,CAAJ;AAAA,eAAUjF,CAAC,CAAC,CAAD,CAAD,GAAOiF,CAAC,CAAC,CAAD,CAAlB;AAAA,OAArB;AACA,UAAImrC,MAAM,GAAG,CAAb;AACA,UAAMxF,GAAG,GAAG3kB,eAAe,CAACnuB,MAA5B;;AACA,WAAK,IAAIwB,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGsxC,GAApB,EAAyBtxC,GAAC,EAA1B,EAA8B;AAC5B,YAAMC,EAAC,GAAG0sB,eAAe,CAAC3sB,GAAD,CAAzB;;AACA,YAAIA,GAAC,KAAKsxC,GAAG,GAAG,CAAhB,EAAmB;AACjB3kB,yBAAe,CAACmqB,MAAM,EAAP,CAAf,GAA4B72C,EAA5B;AACA;AACD;;AACD,YAAMiT,EAAE,GAAGjT,EAAC,CAAC,CAAD,CAAZ;;AAN4B,8CAOP0sB,eAAe,CAAC3sB,GAAC,GAAG,CAAL,CAPR;AAAA,YAOrB+2C,KAPqB;AAAA,YAOdC,GAPc;;AAQ5B,YAAID,KAAK,GAAG7jC,EAAE,GAAG,CAAjB,EAAoB;AAClByZ,yBAAe,CAACmqB,MAAM,EAAP,CAAf,GAA4B72C,EAA5B;AACA;AACD;;AACD0sB,uBAAe,CAAC3sB,GAAC,GAAG,CAAL,CAAf,GAAyBC,EAAzB;AACA,YAAI+2C,GAAG,GAAG9jC,EAAV,EAAcyZ,eAAe,CAAC3sB,GAAC,GAAG,CAAL,CAAf,CAAuB,CAAvB,IAA4Bg3C,GAA5B;AACf;;AACDrqB,qBAAe,GAAGA,eAAe,CAACsqB,KAAhB,CAAsB,CAAtB,EAAyBH,MAAzB,CAAlB,CApB8B,CAqB9B;AAEA;;AACA,UAAI9e,CAAC,GAAGrL,eAAe,CAACmL,KAAhB,EAAR;;AACA,WAAK,IAAIO,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAGke,WAAW,CAAC/3C,MAAxC,EAAgD65B,KAAK,EAArD,EAAyD;AACvD,YAAMzrB,EAAE,GAAG2pC,WAAW,CAACle,KAAD,CAAX,CAAmB,CAAnB,CAAX;AACA,YAAIzrB,EAAE,GAAGorB,CAAC,CAAC,CAAD,CAAV,EAAe;AACf,YAAIlsB,GAAG,GAAGusB,KAAK,GAAG,CAAlB;;AACA,eAAOvsB,GAAG,GAAGyqC,WAAW,CAAC/3C,MAAzB,EAAiCsN,GAAG,EAApC,EAAwC;AACtC,cAAMorC,GAAG,GAAGX,WAAW,CAACzqC,GAAD,CAAX,CAAiB,CAAjB,CAAZ;AACA,cAAIorC,GAAG,GAAGlf,CAAC,CAAC,CAAD,CAAX,EAAgB;AACjB;;AACDue,mBAAW,CAACrxC,MAAZ,CAAmBmzB,KAAnB,EAA0BvsB,GAAG,GAAGusB,KAAhC;AACAL,SAAC,GAAGrL,eAAe,CAACmL,KAAhB,EAAJ;AACA,YAAI,CAACE,CAAL,EAAQ;AACRK,aAAK;AACN,OArC6B,CAsC9B;;AACD,KA/FyD,CAgG1D;AAEA;;;AAlG0D,gDAmGrCr/B,IAAI,CAACuU,SAAL,CAAejB,OAnGsB;AAAA;;AAAA;AAAA;AAAA,YAmG/CqC,MAnG+C;AAoGxD,YAAMwoC,MAAM,GAAGxoC,MAAM,CAACslC,YAAP,CAAoBtlC,MAAM,CAACylB,OAA3B,EAAoCzlB,MAAM,CAACqW,cAA3C,CAAf;AAEAuxB,mBAAW,CAAC7qC,IAAZ,CAAiB,wBAA+B;AAAA;AAAA,cAA7B0rC,IAA6B;;AAAA;AAAA,cAArBC,IAAqB;AAAA,cAAfC,SAAe;;AAC9C,cACEt+C,IAAI,CAACkJ,UAAL,CAAgBk6B,iBAAhB,IACA,CAACpjC,IAAI,CAACkJ,UAAL,CAAgBq1C,cADjB,IAEAD,SAAS,GAAGt+C,IAAI,CAAC62B,SAHnB,EAKE,OAAO,CAAP;AACF,iBAAOsnB,MAAM,CAACC,IAAD,EAAOC,IAAP,CAAb;AACD,SARD;AAtGwD;;AAmG1D,6DAA6C;AAAA;AAY5C;AA/GyD;AAAA;AAAA;AAAA;AAAA;;AAiH1D,WAAO;AACLluC,cAAQ,EAAEotC,WAAW,CAACtsC,GAAZ,CAAgB;AAAA;AAAA,YAAEb,GAAF;;AAAA,eAAWA,GAAX;AAAA,OAAhB,CADL;AAELsnC,sBAAgB,EAAE,IAAItjC,GAAJ,CAChBmpC,WAAW,CAACtsC,GAAZ,CAAgB,iBAA2BwG,YAA3B;AAAA;AAAA,YAAE+mC,IAAF;AAAA,YAAQhB,gBAAR;;AAAA,eAA4C,CAC1D/lC,YAD0D,EAE1D+lC,gBAF0D,CAA5C;AAAA,OAAhB,CADgB;AAFb,KAAP;AASD,GA1HD;;AA2HAx9C,MAAI,CAACwY,OAAL,GAAe,YAAY;AAAA,gCACcxY,IAAI,CAACs9C,4BAAL,CACrCt9C,IAAI,CAAC4f,YADgC,CADd;AAAA,QACjBzP,QADiB,yBACjBA,QADiB;AAAA,QACPunC,gBADO,yBACPA,gBADO;;AAKzB13C,QAAI,CAACmQ,QAAL,GAAgBA,QAAhB;AACAnQ,QAAI,CAAC03C,gBAAL,GAAwBA,gBAAxB;AAEA13C,QAAI,CAACiI,MAAL;AACAjI,QAAI,CAACuV,IAAL,CAAU,IAAV;AACD,GAVD;;AAWAvV,MAAI,CAACy+C,oBAAL,GAA4B,UAAUhH,UAAV,EAAsBvvC,IAAtB,EAA4B;AACtD,QAAIuF,CAAJ;AAAA,QACE1L,CADF;AAAA,QAEEkuB,CAAC,GAAG/nB,IAAI,CAAC1C,MAFX;;AAGA,SAAKzD,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkuB,CAAhB,EAAmBluB,CAAC,IAAI,CAAxB,EAA2B;AACzB,UACEmG,IAAI,CAACnG,CAAD,CAAJ,KAAYH,SAAZ,IACAsG,IAAI,CAACnG,CAAD,CAAJ,KAAY,IADZ,IAEA,CAAC,IAAD,EAAOH,SAAP,EAAkBuK,OAAlB,CAA0BjE,IAAI,CAACnG,CAAD,CAAJ,CAAQ01C,UAAR,CAA1B,MAAmD,CAAC,CAHtD,EAIE;AACAhqC,SAAC,WAAUvF,IAAI,CAACnG,CAAD,CAAd,CAAD;AACA,eAAO0L,CAAC,KAAK,QAAN,GAAiB,QAAjB,GAA4BA,CAAnC;AACD;AACF;;AACD,WAAO,QAAP;AACD,GAfD;;AAgBAzN,MAAI,CAAC0+C,cAAL,GAAsB,YAAY;AAChCz5C,UAAM,CAAC8L,IAAP,CAAY/Q,IAAI,CAACqb,UAAjB,EAA6B5V,OAA7B,CAAqC,UAAUk5C,OAAV,EAAmB;AACtD3+C,UAAI,CAACqb,UAAL,CAAgBsjC,OAAhB,EAAyBppC,IAAzB;AACD,KAFD;AAGD,GAJD;;AAKAvV,MAAI,CAACuyC,gBAAL,GAAwB,YAAY;AAClCttC,UAAM,CAAC8L,IAAP,CAAY/Q,IAAI,CAACqb,UAAjB,EAA6B5V,OAA7B,CAAqC,UAAUk5C,OAAV,EAAmB;AACtD3+C,UAAI,CAACqb,UAAL,CAAgBsjC,OAAhB,EAAyB12C,MAAzB;AACD,KAFD;AAGD,GAJD;;AAKAjI,MAAI,CAAC8wC,cAAL,GAAsB,UAAUlrC,CAAV,EAAa7D,CAAb,EAAgBE,CAAhB,EAAmBmsC,IAAnB,EAAyB;AAC7C,QAAIwQ,QAAJ;AAAA,QACEhhC,kBAAkB,GAAG5d,IAAI,CAAC6d,qBAAL,EADvB;AAAA,QAEEH,sBAAsB,GAAG1d,IAAI,CAAC2d,yBAAL,EAF3B;;AAGA,QAAI5b,CAAC,KAAK,CAAC,CAAX,EAAc;AACZ,UAAIA,CAAC,GAAG/B,IAAI,CAACwO,KAAL,GAAaxO,IAAI,CAACkJ,UAAL,CAAgB21C,mBAArC,EAA0D;AACxD7+C,YAAI,CAACsC,SAAL,CAAeC,UAAf,IAA6BvC,IAAI,CAACkJ,UAAL,CAAgBoqC,wBAA7C;AACAsL,gBAAQ,GAAG,IAAX;AACD;;AACD,UAAI78C,CAAC,GAAG/B,IAAI,CAACkJ,UAAL,CAAgB21C,mBAApB,GAA0CjhC,kBAA1C,GAA+D,CAAnE,EAAsE;AACpE5d,YAAI,CAACsC,SAAL,CAAeC,UAAf,IAA6BvC,IAAI,CAACkJ,UAAL,CAAgBoqC,wBAA7C;AACAsL,gBAAQ,GAAG,IAAX;AACD;AACF;;AACD,QAAI38C,CAAC,KAAK,CAAC,CAAX,EAAc;AACZ,UAAIA,CAAC,GAAGjC,IAAI,CAACmC,MAAL,GAAcnC,IAAI,CAACkJ,UAAL,CAAgB21C,mBAAtC,EAA2D;AACzD7+C,YAAI,CAACsC,SAAL,CAAeE,SAAf,IAA4BxC,IAAI,CAACkJ,UAAL,CAAgBoqC,wBAA5C;AACAsL,gBAAQ,GAAG,IAAX;AACD;;AACD,UACE38C,CAAC,GAAGjC,IAAI,CAACkJ,UAAL,CAAgB21C,mBAApB,GAA0CnhC,sBAA1C,GACA,CAFF,EAGE;AACA1d,YAAI,CAACsC,SAAL,CAAeE,SAAf,IAA4BxC,IAAI,CAACkJ,UAAL,CAAgBoqC,wBAA5C;AACAsL,gBAAQ,GAAG,IAAX;AACD;AACF;;AACD,QACEA,QAAQ,IACR,CAACxQ,IADD,IAEApuC,IAAI,CAAC+0B,WAFL,IAGA/0B,IAAI,CAAC+0B,WAAL,CAAiB9hB,WAAjB,KAAiC,CAAC,CAJpC,EAKE;AACAjT,UAAI,CAAC6uC,WAAL,GAAmBjhC,UAAU,CAC3B5N,IAAI,CAAC+mB,SADsB,EAE3B/mB,IAAI,CAACkJ,UAAL,CAAgBmqC,gBAFW,EAG3BztC,CAH2B,CAA7B;AAKD;AACF,GAvCD;;AAwCA5F,MAAI,CAAC8+C,cAAL,GAAsB,UAAU9vC,CAAV,EAAavN,CAAb,EAAgB;AACpC,QAAI,CAACuN,CAAC,CAAC/E,IAAP,EAAa;AACX,YAAM,IAAI3I,KAAJ,CAAU,wCAAV,CAAN;AACD;;AACD,QACEG,CAAC,CAAC0F,MAAF,CAAS,UAAUH,CAAV,EAAa;AACpB,aAAOA,CAAC,CAACiD,IAAF,KAAW+E,CAAC,CAAC/E,IAApB;AACD,KAFD,EAEGzE,MAFH,GAEY,CAHd,EAIE;AACA,YAAM,IAAIlE,KAAJ,CACJ,4BACE0N,CAAC,CAAC/E,IADJ,GAEE,4CAHE,CAAN;AAKD;;AACD,WAAO,IAAP;AACD,GAhBD;;AAiBAjK,MAAI,CAAC++C,WAAL,GAAmB,UAAUC,IAAV,EAAgBC,IAAhB,EAAsB/tC,GAAtB,EAA2BrJ,GAA3B,EAAgC;AACjDm3C,QAAI,CAAC9tC,GAAD,CAAJ,GAAY+tC,IAAI,CAAC/tC,GAAD,CAAJ,KAActP,SAAd,GAA0BiG,GAA1B,GAAgCo3C,IAAI,CAAC/tC,GAAD,CAAhD;AACD,GAFD;;AAGAlR,MAAI,CAACk/C,aAAL,GAAqB,YAAY;AAC/Bl/C,QAAI,CAACkH,QAAL,CAAcgC,UAAd,CAAyBzD,OAAzB,CAAiC,SAAS05C,aAAT,CAAuBn4C,CAAvB,EAA0B;AACzDhH,UAAI,CAAC++C,WAAL,CAAiB/+C,IAAI,CAACkJ,UAAtB,EAAkClJ,IAAI,CAACmtC,IAAvC,EAA6CnmC,CAAC,CAAC,CAAD,CAA9C,EAAmDA,CAAC,CAAC,CAAD,CAApD;AACD,KAFD;AAGD,GAJD;;AAKAhH,MAAI,CAACo/C,QAAL,GAAgB,YAAY;AAC1Bp/C,QAAI,CAACkH,QAAL,CAAcU,MAAd,CAAqBnC,OAArB,CAA6B,SAAS45C,SAAT,CAAmBr4C,CAAnB,EAAsB;AACjDhH,UAAI,CAAC++C,WAAL,CAAiB/+C,IAAI,CAAC6B,KAAtB,EAA6B7B,IAAI,CAACmtC,IAAL,CAAUtrC,KAAV,IAAmB,EAAhD,EAAoDmF,CAAC,CAAC,CAAD,CAArD,EAA0DA,CAAC,CAAC,CAAD,CAA3D;AACD,KAFD;AAGD,GAJD;;AAKAhH,MAAI,CAACs2C,QAAL,GAAgB,UAAUc,OAAV,EAAmB;AACjCp3C,QAAI,CAAC83C,gBAAL,GAAwBryC,OAAxB,CAAgC,UAAU0Q,GAAV,EAAe6rB,QAAf,EAAyB;AACvD,UAAI7rB,GAAG,CAAClM,IAAJ,KAAamtC,OAAb,IAAwBA,OAAO,KAAKx1C,SAAxC,EAAmD;AACjD5B,YAAI,CAACyW,KAAL,CAAWnD,OAAX,CAAmB0uB,QAAnB,IAA+B5gB,IAAI,CAACO,GAAL,CAC7B3hB,IAAI,CAACs/C,uBAAL,CAA6BnpC,GAAG,CAAClM,IAAjC,CAD6B,EAE7BjK,IAAI,CAAC6B,KAAL,CAAWuwC,cAFkB,CAA/B;AAID;AACF,KAPD;AAQApyC,QAAI,CAACyW,KAAL,CAAWnD,OAAX,CAAmB,CAAC,CAApB,IAAyBtT,IAAI,CAACs/C,uBAAL,CAA6B,YAA7B,CAAzB;AACD,GAVD;;AAWAt/C,MAAI,CAACiD,OAAL,GAAe,YAAY;AACzB,QAAI,CAACjD,IAAI,CAACyb,WAAN,IAAqBzb,IAAI,CAAC2B,MAA1B,IAAoC3B,IAAI,CAAC2B,MAAL,CAAYuB,UAApD,EAAgE;AAC9DlD,UAAI,CAAC2B,MAAL,CAAYuB,UAAZ,CAAuBC,WAAvB,CAAmCnD,IAAI,CAAC2B,MAAxC;AACD;;AACD,QAAI,CAAC3B,IAAI,CAACyb,WAAV,EAAuB;AACrB1a,cAAQ,CAACgC,IAAT,CAAcI,WAAd,CAA0BnD,IAAI,CAACkS,YAA/B;AACD;;AACDlS,QAAI,CAACsmB,WAAL,CAAiB3gB,mBAAjB,CAAqC,WAArC,EAAkD3F,IAAI,CAACib,SAAvD,EAAkE,KAAlE;AACAjb,QAAI,CAACsmB,WAAL,CAAiB3gB,mBAAjB,CAAqC,UAArC,EAAiD3F,IAAI,CAAC8mB,QAAtD,EAAgE,KAAhE;AACA9mB,QAAI,CAACsmB,WAAL,CAAiB3gB,mBAAjB,CAAqC,OAArC,EAA8C3F,IAAI,CAACkE,KAAnD,EAA0D,KAA1D;AACAlE,QAAI,CAACsmB,WAAL,CAAiB3gB,mBAAjB,CAAqC,WAArC,EAAkD3F,IAAI,CAAC+mB,SAAvD;AACA/mB,QAAI,CAACsmB,WAAL,CAAiB3gB,mBAAjB,CAAqC,OAArC,EAA8C3F,IAAI,CAACgnB,WAAnD,EAAgE,KAAhE;AACAhnB,QAAI,CAAC2B,MAAL,CAAYgE,mBAAZ,CAAgC,aAAhC,EAA+C3F,IAAI,CAACu/C,WAApD,EAAiE,KAAjE;AACAv/C,QAAI,CAAC2B,MAAL,CAAYgE,mBAAZ,CAAgC,MAAhC,EAAwC3F,IAAI,CAACinB,IAA7C;AACAjnB,QAAI,CAACkS,YAAL,CAAkBvM,mBAAlB,CAAsC,MAAtC,EAA8C3F,IAAI,CAACinB,IAAnD;AACAjnB,QAAI,CAACkS,YAAL,CAAkBvM,mBAAlB,CAAsC,KAAtC,EAA6C3F,IAAI,CAACknB,GAAlD;AACAlnB,QAAI,CAACkS,YAAL,CAAkBvM,mBAAlB,CAAsC,OAAtC,EAA+C3F,IAAI,CAACsV,KAApD;AACAtV,QAAI,CAACkS,YAAL,CAAkBvM,mBAAlB,CAAsC,UAAtC,EAAkD3F,IAAI,CAACmnB,QAAvD,EAAiE,KAAjE;AACAnnB,QAAI,CAACkS,YAAL,CAAkBvM,mBAAlB,CAAsC,OAAtC,EAA+C3F,IAAI,CAAConB,KAApD,EAA2D,KAA3D;AACApnB,QAAI,CAACkS,YAAL,CAAkBvM,mBAAlB,CAAsC,SAAtC,EAAiD3F,IAAI,CAACqnB,OAAtD,EAA+D,KAA/D;AACAziB,UAAM,CAACe,mBAAP,CAA2B,SAA3B,EAAsC3F,IAAI,CAACkb,OAA3C,EAAoD,KAApD;AACAtW,UAAM,CAACe,mBAAP,CAA2B,WAA3B,EAAwC3F,IAAI,CAAC+mB,SAA7C;AACAniB,UAAM,CAACe,mBAAP,CAA2B,QAA3B,EAAqC3F,IAAI,CAACiI,MAA1C;;AACA,QAAIjI,IAAI,CAACmK,QAAL,IAAiBnK,IAAI,CAACmK,QAAL,CAAcq1C,UAAnC,EAA+C;AAC7Cx/C,UAAI,CAACmK,QAAL,CAAcq1C,UAAd;AACD;AACF,GA1BD;;AA2BAx/C,MAAI,CAACy/C,qBAAL,GAA6B,YAAY;AACvC,QAAIh+C,CAAJ;AACAzB,QAAI,CAAC0/C,kBAAL;;AACA,QACE1/C,IAAI,CAAC8W,cAAL,IACA,QAAO9W,IAAI,CAAC8W,cAAL,CAAoBzD,MAA3B,MAAsC,QADtC,IAEArT,IAAI,CAAC8W,cAAL,CAAoBzD,MAApB,KAA+B,IAHjC,EAIE;AACA,UACErT,IAAI,CAAC8W,cAAL,CAAoBzD,MAApB,CAA2BqD,IAA3B,CAAgClR,MAAhC,IAA0C,CAACxF,IAAI,CAACmQ,QAAL,IAAiB,EAAlB,EAAsB3K,MADlE,EAEE;AACAxF,YAAI,CAACqT,MAAL,CAAYqD,IAAZ,GAAmB1W,IAAI,CAAC8W,cAAL,CAAoBzD,MAApB,CAA2BqD,IAA9C;AACD;;AACDjV,OAAC,GAAGzB,IAAI,CAACkU,SAAL,EAAJ;;AACA,UAAIlU,IAAI,CAAC8W,cAAL,CAAoBzD,MAApB,CAA2BC,OAA3B,CAAmC9N,MAAnC,KAA8C/D,CAAC,CAAC+D,MAApD,EAA4D;AAC1DxF,YAAI,CAACqT,MAAL,CAAYC,OAAZ,GAAsBtT,IAAI,CAAC8W,cAAL,CAAoBzD,MAApB,CAA2BC,OAAjD;AACD;;AACDtT,UAAI,CAACo7B,OAAL,GACEp7B,IAAI,CAAC8W,cAAL,CAAoBskB,OAApB,KAAgCx5B,SAAhC,GACIH,CAAC,CAAC,CAAD,CAAD,CAAKwI,IADT,GAEIjK,IAAI,CAAC8W,cAAL,CAAoBskB,OAH1B;AAIAp7B,UAAI,CAACgsB,cAAL,GACEhsB,IAAI,CAAC8W,cAAL,CAAoBkV,cAApB,KAAuCpqB,SAAvC,GACI,KADJ,GAEI5B,IAAI,CAAC8W,cAAL,CAAoBkV,cAH1B;;AAIA,UACEhsB,IAAI,CAAC8W,cAAL,CAAoBskB,OAApB,KAAgCx5B,SAAhC,IACA5B,IAAI,CAAC+R,eAAL,CAAqB/R,IAAI,CAACo7B,OAA1B,CADA,IAEAp7B,IAAI,CAACgsB,cAHP,EAIE;AACAhsB,YAAI,CAACqX,KAAL,CAAWrX,IAAI,CAACo7B,OAAhB,EAAyBp7B,IAAI,CAACgsB,cAA9B;AACD;AACF;AACF,GAjCD;;AAkCAhsB,MAAI,CAACiwC,kBAAL,GAA0B,UAAUz9B,QAAV,EAAoBS,WAApB,EAAiCpI,IAAjC,EAAuC;AAC/D,QAAI80C,QAAQ,GAAG,EAAf;AACA,QAAIC,cAAc,GAAG,CAArB;;AACA,QACE3sC,WAAW,IAAIjT,IAAI,CAACy6B,QAAL,CAAcC,eAA7B,KACCloB,QAAQ,GAAG,CAAX,IAAiBA,QAAQ,IAAI,CAAZ,IAAiBxS,IAAI,CAACy6B,QAAL,CAAc/jB,IAAd,CAAmB,CAAnB,EAAsB4W,IADzD,CADF,EAGE;AACA,UAAIuyB,GAAG,GAAG7/C,IAAI,CAACy6B,QAAL,CAAc/jB,IAAxB;;AACA,cAAQ7L,IAAR;AACE,aAAK,QAAL;AACEg1C,aAAG,CAACrtC,QAAD,CAAH,CAAcub,MAAd,GAAuB,IAAvB;AACA/tB,cAAI,CAACy6B,QAAL,CAAc6gB,MAAd,CAAqB5kC,IAArB,CAA0BmpC,GAAG,CAACrtC,QAAD,CAAH,CAAc9M,KAAxC,EAA+CqoB,MAA/C,GAAwD,IAAxD;AACA;;AAEF,aAAK,UAAL;AACE8xB,aAAG,CAACrtC,QAAD,CAAH,CAAcub,MAAd,GAAuB,KAAvB;AACA/tB,cAAI,CAACy6B,QAAL,CAAc6gB,MAAd,CAAqB5kC,IAArB,CAA0BmpC,GAAG,CAACrtC,QAAD,CAAH,CAAc9M,KAAxC,EAA+CqoB,MAA/C,GAAwD,KAAxD;AACA;;AAEF;AACE8xB,aAAG,CAACrtC,QAAD,CAAH,CAAcub,MAAd,GAAuB,CAAC8xB,GAAG,CAACrtC,QAAD,CAAH,CAAcub,MAAtC;AACA/tB,cAAI,CAACy6B,QAAL,CAAc6gB,MAAd,CAAqB5kC,IAArB,CAA0BmpC,GAAG,CAACrtC,QAAD,CAAH,CAAc9M,KAAxC,EAA+CqoB,MAA/C,GACE8xB,GAAG,CAACrtC,QAAD,CAAH,CAAcub,MADhB;AAbJ;;AAgBA,WACE,IAAI+xB,EAAE,GAAGD,GAAG,CAACrtC,QAAD,CAAH,CAAc9M,KAAd,GAAsB,CADjC,EAEEo6C,EAAE,IAAID,GAAG,CAACrtC,QAAD,CAAH,CAAcutC,SAFtB,EAGED,EAAE,EAHJ,EAIE;AACA,YAAIE,MAAM,GAAGhgD,IAAI,CAACy6B,QAAL,CAAc6gB,MAAd,CAAqB5kC,IAArB,CAA0BopC,EAA1B,CAAb;;AACA,YAAID,GAAG,CAACrtC,QAAD,CAAH,CAAcub,MAAlB,EAA0B;AACxBiyB,gBAAM,CAACnc,IAAP,GAAc,KAAd;AACA,cAAImc,MAAM,CAAC1yB,IAAP,IAAe,CAAC0yB,MAAM,CAACjyB,MAA3B,EAAmC+xB,EAAE,GAAGE,MAAM,CAACD,SAAZ;AACpC,SAHD,MAGO;AACLC,gBAAM,CAACnc,IAAP,GAAc,IAAd;AACD;AACF;AACF,KAlCD,MAkCO,IAAI7jC,IAAI,CAACy6B,QAAL,CAAcnnB,OAAd,CAAsBd,QAAtB,CAAJ,EAAqC;AAC1C,UAAIytC,GAAG,GAAGjgD,IAAI,CAACy6B,QAAL,CAAcnnB,OAAd,CAAsBd,QAAtB,CAAV;;AAEA,cAAQ3H,IAAR;AACE,aAAK,QAAL;AACEo1C,aAAG,CAAChtC,WAAD,CAAH,CAAiB8a,MAAjB,GAA0B,IAA1B;AACA;;AAEF,aAAK,UAAL;AACEkyB,aAAG,CAAChtC,WAAD,CAAH,CAAiB8a,MAAjB,GAA0B,KAA1B;AACA;;AAEF;AACEkyB,aAAG,CAAChtC,WAAD,CAAH,CAAiB8a,MAAjB,GAA0B,CAACkyB,GAAG,CAAChtC,WAAD,CAAH,CAAiB8a,MAA5C;AAVJ;;AAYA,WACE,IAAImyB,EAAE,GAAGD,GAAG,CAAChtC,WAAD,CAAH,CAAiBvN,KAAjB,GAAyB,CADpC,EAEEw6C,EAAE,IAAID,GAAG,CAAChtC,WAAD,CAAH,CAAiB8sC,SAFzB,EAGEG,EAAE,EAHJ,EAIE;AACA,YAAID,GAAG,CAAChtC,WAAD,CAAH,CAAiB8a,MAArB,EACE/tB,IAAI,CAACy6B,QAAL,CAAc0gB,UAAd,CAAyB+E,EAAzB,EAA6BrqC,MAA7B,GAAsC,KAAtC,CADF,KAEK7V,IAAI,CAACy6B,QAAL,CAAc0gB,UAAd,CAAyB+E,EAAzB,EAA6BrqC,MAA7B,GAAsC,IAAtC;AACN;;AACD,UAAI25B,EAAE,GAAG,CAAT;AAAA,UACE2Q,GADF;;AAGA,UAAIF,GAAG,CAAChtC,WAAD,CAAH,CAAiB8a,MAArB,EAA6B;AAC3B,eAAOyhB,EAAE,GAAGyQ,GAAG,CAAChtC,WAAD,CAAH,CAAiBmtC,KAA7B,EAAoC;AAClCD,aAAG,GAAG3tC,QAAQ,GAAGg9B,EAAX,GAAgB,CAAtB;;AAEA,eACE,IAAI6Q,GAAG,GAAGJ,GAAG,CAAChtC,WAAD,CAAH,CAAiBvN,KAD7B,EAEE26C,GAAG,IAAIJ,GAAG,CAAChtC,WAAD,CAAH,CAAiB8sC,SAF1B,EAGEM,GAAG,EAHL,EAIE;AACA,gBACErgD,IAAI,CAACy6B,QAAL,CAAc6gB,MAAd,CAAqBhoC,OAArB,CAA6B6sC,GAA7B,KACAngD,IAAI,CAACy6B,QAAL,CAAc6gB,MAAd,CAAqBhoC,OAArB,CAA6B6sC,GAA7B,EAAkCE,GAAlC,EAAuC/yB,IADvC,IAEA,CAACttB,IAAI,CAACy6B,QAAL,CAAc6gB,MAAd,CAAqBhoC,OAArB,CAA6B6sC,GAA7B,EAAkCE,GAAlC,EAAuCtyB,MAH1C,EAIE;AACA,mBACE,IAAIuyB,EAAE,GAAGD,GAAG,GAAG,CADjB,EAEEC,EAAE,IAAItgD,IAAI,CAACy6B,QAAL,CAAc6gB,MAAd,CAAqBhoC,OAArB,CAA6B6sC,GAA7B,EAAkCE,GAAlC,EAAuCN,SAF/C,EAGEO,EAAE,EAHJ,EAIE;AACAtgD,oBAAI,CAACy6B,QAAL,CAAc0gB,UAAd,CAAyBmF,EAAzB,EAA6BzqC,MAA7B,GAAsC,IAAtC;AACD;AACF;AACF;;AAED25B,YAAE;AACH;AACF;AACF;;AACD,QAAI+Q,SAAS,GAAG,EAAhB;AACA,QAAInoC,SAAS,GAAG,EAAhB;AACApY,QAAI,CAACy6B,QAAL,CAAc/jB,IAAd,GAAqB,EAArB;AACA1W,QAAI,CAACy6B,QAAL,CAAcnnB,OAAd,GAAwB,EAAxB;;AACA,SAAK,IAAIsxB,CAAT,IAAc5kC,IAAI,CAACy6B,QAAL,CAAc6gB,MAAd,CAAqB5kC,IAAnC,EAAyC;AACvC,UAAI8pC,OAAO,GAAG,EAAd;AACA,UAAI7zB,IAAI,GAAG3sB,IAAI,CAACy6B,QAAL,CAAc6gB,MAAd,CAAqB5kC,IAArB,CAA0BkuB,CAA1B,CAAX;;AACA,UAAI,CAACjY,IAAI,CAACkX,IAAV,EAAgB;AACd,YAAI4c,QAAQ,GAAG,EAAf;AACA,YAAIC,iBAAiB,GAAG,CAAxB;;AACA,YAAI9b,CAAC,GAAG5kC,IAAI,CAACy6B,QAAL,CAAc2gB,uBAAtB,EAA+C;AAC7CuE,kBAAQ,CAACv2C,IAAT,CAAcpJ,IAAI,CAAC4f,YAAL,CAAkBglB,CAAlB,CAAd;AACD,SAFD,MAEO;AACL,cAAIA,CAAC,GAAG5kC,IAAI,CAACy6B,QAAL,CAAc4gB,qBAAtB,EAA6C;AAC3CkF,qBAAS,CAAC3b,CAAD,CAAT,GAAe5kC,IAAI,CAACmQ,QAAL,CAAcy0B,CAAd,CAAf;AACAgb,0BAAc;AACf,WAHD,MAGO;AACL,iBAAK,IAAI3vB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGjwB,IAAI,CAAC4f,YAAL,CAAkBglB,CAAlB,EAAqBp/B,MAAzC,EAAiDyqB,CAAC,EAAlD,EAAsD;AACpD,kBAAI,CAACjwB,IAAI,CAACy6B,QAAL,CAAc0gB,UAAd,CAAyBlrB,CAAzB,EAA4Bpa,MAAjC,EAAyC;AACvC,oBAAIoa,CAAC,GAAGjwB,IAAI,CAACy6B,QAAL,CAAcC,eAAtB,EAAuC;AACrC,sBAAI,CAACz1B,MAAM,CAACuB,SAAP,CAAiBm6C,cAAjB,CAAgCl6C,IAAhC,CAAqC85C,SAArC,EAAgD3b,CAAhD,CAAL,EACE2b,SAAS,CAAC3b,CAAD,CAAT,GAAe,EAAf;AACF2b,2BAAS,CAAC3b,CAAD,CAAT,CAAax7B,IAAb,CAAkBpJ,IAAI,CAACmQ,QAAL,CAAcy0B,CAAd,EAAiB3U,CAAjB,CAAlB;AACD;;AACDuwB,uBAAO,CAACp3C,IAAR,CAAapJ,IAAI,CAAC4f,YAAL,CAAkBglB,CAAlB,EAAqB3U,CAArB,CAAb;AACA,oBACEhrB,MAAM,CAACuB,SAAP,CAAiBm6C,cAAjB,CAAgCl6C,IAAhC,CACEzG,IAAI,CAACy6B,QAAL,CAAc6gB,MAAd,CAAqBhoC,OADvB,EAEEsxB,CAFF,CADF,EAME6b,QAAQ,CAACr3C,IAAT,CAAcpJ,IAAI,CAACy6B,QAAL,CAAc6gB,MAAd,CAAqBhoC,OAArB,CAA6BsxB,CAA7B,EAAgC3U,CAAhC,CAAd;AACH,eAdD,MAcOywB,iBAAiB;AACzB;;AACDF,mBAAO,CAACp3C,IAAR,OAAAo3C,OAAO,qBACFp/C,KAAK,CAACs/C,iBAAD,CAAL,CACA32B,IADA,GAEA9Y,GAFA,CAEI,YAAY;AACf,qBAAO,EAAP;AACD,aAJA,CADE,EAAP;;AAOA,gBAAIwvC,QAAQ,CAACj7C,MAAb,EAAqB;AACnBi7C,sBAAQ,CAACr3C,IAAT,OAAAq3C,QAAQ,qBACHr/C,KAAK,CAACs/C,iBAAD,CAAL,CACA32B,IADA,GAEA9Y,GAFA,CAEI,YAAM;AACT,uBAAO,EAAP;AACD,eAJA,CADG,EAAR;AAOAjR,kBAAI,CAACy6B,QAAL,CAAcnnB,OAAd,CAAsBsxB,CAAtB,IAA2B6b,QAA3B;AACD;;AACDd,oBAAQ,CAACv2C,IAAT,CAAco3C,OAAd;AACD;AACF;;AACDxgD,YAAI,CAACy6B,QAAL,CAAc/jB,IAAd,CAAmBtN,IAAnB,CAAwBujB,IAAxB;AACD,OAhDD,MAgDO;AACL,aAAK,IAAIsD,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGjwB,IAAI,CAACy6B,QAAL,CAAcC,eAAlC,EAAmDzK,EAAC,EAApD,EAAwD;AACtDuwB,iBAAO,CAACp3C,IAAR,CAAapJ,IAAI,CAACmQ,QAAL,CAAcy0B,CAAd,EAAiB3U,EAAjB,CAAb;AACD;;AACDswB,iBAAS,CAAC3b,CAAD,CAAT,GAAe4b,OAAf;AACApoC,iBAAS,CAAChP,IAAV,CACEhI,KAAK,CAACpB,IAAI,CAACmQ,QAAL,CAAc,CAAd,EAAiB3K,MAAlB,CAAL,CACGukB,IADH,GAEG9Y,GAFH,CAEO,YAAY;AACf,iBAAO,EAAP;AACD,SAJH,CADF;AAOA2uC,sBAAc;AACf;AACF;;AACD,QAAIA,cAAJ,EAAoB;AAAA;;AAClB,6BAAA5/C,IAAI,CAACy6B,QAAL,CAAc/jB,IAAd,EAAmBtN,IAAnB,+CACKhI,KAAK,CAACw+C,cAAD,CAAL,CACA71B,IADA,GAEA9Y,GAFA,CAEI,UAAC6jB,CAAD,EAAIpvB,KAAJ,EAAc;AACjB,eAAO;AAAEA,eAAK,EAAE1F,IAAI,CAACy6B,QAAL,CAAc/jB,IAAd,CAAmBlR,MAAnB,GAA4BE;AAArC,SAAP;AACD,OAJA,CADL;;AAOAi6C,cAAQ,CAACv2C,IAAT,OAAAu2C,QAAQ,EAASvnC,SAAT,CAAR;AACD;;AACD,SAAK,IAAIwsB,EAAT,IAAc2b,SAAd,EAAyB;AACvB,UAAI3b,EAAC,GAAG5kC,IAAI,CAACy6B,QAAL,CAAc4gB,qBAAtB,EAA6CsE,QAAQ,CAAC/a,EAAD,CAAR,GAAc2b,SAAS,CAAC3b,EAAD,CAAvB,CAA7C,KAEE,KAAK,IAAI3U,GAAT,IAAcswB,SAAS,CAAC3b,EAAD,CAAvB,EAA4B;AAC1B+a,gBAAQ,CAAC/a,EAAD,CAAR,CAAY3U,GAAZ,IAAiBswB,SAAS,CAAC3b,EAAD,CAAT,CAAa3U,GAAb,CAAjB;AACD;AACJ;;AACDjwB,QAAI,CAACmQ,QAAL,GAAgBwvC,QAAhB;AACD,GApLD;;AAqLA3/C,MAAI,CAACu2C,sBAAL,GAA8B,UAAU/jC,QAAV,EAAoBS,WAApB,EAAiCpI,IAAjC,EAAuC;AACnE,QACEoI,WAAW,IAAIjT,IAAI,CAACy6B,QAAL,CAAcC,eAA7B,KACCloB,QAAQ,GAAG,CAAX,IAAiBA,QAAQ,IAAI,CAAZ,IAAiBxS,IAAI,CAACy6B,QAAL,CAAc/jB,IAAd,CAAmB,CAAnB,EAAsB4W,IADzD,CADF,EAGE;AACA,UAAMuyB,GAAG,GAAG7/C,IAAI,CAACy6B,QAAL,CAAc/jB,IAA1B;;AACA,cAAQ7L,IAAR;AACE,aAAK,QAAL;AACEg1C,aAAG,CAACrtC,QAAD,CAAH,CAAcub,MAAd,GAAuB,IAAvB;AACA;;AACF,aAAK,UAAL;AACE8xB,aAAG,CAACrtC,QAAD,CAAH,CAAcub,MAAd,GAAuB,KAAvB;AACA;;AACF;AACE8xB,aAAG,CAACrtC,QAAD,CAAH,CAAcub,MAAd,GAAuB,CAAC8xB,GAAG,CAACrtC,QAAD,CAAH,CAAcub,MAAtC;AARJ;;AAUA,WAAK,IAAI+xB,EAAE,GAAGttC,QAAQ,GAAG,CAAzB,EAA4BstC,EAAE,IAAID,GAAG,CAACrtC,QAAD,CAAH,CAAcutC,SAAhD,EAA2DD,EAAE,EAA7D,EAAiE;AAC/D,YAAID,GAAG,CAACrtC,QAAD,CAAH,CAAcub,MAAlB,EAA0B;AACxB8xB,aAAG,CAACC,EAAD,CAAH,CAAQjc,IAAR,GAAe,KAAf;AACA,cAAIgc,GAAG,CAACC,EAAD,CAAH,CAAQxyB,IAAR,IAAgB,CAACuyB,GAAG,CAACC,EAAD,CAAH,CAAQ/xB,MAA7B,EAAqC+xB,EAAE,GAAGD,GAAG,CAACC,EAAD,CAAH,CAAQC,SAAb;AACtC,SAHD,MAGO;AACLF,aAAG,CAACC,EAAD,CAAH,CAAQjc,IAAR,GAAe,IAAf;AACD;AACF;AACF,KAvBD,MAuBO,IAAI7jC,IAAI,CAACy6B,QAAL,CAAcnnB,OAAd,CAAsBd,QAAtB,CAAJ,EAAqC;AAC1C,UAAMytC,GAAG,GAAGjgD,IAAI,CAACy6B,QAAL,CAAcnnB,OAAd,CAAsBd,QAAtB,CAAZ;;AACA,cAAQ3H,IAAR;AACE,aAAK,QAAL;AACEo1C,aAAG,CAAChtC,WAAD,CAAH,CAAiB8a,MAAjB,GAA0B,IAA1B;AACA;;AACF,aAAK,UAAL;AACEkyB,aAAG,CAAChtC,WAAD,CAAH,CAAiB8a,MAAjB,GAA0B,KAA1B;AACA;;AACF;AACEkyB,aAAG,CAAChtC,WAAD,CAAH,CAAiB8a,MAAjB,GAA0B,CAACkyB,GAAG,CAAChtC,WAAD,CAAH,CAAiB8a,MAA5C;AARJ;;AAWA,WAAK,IAAImyB,EAAE,GAAGjtC,WAAW,GAAG,CAA5B,EAA+BitC,EAAE,IAAID,GAAG,CAAChtC,WAAD,CAAH,CAAiB8sC,SAAtD,EAAiEG,EAAE,EAAnE,EAAuE;AACrE,YAAID,GAAG,CAAChtC,WAAD,CAAH,CAAiB8a,MAArB,EAA6B/tB,IAAI,CAACm7C,UAAL,CAAgB+E,EAAhB,EAAoBrqC,MAApB,GAA6B,KAA7B,CAA7B,KACK7V,IAAI,CAACm7C,UAAL,CAAgB+E,EAAhB,EAAoBrqC,MAApB,GAA6B,IAA7B;AACN;;AAED,UAAI25B,EAAE,GAAG,CAAT;AAAA,UACEsQ,IADF;;AAEA,UAAIG,GAAG,CAAChtC,WAAD,CAAH,CAAiB8a,MAArB,EAA6B;AAC3B,eAAOyhB,EAAE,GAAGyQ,GAAG,CAAChtC,WAAD,CAAH,CAAiBmtC,KAA7B,EAAoC;AAClCN,cAAE,GAAGttC,QAAQ,GAAGg9B,EAAX,GAAgB,CAArB;;AACA,eAAK,IAAI0Q,IAAE,GAAGjtC,WAAd,EAA2BitC,IAAE,IAAID,GAAG,CAAChtC,WAAD,CAAH,CAAiB8sC,SAAlD,EAA6DG,IAAE,EAA/D,EAAmE;AACjE,gBACElgD,IAAI,CAACy6B,QAAL,CAAcnnB,OAAd,CAAsBwsC,IAAtB,KACA9/C,IAAI,CAACy6B,QAAL,CAAcnnB,OAAd,CAAsBwsC,IAAtB,EAA0BI,IAA1B,EAA8B5yB,IAD9B,IAEA,CAACttB,IAAI,CAACy6B,QAAL,CAAcnnB,OAAd,CAAsBwsC,IAAtB,EAA0BI,IAA1B,EAA8BnyB,MAHjC,EAIE;AACA,mBACE,IAAIuyB,EAAE,GAAGJ,IAAE,GAAG,CADhB,EAEEI,EAAE,IAAItgD,IAAI,CAACy6B,QAAL,CAAcnnB,OAAd,CAAsBwsC,IAAtB,EAA0BI,IAA1B,EAA8BH,SAFtC,EAGEO,EAAE,EAHJ;AAKEtgD,oBAAI,CAACm7C,UAAL,CAAgBmF,EAAhB,EAAoBzqC,MAApB,GAA6B,IAA7B;AALF;AAMD;AACF;;AACD25B,YAAE;AACH;AACF;AACF;AACF,GAjED;;AAmEAxvC,MAAI,CAAC4gD,oBAAL,GAA4B,YAAY;AACtC,QAAI5gD,IAAI,CAACmQ,QAAL,KAAkBvO,SAAtB,EAAiC;;AACjC,QAAI5B,IAAI,CAACkJ,UAAL,CAAgB0jB,OAAhB,CAAwBpnB,MAAxB,GAAiC,CAAjC,IAAsCxF,IAAI,CAACmQ,QAAL,CAAc3K,MAAd,GAAuB,CAAjE,EAAoE;AAClExF,UAAI,CAACy6B,QAAL,CAAc/jB,IAAd,GAAqBtV,KAAK,CAACpB,IAAI,CAACmQ,QAAL,CAAc3K,MAAf,CAAL,CAClBukB,IADkB,GAElB9Y,GAFkB,CAEd,UAAC6jB,CAAD,EAAIpvB,KAAJ;AAAA,eAAe;AAAEA,eAAK,EAAEA;AAAT,SAAf;AAAA,OAFc,CAArB;AAGA1F,UAAI,CAACy6B,QAAL,CAAcC,eAAd,GAAgC16B,IAAI,CAACkJ,UAAL,CAAgBwxB,eAAhD;AACA,UAAImmB,cAAc,GAAG,KAArB;;AALkE,kDAMnD7gD,IAAI,CAACkJ,UAAL,CAAgB0jB,OANmC;AAAA;;AAAA;AAMlE,+DAAwC;AAAA,cAA/Bk0B,EAA+B;;AACtC,cAAI9gD,IAAI,CAACy6B,QAAL,CAAc/jB,IAAd,CAAmBlR,MAAnB,IAA6Bs7C,EAAE,CAAChuC,GAApC,EAAyC;AACvC+tC,0BAAc,GAAG,IAAjB;AACA;AACD;;AAED,eAAK,IAAIf,EAAE,GAAGgB,EAAE,CAACjuC,KAAjB,EAAwBitC,EAAE,IAAIgB,EAAE,CAAChuC,GAAjC,EAAsCgtC,EAAE,EAAxC,EAA4C;AAC1C,gBAAIA,EAAE,IAAIgB,EAAE,CAACjuC,KAAb,EAAoB;AAClB7S,kBAAI,CAACy6B,QAAL,CAAc/jB,IAAd,CAAmBopC,EAAnB,EAAuBxyB,IAAvB,GAA8B,IAA9B;AACAttB,kBAAI,CAACy6B,QAAL,CAAc/jB,IAAd,CAAmBopC,EAAnB,EAAuBC,SAAvB,GAAmCe,EAAE,CAAChuC,GAAtC;AACA9S,kBAAI,CAACy6B,QAAL,CAAc/jB,IAAd,CAAmBopC,EAAnB,EAAuB/xB,MAAvB,GAAgC,IAAhC;AACA,kBAAI,CAAC/tB,IAAI,CAACy6B,QAAL,CAAc/jB,IAAd,CAAmBopC,EAAnB,EAAuBjzB,WAA5B,EACE7sB,IAAI,CAACy6B,QAAL,CAAc/jB,IAAd,CAAmBopC,EAAnB,EAAuBjzB,WAAvB,GAAqC,CAArC;AACH,aAND,MAMO;AACL7sB,kBAAI,CAACy6B,QAAL,CAAc/jB,IAAd,CAAmBopC,EAAnB,EAAuBjc,IAAvB,GAA8B,KAA9B;AACA7jC,kBAAI,CAACy6B,QAAL,CAAc/jB,IAAd,CAAmBopC,EAAnB,EAAuBiB,WAAvB,GAAqCD,EAAE,CAACjuC,KAAxC;AACA,kBAAI7S,IAAI,CAACy6B,QAAL,CAAc/jB,IAAd,CAAmBopC,EAAnB,KAA0B9/C,IAAI,CAACy6B,QAAL,CAAc/jB,IAAd,CAAmBopC,EAAnB,EAAuBjzB,WAArD,EACE7sB,IAAI,CAACy6B,QAAL,CAAc/jB,IAAd,CAAmBopC,EAAnB,EAAuBjzB,WAAvB,IAAsC,CAAtC,CADF,KAEK7sB,IAAI,CAACy6B,QAAL,CAAc/jB,IAAd,CAAmBopC,EAAnB,EAAuBjzB,WAAvB,GAAqC,CAArC;AACN;AACF;AACF;AA3BiE;AAAA;AAAA;AAAA;AAAA;;AA4BlE,UAAIg0B,cAAJ,EAAoB7gD,IAAI,CAACy6B,QAAL,CAAc/jB,IAAd,GAAqB,EAArB;AACrB;;AACD,QAAI1W,IAAI,CAACkJ,UAAL,CAAgB83C,UAAhB,CAA2Bx7C,MAA3B,GAAoC,CAApC,IAAyCxF,IAAI,CAACmQ,QAAL,CAAc3K,MAAd,GAAuB,CAApE,EAAuE;AACrExF,UAAI,CAACy6B,QAAL,CAAc2gB,uBAAd,GACEp7C,IAAI,CAACkJ,UAAL,CAAgBkyC,uBADlB;AAEAp7C,UAAI,CAACy6B,QAAL,CAAc4gB,qBAAd,GACEr7C,IAAI,CAACkJ,UAAL,CAAgBmyC,qBADlB;AAEA,UAAI4F,gBAAgB,GAAGh8C,MAAM,CAAC8L,IAAP,CAAY/Q,IAAI,CAACmQ,QAAL,CAAc,CAAd,CAAZ,EAA8B3K,MAArD;AACA,UAAI07C,iBAAiB,GAAG,KAAxB;;AANqE,mDAOtDlhD,IAAI,CAACkJ,UAAL,CAAgB83C,UAPsC;AAAA;;AAAA;AAOrE,kEAA2C;AAAA,cAAlCG,EAAkC;;AACzC,cAAIF,gBAAgB,IAAIE,EAAE,CAACruC,GAA3B,EAAgC;AAC9BouC,6BAAiB,GAAG,IAApB;AACA;AACD;;AAED,cAAI,CAAClhD,IAAI,CAACy6B,QAAL,CAAcnnB,OAAd,CAAsB6tC,EAAE,CAAC/wC,GAAzB,CAAL,EACEpQ,IAAI,CAACy6B,QAAL,CAAcnnB,OAAd,CAAsB6tC,EAAE,CAAC/wC,GAAzB,IAAgChP,KAAK,CAAC6/C,gBAAD,CAAL,CAC7Bl3B,IAD6B,GAE7B9Y,GAF6B,CAEzB,UAAC6jB,CAAD,EAAIpvB,KAAJ;AAAA,mBAAe;AAAEA,mBAAK,EAAEA;AAAT,aAAf;AAAA,WAFyB,CAAhC;;AAIF,eAAK,IAAIsB,CAAC,GAAGm6C,EAAE,CAACtuC,KAAhB,EAAuB7L,CAAC,IAAIm6C,EAAE,CAACruC,GAA/B,EAAoC9L,CAAC,EAArC,EAAyC;AACvC,gBAAMi5C,GAAG,GAAGjgD,IAAI,CAACy6B,QAAL,CAAcnnB,OAAd,CAAsB6tC,EAAE,CAAC/wC,GAAzB,EAA8BpJ,CAA9B,CAAZ;;AACA,gBAAIA,CAAC,IAAIm6C,EAAE,CAACtuC,KAAZ,EAAmB;AACjBotC,iBAAG,CAAC3yB,IAAJ,GAAW,IAAX;AACA2yB,iBAAG,CAACF,SAAJ,GAAgBoB,EAAE,CAACruC,GAAnB;AACAmtC,iBAAG,CAACz6C,MAAJ,GAAa27C,EAAE,CAACruC,GAAH,GAASquC,EAAE,CAACtuC,KAAzB;AACAotC,iBAAG,CAAClyB,MAAJ,GAAa,IAAb;AACA,kBAAIozB,EAAE,CAACf,KAAP,EAAcH,GAAG,CAACG,KAAJ,GAAYe,EAAE,CAACf,KAAf,CAAd,KACKH,GAAG,CAACG,KAAJ,GAAY,CAAZ;AACN;AACF;AACF;AA7BoE;AAAA;AAAA;AAAA;AAAA;;AA8BrEpgD,UAAI,CAACy6B,QAAL,CAAc0gB,UAAd,GAA2B/5C,KAAK,CAAC6/C,gBAAD,CAAL,CACxBl3B,IADwB,GAExB9Y,GAFwB,CAEpB,YAAY;AACf,eAAO;AAAE4E,gBAAM,EAAE;AAAV,SAAP;AACD,OAJwB,CAA3B;AAKA,UAAIqrC,iBAAJ,EAAuBlhD,IAAI,CAACy6B,QAAL,CAAcnnB,OAAd,GAAwB,EAAxB;AACxB;;AACDtT,QAAI,CAACy6B,QAAL,CAAc6gB,MAAd,GAAuB;AACrB5kC,UAAI,EAAE1W,IAAI,CAACy6B,QAAL,CAAc/jB,IADC;AAErBpD,aAAO,EAAEtT,IAAI,CAACy6B,QAAL,CAAcnnB;AAFF,KAAvB;AAID,GAzED;;AA2EAtT,MAAI,CAACohD,UAAL,GAAkB,YAAY;AAC5B,WAAOphD,IAAI,CAACqhD,UAAL,GAAkBrhD,IAAI,CAACqhD,UAAL,CAAgBC,IAAlC,GAAyCthD,IAAI,CAACkD,UAArD;AACD,GAFD;;AAGAlD,MAAI,CAACuhD,WAAL,GAAmB,UAAUC,SAAV,EAAqB;AACtC,WAAOA,SAAS,CAACn7C,OAAV,CAAkB,aAAlB,EAAiC,EAAjC,CAAP;AACD,GAFD;;AAGArG,MAAI,CAACyhD,aAAL,GAAqB,UAAUD,SAAV,EAAqB;AACxC,WAAOE,UAAU,CAACF,SAAD,EAAY,EAAZ,CAAjB;AACD,GAFD;;AAGAxhD,MAAI,CAAC2hD,eAAL,GAAuB,UAAUzwC,GAAV,EAAe;AACpC,QAAI,OAAOrI,IAAP,CAAYqI,GAAZ,CAAJ,EAAsB;AACpBlR,UAAI,CAAC6B,KAAL,CAAWqP,GAAG,GAAG,QAAjB,IAA6BlR,IAAI,CAACyhD,aAAL,CAAmBzhD,IAAI,CAAC6B,KAAL,CAAWqP,GAAX,CAAnB,CAA7B;AACAlR,UAAI,CAAC6B,KAAL,CAAWqP,GAAG,GAAG,MAAjB,IAA2BlR,IAAI,CAACuhD,WAAL,CAAiBvhD,IAAI,CAAC6B,KAAL,CAAWqP,GAAX,CAAjB,CAA3B;AACA;AACD,KALmC,CAMpC;;;AACA,QACEA,GAAG,KAAK,2BAAR,IACA,OAAOlR,IAAI,CAAC6B,KAAL,CAAWqP,GAAX,CAAP,KAA2B,QAF7B,EAGE;AACAlR,UAAI,CAAC6B,KAAL,CAAWqP,GAAX,IAAkBlR,IAAI,CAAC6B,KAAL,CAAWqP,GAAX,EAAgByf,KAAhB,CAAsB,GAAtB,EAA2B1f,GAA3B,CAA+B,UAAUjK,CAAV,EAAa;AAC5D,eAAO2B,QAAQ,CAAC3B,CAAD,EAAI,EAAJ,CAAf;AACD,OAFiB,CAAlB;AAGD;AACF,GAfD;;AAgBAhH,MAAI,CAAC4hD,QAAL,GAAgB,UAAUC,QAAV,EAAoB;AAClC,QAAI,CAAC7hD,IAAI,CAACmtC,IAAL,CAAU0U,QAAV,CAAL,EAA0B;AACxB;AACD;;AACD58C,UAAM,CAAC8L,IAAP,CAAY/Q,IAAI,CAACmtC,IAAL,CAAU0U,QAAV,CAAZ,EAAiCp8C,OAAjC,CAAyC,UAAUyL,GAAV,EAAe;AACtDlR,UAAI,CAAC6hD,QAAD,CAAJ,CAAe3wC,GAAf,IAAsBlR,IAAI,CAACmtC,IAAL,CAAU0U,QAAV,EAAoB3wC,GAApB,CAAtB;AACD,KAFD;AAGD,GAPD;;AAQAlR,MAAI,CAAC8hD,gBAAL,GAAwB,UAAU5wC,GAAV,EAAe;AACrC,QAAIlR,IAAI,CAAC+hD,SAAL,CAAe51C,OAAf,CAAuB+E,GAAvB,MAAgC,CAAC,CAArC,EAAwC;AACtC,aAAOlR,IAAI,CAAC4mB,eAAL,CAAqB1V,GAArB,CAAP;AACD;;AACD,WAAOlR,IAAI,CAAC6B,KAAL,CAAWqP,GAAX,CAAP;AACD,GALD;;AAMAlR,MAAI,CAACgI,gBAAL,GAAwB,UAAUkJ,GAAV,EAAe7L,KAAf,EAAsB28C,mBAAtB,EAA2C;AACjE,QAAIC,KAAK,GACP,CACE,QADF,EAEE,OAFF,EAGE,WAHF,EAIE,UAJF,EAKE,WALF,EAME,UANF,EAOE91C,OAPF,CAOU+E,GAPV,MAOmB,CAAC,CARtB;;AASA,QAAIlR,IAAI,CAAC+hD,SAAL,CAAe51C,OAAf,CAAuB+E,GAAvB,MAAgC,CAAC,CAArC,EAAwC;AACtClR,UAAI,CAAC4mB,eAAL,CAAqB1V,GAArB,IAA4B7L,KAA5B;AACD,KAFD,MAEO;AACL,UAAI,IAAIwD,IAAJ,CAASqI,GAAT,CAAJ,EAAmB;AACjBA,WAAG,GAAGlR,IAAI,CAACkG,mBAAL,CAAyBgL,GAAzB,CAAN;AACD;;AACDlR,UAAI,CAAC6B,KAAL,CAAWqP,GAAX,IAAkB7L,KAAlB;AACArF,UAAI,CAAC2hD,eAAL,CAAqBzwC,GAArB;AACD;;AACD,QAAI+wC,KAAJ,EAAW;AACTjiD,UAAI,CAACiI,MAAL;AACD;;AACD,QAAI,CAAC+5C,mBAAL,EAA0B;AACxBhiD,UAAI,CAACuV,IAAL,CAAU,IAAV;AACAvV,UAAI,CAACwE,aAAL,CAAmB,cAAnB,EAAmC;AAAEyF,YAAI,EAAE,OAAR;AAAiB5E,aAAK,EAAEA;AAAxB,OAAnC;AACD;AACF,GA1BD;;AA2BArF,MAAI,CAAC0/C,kBAAL,GAA0B,YAAY;AACpC,QAAI1/C,IAAI,CAACkJ,UAAL,CAAgBe,IAAhB,IAAwBjK,IAAI,CAACkJ,UAAL,CAAgBqN,cAA5C,EAA4D;AAC1D,UAAI;AACFvW,YAAI,CAAC8W,cAAL,GAAsBimC,YAAY,CAACmF,OAAb,CACpBliD,IAAI,CAAC66C,WAAL,GAAmB,GAAnB,GAAyB76C,IAAI,CAACkJ,UAAL,CAAgBe,IADrB,CAAtB;AAGD,OAJD,CAIE,OAAOrE,CAAP,EAAU;AACV4U,eAAO,CAACC,IAAR,CAAa,kCAAkC7U,CAAC,CAACu8C,OAAjD;AACAniD,YAAI,CAAC8W,cAAL,GAAsBlV,SAAtB;AACD;;AACD,UAAI5B,IAAI,CAAC8W,cAAT,EAAyB;AACvB,YAAI;AACF9W,cAAI,CAAC8W,cAAL,GAAsB1O,IAAI,CAACC,KAAL,CAAWrI,IAAI,CAAC8W,cAAhB,CAAtB;AACD,SAFD,CAEE,OAAOlR,CAAP,EAAU;AACV4U,iBAAO,CAACC,IAAR,CAAa,yCAAb,EAAwD7U,CAAxD;AACA5F,cAAI,CAAC8W,cAAL,GAAsBlV,SAAtB;AACD;AACF;;AACD,UAAI5B,IAAI,CAAC8W,cAAT,EAAyB;AACvB,YACE,QAAO9W,IAAI,CAAC8W,cAAL,CAAoBL,KAA3B,MAAqC,QAArC,IACAzW,IAAI,CAAC8W,cAAL,CAAoBL,KAApB,KAA8B,IAFhC,EAGE;AACAzW,cAAI,CAACyW,KAAL,CAAWC,IAAX,GAAkB1W,IAAI,CAAC8W,cAAL,CAAoBL,KAApB,CAA0BC,IAA5C;AACA1W,cAAI,CAACyW,KAAL,CAAWnD,OAAX,GAAqBtT,IAAI,CAAC8W,cAAL,CAAoBL,KAApB,CAA0BnD,OAA/C;AACA,WAAC,OAAD,EAAU,SAAV,EAAqB,MAArB,EAA6B7N,OAA7B,CAAqC,UAAUuB,CAAV,EAAa;AAChD,gBAAI,CAAChH,IAAI,CAACyW,KAAL,CAAWzP,CAAX,CAAL,EAAoB;AAClBhH,kBAAI,CAACyW,KAAL,CAAWzP,CAAX,IAAgB,EAAhB;AACD;AACF,WAJD;AAKD;;AACD,YAAI,QAAOhH,IAAI,CAAC8W,cAAL,CAAoBgmC,UAA3B,MAA0C,QAA9C,EAAwD;AACtD98C,cAAI,CAACkU,SAAL,GAAiBzO,OAAjB,CAAyB,UAAUkQ,MAAV,EAAkB;AACzC,gBACE3V,IAAI,CAAC8W,cAAL,CAAoBgmC,UAApB,IACA98C,IAAI,CAAC8W,cAAL,CAAoBgmC,UAApB,CAA+BnnC,MAAM,CAAC1L,IAAtC,MAAgDrI,SAFlD,EAGE;AACA+T,oBAAM,CAACE,MAAP,GAAgB,CAAC7V,IAAI,CAAC8W,cAAL,CAAoBgmC,UAApB,CAA+BnnC,MAAM,CAAC1L,IAAtC,CAAjB;AACD;AACF,WAPD;AAQD;AACF;AACF;AACF,GA3CD;;AA4CAjK,MAAI,CAACuB,IAAL,GAAY,YAAY;AACtB,QAAIvB,IAAI,CAACoiD,WAAT,EAAsB;AACpB;AACD;;AACD,aAASC,uBAAT,CAAiCnxC,GAAjC,EAAsC;AACpC,UAAIlR,IAAI,CAAC+hD,SAAL,CAAe51C,OAAf,CAAuB+E,GAAvB,MAAgC,CAAC,CAArC,EAAwC;AACtClR,YAAI,CAAC+hD,SAAL,CAAe34C,IAAf,CAAoB8H,GAApB;AACD;AACF;;AACD,QAAIoxC,kBAAkB,GAAG,EAAzB;AACAtiD,QAAI,CAACk/C,aAAL;AACAl/C,QAAI,CAACo/C,QAAL;AACAp/C,QAAI,CAACuiD,aAAL;AACAviD,QAAI,CAACmmB,MAAL;AACAnmB,QAAI,CAACsc,QAAL,GAAgB,iBAAhB;AACAtc,QAAI,CAACwiD,EAAL,GAAU,UAAU35C,IAAV,CAAejE,MAAM,CAAC69C,SAAP,CAAiBC,SAAhC,CAAV;AACA1iD,QAAI,CAAC2iD,IAAL,GAAY,OAAO95C,IAAP,CAAYjE,MAAM,CAAC69C,SAAP,CAAiBC,SAA7B,CAAZ;AACA1iD,QAAI,CAAC4iD,MAAL,GAAc,SAAS/5C,IAAT,CAAcjE,MAAM,CAAC69C,SAAP,CAAiBC,SAA/B,CAAd;AACA1iD,QAAI,CAAC6iD,GAAL,GAAW,QAAQh6C,IAAR,CAAajE,MAAM,CAAC69C,SAAP,CAAiBC,SAA9B,CAAX;AACA1iD,QAAI,CAACK,MAAL,GAAc,UAAUwI,IAAV,CAAejE,MAAM,CAAC69C,SAAP,CAAiBC,SAAhC,CAAd;AACA1iD,QAAI,CAACwQ,WAAL,GAAmB,CAAC5O,SAAD,EAAY,IAAZ,EAAkB,EAAlB,CAAnB;AACA5B,QAAI,CAACmvC,UAAL,GAAkB,MAAlB;AACAnvC,QAAI,CAAC8iD,aAAL,GAAqB,UAArB;AACA9iD,QAAI,CAACmvC,UAAL,GAAkBnvC,IAAI,CAAC4iD,MAAL,GAAc,cAAd,GAA+B5iD,IAAI,CAACmvC,UAAtD;AACAnvC,QAAI,CAAC8iD,aAAL,GAAqB9iD,IAAI,CAAC6iD,GAAL,GAAW,kBAAX,GAAgC7iD,IAAI,CAAC+iD,cAA1D;AACA/iD,QAAI,CAACkqC,mBAAL,GAA2B;AAAEnoC,OAAC,EAAE,CAAL;AAAQE,OAAC,EAAE;AAAX,KAA3B;AACAgD,UAAM,CAAC8L,IAAP,CAAY/Q,IAAI,CAAC6B,KAAjB,EAAwB4D,OAAxB,CAAgCzF,IAAI,CAAC2hD,eAArC;AACA3hD,QAAI,CAACmB,IAAL,CAAUwzC,aAAV,GAA0B30C,IAAI,CAAC20C,aAA/B;AACA30C,QAAI,CAACmB,IAAL,CAAUq0C,kBAAV,GAA+Bx1C,IAAI,CAACw1C,kBAApC;AACAx1C,QAAI,CAACmB,IAAL,CAAUqnB,MAAV,GAAmBxoB,IAAI,CAACwoB,MAAxB;AACAxoB,QAAI,CAACmB,IAAL,CAAUb,gBAAV,GAA6BN,IAAI,CAACM,gBAAlC;AACAN,QAAI,CAACmB,IAAL,CAAUwE,mBAAV,GAAgC3F,IAAI,CAAC2F,mBAArC;AACA3F,QAAI,CAACmB,IAAL,CAAUqD,aAAV,GAA0BxE,IAAI,CAACwE,aAA/B;AACA;AACJ;AACA;AACA;AACA;AACA;;AACIxE,QAAI,CAACmB,IAAL,CAAU8B,OAAV,GAAoBjD,IAAI,CAACiD,OAAzB;AACA;AACJ;AACA;AACA;AACA;AACA;AACA;;AACIjD,QAAI,CAACmB,IAAL,CAAU+kB,QAAV,GAAqBlmB,IAAI,CAACkmB,QAA1B;AACAlmB,QAAI,CAACmB,IAAL,CAAUsd,qBAAV,GAAkCze,IAAI,CAACye,qBAAvC;AACAze,QAAI,CAACmB,IAAL,CAAU+5C,OAAV,GAAoBl7C,IAAI,CAACk7C,OAAzB;AACAl7C,QAAI,CAACmB,IAAL,CAAUo6C,OAAV,GAAoBv7C,IAAI,CAACu7C,OAAzB;AACAv7C,QAAI,CAACmB,IAAL,CAAUm1C,QAAV,GAAqBt2C,IAAI,CAACs2C,QAA1B;AACAt2C,QAAI,CAACmB,IAAL,CAAU+e,WAAV,GAAwBlgB,IAAI,CAACkgB,WAA7B;AACAlgB,QAAI,CAACmB,IAAL,CAAUme,OAAV,GAAoBtf,IAAI,CAACsf,OAAzB;AACAtf,QAAI,CAACmB,IAAL,CAAUwf,aAAV,GAA0B3gB,IAAI,CAAC2gB,aAA/B;AACA3gB,QAAI,CAACmB,IAAL,CAAUg2C,mBAAV,GAAgCn3C,IAAI,CAACm3C,mBAArC;AACAn3C,QAAI,CAACmB,IAAL,CAAUuf,cAAV,GAA2B1gB,IAAI,CAAC0gB,cAAhC;AACA1gB,QAAI,CAACmB,IAAL,CAAU6hD,cAAV,GAA2BhjD,IAAI,CAACgjD,cAAhC;AACAhjD,QAAI,CAACmB,IAAL,CAAU8hD,QAAV,GAAqBjjD,IAAI,CAACijD,QAA1B;AACAjjD,QAAI,CAACmB,IAAL,CAAU+hD,OAAV,GAAoBljD,IAAI,CAACkjD,OAAzB;AACAljD,QAAI,CAACmB,IAAL,CAAUgiD,SAAV,GAAsBnjD,IAAI,CAACmjD,SAA3B;AACAnjD,QAAI,CAACmB,IAAL,CAAUiiD,sBAAV,GAAmCpjD,IAAI,CAACojD,sBAAxC;AACApjD,QAAI,CAACmB,IAAL,CAAUkiD,sBAAV,GAAmCrjD,IAAI,CAACqjD,sBAAxC;AACArjD,QAAI,CAACmB,IAAL,CAAU4Q,eAAV,GAA4B/R,IAAI,CAAC+R,eAAjC;AACA/R,QAAI,CAACmB,IAAL,CAAUmiD,oBAAV,GAAiCtjD,IAAI,CAACsjD,oBAAtC;AACAtjD,QAAI,CAACmB,IAAL,CAAUoiD,gBAAV,GAA6BvjD,IAAI,CAACujD,gBAAlC;AACAvjD,QAAI,CAACmB,IAAL,CAAUk1C,iBAAV,GAA8Br2C,IAAI,CAACq2C,iBAAnC;AACAr2C,QAAI,CAACmB,IAAL,CAAUm+C,uBAAV,GAAoCt/C,IAAI,CAACs/C,uBAAzC;AACAt/C,QAAI,CAACmB,IAAL,CAAUmQ,kBAAV,GAA+BtR,IAAI,CAACsR,kBAApC;AACAtR,QAAI,CAACmB,IAAL,CAAUub,SAAV,GAAsB1c,IAAI,CAAC0c,SAA3B;AACA1c,QAAI,CAACmB,IAAL,CAAU4Y,YAAV,GAAyB/Z,IAAI,CAAC+Z,YAA9B;AACA/Z,QAAI,CAACmB,IAAL,CAAUyZ,SAAV,GAAsB5a,IAAI,CAAC4a,SAA3B;AACA5a,QAAI,CAACmB,IAAL,CAAUoZ,kBAAV,GAA+Bva,IAAI,CAACua,kBAApC;AACAva,QAAI,CAACmB,IAAL,CAAU4Z,eAAV,GAA4B/a,IAAI,CAAC+a,eAAjC;AACA/a,QAAI,CAACmB,IAAL,CAAUqiD,kBAAV,GAA+BxjD,IAAI,CAACwjD,kBAApC;AACAxjD,QAAI,CAACmB,IAAL,CAAUsiD,eAAV,GAA4BzjD,IAAI,CAACyjD,eAAjC;AACAzjD,QAAI,CAACmB,IAAL,CAAU6Y,wBAAV,GAAqCha,IAAI,CAACga,wBAA1C;AACAha,QAAI,CAACmB,IAAL,CAAU0Z,qBAAV,GAAkC7a,IAAI,CAAC6a,qBAAvC;AACA7a,QAAI,CAACmB,IAAL,CAAUuiD,aAAV,GAA0B1jD,IAAI,CAAC0jD,aAA/B;AACA1jD,QAAI,CAACmB,IAAL,CAAUwiD,YAAV,GAAyB3jD,IAAI,CAAC2jD,YAA9B;AACA3jD,QAAI,CAACmB,IAAL,CAAUyiD,eAAV,GAA4B5jD,IAAI,CAAC4jD,eAAjC;AACA5jD,QAAI,CAACmB,IAAL,CAAUkW,KAAV,GAAkBrX,IAAI,CAACqX,KAAvB;AACArX,QAAI,CAACmB,IAAL,CAAUoU,IAAV,GAAiBvV,IAAI,CAACuV,IAAtB;AACAvV,QAAI,CAACmB,IAAL,CAAUqX,OAAV,GAAoBxY,IAAI,CAACwY,OAAzB;AACAxY,QAAI,CAACmB,IAAL,CAAUmG,WAAV,GAAwBtH,IAAI,CAACsH,WAA7B;AACAtH,QAAI,CAACmB,IAAL,CAAUsvC,UAAV,GAAuBzwC,IAAI,CAACywC,UAA5B;AACAzwC,QAAI,CAACmB,IAAL,CAAU4c,WAAV,GAAwB/d,IAAI,CAAC+d,WAA7B;AACA/d,QAAI,CAACmB,IAAL,CAAU0iD,iBAAV,GAA8B7jD,IAAI,CAAC6jD,iBAAnC;AACA7jD,QAAI,CAACmB,IAAL,CAAUqQ,SAAV,GAAsBxR,IAAI,CAACwR,SAA3B;AACAxR,QAAI,CAACmB,IAAL,CAAUqvC,SAAV,GAAsBxwC,IAAI,CAACwwC,SAA3B;AACAxwC,QAAI,CAACmB,IAAL,CAAU4N,UAAV,GAAuB/O,IAAI,CAAC+O,UAA5B;AACA/O,QAAI,CAACmB,IAAL,CAAU6wC,UAAV,GAAuBhyC,IAAI,CAACgyC,UAA5B;AACAhyC,QAAI,CAACmB,IAAL,CAAU2iD,UAAV,GAAuB9jD,IAAI,CAAC8jD,UAA5B;AACA9jD,QAAI,CAACmB,IAAL,CAAU4iD,YAAV,GAAyB/jD,IAAI,CAAC+jD,YAA9B;AACA/jD,QAAI,CAACmB,IAAL,CAAUQ,MAAV,GAAmB3B,IAAI,CAAC2B,MAAxB;AACA3B,QAAI,CAACmB,IAAL,CAAUklB,OAAV,GAAoBrmB,IAAI,CAAComB,GAAzB;AACApmB,QAAI,CAACmB,IAAL,CAAU6iD,SAAV,GAAsBhkD,IAAI,CAACgkD,SAA3B;AACAhkD,QAAI,CAACmB,IAAL,CAAU8iD,SAAV,GAAsBjkD,IAAI,CAACikD,SAA3B;AACAjkD,QAAI,CAACmB,IAAL,CAAU6e,MAAV,GAAmBhgB,IAAI,CAACggB,MAAxB;AACAhgB,QAAI,CAACmB,IAAL,CAAU+iD,YAAV,GAAyBlkD,IAAI,CAACkkD,YAA9B;AACAlkD,QAAI,CAACmB,IAAL,CAAUgjD,YAAV,GAAyBnkD,IAAI,CAACmkD,YAA9B;AACAnkD,QAAI,CAACmB,IAAL,CAAUijD,SAAV,GAAsBpkD,IAAI,CAACokD,SAA3B;AACApkD,QAAI,CAACmB,IAAL,CAAU+b,eAAV,GAA4Bld,IAAI,CAACkd,eAAjC;AACAld,QAAI,CAACmB,IAAL,CAAUkjD,YAAV,GAAyBrkD,IAAI,CAACqkD,YAA9B;AACArkD,QAAI,CAACmB,IAAL,CAAUmjD,cAAV,GAA2BtkD,IAAI,CAACskD,cAAhC;AACAtkD,QAAI,CAACmB,IAAL,CAAUojD,iBAAV,GAA8BvkD,IAAI,CAACukD,iBAAnC;AACAvkD,QAAI,CAACmB,IAAL,CAAUqjD,eAAV,GAA4BxkD,IAAI,CAACwkD,eAAjC;AACAxkD,QAAI,CAACmB,IAAL,CAAU8G,MAAV,GAAmBjI,IAAI,CAACiI,MAAxB;AACAjI,QAAI,CAACmB,IAAL,CAAU2yC,YAAV,GAAyB9zC,IAAI,CAAC8zC,YAA9B;AACA9zC,QAAI,CAACmB,IAAL,CAAUqvC,SAAV,GAAsBxwC,IAAI,CAACwwC,SAA3B;AACAxwC,QAAI,CAACmB,IAAL,CAAU0wC,SAAV,GAAsB7xC,IAAI,CAAC6xC,SAA3B;AACA7xC,QAAI,CAACmB,IAAL,CAAUo0C,UAAV,GAAuBv1C,IAAI,CAACu1C,UAA5B;AACAv1C,QAAI,CAACmB,IAAL,CAAUu9C,cAAV,GAA2B1+C,IAAI,CAAC0+C,cAAhC;AACA1+C,QAAI,CAACmB,IAAL,CAAUsjD,aAAV,GAA0BzkD,IAAI,CAACykD,aAA/B;AACAzkD,QAAI,CAACmB,IAAL,CAAUujD,sBAAV,GAAmC1kD,IAAI,CAAC0kD,sBAAxC;AACA1kD,QAAI,CAACmB,IAAL,CAAUwjD,cAAV,GAA2B3kD,IAAI,CAAC2kD,cAAhC;AACA3kD,QAAI,CAACmB,IAAL,CAAU8lB,IAAV,GAAiBjnB,IAAI,CAACinB,IAAtB;AACAjnB,QAAI,CAACmB,IAAL,CAAU+lB,GAAV,GAAgBlnB,IAAI,CAACknB,GAArB;AACAlnB,QAAI,CAACmB,IAAL,CAAUmU,KAAV,GAAkBtV,IAAI,CAACsV,KAAvB;AACAtV,QAAI,CAACmB,IAAL,CAAU6G,gBAAV,GAA6BhI,IAAI,CAACgI,gBAAlC;AACAhI,QAAI,CAACmB,IAAL,CAAUmV,WAAV,GAAwBtW,IAAI,CAACsW,WAA7B;AACAtW,QAAI,CAACmB,IAAL,CAAUmwC,aAAV,GAA0BtxC,IAAI,CAACsxC,aAA/B;AACAtxC,QAAI,CAACmB,IAAL,CAAUyW,QAAV,GAAqB5X,IAAI,CAAC4X,QAA1B;AACA5X,QAAI,CAACmB,IAAL,CAAUowC,UAAV,GAAuBvxC,IAAI,CAACuxC,UAA5B;AACAtsC,UAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,UAAjC,EAA6C;AAC3CgE,SAAG,EAAE,eAAY;AACf,eAAO;AACLyC,gBAAM,EAAE5H,IAAI,CAACkH,QAAL,CAAcU,MAAd,CAAqBoN,MAArB,CAA4B,UAAUtH,CAAV,EAAa1G,CAAb,EAAgB;AAClD0G,aAAC,CAAC1G,CAAC,CAAC,CAAD,CAAF,CAAD,GAAUA,CAAC,CAAC,CAAD,CAAX;AACA,mBAAO0G,CAAP;AACD,WAHO,EAGL,EAHK,CADH;AAKLxE,oBAAU,EAAElJ,IAAI,CAACkH,QAAL,CAAcgC,UAAd,CAAyB8L,MAAzB,CAAgC,UAAUtH,CAAV,EAAa1G,CAAb,EAAgB;AAC1D0G,aAAC,CAAC1G,CAAC,CAAC,CAAD,CAAF,CAAD,GAAUA,CAAC,CAAC,CAAD,CAAX;AACA,mBAAO0G,CAAP;AACD,WAHW,EAGT,EAHS;AALP,SAAP;AAUD;AAZ0C,KAA7C;AAcA1N,QAAI,CAAC+hD,SAAL,GAAiB98C,MAAM,CAAC8L,IAAP,CAAY/Q,IAAI,CAACmB,IAAL,CAAU+F,QAAV,CAAmBU,MAA/B,CAAjB;AACA5H,QAAI,CAAC+hD,SAAL,CACG9wC,GADH,CACO,UAAUjK,CAAV,EAAa;AAChB,aAAOhH,IAAI,CAACmG,iBAAL,CAAuBa,CAAvB,EAA0B,KAA1B,CAAP;AACD,KAHH,EAIGvB,OAJH,CAIW48C,uBAJX;AAKAriD,QAAI,CAAC+hD,SAAL,CACG9wC,GADH,CACO,UAAUjK,CAAV,EAAa;AAChB,aAAOhH,IAAI,CAACmG,iBAAL,CAAuBa,CAAvB,EAA0B,IAA1B,CAAP;AACD,KAHH,EAIGvB,OAJH,CAIW48C,uBAJX;AAKAriD,QAAI,CAAC4kD,SAAL,GAAiBhgD,MAAM,CAAC4C,gBAAP,CAAwBzG,QAAQ,CAACgC,IAAjC,EAAuC,IAAvC,CAAjB;AACA/C,QAAI,CAAC+hD,SAAL,CAAe/wC,MAAf,CAAsB/L,MAAM,CAAC8L,IAAP,CAAY/Q,IAAI,CAAC4kD,SAAjB,CAAtB,EAAmDn/C,OAAnD,CAA2D,UAAUyL,GAAV,EAAe;AACxE;AACAoxC,wBAAkB,CAACpxC,GAAD,CAAlB,GAA0BtP,SAA1B;AACAqD,YAAM,CAACC,cAAP,CAAsBo9C,kBAAtB,EAA0CpxC,GAA1C,EAA+C;AAC7C/L,WAAG,EAAE,eAAY;AACf,iBAAOnF,IAAI,CAAC8hD,gBAAL,CAAsB5wC,GAAtB,CAAP;AACD,SAH4C;AAI7C9L,WAAG,EAAE,aAAUC,KAAV,EAAiB;AACpB,cAAIrF,IAAI,CAACoiD,WAAT,EAAsB;AACpBpiD,gBAAI,CAACktC,mBAAL,CAAyBh8B,GAAzB,IAAgC7L,KAAhC;AACD;;AACDrF,cAAI,CAACgI,gBAAL,CAAsBkJ,GAAtB,EAA2B7L,KAA3B;AACD;AAT4C,OAA/C;AAWD,KAdD;AAeAJ,UAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,YAAjC,EAA+C;AAC7CgE,SAAG,EAAE,eAAY;AACf,eAAOnF,IAAI,CAACqhD,UAAZ;AACD;AAH4C,KAA/C;AAKAp8C,UAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,YAAjC,EAA+C;AAC7CgE,SAAG,EAAE,eAAY;AACf,eAAOnF,IAAI,CAACs5B,UAAZ;AACD;AAH4C,KAA/C;AAKAr0B,UAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,UAAjC,EAA6C;AAC3CgE,SAAG,EAAE,eAAY;AACf,eAAOnF,IAAI,CAACyO,QAAZ;AACD;AAH0C,KAA7C;AAKAxJ,UAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,kBAAjC,EAAqD;AACnDgE,SAAG,EAAE,eAAY;AACf,eAAOnF,IAAI,CAAC2+B,gBAAL,EAAP;AACD;AAHkD,KAArD;AAKA15B,UAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,OAAjC,EAA0C;AACxCgE,SAAG,EAAE,eAAY;AACf,eAAOm9C,kBAAP;AACD,OAHuC;AAIxCl9C,SAAG,EAAE,aAAUy/C,WAAV,EAAuB;AAC1B5/C,cAAM,CAAC8L,IAAP,CAAY8zC,WAAZ,EAAyBp/C,OAAzB,CAAiC,UAAUyL,GAAV,EAAe;AAC9ClR,cAAI,CAACgI,gBAAL,CAAsBkJ,GAAtB,EAA2B2zC,WAAW,CAAC3zC,GAAD,CAAtC,EAA6C,IAA7C;AACD,SAFD;AAGAlR,YAAI,CAACuV,IAAL,CAAU,IAAV;AACAvV,YAAI,CAACwE,aAAL,CAAmB,cAAnB,EAAmC;AACjCyF,cAAI,EAAE,OAD2B;AAEjC5E,eAAK,EAAEw/C;AAF0B,SAAnC;AAID;AAbuC,KAA1C;AAeA5/C,UAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,YAAjC,EAA+C;AAAEkE,WAAK,EAAE;AAAT,KAA/C;AACAJ,UAAM,CAAC8L,IAAP,CAAY/Q,IAAI,CAACkJ,UAAjB,EAA6BzD,OAA7B,CAAqC,UAAUyL,GAAV,EAAe;AAClDjM,YAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAAL,CAAU+H,UAAhC,EAA4CgI,GAA5C,EAAiD;AAC/C/L,WAAG,EAAE,eAAY;AACf,iBAAOnF,IAAI,CAACkJ,UAAL,CAAgBgI,GAAhB,CAAP;AACD,SAH8C;AAI/C9L,WAAG,EAAE,aAAUC,KAAV,EAAiB;AACpBrF,cAAI,CAACkJ,UAAL,CAAgBgI,GAAhB,IAAuB7L,KAAvB;;AACA,cAAI6L,GAAG,KAAK,MAAZ,EAAoB;AAClBlR,gBAAI,CAACy/C,qBAAL;AACD;;AACD,cACEvuC,GAAG,KAAK,SAAR,IACAA,GAAG,KAAK,YADR,IAEAA,GAAG,KAAK,uBAHV,EAIE;AACAlR,gBAAI,CAAC4gD,oBAAL;AACD;;AACD5gD,cAAI,CAACuV,IAAL,CAAU,IAAV;AACAvV,cAAI,CAACwE,aAAL,CAAmB,kBAAnB,EAAuC;AACrCyF,gBAAI,EAAEiH,GAD+B;AAErC7L,iBAAK,EAAEA,KAAK,CAAC6L,GAAD;AAFyB,WAAvC;AAID;AArB8C,OAAjD;AAuBD,KAxBD;;AAyBAlR,QAAI,CAACk7C,OAAL,CAAapyC,MAAb,GAAsB,UAAUzD,KAAV,EAAiBy/C,SAAjB,EAA4B;AAChD,UAAIA,SAAS,KAAK9kD,IAAI,CAACkJ,UAAL,CAAgBwH,UAAlC,EAA8C;AAC5C,eAAO1Q,IAAI,CAACwQ,WAAL,CAAiBC,QAAjB,CACLpL,KAAK,IAAI,IAAT,GAAgBA,KAAhB,GAAwBiL,MAAM,CAACjL,KAAD,CAAN,CAAckL,IAAd,EADnB,CAAP;AAGD;;AAEDlL,WAAK,GAAGiL,MAAM,CAACjL,KAAD,CAAd;AACA,UAAI0/C,YAAJ;AAAA,UACEC,MAAM,GAAG,aADX;AAAA,UAEEC,OAAO,GAAGD,MAAM,CAACE,IAAP,CAAYJ,SAAZ,CAFZ;AAAA,UAGEK,KAAK,GAAGF,OAAO,GAAGA,OAAO,CAAC,CAAD,CAAP,CAAWG,SAAX,CAAqB,CAArB,CAAH,GAA6B,EAH9C;AAAA,UAIEC,UAAU,GAAGF,KAAK,CAAC3/C,MAJrB;AAKAxF,UAAI,CAAC6P,kBAAL,GAA0BjO,SAA1B;;AACA,UAAIkjD,SAAS,CAACM,SAAV,CAAoB,CAApB,EAAuB,CAAvB,MAA8B,GAA9B,IAAqCH,OAAzC,EAAkD;AAChD,YAAI;AACFF,sBAAY,GAAG,IAAIO,MAAJ,CACbR,SAAS,CAACM,SAAV,CAAoB,CAApB,EAAuBN,SAAS,CAACt/C,MAAV,IAAoB6/C,UAAU,GAAG,CAAjC,CAAvB,CADa,EAEbF,KAFa,CAAf;AAID,SALD,CAKE,OAAOv/C,CAAP,EAAU;AACV5F,cAAI,CAAC6P,kBAAL,GAA0BjK,CAA1B;AACA;AACD;;AACD,eAAOm/C,YAAY,CAACl8C,IAAb,CAAkBxD,KAAlB,CAAP;AACD;;AACD,aAAOA,KAAK,CAACkkB,QAAN,GACHlkB,KAAK,CACFkkB,QADH,GAEGg8B,iBAFH,GAGGp5C,OAHH,CAGW24C,SAAS,CAACS,iBAAV,EAHX,MAG8C,CAAC,CAJ5C,GAKH,KALJ;AAMD,KAhCD;;AAiCAvlD,QAAI,CAACk7C,OAAL,CAAa1yC,MAAb,GAAsB,UAAUnD,KAAV,EAAiBy/C,SAAjB,EAA4B;AAChD,UAAIA,SAAS,KAAK9kD,IAAI,CAACkJ,UAAL,CAAgBwH,UAAlC,EAA8C;AAC5C,eAAO1Q,IAAI,CAACwQ,WAAL,CAAiBC,QAAjB,CACLpL,KAAK,IAAI,IAAT,GAAgBA,KAAhB,GAAwBiL,MAAM,CAACjL,KAAD,CAAN,CAAckL,IAAd,EADnB,CAAP;AAGD;;AAED,UAAI,CAACu0C,SAAL,EAAgB;AACd,eAAO,IAAP;AACD;;AACD,aAAOz/C,KAAK,KAAKy/C,SAAjB;AACD,KAXD;;AAYA,KAAC,YAAD,EAAe,SAAf,EAA0B,SAA1B,EAAqCr/C,OAArC,CAA6CzF,IAAI,CAAC4hD,QAAlD;AACA5hD,QAAI,CAACoH,mBAAL,CAAyB,KAAzB,EAAgCpH,IAAI,CAACmB,IAArC;AACAnB,QAAI,CAAC0/C,kBAAL;;AACA,QAAI1/C,IAAI,CAACmtC,IAAL,CAAUjlC,IAAd,EAAoB;AAClBlI,UAAI,CAACmB,IAAL,CAAU+G,IAAV,GAAiBlI,IAAI,CAACmtC,IAAL,CAAUjlC,IAA3B;AACD;;AACD,QAAIlI,IAAI,CAACmB,IAAL,CAAUm4C,SAAV,IAAuBt5C,IAAI,CAACmB,IAAL,CAAUqkD,WAArC,EAAkD;AAChD,UAAIxlD,IAAI,CAACmB,IAAL,CAAU6I,QAAV,KAAuB,+BAA3B,EAA4D;AAC1DhK,YAAI,CAACmB,IAAL,CAAU6I,QAAV,GAAqB,oCAArB;AACD;;AACDhK,UAAI,CAACmB,IAAL,CAAU+G,IAAV,GAAiBlI,IAAI,CAACmB,IAAL,CAAUm4C,SAAV,IAAuBt5C,IAAI,CAACmB,IAAL,CAAUqkD,WAAlD;AACD;;AACD,QAAIxlD,IAAI,CAACmtC,IAAL,CAAU7kC,MAAd,EAAsB;AACpBtI,UAAI,CAACmB,IAAL,CAAUmH,MAAV,GAAmBtI,IAAI,CAACmtC,IAAL,CAAU7kC,MAA7B;AACD;;AACD,QAAItI,IAAI,CAACyb,WAAL,IAAoB,CAACzb,IAAI,CAACsH,WAA9B,EAA2C;AACzCjE,2BAAqB,CAAC,YAAY;AAChCrD,YAAI,CAACiI,MAAL,CAAY,IAAZ;AACD,OAFoB,CAArB;AAGD,KAJD,MAIO;AACLjI,UAAI,CAACiI,MAAL,CAAY,IAAZ;AACD;;AACDjI,QAAI,CAACoiD,WAAL,GAAmB,IAAnB;AACA,WAAOpiD,IAAP;AACD,GAvSD;AAwSA;AACF;AACA;AACA;AACA;AACA;;;AACEA,MAAI,CAACmB,IAAL,CAAUqlB,IAAV,GAAiB,UAAU5gB,CAAV,EAAa;AAC5B5F,QAAI,CAACyO,QAAL,GAAgB,KAAhB;AACD,GAFD;AAGA;AACF;AACA;AACA;AACA;AACA;;;AACEzO,MAAI,CAACmB,IAAL,CAAUgR,KAAV,GAAkB,YAAY;AAC5BnS,QAAI,CAACyO,QAAL,GAAgB,IAAhB;AACAzO,QAAI,CAACkS,YAAL,CAAkBC,KAAlB;AACD,GAHD;;AAIA,MAAInS,IAAI,CAACqhD,UAAL,IAAmBrhD,IAAI,CAACyb,WAA5B,EAAyC;AACvCxW,UAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,QAAjC,EAA2C;AACzCgE,SAAG,EAAE,eAAY;AACf,YAAInF,IAAI,CAACqhD,UAAT,EAAqB;AACnB,iBAAOrhD,IAAI,CAACqhD,UAAL,CAAgBl/C,MAAvB;AACD;;AACD,eAAOnC,IAAI,CAACkD,UAAL,CAAgBf,MAAvB;AACD,OANwC;AAOzCiD,SAAG,EAAE,aAAUC,KAAV,EAAiB;AACpB,YAAIrF,IAAI,CAACqhD,UAAT,EAAqB;AACnBrhD,cAAI,CAACqhD,UAAL,CAAgBl/C,MAAhB,GAAyBkD,KAAzB;AACD,SAFD,MAEO;AACLrF,cAAI,CAACkD,UAAL,CAAgBf,MAAhB,GAAyBkD,KAAzB;AACD;;AACDrF,YAAI,CAACiI,MAAL,CAAY,IAAZ;AACD;AAdwC,KAA3C;AAgBAhD,UAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,OAAjC,EAA0C;AACxCgE,SAAG,EAAE,eAAY;AACf,YAAInF,IAAI,CAACqhD,UAAT,EAAqB;AACnB,iBAAOrhD,IAAI,CAACqhD,UAAL,CAAgB7yC,KAAvB;AACD;;AACD,eAAOxO,IAAI,CAACkD,UAAL,CAAgBsL,KAAvB;AACD,OANuC;AAOxCpJ,SAAG,EAAE,aAAUC,KAAV,EAAiB;AACpB,YAAIrF,IAAI,CAACqhD,UAAT,EAAqB;AACnBrhD,cAAI,CAACqhD,UAAL,CAAgB7yC,KAAhB,GAAwBnJ,KAAxB;AACD,SAFD,MAEO;AACLrF,cAAI,CAACkD,UAAL,CAAgBsL,KAAhB,GAAwBnJ,KAAxB;AACD;;AACDrF,YAAI,CAACiI,MAAL,CAAY,IAAZ;AACD;AAduC,KAA1C;AAgBAhD,UAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,YAAjC,EAA+C;AAC7CgE,SAAG,EAAE,eAAY;AACf,eAAOnF,IAAI,CAACkD,UAAZ;AACD,OAH4C;AAI7CkC,SAAG,EAAE,aAAUC,KAAV,EAAiB;AACpB,YAAI,CAACrF,IAAI,CAACyb,WAAV,EAAuB;AACrB,gBAAM,IAAIgqC,SAAJ,CACJ,wDADI,CAAN;AAGD;;AACDzlD,YAAI,CAACkD,UAAL,GAAkBmC,KAAlB;AACD;AAX4C,KAA/C;AAaD;;AACDJ,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,mBAAjC,EAAsD;AACpDgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAAC41B,iBAAZ;AACD;AAHmD,GAAtD;AAKA3wB,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,cAAjC,EAAiD;AAC/CgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAACysB,YAAZ;AACD;AAH8C,GAAjD;AAKAxnB,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,YAAjC,EAA+C;AAC7CgE,OAAG,EAAE,eAAY;AACf,aAAOF,MAAM,CAAC8L,IAAP,CAAY/Q,IAAI,CAACqb,UAAjB,EAA6BpK,GAA7B,CAAiC,UAAUspB,MAAV,EAAkB;AACxD,eAAOv6B,IAAI,CAACqb,UAAL,CAAgBkf,MAAhB,CAAP;AACD,OAFM,CAAP;AAGD;AAL4C,GAA/C;AAOAt1B,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,aAAjC,EAAgD;AAC9CgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAACyb,WAAZ;AACD;AAH6C,GAAhD;AAKAxW,QAAM,CAACC,cAAP,CAAsBlF,IAAtB,EAA4B,QAA5B,EAAsC;AACpCmF,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAAC4mB,eAAL,CAAqBtE,MAA5B;AACD,KAHmC;AAIpCld,OAAG,EAAE,aAAUC,KAAV,EAAiB;AACpB,UAAIA,KAAK,KAAK,MAAd,EAAsB;AACpBA,aAAK,GAAG,SAAR;AACD;;AACD,UAAIrF,IAAI,CAAC0lD,aAAL,KAAuBrgD,KAA3B,EAAkC;AAChCrF,YAAI,CAAC4mB,eAAL,CAAqBtE,MAArB,GAA8Bjd,KAA9B;AACArF,YAAI,CAAC0lD,aAAL,GAAqBrgD,KAArB;AACD;AACF;AAZmC,GAAtC;AAcAJ,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,gBAAjC,EAAmD;AACjDgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAACgsB,cAAZ;AACD,KAHgD;AAIjD5mB,OAAG,EAAE,aAAUC,KAAV,EAAiB;AACpB,UAAIA,KAAK,KAAK,MAAd,EAAsB;AACpBA,aAAK,GAAG,KAAR;AACD;;AACDrF,UAAI,CAACgsB,cAAL,GAAsB3mB,KAAtB;AACArF,UAAI,CAACqX,KAAL,CAAWrX,IAAI,CAACo7B,OAAhB,EAAyBp7B,IAAI,CAACgsB,cAA9B;AACD;AAVgD,GAAnD;AAYA/mB,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,SAAjC,EAA4C;AAC1CgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAACo7B,OAAZ;AACD,KAHyC;AAI1Ch2B,OAAG,EAAE,aAAUC,KAAV,EAAiB;AACpB,UACErF,IAAI,CAACkU,SAAL,GAAiBf,IAAjB,CAAsB,UAAUgD,GAAV,EAAe;AACnC,eAAOA,GAAG,CAAClM,IAAJ,KAAa5E,KAApB;AACD,OAFD,MAEOzD,SAHT,EAIE;AACA,cAAM,IAAIN,KAAJ,CAAU,qCAAV,CAAN;AACD;;AACDtB,UAAI,CAACo7B,OAAL,GAAe/1B,KAAf;AACArF,UAAI,CAACqX,KAAL,CAAWrX,IAAI,CAACo7B,OAAhB,EAAyBp7B,IAAI,CAACgsB,cAA9B;AACD;AAdyC,GAA5C;;AAgBA,MAAIhsB,IAAI,CAACsH,WAAT,EAAsB;AACpBrC,UAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,cAAjC,EAAiD;AAC/CgE,SAAG,EAAE,eAAY;AACf,eAAOnF,IAAI,CAAC2B,MAAL,CAAY4B,YAAnB;AACD;AAH8C,KAAjD;AAKA0B,UAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,aAAjC,EAAgD;AAC9CgE,SAAG,EAAE,eAAY;AACf,eAAOnF,IAAI,CAAC2B,MAAL,CAAY6K,WAAnB;AACD;AAH6C,KAAhD;AAKD;;AACDvH,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,cAAjC,EAAiD;AAC/CgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAACsC,SAAL,CAAeuK,YAAtB;AACD;AAH8C,GAAjD;AAKA5H,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,aAAjC,EAAgD;AAC9CgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAACsC,SAAL,CAAeq0B,WAAtB;AACD;AAH6C,GAAhD;AAKA1xB,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,WAAjC,EAA8C;AAC5CgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAACsC,SAAL,CAAeE,SAAtB;AACD,KAH2C;AAI5C4C,OAAG,EAAE,aAAUC,KAAV,EAAiB;AACpBrF,UAAI,CAACsC,SAAL,CAAeE,SAAf,GAA2B6C,KAA3B;AACD;AAN2C,GAA9C;AAQAJ,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,YAAjC,EAA+C;AAC7CgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAACsC,SAAL,CAAeC,UAAtB;AACD,KAH4C;AAI7C6C,OAAG,EAAE,aAAUC,KAAV,EAAiB;AACpBrF,UAAI,CAACsC,SAAL,CAAeC,UAAf,GAA4B8C,KAA5B;AACD;AAN4C,GAA/C;AAQAJ,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,OAAjC,EAA0C;AACxCgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAACyW,KAAZ;AACD;AAHuC,GAA1C;AAKAxR,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,eAAjC,EAAkD;AAChDgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAACwJ,aAAZ;AACD;AAH+C,GAAlD;AAKAvE,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,OAAjC,EAA0C;AACxCgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAACme,KAAZ;AACD;AAHuC,GAA1C;AAKAlZ,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,cAAjC,EAAiD;AAC/CgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAACkS,YAAZ;AACD;AAH8C,GAAjD;AAKAjN,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,aAAjC,EAAgD;AAC9CgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAAC+0B,WAAZ;AACD;AAH6C,GAAhD;AAKA9vB,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,cAAjC,EAAiD;AAC/CgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAACs3B,YAAZ;AACD;AAH8C,GAAjD;AAKAryB,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,aAAjC,EAAgD;AAC9CgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAAC85B,WAAZ;AACD;AAH6C,GAAhD;AAKA70B,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,YAAjC,EAA+C;AAC7CgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAACsS,UAAZ;AACD;AAH4C,GAA/C;AAKArN,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,UAAjC,EAA6C;AAC3CgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAAC2kC,QAAZ;AACD;AAH0C,GAA7C;AAKA1/B,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,SAAjC,EAA4C;AAC1CgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAAC2f,OAAZ;AACD;AAHyC,GAA5C;AAKA3f,MAAI,CAACmB,IAAL,CAAUyP,UAAV,GAAuB5Q,IAAI,CAAC4Q,UAA5B;AACA3L,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,UAAjC,EAA6C;AAC3CgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAACgK,QAAZ;AACD,KAH0C;AAI3C5E,OAAG,EAAE,aAAUC,KAAV,EAAiB;AACpB,UAAI,CAACrF,IAAI,CAACw7C,OAAL,CAAan2C,KAAb,CAAL,EAA0B;AACxB,cAAM,IAAI/D,KAAJ,CAAU,6BAA6B+D,KAAvC,CAAN;AACD;;AACDrF,UAAI,CAACgK,QAAL,GAAgB3E,KAAhB;AACD;AAT0C,GAA7C;AAWArF,MAAI,CAAC27C,UAAL,CAAgBl2C,OAAhB,CAAwB,UAAUkgD,SAAV,EAAqB;AAC3C1gD,UAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,OAAOwkD,SAAxC,EAAmD;AACjDxgD,SAAG,EAAE,eAAY;AACf,eAAOnF,IAAI,CAAC07C,iBAAL,CAAuBiK,SAAvB,CAAP;AACD,OAHgD;AAIjDvgD,SAAG,EAAE,aAAUC,KAAV,EAAiB;AACpBrF,YAAI,CAAC2qC,MAAL,CAAYgb,SAAZ,IAAyB,EAAzB;AACA3lD,YAAI,CAAC07C,iBAAL,CAAuBiK,SAAvB,IAAoCtgD,KAApC;;AACA,YAAI,CAACA,KAAL,EAAY;AACV;AACD;;AACDrF,YAAI,CAACM,gBAAL,CAAsBqlD,SAAtB,EAAiCtgD,KAAjC;AACD;AAXgD,KAAnD;AAaD,GAdD;AAeAJ,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,WAAjC,EAA8C;AAC5CgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAAC62B,SAAZ;AACD,KAH2C;AAI5CzxB,OAAG,EAAE,aAAU0C,GAAV,EAAe;AAClB,UAAIxC,KAAK,CAACwC,GAAD,CAAT,EAAgB;AACd,cAAM,IAAI29C,SAAJ,CAAc,8CAAd,CAAN;AACD;;AACD,UAAIzlD,IAAI,CAAC85B,WAAL,CAAiBt0B,MAAjB,GAA0BsC,GAA9B,EAAmC;AACjC,cAAM,IAAI89C,UAAJ,CACJ,4DADI,CAAN;AAGD;;AACD5lD,UAAI,CAAC62B,SAAL,GAAiB/uB,GAAjB;AACD;AAd2C,GAA9C;AAgBA7C,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,cAAjC,EAAiD;AAC/CgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAAC0zB,YAAZ;AACD,KAH8C;AAI/CtuB,OAAG,EAAE,aAAU0C,GAAV,EAAe;AAClB,UAAIxC,KAAK,CAACwC,GAAD,CAAT,EAAgB;AACd,cAAM,IAAI29C,SAAJ,CAAc,8CAAd,CAAN;AACD;;AACD,UAAIzlD,IAAI,CAAC83C,gBAAL,GAAwBtyC,MAAxB,GAAiCsC,GAArC,EAA0C;AACxC,cAAM,IAAI89C,UAAJ,CACJ,+DADI,CAAN;AAGD;;AACD5lD,UAAI,CAAC0zB,YAAL,GAAoB5rB,GAApB;AACD;AAd8C,GAAjD;AAgBA7C,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,iBAAjC,EAAoD;AAClDgE,OAAG,EAAE,eAAY;AACf,aAAO;AACLjD,WAAG,EAAElC,IAAI,CAAC0jC,cADL;AAEL3+B,aAAK,EAAE/E,IAAI,CAACkgC,gBAFP;AAGLv7B,cAAM,EAAE3E,IAAI,CAAC2jC,iBAHR;AAIL3hC,YAAI,EAAEhC,IAAI,CAAC2/B;AAJN,OAAP;AAMD;AARiD,GAApD;AAUA16B,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,iBAAjC,EAAoD;AAClDgE,OAAG,EAAE,eAAY;AACf,aAAO;AACLjD,WAAG,EAAElC,IAAI,CAACyjC,cADL;AAEL1+B,aAAK,EAAE/E,IAAI,CAACmgC,gBAFP;AAGLx7B,cAAM,EAAE3E,IAAI,CAAC4jC,iBAHR;AAIL5hC,YAAI,EAAEhC,IAAI,CAACy/B;AAJN,OAAP;AAMD;AARiD,GAApD;AAUAx6B,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,UAAjC,EAA6C;AAC3CgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAACqT,MAAL,CAAYqD,IAAnB;AACD,KAH0C;AAI3CtR,OAAG,EAAE,aAAU0C,GAAV,EAAe;AAClB,UAAI,CAAC1G,KAAK,CAACC,OAAN,CAAcyG,GAAd,CAAL,EAAyB;AACvB,cAAM,IAAI29C,SAAJ,CAAc,yBAAd,CAAN;AACD;;AACD,UAAI,CAACzlD,IAAI,CAAC4f,YAAN,IAAsB9X,GAAG,CAACtC,MAAJ,GAAaxF,IAAI,CAAC4f,YAAL,CAAkBpa,MAAzD,EAAiE;AAC/D,cAAM,IAAIogD,UAAJ,CACJ,+DADI,CAAN;AAGD;;AACD5lD,UAAI,CAACqT,MAAL,CAAYqD,IAAZ,GAAmB5O,GAAnB;AACD;AAd0C,GAA7C;AAgBA7C,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,aAAjC,EAAgD;AAC9CgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAACqT,MAAL,CAAYC,OAAnB;AACD,KAH6C;AAI9ClO,OAAG,EAAE,aAAU0C,GAAV,EAAe;AAClB,UAAI,CAAC1G,KAAK,CAACC,OAAN,CAAcyG,GAAd,CAAL,EAAyB;AACvB,cAAM,IAAI29C,SAAJ,CAAc,yBAAd,CAAN;AACD;;AACD,UAAI39C,GAAG,CAACtC,MAAJ,GAAaxF,IAAI,CAACkU,SAAL,GAAiB1O,MAAlC,EAA0C;AACxC,cAAM,IAAIogD,UAAJ,CACJ,kEADI,CAAN;AAGD;;AACD5lD,UAAI,CAACqT,MAAL,CAAYC,OAAZ,GAAsBxL,GAAtB;AACD;AAd6C,GAAhD;AAgBA7C,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,iBAAjC,EAAoD;AAClDgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAAC6vC,kBAAL,EAAP;AACD;AAHiD,GAApD;AAKA5qC,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,cAAjC,EAAiD;AAC/CgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAACowC,eAAL,CAAqB,IAArB,CAAP;AACD;AAH8C,GAAjD;AAKAnrC,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,eAAjC,EAAkD;AAChDgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAACowC,eAAL,EAAP;AACD;AAH+C,GAAlD;AAKAnrC,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,eAAjC,EAAkD;AAChDgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAAC83C,gBAAL,GAAwB7mC,GAAxB,CAA4B,SAAS40C,WAAT,CAAqB1vC,GAArB,EAA0B;AAC3D,eAAOA,GAAP;AACD,OAFM,CAAP;AAGD;AAL+C,GAAlD;AAOAlR,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,oBAAjC,EAAuD;AACrDgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAAC46C,kBAAZ;AACD,KAHoD;AAIrDx1C,OAAG,EAAE,SAAS0gD,qBAAT,CAA+BzgD,KAA/B,EAAsC;AACzCrF,UAAI,CAAC46C,kBAAL,GAA0Bv1C,KAA1B;AACD;AANoD,GAAvD;AAQAJ,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,oBAAjC,EAAuD;AACrDgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAAC+4B,kBAAZ;AACD,KAHoD;AAIrD3zB,OAAG,EAAE,SAAS2gD,qBAAT,CAA+B1gD,KAA/B,EAAsC;AACzCrF,UAAI,CAAC+4B,kBAAL,GAA0B1zB,KAA1B;AACD;AANoD,GAAvD;AAQAJ,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,KAAjC,EAAwC;AACtCgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAAComB,GAAZ;AACD;AAHqC,GAAxC;AAKAnhB,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,QAAjC,EAA2C;AACzCgE,OAAG,EAAE,SAAS6gD,YAAT,GAAwB;AAC3B,aAAOhmD,IAAI,CAACkU,SAAL,EAAP;AACD,KAHwC;AAIzC9O,OAAG,EAAE,SAAS6gD,YAAT,CAAsB5gD,KAAtB,EAA6B;AAChC,UAAIA,KAAK,KAAKzD,SAAd,EAAyB;AACvB;AACA5B,YAAI,CAACsI,MAAL,GAAc1G,SAAd;AACA5B,YAAI,CAACm7C,UAAL,GAAkBv5C,SAAlB;AACA5B,YAAI,CAACwE,aAAL,CAAmB,eAAnB,EAAoC;AAAE8D,gBAAM,EAAE1G;AAAV,SAApC;AACA;AACD;;AACD,UAAI,CAACR,KAAK,CAACC,OAAN,CAAcgE,KAAd,CAAD,IAAyB,QAAOA,KAAK,CAAC,CAAD,CAAZ,MAAoB,QAAjD,EAA2D;AACzD,cAAM,IAAI/D,KAAJ,CAAU,qCAAV,CAAN;AACD;;AACD,UAAI+D,KAAK,CAAC,CAAD,CAAL,CAAS4E,IAAT,KAAkBrI,SAAtB,EAAiC;AAC/B,cAAM,IAAIN,KAAJ,CACJ,qEADI,CAAN;AAGD;;AACDtB,UAAI,CAACsI,MAAL,GAAcjD,KAAK,CAAC4L,GAAN,CAAU,SAASi1C,gBAAT,CAA0BvwC,MAA1B,EAAkCjQ,KAAlC,EAAyC;AAC/DiQ,cAAM,CAACnH,KAAP,GAAemH,MAAM,CAACnH,KAAP,IAAgBxO,IAAI,CAAC6B,KAAL,CAAWmV,SAA1C;AACArB,cAAM,CAACxO,MAAP,GAAgBwO,MAAM,CAACxO,MAAP,IAAiBnH,IAAI,CAACmH,MAAL,CAAYwO,MAAM,CAAC9K,IAAnB,CAAjC;AACA8K,cAAM,CAAC9K,IAAP,GAAc8K,MAAM,CAAC9K,IAAP,IAAe,QAA7B;AACA8K,cAAM,CAACjQ,KAAP,GAAeA,KAAf;AACAiQ,cAAM,CAAC1C,WAAP,GAAqBvN,KAArB;AACAiQ,cAAM,CAACnD,QAAP,GAAkB,CAAC,CAAnB;AACA,eAAOmD,MAAP;AACD,OARa,CAAd;AASA3V,UAAI,CAACm7C,UAAL,GAAkBv5C,SAAlB;AACA5B,UAAI,CAACigB,gBAAL;AACAjgB,UAAI,CAAC6W,kBAAL;AACA7W,UAAI,CAACy/C,qBAAL;;AACA,UACEz/C,IAAI,CAAC8W,cAAL,IACA,QAAO9W,IAAI,CAAC8W,cAAL,CAAoBgmC,UAA3B,MAA0C,QAF5C,EAGE;AACA98C,YAAI,CAACsI,MAAL,CAAY7C,OAAZ,CAAoB,SAAS0gD,oBAAT,CAA8BxwC,MAA9B,EAAsCjQ,KAAtC,EAA6C;AAC/D,cACE1F,IAAI,CAAC8W,cAAL,IACA9W,IAAI,CAAC8W,cAAL,CAAoBgmC,UAApB,CAA+BnnC,MAAM,CAAC1L,IAAtC,MAAgDrI,SAFlD,EAGE;AACA+T,kBAAM,CAACE,MAAP,GAAgB,CAAC7V,IAAI,CAAC8W,cAAL,CAAoBgmC,UAApB,CAA+BnnC,MAAM,CAAC1L,IAAtC,CAAjB;AACD;AACF,SAPD;AAQD;;AACDjK,UAAI,CAACiI,MAAL,CAAY,IAAZ;AACAjI,UAAI,CAACwE,aAAL,CAAmB,eAAnB,EAAoC;AAAE8D,cAAM,EAAEtI,IAAI,CAACsI;AAAf,OAApC;AACD;AAhDwC,GAA3C;AAkDA;AACF;AACA;AACA;AACA;AACA;;AACEtI,MAAI,CAACmB,IAAL,CAAUilD,QAAV,GAAqB,YAAY;AAC/B,WAAOnhD,MAAM,CAAC8L,IAAP,CAAY/Q,IAAI,CAACw7C,OAAjB,CAAP;AACD,GAFD;;AAGAx7C,MAAI,CAACqmD,cAAL,GAAsB,UAAUn+C,IAAV,EAAgB;AACpC,QAAI,CAACA,IAAD,IAAS,OAAOW,IAAP,CAAYX,IAAZ,CAAb,EAAgC;AAC9B,aAAO,EAAP;AACD;;AACD,QAAI;AACFA,UAAI,GAAGE,IAAI,CAACC,KAAL,CAAWH,IAAX,CAAP;AACD,KAFD,CAEE,OAAOtC,CAAP,EAAU;AACV4U,aAAO,CAACC,IAAR,CACEnZ,KAAK,CACH,oEACEsE,CAAC,CAACu8C,OADJ,GAEE,gEAFF,GAGE,2DAJC,CADP;AAQD;;AACD,WAAOj6C,IAAP;AACD,GAjBD;;AAkBAlI,MAAI,CAACw7C,OAAL,CAAa,oCAAb,IAAqD,UACnDtzC,IADmD,EAEnDo+C,QAFmD,EAGnD;AACAtmD,QAAI,CAACw7C,OAAL,CAAa,+BAAb,EACEx7C,IAAI,CAACqmD,cAAL,CAAoBn+C,IAApB,CADF,EAEE,UAAUA,IAAV,EAAgBI,MAAhB,EAAwB;AACtB,aAAOg+C,QAAQ,CAACp+C,IAAD,EAAOI,MAAP,CAAf;AACD,KAJH;AAMD,GAVD;;AAWAtI,MAAI,CAACw7C,OAAL,CAAa,+BAAb,IAAgD,UAAUtzC,IAAV,EAAgBo+C,QAAhB,EAA0B;AACxE,WAAOA,QAAQ,CAACp+C,IAAD,CAAf;AACD,GAFD;;AAGAlI,MAAI,CAACmB,IAAL,CAAUq6C,OAAV,GAAoBx7C,IAAI,CAACw7C,OAAzB,CArmEmC,CAsmEnC;AACA;;AACAx7C,MAAI,CAACumD,GAAL,GAAW,UAAUr+C,IAAV,EAAgBo+C,QAAhB,EAA0B;AACnC,QAAI,CAACtmD,IAAI,CAACmB,IAAL,CAAUq6C,OAAV,CAAkBx7C,IAAI,CAACgK,QAAvB,CAAL,EAAuC;AACrC,YAAM,IAAI1I,KAAJ,CAAU,wBAAV,CAAN;AACD;;AACDtB,QAAI,CAACmB,IAAL,CAAUq6C,OAAV,CAAkBx7C,IAAI,CAACgK,QAAvB,EAAiC9B,IAAjC,EAAuC,UAAUA,IAAV,EAAgBI,MAAhB,EAAwB;AAC7D;AACAtI,UAAI,CAAC4f,YAAL,GAAoB1X,IAApB;AACAlI,UAAI,CAACmQ,QAAL,GAAgB/O,KAAK,CAAC6Y,IAAN,CAAWja,IAAI,CAAC4f,YAAhB,CAAhB;;AAEA,UAAIxe,KAAK,CAACC,OAAN,CAAciH,MAAd,CAAJ,EAA2B;AACzBtI,YAAI,CAACsI,MAAL,GAAcA,MAAd;AACD,OAP4D,CAQ7D;;;AACA,UAAItI,IAAI,CAACkJ,UAAL,CAAgBs9C,kBAApB,EAAwC;AACtCxmD,YAAI,CAACsI,MAAL,GAActI,IAAI,CAAC6jD,iBAAL,CAAuB37C,IAAvB,CAAd;AACD;;AACD,UAAI,CAAClI,IAAI,CAACsI,MAAV,EAAkB;AAChBtI,YAAI,CAACm7C,UAAL,GAAkBn7C,IAAI,CAAC6jD,iBAAL,CAAuB37C,IAAvB,CAAlB;AACD;;AACD,UAAIlI,IAAI,CAACkU,SAAL,EAAJ,EAAsB;AACpBlU,YAAI,CAAC6W,kBAAL;AACD,OAjB4D,CAkB7D;;;AACA7W,UAAI,CAACwY,OAAL,GAnB6D,CAoB7D;;AACA,UAAI,CAACxY,IAAI,CAACsI,MAAN,IAAgB,CAACtI,IAAI,CAAC4f,YAAL,IAAqB,EAAtB,EAA0Bpa,MAA1B,KAAqC,CAAzD,EAA4D;AAC1DxF,YAAI,CAACm7C,UAAL,GAAkB,CAAC;AAAElxC,cAAI,EAAE;AAAR,SAAD,CAAlB;AACD;;AACDjK,UAAI,CAACq2C,iBAAL,CAAuB,YAAvB,EAAqC,IAArC;;AACA,UACGr2C,IAAI,CAACm7C,UAAL,IAAmB,CAACn7C,IAAI,CAACsI,MAA1B,IACAtI,IAAI,CAACkJ,UAAL,CAAgBs9C,kBAFlB,EAGE;AACAxmD,YAAI,CAAC6W,kBAAL;AACA7W,YAAI,CAACwE,aAAL,CAAmB,eAAnB,EAAoC;AAAE8D,gBAAM,EAAEtI,IAAI,CAACm7C;AAAf,SAApC;AACD;;AACDmL,cAAQ;AACT,KAjCD;AAkCD,GAtCD;;AAuCArhD,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,UAAjC,EAA6C;AAC3CgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAACmQ,QAAZ;AACD;AAH0C,GAA7C;AAKAlL,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,WAAjC,EAA8C;AAC5CgE,OAAG,EAAE,eAAY;AACf,aAAOnF,IAAI,CAAC4f,YAAZ;AACD;AAH2C,GAA9C;AAKA3a,QAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACmB,IAA3B,EAAiC,MAAjC,EAAyC;AACvCgE,OAAG,EAAE,SAASshD,UAAT,GAAsB;AACzB,aAAOzmD,IAAI,CAAC4f,YAAZ;AACD,KAHsC;AAIvCxa,OAAG,EAAE,SAASshD,UAAT,CAAoBrhD,KAApB,EAA2B;AAC9BrF,UAAI,CAACumD,GAAL,CAASlhD,KAAT,EAAgB,YAAY;AAC1BrF,YAAI,CAAC2f,OAAL,GAAe,EAAf;AACA3f,YAAI,CAACigB,gBAAL;;AACA,YACEjgB,IAAI,CAACkJ,UAAL,CAAgBy9C,iBAAhB,IACA3mD,IAAI,CAAC4f,YAAL,CAAkBpa,MAAlB,GAA2B,CAD3B,IAEAxF,IAAI,CAAC8W,cAAL,KAAwBlV,SAH1B,EAIE;AACA5B,cAAI,CAACs2C,QAAL;AACD,SATyB,CAU1B;;;AACAt2C,YAAI,CAACq2C,iBAAL,CAAuB,YAAvB,EAAqC,IAArC;AACAr2C,YAAI,CAAC4W,eAAL;AACA5W,YAAI,CAACy/C,qBAAL;AACAz/C,YAAI,CAACwE,aAAL,CAAmB,aAAnB,EAAkC;AAAE0D,cAAI,EAAElI,IAAI,CAAC4f;AAAb,SAAlC;AACA5f,YAAI,CAAC4gD,oBAAL;AACA5gD,YAAI,CAACiI,MAAL,CAAY,IAAZ;AACD,OAjBD;AAkBD;AAvBsC,GAAzC;;AAyBAjI,MAAI,CAACuiD,aAAL,GAAqB,YAAY;AAC/B,QAAIqE,OAAO,GAAG,CAAd;AAAA,QACEC,MAAM,GAAG,CADX;AAAA,QAEErkD,SAAS,GAAG,CAFd;AAAA,QAGED,UAAU,GAAG,CAHf;AAAA,QAIEsK,YAAY,GAAG,CAJjB;AAAA,QAKE8pB,WAAW,GAAG,CALhB;AAAA,QAMEI,eAAe,GAAG,EANpB;AAAA,QAOEL,cAAc,GAAG,EAPnB;;AAQA,aAASowB,YAAT,CAAsBzhD,KAAtB,EAA6B0hD,kBAA7B,EAAiD;AAC/C,UAAIzhD,KAAK,CAACD,KAAD,CAAT,EAAkB;AAChB,cAAM,IAAI/D,KAAJ,CAAU,kCAAV,CAAN;AACD;;AACD,UAAI+D,KAAK,GAAG,CAAZ,EAAe;AACbA,aAAK,GAAG,CAAR;AACD;;AACD,UAAIA,KAAK,GAAGwH,YAAZ,EAA0B;AACxBxH,aAAK,GAAGwH,YAAR;AACD;;AACD,UAAIA,YAAY,GAAG,CAAnB,EAAsB;AACpBxH,aAAK,GAAG,CAAR;AACD;;AACD7C,eAAS,GAAG6C,KAAZ;;AACA,UAAI,CAAC0hD,kBAAL,EAAyB;AACvB/mD,YAAI,CAAC8tC,MAAL;AACD;;AACD,UAAI9tC,IAAI,CAACQ,MAAT,EAAiB;AACfR,YAAI,CAAC8F,aAAL;AACD;AACF;;AACD,aAASkhD,aAAT,CAAuB3hD,KAAvB,EAA8B0hD,kBAA9B,EAAkD;AAChD,UAAIzhD,KAAK,CAACD,KAAD,CAAT,EAAkB;AAChB,cAAM,IAAI/D,KAAJ,CAAU,mCAAV,CAAN;AACD;;AACD,UAAI+D,KAAK,GAAG,CAAZ,EAAe;AACbA,aAAK,GAAG,CAAR;AACD;;AACD,UAAIA,KAAK,GAAGsxB,WAAZ,EAAyB;AACvBtxB,aAAK,GAAGsxB,WAAR;AACD;;AACD,UAAIA,WAAW,GAAG,CAAlB,EAAqB;AACnBtxB,aAAK,GAAG,CAAR;AACD;;AACD9C,gBAAU,GAAG8C,KAAb;;AACA,UAAI,CAAC0hD,kBAAL,EAAyB;AACvB/mD,YAAI,CAAC8tC,MAAL;AACD;;AACD,UAAI9tC,IAAI,CAACQ,MAAT,EAAiB;AACfR,YAAI,CAAC8F,aAAL;AACD;AACF;;AACD9F,QAAI,CAACsC,SAAL,CAAeinB,QAAf,GAA0B,YAAY;AACpC,aACE,eACAoN,WAAW,CAACsR,OAAZ,CAAoB,CAApB,CADA,GAEA,cAFA,GAGAp7B,YAAY,CAACo7B,OAAb,CAAqB,CAArB,CAHA,GAIA,YAJA,GAKA1lC,UAAU,CAAC0lC,OAAX,CAAmB,CAAnB,CALA,GAMA,WANA,GAOAzlC,SAAS,CAACylC,OAAV,CAAkB,CAAlB,CAPA,GAQA,kBARA,GASAjoC,IAAI,CAACsC,SAAL,CAAe8qC,aAAf,CAA6BnF,OAA7B,CAAqC,CAArC,CATA,GAUA,mBAVA,GAWAjoC,IAAI,CAACsC,SAAL,CAAe+qC,cAAf,CAA8BpF,OAA9B,CAAsC,CAAtC,CAXA,GAYA,GAbF;AAeD,KAhBD;;AAiBAjoC,QAAI,CAACsC,SAAL,CAAeo0C,QAAf,GAA0B,UAAU30C,CAAV,EAAaE,CAAb,EAAgBglD,gBAAhB,EAAkC;AAC1DD,mBAAa,CAACjlD,CAAD,EAAI,IAAJ,CAAb;AACA+kD,kBAAY,CAAC7kD,CAAD,EAAIglD,gBAAJ,CAAZ;AACD,KAHD;;AAIAhiD,UAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACsC,SAA3B,EAAsC,iBAAtC,EAAyD;AACvD6C,SAAG,EAAE,eAAY;AACf,eAAO4xB,eAAP;AACD,OAHsD;AAIvD3xB,SAAG,EAAE,aAAUC,KAAV,EAAiB;AACpB0xB,uBAAe,GAAG1xB,KAAlB;AACD;AANsD,KAAzD;AAQAJ,UAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACsC,SAA3B,EAAsC,gBAAtC,EAAwD;AACtD6C,SAAG,EAAE,eAAY;AACf,eAAOuxB,cAAP;AACD,OAHqD;AAItDtxB,SAAG,EAAE,aAAUC,KAAV,EAAiB;AACpBqxB,sBAAc,GAAGrxB,KAAjB;AACD;AANqD,KAAxD;AAQAJ,UAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACsC,SAA3B,EAAsC,QAAtC,EAAgD;AAC9C6C,SAAG,EAAE,eAAY;AACf,eAAOyhD,OAAP;AACD,OAH6C;AAI9CxhD,SAAG,EAAE,aAAUC,KAAV,EAAiB;AACpBuhD,eAAO,GAAGvhD,KAAV;AACD;AAN6C,KAAhD;AAQAJ,UAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACsC,SAA3B,EAAsC,OAAtC,EAA+C;AAC7C6C,SAAG,EAAE,eAAY;AACf,eAAO0hD,MAAP;AACD,OAH4C;AAI7CzhD,SAAG,EAAE,aAAUC,KAAV,EAAiB;AACpBwhD,cAAM,GAAGxhD,KAAT;AACD;AAN4C,KAA/C;AAQAJ,UAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACsC,SAA3B,EAAsC,WAAtC,EAAmD;AACjD6C,SAAG,EAAE,eAAY;AACf,eAAO3C,SAAP;AACD,OAHgD;AAIjD4C,SAAG,EAAE0hD;AAJ4C,KAAnD;AAMA7hD,UAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACsC,SAA3B,EAAsC,YAAtC,EAAoD;AAClD6C,SAAG,EAAE,eAAY;AACf,eAAO5C,UAAP;AACD,OAHiD;AAIlD6C,SAAG,EAAE4hD;AAJ6C,KAApD;AAMA/hD,UAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACsC,SAA3B,EAAsC,cAAtC,EAAsD;AACpD6C,SAAG,EAAE,eAAY;AACf,eAAO0H,YAAP;AACD,OAHmD;AAIpDzH,SAAG,EAAE,aAAUC,KAAV,EAAiB;AACpB,YAAI7C,SAAS,GAAG6C,KAAhB,EAAuB;AACrB7C,mBAAS,GAAG4e,IAAI,CAACO,GAAL,CAAStc,KAAT,EAAgB,CAAhB,CAAZ;AACD;;AACDwH,oBAAY,GAAGxH,KAAf;AACD;AATmD,KAAtD;AAWAJ,UAAM,CAACC,cAAP,CAAsBlF,IAAI,CAACsC,SAA3B,EAAsC,aAAtC,EAAqD;AACnD6C,SAAG,EAAE,eAAY;AACf,eAAOwxB,WAAP;AACD,OAHkD;AAInDvxB,SAAG,EAAE,aAAUC,KAAV,EAAiB;AACpB,YAAI9C,UAAU,GAAG8C,KAAjB,EAAwB;AACtB9C,oBAAU,GAAG6e,IAAI,CAACO,GAAL,CAAStc,KAAT,EAAgB,CAAhB,CAAb;AACD;;AACDsxB,mBAAW,GAAGtxB,KAAd;AACD;AATkD,KAArD;AAWD,GA1ID;;AA2IA;AACD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACp0ED;;AACA;AACa;;;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,IAAI6hD,YAAY,GAAGjhD,mDAAS,EAA5B;AAEA,IAAIkhD,OAAO,GAAG,CACZjgD,8CADY,EAEZqO,0CAFY,EAGZo1B,4CAHY,EAIZP,2CAJY,EAKZjpC,0CALY,EAMZ6K,iDANY,EAOZxL,4CAPY,EAQZ4mD,yCARY,EASZC,mDATY,CAAd;;AAYA,SAASC,IAAT,CAAcna,IAAd,EAAoB;AAClBA,MAAI,GAAGA,IAAI,IAAI,EAAf;AACA,MAAIntC,IAAI,GAAG,EAAX;AACAA,MAAI,CAACsH,WAAL,GAAmB6lC,IAAI,CAAClnC,SAAL,KAAmBrE,SAAtC;AACA5B,MAAI,CAACyb,WAAL,GACE0xB,IAAI,CAACjqC,UAAL,IACA,8BAA8B2F,IAA9B,CAAmCskC,IAAI,CAACjqC,UAAL,CAAgBoZ,QAAnD,CAFF;;AAGA,MAAItc,IAAI,CAACyb,WAAT,EAAsB;AACpBzb,QAAI,CAACmB,IAAL,GAAY,EAAZ;AACD,GAFD,MAEO;AACLnB,QAAI,CAACmB,IAAL,GAAYnB,IAAI,CAACsH,WAAL,GACRigD,IAAI,CAAC,gDAAD,CADI,GAERxmD,QAAQ,CAACC,aAAT,CAAuB,QAAvB,CAFJ;AAGD;;AACDhB,MAAI,CAACmtC,IAAL,GAAYA,IAAZ;AACAntC,MAAI,CAACmB,IAAL,CAAUgsC,IAAV,GAAiBA,IAAjB;AACAntC,MAAI,CAACoH,mBAAL,GAA2B8/C,YAAY,CAAC9/C,mBAAxC;AACApH,MAAI,CAACmG,iBAAL,GAAyB+gD,YAAY,CAAC/gD,iBAAtC;AACAnG,MAAI,CAACkG,mBAAL,GAA2BghD,YAAY,CAAChhD,mBAAxC;;AACAlG,MAAI,CAACk7B,UAAL,GAAkB,SAAStf,IAAT,CAAcuxB,IAAd,EAAoB;AACpCA,QAAI,CAAClnC,SAAL,GAAiB,KAAjB;AACA,WAAO,IAAIqhD,IAAJ,CAASna,IAAT,CAAP;AACD,GAHD;;AAKAga,SAAO,CAAC1hD,OAAR,CAAgB,UAAU+hD,MAAV,EAAkB;AAChCA,UAAM,CAACxnD,IAAD,CAAN;AACD,GAFD;;AAIA,MAAIA,IAAI,CAACyb,WAAT,EAAsB;AACpBzb,QAAI,CAACqhD,UAAL,GAAkBlU,IAAI,CAACjqC,UAAL,CAAgBm+C,UAAlC;AACArhD,QAAI,CAACkD,UAAL,GAAkBiqC,IAAI,CAACjqC,UAAvB;AACD,GAHD,MAGO;AACLlD,QAAI,CAACqhD,UAAL,GAAkBrhD,IAAI,CAACmB,IAAL,CAAUsmD,YAAV,CAAuB;AAAEt4B,UAAI,EAAE;AAAR,KAAvB,CAAlB;AACAnvB,QAAI,CAACkD,UAAL,GAAkBlD,IAAI,CAACqhD,UAAvB;AACD;;AACDrhD,MAAI,CAACuB,IAAL;AACA,SAAOvB,IAAI,CAACmB,IAAZ;AACD;;AACD,IAAIyD,MAAM,CAAC8iD,WAAX,EAAwB;AACtBJ,MAAI,CAAC9gD,SAAL,GAAiBvB,MAAM,CAAC0iD,MAAP,CAAc/iD,MAAM,CAAC8iD,WAAP,CAAmBlhD,SAAjC,CAAjB;AACD,C,CACD;;;AACA,IAAI5B,MAAM,CAACgjD,cAAX,EAA2B;AACzBN,MAAI,CAACO,kBAAL,GAA0BX,YAAY,CAACl+C,uBAAb,EAA1B;AACAs+C,MAAI,CAAC9gD,SAAL,CAAe6C,oBAAf,GAAsC69C,YAAY,CAAC79C,oBAAnD;AACAi+C,MAAI,CAAC9gD,SAAL,CAAemD,wBAAf,GACEu9C,YAAY,CAACv9C,wBADf;AAEA29C,MAAI,CAAC9gD,SAAL,CAAe+C,iBAAf,GAAmC29C,YAAY,CAAC39C,iBAAhD;AACA+9C,MAAI,CAAC9gD,SAAL,CAAekD,eAAf,GAAiCw9C,YAAY,CAACx9C,eAA9C;AACA9E,QAAM,CAACgjD,cAAP,CAAsBE,MAAtB,CAA6B,iBAA7B,EAAgDR,IAAhD;AACD,C,CAED;;;AACA,IACE1iD,MAAM,IACN,CAACA,MAAM,CAACmjD,cADR,IAEA,CAACnjD,MAAM,CAACojD,OAFR,IAGA;AACA,CAACpjD,MAAM,CAACqjD,cALV,EAME;AACArjD,QAAM,CAACmjD,cAAP,GAAwB,UAAU5a,IAAV,EAAgB;AACtC,WAAO,IAAIma,IAAJ,CAASna,IAAT,CAAP;AACD,GAFD;AAGD,C,CAED;;;AACe,SAAS4a,cAAT,CAAwB5a,IAAxB,EAA8B;AAC3CA,MAAI,GAAGA,IAAI,IAAI,EAAf;AACA,MAAInmC,CAAJ;AAAA,MACEkhD,KAAK,GAAG,CACN,OADM,EAEN,YAFM,EAGN,SAHM,EAIN,SAJM,EAKN,oBALM,EAMN,oBANM,EAON,MAPM,EAQN,QARM,CADV;;AAWA,MAAItjD,MAAM,CAACgjD,cAAX,EAA2B;AACzB5gD,KAAC,GAAGjG,QAAQ,CAACC,aAAT,CAAuB,iBAAvB,CAAJ;AACAiE,UAAM,CAAC8L,IAAP,CAAYo8B,IAAZ,EAAkB1nC,OAAlB,CAA0B,UAAU0iD,MAAV,EAAkB;AAC1C;AACA,UAAIA,MAAM,KAAK,MAAf,EAAuB;AACrB;AACD;;AACD,UAAIA,MAAM,KAAK,YAAf,EAA6B;AAC3B;AACD,OAPyC,CAQ1C;;;AACA,UAAID,KAAK,CAAC/7C,OAAN,CAAcg8C,MAAd,MAA0B,CAAC,CAA/B,EAAkC;AAChCD,aAAK,CAACziD,OAAN,CAAc,UAAU2iD,IAAV,EAAgB;AAC5B,cAAIjb,IAAI,CAACib,IAAD,CAAJ,KAAexmD,SAAf,IAA4BwmD,IAAI,KAAKD,MAAzC,EAAiD;AAC/C;AACD;;AACD,cAAI,CAAC,YAAD,EAAe,SAAf,EAA0B,SAA1B,EAAqCh8C,OAArC,CAA6Cg8C,MAA7C,MAAyD,CAAC,CAA9D,EAAiE;AAC/D,gBAAI,QAAOhb,IAAI,CAACib,IAAD,CAAX,MAAsB,QAAtB,IAAkCjb,IAAI,CAACib,IAAD,CAAJ,KAAe,IAArD,EAA2D;AACzDnjD,oBAAM,CAAC8L,IAAP,CAAYo8B,IAAI,CAACib,IAAD,CAAhB,EAAwB3iD,OAAxB,CAAgC,UAAU4iD,IAAV,EAAgB;AAC9CrhD,iBAAC,CAACohD,IAAD,CAAD,CAAQC,IAAR,IAAgBlb,IAAI,CAACib,IAAD,CAAJ,CAAWC,IAAX,CAAhB;AACD,eAFD;AAGD;AACF,WAND,MAMO;AACLrhD,aAAC,CAACohD,IAAD,CAAD,GAAUjb,IAAI,CAACib,IAAD,CAAd;AACD;AACF,SAbD;AAcA;AACD,OAzByC,CA0B1C;;;AACAphD,OAAC,CAACkC,UAAF,CAAai/C,MAAb,IAAuBhb,IAAI,CAACgb,MAAD,CAA3B;AACD,KA5BD;;AA6BA,QAAIhb,IAAI,CAACjlC,IAAT,EAAe;AACblB,OAAC,CAACkB,IAAF,GAASilC,IAAI,CAACjlC,IAAd;AACD,KAjCwB,CAkCzB;;;AACA,QAAIilC,IAAI,CAACjqC,UAAT,EAAqB;AACnBiqC,UAAI,CAACjqC,UAAL,CAAgBJ,WAAhB,CAA4BkE,CAA5B;AACD;;AACD,WAAOA,CAAP;AACD;;AACDmmC,MAAI,CAAClnC,SAAL,GAAiB,KAAjB;AACAe,GAAC,GAAG,IAAIsgD,IAAJ,CAASna,IAAT,CAAJ;;AACA,MAAIA,IAAI,CAACjqC,UAAL,IAAmBiqC,IAAI,CAACjqC,UAAL,CAAgBJ,WAAvC,EAAoD;AAClDqqC,QAAI,CAACjqC,UAAL,CAAgBJ,WAAhB,CAA4BkE,CAA5B;AACD;;AACD,SAAOA,CAAP;AACD,C;;;;;;;;;;;;;;;;;;;;AC1JD;;AACA;AACa;;;;;;;;AAEb;AAEA,6BAAe,oCAAUhH,IAAV,EAAgB;AAC7B;AACF;AACA;AACA;AACA;AACA;AACA;AACEA,MAAI,CAAC2kD,cAAL,GAAsB,UAAUj8C,CAAV,EAAa;AACjC,QAAI4/C,IAAI,GAAG,IAAIC,UAAJ,CAAe,CAAf,CAAX;AAAA,QACEC,IAAI,GAAG,IAAID,UAAJ,CAAe,CAAf,CADT;AAAA,QAEEjQ,GAAG,GAAGkQ,IAAI,GAAGF,IAAP,GAAc,CAFtB;AAAA,QAGE7mD,CAAC,GAAG,EAHN;;AAIA,WAAOiH,CAAC,IAAI,CAAZ,EAAe;AACbjH,OAAC,GAAG6O,MAAM,CAACm4C,YAAP,CAAqB//C,CAAC,GAAG4vC,GAAL,GAAYgQ,IAAhC,IAAwC7mD,CAA5C;AACAiH,OAAC,GAAG0Y,IAAI,CAAC4sB,KAAL,CAAWtlC,CAAC,GAAG4vC,GAAf,IAAsB,CAA1B;AACD;;AACD,WAAO72C,CAAP;AACD,GAVD;AAWA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEzB,MAAI,CAACkkD,YAAL,GAAoB,UAAUl1C,CAAV,EAAatJ,KAAb,EAAoB;AACtC,QAAIjE,CAAC,GAAGzB,IAAI,CAACkU,SAAL,EAAR;;AACA,QAAIzS,CAAC,CAAC+D,MAAF,GAAWE,KAAf,EAAsB;AACpB,YAAM,IAAIpE,KAAJ,CAAU,2CAAV,CAAN;AACD;;AACDtB,QAAI,CAAC8+C,cAAL,CAAoB9vC,CAApB,EAAuBvN,CAAvB;AACAA,KAAC,CAACyK,MAAF,CAASxG,KAAT,EAAgB,CAAhB,EAAmBsJ,CAAnB;AAEAhP,QAAI,CAAC4f,YAAL,CAAkBna,OAAlB,CAA0B,UAAU2K,GAAV,EAAeoC,QAAf,EAAyB;AACjDxS,UAAI,CAACk9C,iBAAL,CAAuB9sC,GAAvB,EAA4BpB,CAA5B,EAA+BwD,QAA/B;AACD,KAFD;AAGAxS,QAAI,CAACmB,IAAL,CAAUmH,MAAV,GAAmB7G,CAAnB;AAEAzB,QAAI,CAACwY,OAAL;AACD,GAdD;AAeA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACExY,MAAI,CAACmkD,YAAL,GAAoB,UAAUz+C,KAAV,EAAiB;AACnC,QAAI4C,MAAM,GAAGtI,IAAI,CAACkU,SAAL,EAAb,CADmC,CAGnC;;AACAlU,QAAI,CAAC4f,YAAL,CAAkBna,OAAlB,CAA0B,UAAU2K,GAAV,EAAe;AACvC,aAAOA,GAAG,CAAC9H,MAAM,CAAC5C,KAAD,CAAN,CAAcuE,IAAf,CAAV;AACD,KAFD;AAIA3B,UAAM,CAAC4D,MAAP,CAAcxG,KAAd,EAAqB,CAArB;AACA1F,QAAI,CAACmB,IAAL,CAAUmH,MAAV,GAAmBA,MAAnB;AAEAtI,QAAI,CAACwY,OAAL;AACD,GAZD;AAaA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACExY,MAAI,CAACokD,SAAL,GAAiB,UAAUp1C,CAAV,EAAa;AAC5B,QAAIvN,CAAC,GAAGzB,IAAI,CAACkU,SAAL,EAAR;AACAlU,QAAI,CAAC8+C,cAAL,CAAoB9vC,CAApB,EAAuBvN,CAAvB;AACAA,KAAC,CAAC2H,IAAF,CAAO4F,CAAP;AACAhP,QAAI,CAAC4f,YAAL,CAAkBna,OAAlB,CAA0B,UAAU2K,GAAV,EAAeoC,QAAf,EAAyB;AACjDxS,UAAI,CAACk9C,iBAAL,CAAuB9sC,GAAvB,EAA4BpB,CAA5B,EAA+BwD,QAA/B;AACD,KAFD;AAGAxS,QAAI,CAACmB,IAAL,CAAUmH,MAAV,GAAmB7G,CAAnB;AAEAzB,QAAI,CAACwY,OAAL;AACD,GAVD;AAWA;AACF;AACA;AACA;AACA;AACA;AACA;;;AACExY,MAAI,CAACikD,SAAL,GAAiB,UAAUv+C,KAAV,EAAiB;AAChC1F,QAAI,CAAC4f,YAAL,CAAkB1T,MAAlB,CAAyBxG,KAAzB,EAAgC,CAAhC;AACA1F,QAAI,CAACwR,SAAL;AACAxR,QAAI,CAACiI,MAAL,CAAY,IAAZ;AACD,GAJD;AAKA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEjI,MAAI,CAACgkD,SAAL,GAAiB,UAAUtuC,CAAV,EAAahQ,KAAb,EAAoB;AACnC,QAAI1F,IAAI,CAAC4f,YAAL,CAAkBpa,MAAlB,GAA2BE,KAA/B,EAAsC;AACpC,YAAM,IAAIpE,KAAJ,CAAU,4CAAV,CAAN;AACD;;AACDtB,QAAI,CAAC4f,YAAL,CAAkB1T,MAAlB,CAAyBxG,KAAzB,EAAgC,CAAhC,EAAmCgQ,CAAnC;AACA1V,QAAI,CAACkU,SAAL,GAAiBzO,OAAjB,CAAyB,UAAUuJ,CAAV,EAAa;AACpC,UAAI0G,CAAC,CAAC1G,CAAC,CAAC/E,IAAH,CAAD,KAAcrI,SAAlB,EAA6B;AAC3B5B,YAAI,CAACk9C,iBAAL,CAAuBl9C,IAAI,CAAC4f,YAAL,CAAkBla,KAAlB,CAAvB,EAAiDsJ,CAAjD,EAAoDtJ,KAApD;AACD;AACF,KAJD,EALmC,CAWnC;;AACA1F,QAAI,CAACwR,SAAL;AAEAxR,QAAI,CAACiI,MAAL,CAAY,IAAZ;AACD,GAfD;AAgBA;AACF;AACA;AACA;AACA;AACA;AACA;;;AACEjI,MAAI,CAACggB,MAAL,GAAc,UAAUtK,CAAV,EAAa;AACzB1V,QAAI,CAAC4f,YAAL,CAAkBxW,IAAlB,CAAuBsM,CAAvB;AACA1V,QAAI,CAACkU,SAAL,GAAiBzO,OAAjB,CAAyB,UAAUuJ,CAAV,EAAa;AACpC,UAAI0G,CAAC,CAAC1G,CAAC,CAAC/E,IAAH,CAAD,KAAcrI,SAAlB,EAA6B;AAC3B5B,YAAI,CAACk9C,iBAAL,CACEl9C,IAAI,CAAC4f,YAAL,CAAkB5f,IAAI,CAAC4f,YAAL,CAAkBpa,MAAlB,GAA2B,CAA7C,CADF,EAEEwJ,CAFF,EAGEhP,IAAI,CAAC4f,YAAL,CAAkBpa,MAAlB,GAA2B,CAH7B;AAKD;AACF,KARD,EAFyB,CAYzB;;AACAxF,QAAI,CAACwR,SAAL;AAEAxR,QAAI,CAACiI,MAAL,CAAY,IAAZ;AACD,GAhBD;AAiBA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEjI,MAAI,CAACqkD,YAAL,GAAoB,UAAU7xC,QAAV,EAAoBrQ,MAApB,EAA4B;AAC9CnC,QAAI,CAACyW,KAAL,CAAWC,IAAX,CAAgBlE,QAAhB,IAA4BrQ,MAA5B;AACAnC,QAAI,CAACuV,IAAL,CAAU,IAAV;AACD,GAHD;AAIA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEvV,MAAI,CAACskD,cAAL,GAAsB,UAAUtiB,QAAV,EAAoBxzB,KAApB,EAA2B;AAC/CxO,QAAI,CAACyW,KAAL,CAAWnD,OAAX,CAAmB0uB,QAAnB,IAA+BxzB,KAA/B;AACAxO,QAAI,CAACuV,IAAL,CAAU,IAAV;AACD,GAHD;AAIA;AACF;AACA;AACA;AACA;AACA;AACA;;;AACEvV,MAAI,CAACukD,iBAAL,GAAyB,YAAY;AACnCvkD,QAAI,CAACyW,KAAL,CAAWnD,OAAX,GAAqB,EAArB;AACAtT,QAAI,CAACuV,IAAL,CAAU,IAAV;AACD,GAHD;AAIA;AACF;AACA;AACA;AACA;AACA;AACA;;;AACEvV,MAAI,CAACwkD,eAAL,GAAuB,YAAY;AACjCxkD,QAAI,CAACyW,KAAL,CAAWC,IAAX,GAAkB,EAAlB;AACA1W,QAAI,CAACuV,IAAL,CAAU,IAAV;AACD,GAHD;AAIA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEvV,MAAI,CAACwR,SAAL,GAAiB,UAAUmE,MAAV,EAAkBtQ,KAAlB,EAAyB;AACxC,QAAIsQ,MAAM,KAAK/T,SAAX,IAAwByD,KAAK,KAAKzD,SAAtC,EAAiD;AAC/C5B,UAAI,CAAC0R,aAAL,GAAqB,EAArB;AACD,KAFD,MAEO,IAAIiE,MAAM,KAAKtQ,KAAK,KAAK,EAAV,IAAgBA,KAAK,KAAKzD,SAA/B,CAAV,EAAqD;AAC1D,aAAO5B,IAAI,CAAC0R,aAAL,CAAmBiE,MAAnB,CAAP;AACD,KAFM,MAEA;AACL3V,UAAI,CAAC0R,aAAL,CAAmBiE,MAAnB,IAA6BtQ,KAA7B;;AACA,UAAIrF,IAAI,CAACkJ,UAAL,CAAgBw/C,gBAApB,EAAsC;AACpC1oD,YAAI,CAACi5B,UAAL,CAAgBviB,IAAhB,CAAqBtN,IAArB,CAA0B,CAA1B;AACApJ,YAAI,CAACqT,MAAL,CAAYC,OAAZ,CAAoB7N,OAApB,CAA4B,UAAUJ,KAAV,EAAiBK,KAAjB,EAAwB;AAClD1F,cAAI,CAACi5B,UAAL,CAAgB3lB,OAAhB,CAAwBlK,IAAxB,CAA6B1D,KAA7B;AACD,SAFD;AAGD;AACF;;AACD,QAAI,CAACT,MAAM,CAAC8L,IAAP,CAAY/Q,IAAI,CAAC0R,aAAjB,EAAgClM,MAArC,EAA6C;AAC3CxF,UAAI,CAACi5B,UAAL,GAAkB;AAChBviB,YAAI,EAAE,EADU;AAEhBpD,eAAO,EAAE;AAFO,OAAlB;AAID;;AACDtT,QAAI,CAACwY,OAAL;AACD,GArBD;AAsBA;AACF;AACA;AACA;AACA;AACA;AACA;;;AACExY,MAAI,CAACujD,gBAAL,GAAwB,UAAU/wC,QAAV,EAAoB;AAC1C,QAAIxS,IAAI,CAACw2B,WAAL,CAAiBv0B,CAAjB,CAAmBuQ,QAAnB,MAAiC5Q,SAArC,EAAgD;AAC9C,YAAM,IAAIgkD,UAAJ,qBACSpzC,QADT,4BACmCxS,IAAI,CAACw2B,WAAL,CAAiBv0B,CAAjB,CAAmBuD,MADtD,OAAN;AAGD;;AACD,WAAOxF,IAAI,CAACw2B,WAAL,CAAiBv0B,CAAjB,CAAmBuQ,QAAnB,CAAP;AACD,GAPD;AAQA;AACF;AACA;AACA;AACA;AACA;AACA;;;AACExS,MAAI,CAACsjD,oBAAL,GAA4B,UAAUrwC,WAAV,EAAuB;AACjD,QAAIjM,CAAC,GAAGoa,IAAI,CAACO,GAAL,CAAS1O,WAAW,GAAG,CAAvB,EAA0B,CAA1B,CAAR;;AACA,QAAIjT,IAAI,CAACw2B,WAAL,CAAiBz0B,CAAjB,CAAmBiF,CAAnB,MAA0BpF,SAA9B,EAAyC;AACvC,YAAM,IAAIN,KAAJ,CAAU,4BAAV,CAAN;AACD;;AACD,WACEtB,IAAI,CAACw2B,WAAL,CAAiBz0B,CAAjB,CAAmBiF,CAAnB,IACAhH,IAAI,CAAC8zB,cAAL,CAAoB9zB,IAAI,CAACqT,MAAL,CAAYC,OAAZ,CAAoBL,WAApB,CAApB,CAFF;AAID,GATD;AAUA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEjT,MAAI,CAACijD,QAAL,GAAgB,UAAUlhD,CAAV,EAAaE,CAAb,EAAgB0mD,OAAhB,EAAyBC,OAAzB,EAAkC;AAChD,QAAIC,OAAO,GAAG9mD,CAAC,KAAKH,SAAN,GAAkBA,SAAlB,GAA8B5B,IAAI,CAACsjD,oBAAL,CAA0BvhD,CAA1B,CAA5C;AAAA,QACE+mD,OAAO,GAAG7mD,CAAC,KAAKL,SAAN,GAAkBA,SAAlB,GAA8B5B,IAAI,CAACujD,gBAAL,CAAsBthD,CAAtB,CAD1C;AAAA,QAEEqN,IAFF;AAAA,QAGE68B,GAAG,GACDnsC,IAAI,CAACsC,SAAL,CAAekM,KAAf,IACCxO,IAAI,CAACsC,SAAL,CAAek1B,kBAAf,GAAoCx3B,IAAI,CAAC6B,KAAL,CAAWic,cAA/C,GAAgE,CADjE,CAJJ;AAAA,QAMEirC,GAAG,GACD/oD,IAAI,CAACsC,SAAL,CAAeH,MAAf,IACCnC,IAAI,CAACsC,SAAL,CAAe00B,oBAAf,GAAsCh3B,IAAI,CAAC6B,KAAL,CAAWic,cAAjD,GAAkE,CADnE,CAPJ;AASA6qC,WAAO,GAAGA,OAAO,KAAK/mD,SAAZ,GAAwB,CAAxB,GAA4B+mD,OAAtC;AACAC,WAAO,GAAGA,OAAO,KAAKhnD,SAAZ,GAAwB,CAAxB,GAA4BgnD,OAAtC;AACAC,WAAO,IAAI1c,GAAG,GAAGwc,OAAjB;AACAG,WAAO,IAAIC,GAAG,GAAGH,OAAjB;;AACA,QAAI7mD,CAAC,KAAKH,SAAN,IAAmBK,CAAC,KAAKL,SAA7B,EAAwC;AACtC5B,UAAI,CAACsC,SAAL,CAAeo0C,QAAf,CAAwBmS,OAAxB,EAAiCC,OAAjC;AACAzlD,2BAAqB,CAAC,YAAY;AAChCiM,YAAI,GAAGtP,IAAI,CAACye,qBAAL,CAA2B1c,CAA3B,EAA8BE,CAA9B,CAAP,CADgC,CAEhC;AACA;;AACA,YAAI,CAACqN,IAAL,EAAW;AACT;AACD;;AACDu5C,eAAO,IAAIv5C,IAAI,CAACd,KAAL,GAAam6C,OAAxB;AACAG,eAAO,IAAIx5C,IAAI,CAACnN,MAAL,GAAcymD,OAAzB;AACA5oD,YAAI,CAACsC,SAAL,CAAeo0C,QAAf,CAAwBmS,OAAxB,EAAiCC,OAAjC;AACD,OAVoB,CAArB;AAWD,KAbD,MAaO,IAAI/mD,CAAC,KAAKH,SAAV,EAAqB;AAC1B5B,UAAI,CAACsC,SAAL,CAAeC,UAAf,GAA4BsmD,OAA5B;AACD,KAFM,MAEA,IAAI5mD,CAAC,KAAKL,SAAV,EAAqB;AAC1B5B,UAAI,CAACsC,SAAL,CAAeE,SAAf,GAA2BsmD,OAA3B;AACD;AACF,GAhCD;AAiCA;AACF;AACA;AACA;AACA;AACA;AACA;;;AACE9oD,MAAI,CAACkjD,OAAL,GAAe,UAAUjhD,CAAV,EAAa;AAC1BjC,QAAI,CAACijD,QAAL,CAAc,CAAd,EAAiBhhD,CAAjB;AACD,GAFD;AAGA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEjC,MAAI,CAACmjD,SAAL,GAAiB,UAAUlwC,WAAV,EAAuBT,QAAvB,EAAiCyY,MAAjC,EAAyCrqB,KAAzC,EAAgDC,MAAhD,EAAwD;AACvE,QAAIy2C,KAAK,GAAGt3C,IAAI,CAACs3B,YAAL,CAAkBnwB,MAAlB,CAAyB,UAAU6H,CAAV,EAAa;AAChD,aAAOA,CAAC,CAACwkB,eAAF,KAAsBvgB,WAAtB,IAAqCjE,CAAC,CAACqrB,YAAF,KAAmB7nB,QAA/D;AACD,KAFW,CAAZ;AAIAxS,QAAI,CAAC+F,YAAL,CACE;AACE7D,SAAG,EAAEo1C,KAAK,CAAC,CAAD,CAAL,CAASr1C,CAAT,GAAaq1C,KAAK,CAAC,CAAD,CAAL,CAASn1C,MAAtB,GAA+B8oB,MAAM,CAAChpB,CAD7C;AAEED,UAAI,EAAEs1C,KAAK,CAAC,CAAD,CAAL,CAASv1C,CAAT,GAAau1C,KAAK,CAAC,CAAD,CAAL,CAAS9oC,KAAtB,GAA8Byc,MAAM,CAAClpB;AAF7C,KADF,EAKEnB,KALF,EAMEC,MANF;AAQD,GAbD;AAeA;AACF;AACA;AACA;AACA;AACA;AACA;;;AAEEb,MAAI,CAACojD,sBAAL,GAA8B,UAAU4F,QAAV,EAAoB;AAChD,SAAK,IAAIn+C,IAAT,IAAiBm+C,QAAjB,EAA2B;AAAA,iDACXA,QAAQ,CAACn+C,IAAD,CADG;AAAA;;AAAA;AACzB;AAAA,cAAS4C,CAAT;AACE,cAAIA,CAAC,CAACjI,MAAF,GAAW,CAAf,EAAkBxF,IAAI,CAACiwC,kBAAL,CAAwBxiC,CAAC,CAAC,CAAD,CAAzB,EAA8BA,CAAC,CAAC,CAAD,CAA/B,EAAoC5C,IAApC;AADpB;AADyB;AAAA;AAAA;AAAA;AAAA;AAG1B;;AACD7K,QAAI,CAACuV,IAAL;AACD,GAND;AAQA;AACF;AACA;AACA;AACA;AACA;AACA;;;AAEEvV,MAAI,CAACqjD,sBAAL,GAA8B,UAAU2F,QAAV,EAAoB;AAChD,SAAK,IAAIn+C,IAAT,IAAiBm+C,QAAjB,EAA2B;AAAA,kDACXA,QAAQ,CAACn+C,IAAD,CADG;AAAA;;AAAA;AACzB;AAAA,cAAS4C,CAAT;AACE,cAAIA,CAAC,CAACjI,MAAF,GAAW,CAAf,EAAkBxF,IAAI,CAACu2C,sBAAL,CAA4B9oC,CAAC,CAAC,CAAD,CAA7B,EAAkCA,CAAC,CAAC,CAAD,CAAnC,EAAwC5C,IAAxC;AADpB;AADyB;AAAA;AAAA;AAAA;AAAA;AAG1B;;AACD7K,QAAI,CAACuV,IAAL;AACD,GAND;AAQA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEvV,MAAI,CAAC0gB,cAAL,GAAsB,UAAU3e,CAAV,EAAaE,CAAb,EAAgB0mD,OAAhB,EAAyBC,OAAzB,EAAkC;AACtD,QAAM/qB,OAAO,GAAG79B,IAAI,CAACs3B,YAAL,CAAkBnwB,MAAlB,CAAyB,UAAUmI,IAAV,EAAgB;AACvD,aACE,CAACA,IAAI,CAACkD,QAAL,KAAkBvQ,CAAlB,IAAuBA,CAAC,KAAKL,SAA9B,MACC0N,IAAI,CAAC2D,WAAL,KAAqBlR,CAArB,IAA0BA,CAAC,KAAKH,SADjC,KAEA0N,IAAI,CAACvN,CAAL,GAAS,CAFT,IAGAuN,IAAI,CAACrN,CAAL,GAAS,CAHT,IAIAqN,IAAI,CAACvN,CAAL,GAASuN,IAAI,CAACd,KAAd,GAAsBxO,IAAI,CAACwO,KAJ3B,IAKAc,IAAI,CAACrN,CAAL,GAASqN,IAAI,CAACnN,MAAd,GAAuBnC,IAAI,CAACmC,MAN9B;AAQD,KATe,CAAhB;;AAUA,QAAI07B,OAAO,CAACr4B,MAAR,KAAmB,CAAnB,IAAwBzD,CAAC,KAAKH,SAA9B,IAA2CK,CAAC,KAAKL,SAArD,EAAgE;AAC9D;AACA,UACEi8B,OAAO,CAAC,CAAD,CAAP,CAAW97B,CAAX,GAAe/B,IAAI,CAAC6d,qBAAL,EAAf,IACAggB,OAAO,CAAC,CAAD,CAAP,CAAW57B,CAAX,GAAejC,IAAI,CAAC2d,yBAAL,EAFjB,EAIEkgB,OAAO,CAACr4B,MAAR,GAAiB,CAAjB;AACH;;AACD,QAAIq4B,OAAO,CAACr4B,MAAR,KAAmB,CAAvB,EAA0B;AACxBxF,UAAI,CAACijD,QAAL,CAAclhD,CAAd,EAAiBE,CAAjB,EAAoB0mD,OAApB,EAA6BC,OAA7B;AACD;AACF,GAtBD;AAuBA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACE5oD,MAAI,CAAC2gB,aAAL,GAAqB,UAAU5e,CAAV,EAAaE,CAAb,EAAgB;AACnC,QAAI,OAAOF,CAAP,KAAa,WAAjB,EAA8B;;AAC9B,QAAIA,CAAC,GAAG,CAAR,EAAW;AACTA,OAAC,GAAG,CAAJ;AACD;;AACD,QAAIE,CAAC,GAAG,CAAR,EAAW;AACTA,OAAC,GAAG,CAAJ;AACD;;AACDjC,QAAI,CAACs5B,UAAL,GAAkB;AAChB9mB,cAAQ,EAAEvQ,CADM;AAEhBgR,iBAAW,EAAElR;AAFG,KAAlB;AAID,GAZD;AAaA;AACF;AACA;AACA;AACA;AACA;AACA;;;AACE/B,MAAI,CAACu1C,UAAL,GAAkB,UAAUxH,QAAV,EAAoB;AACpC/tC,QAAI,CAACsS,UAAL,GAAkB,EAAlB;AACAtS,QAAI,CAACy5B,YAAL,GAAoB,EAApB;AACAz5B,QAAI,CAAC05B,eAAL,GAAuB,EAAvB;AACA15B,QAAI,CAACwE,aAAL,CAAmB,kBAAnB,EAAuC;AACrC2rC,kBAAY,EAAEnwC,IAAI,CAACowC,eAAL,EADuB;AAErC99B,gBAAU,EAAEtS,IAAI,CAACsS,UAFoB;AAGrCi+B,qBAAe,EAAEvwC,IAAI,CAACuwC,eAHe;AAIrCF,mBAAa,EAAErwC,IAAI,CAACswC,gBAAL;AAJsB,KAAvC;;AAMA,QAAIvC,QAAJ,EAAc;AACZ;AACD;;AACD/tC,QAAI,CAACuV,IAAL;AACD,GAdD;AAeA;AACF;AACA;AACA;AACA;AACA;AACA;;;AACEvV,MAAI,CAAC6xC,SAAL,GAAiB,UAAU9D,QAAV,EAAoB;AACnC/tC,QAAI,CAACywC,UAAL,CAAgB;AACdvuC,SAAG,EAAE,CADS;AAEdF,UAAI,EAAE,CAAC,CAFO;AAGd+C,WAAK,EAAE/E,IAAI,CAACkU,SAAL,GAAiB1O,MAAjB,GAA0B,CAHnB;AAIdb,YAAM,EAAE3E,IAAI,CAACmQ,QAAL,CAAc3K,MAAd,GAAuB;AAJjB,KAAhB;;AAMA,QAAIuoC,QAAJ,EAAc;AACZ;AACD;;AACD/tC,QAAI,CAACuV,IAAL;AACD,GAXD;AAYA;AACF;AACA;AACA;AACA;AACA;AACA;;;AACEvV,MAAI,CAAC0Z,gBAAL,GAAwB,UAAUzG,WAAV,EAAuB;AAC7C,QAAIg2C,aAAa,GAAG,IAApB;AACAjpD,QAAI,CAACmQ,QAAL,CAAc1K,OAAd,CAAsB,UAAU2K,GAAV,EAAeoC,QAAf,EAAyB;AAC7C,UACE,CAACxS,IAAI,CAACsS,UAAL,CAAgBE,QAAhB,CAAD,IACAxS,IAAI,CAACsS,UAAL,CAAgBE,QAAhB,EAA0BrG,OAA1B,CAAkC8G,WAAlC,MAAmD,CAAC,CAFtD,EAGE;AACAg2C,qBAAa,GAAG,KAAhB;AACD;AACF,KAPD;AAQA,WAAOA,aAAP;AACD,GAXD;AAYA;AACF;AACA;AACA;AACA;AACA;AACA;;;AAEEjpD,MAAI,CAACkpD,aAAL,GAAqB,UAAU12C,QAAV,EAAoB;AACvC,QAAI,CAACxS,IAAI,CAACsS,UAAL,CAAgBE,QAAhB,CAAL,EAAgC,OAAO,KAAP;AAChC,QAAI22C,aAAa,GAAG,IAApB;AACA,QAAI7gD,MAAM,GAAGtI,IAAI,CAAC83C,gBAAL,EAAb;AACAxvC,UAAM,CAAC7C,OAAP,CAAe,UAAU0Q,GAAV,EAAezQ,KAAf,EAAsB;AACnC,UACE,CAAC1F,IAAI,CAACsS,UAAL,CAAgBE,QAAhB,CAAD,IACAxS,IAAI,CAACsS,UAAL,CAAgBE,QAAhB,EAA0BrG,OAA1B,CAAkCzG,KAAlC,MAA6C,CAAC,CAFhD,EAGE;AACAyjD,qBAAa,GAAG,KAAhB;AACD;AACF,KAPD;AAQA,WAAOA,aAAP;AACD,GAbD;AAeA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEnpD,MAAI,CAACm3C,mBAAL,GAA2B,UAAUzM,EAAV,EAAckR,WAAd,EAA2B;AACpD,QAAIlmC,CAAC,GAAG,EAAR;AAAA,QACEjU,CAAC,GAAGm6C,WAAW,GAAG57C,IAAI,CAACkU,SAAL,EAAH,GAAsBlU,IAAI,CAAC83C,gBAAL,EADvC;AAAA,QAEE7nB,CAAC,GAAGjwB,IAAI,CAACmQ,QAAL,CAAc3K,MAFpB;AAGAxF,QAAI,CAACsS,UAAL,CAAgB7M,OAAhB,CAAwB,UAAU2K,GAAV,EAAe1K,KAAf,EAAsB;AAC5C,UAAIA,KAAK,KAAKuqB,CAAd,EAAiB;AACf;AACD;;AACD,UAAI7f,GAAG,CAAC5K,MAAJ,KAAe,CAAnB,EAAsB;AACpBkQ,SAAC,CAAChQ,KAAD,CAAD,GAAW,IAAX;AACA;AACD;;AACDgQ,OAAC,CAAChQ,KAAD,CAAD,GAAW,EAAX;AACA0K,SAAG,CAAC3K,OAAJ,CAAY,UAAU0Q,GAAV,EAAe;AACzB,YAAIA,GAAG,KAAK,CAAC,CAAT,IAAc,CAAC1U,CAAC,CAAC0U,GAAD,CAApB,EAA2B;AACzB;AACD;;AACDu0B,UAAE,CAAC1qC,IAAI,CAACmQ,QAAN,EAAgBzK,KAAhB,EAAuBjE,CAAC,CAAC0U,GAAD,CAAD,CAAOlM,IAA9B,CAAF;AACD,OALD;AAMD,KAfD;AAgBD,GApBD;AAqBA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEjK,MAAI,CAAC8zC,YAAL,GAAoB,UAAU7gC,WAAV,EAAuBm7B,IAAvB,EAA6BtP,KAA7B,EAAoCsqB,YAApC,EAAkD;AACpE,QAAI3nD,CAAJ,EAAOmE,CAAP,EAAU7D,CAAV;AACA/B,QAAI,CAAC+vC,mBAAL,GAA2B,KAA3B;AACA/vC,QAAI,CAAC8vC,sBAAL,GAA8B,KAA9B;;AACA,aAASuZ,MAAT,CAAgBriD,CAAhB,EAAmB;AACjBhH,UAAI,CAACmQ,QAAL,CAAc1K,OAAd,CAAsB,UAAU2K,GAAV,EAAeoC,QAAf,EAAyB;AAC7CxS,YAAI,CAACsS,UAAL,CAAgBE,QAAhB,IAA4BxS,IAAI,CAACsS,UAAL,CAAgBE,QAAhB,KAA6B,EAAzD;;AACA,YAAIxS,IAAI,CAACsS,UAAL,CAAgBE,QAAhB,EAA0BrG,OAA1B,CAAkCnF,CAAlC,MAAyC,CAAC,CAA9C,EAAiD;AAC/ChH,cAAI,CAACsS,UAAL,CAAgBE,QAAhB,EAA0BpJ,IAA1B,CAA+BpC,CAA/B;AACD;AACF,OALD;AAMD;;AACD,aAASsiD,SAAT,CAAmBtiD,CAAnB,EAAsB;AACpBhH,UAAI,CAACmQ,QAAL,CAAc1K,OAAd,CAAsB,UAAU2K,GAAV,EAAeoC,QAAf,EAAyB;AAC7CxS,YAAI,CAACsS,UAAL,CAAgBE,QAAhB,IAA4BxS,IAAI,CAACsS,UAAL,CAAgBE,QAAhB,KAA6B,EAAzD;;AACA,YAAIxS,IAAI,CAACsS,UAAL,CAAgBE,QAAhB,EAA0BrG,OAA1B,CAAkCnF,CAAlC,MAAyC,CAAC,CAA9C,EAAiD;AAC/ChH,cAAI,CAACsS,UAAL,CAAgBE,QAAhB,EAA0BtG,MAA1B,CACElM,IAAI,CAACsS,UAAL,CAAgBE,QAAhB,EAA0BrG,OAA1B,CAAkCnF,CAAlC,CADF,EAEE,CAFF;AAID;AACF,OARD;AASD;;AACD,QAAI83B,KAAJ,EAAW;AACT,UAAI,CAAC9+B,IAAI,CAACs5B,UAAV,EAAsB;AACpB;AACD;;AACD73B,OAAC,GAAG2f,IAAI,CAACQ,GAAL,CAAS5hB,IAAI,CAACs5B,UAAL,CAAgBrmB,WAAzB,EAAsCA,WAAtC,CAAJ;AACArN,OAAC,GAAGwb,IAAI,CAACO,GAAL,CAAS3hB,IAAI,CAACs5B,UAAL,CAAgBrmB,WAAzB,EAAsCA,WAAtC,CAAJ;;AACA,WAAKlR,CAAC,GAAGN,CAAT,EAAYmE,CAAC,GAAG7D,CAAhB,EAAmBA,CAAC,IAAI,CAAxB,EAA2B;AACzBsnD,cAAM,CAACtnD,CAAD,CAAN;AACA,YAAI/B,IAAI,CAAC05B,eAAL,CAAqBvtB,OAArB,CAA6BpK,CAA7B,MAAoC,CAAC,CAAzC,EACE/B,IAAI,CAAC05B,eAAL,CAAqBtwB,IAArB,CAA0BrH,CAA1B;AACH;;AACD,UAAIN,CAAC,IAAImE,CAAT,EAAY5F,IAAI,CAAC8vC,sBAAL,GAA8B,IAA9B;AACb;;AACD,QAAI,CAAC1B,IAAD,IAAS,CAACtP,KAAd,EAAqB;AACnB9+B,UAAI,CAACsS,UAAL,GAAkB,EAAlB;AACAtS,UAAI,CAAC05B,eAAL,GAAuB,EAAvB;AACA15B,UAAI,CAACs5B,UAAL,CAAgBrmB,WAAhB,GAA8BA,WAA9B;AACAjT,UAAI,CAACs5B,UAAL,CAAgB9mB,QAAhB,GAA2BxS,IAAI,CAAC0jC,cAAhC;AACD;;AACD,QAAI0K,IAAI,IAAIpuC,IAAI,CAAC0Z,gBAAL,CAAsBzG,WAAtB,CAAZ,EAAgD;AAC9Cq2C,eAAS,CAACr2C,WAAD,CAAT;AACAjT,UAAI,CAAC05B,eAAL,CAAqBxtB,MAArB,CAA4B+G,WAA5B,EAAyC,CAAzC;AACD,KAHD,MAGO;AACLo2C,YAAM,CAACp2C,WAAD,CAAN;AACAjT,UAAI,CAAC05B,eAAL,CAAqBtwB,IAArB,CAA0B6J,WAA1B;AACD;;AACD,QAAIm2C,YAAJ,EAAkB;AAChB;AACD;;AACDppD,QAAI,CAACwE,aAAL,CAAmB,kBAAnB,EAAuC;AACrC2rC,kBAAY,EAAEnwC,IAAI,CAACowC,eAAL,EADuB;AAErC99B,gBAAU,EAAEtS,IAAI,CAACsS,UAFoB;AAGrCi+B,qBAAe,EAAEvwC,IAAI,CAAC6vC,kBAAL,EAHoB;AAIrCQ,mBAAa,EAAErwC,IAAI,CAACswC,gBAAL;AAJsB,KAAvC;AAMD,GA1DD;AA2DA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEtwC,MAAI,CAACwwC,SAAL,GAAiB,UAAUh+B,QAAV,EAAoB47B,IAApB,EAA0BtP,KAA1B,EAAiCsqB,YAAjC,EAA+C;AAC9D,QAAIrnD,CAAJ;AAAA,QACEwnD,EADF;AAAA,QAEE93C,EAFF;AAAA,QAGEhQ,CAAC,GAAGzB,IAAI,CAAC83C,gBAAL,EAHN;AAIA93C,QAAI,CAAC+vC,mBAAL,GAA2B,KAA3B;;AACA,aAASyZ,EAAT,GAAc;AACZ,UAAIJ,YAAJ,EAAkB;AAChB;AACD;;AACDppD,UAAI,CAACwE,aAAL,CAAmB,kBAAnB,EAAuC;AACrC2rC,oBAAY,EAAEnwC,IAAI,CAACowC,eAAL,EADuB;AAErC99B,kBAAU,EAAEtS,IAAI,CAACsS,UAFoB;AAGrCi+B,uBAAe,EAAEvwC,IAAI,CAACuwC,eAHe;AAIrCF,qBAAa,EAAErwC,IAAI,CAACswC,gBAAL;AAJsB,OAAvC;AAMD;;AACD,aAAStwB,MAAT,CAAgB8/B,EAAhB,EAAoB;AAClB9/C,UAAI,CAACsS,UAAL,CAAgBwtC,EAAhB,IAAsB,EAAtB;AACA9/C,UAAI,CAACsS,UAAL,CAAgBwtC,EAAhB,EAAoB12C,IAApB,CAAyB,CAAC,CAA1B;AACA3H,OAAC,CAACgE,OAAF,CAAU,UAAU0Q,GAAV,EAAezQ,KAAf,EAAsB;AAC9B1F,YAAI,CAACsS,UAAL,CAAgBwtC,EAAhB,EAAoB12C,IAApB,CAAyBpJ,IAAI,CAACqT,MAAL,CAAYC,OAAZ,CAAoBnH,OAApB,CAA4BgK,GAAG,CAACzQ,KAAhC,CAAzB;AACA,YACEyQ,GAAG,CAACzQ,KAAJ,KAAc,CAAC,CAAf,IACA1F,IAAI,CAAC05B,eAAL,CAAqBvtB,OAArB,CACEnM,IAAI,CAACqT,MAAL,CAAYC,OAAZ,CAAoBnH,OAApB,CAA4BgK,GAAG,CAACzQ,KAAhC,CADF,MAEM,CAAC,CAJT,EAME1F,IAAI,CAAC05B,eAAL,CAAqBtwB,IAArB,CAA0BpJ,IAAI,CAACqT,MAAL,CAAYC,OAAZ,CAAoBnH,OAApB,CAA4BgK,GAAG,CAACzQ,KAAhC,CAA1B;AACH,OATD;AAUD;;AACD,QAAI1F,IAAI,CAACkwC,kBAAL,KAA4B,KAA5B,IAAqClwC,IAAI,CAACypD,UAAL,KAAoB7nD,SAA7D,EAAwE;AACtE,UACE5B,IAAI,CAACsS,UAAL,CAAgBE,QAAhB,KACAxS,IAAI,CAACsS,UAAL,CAAgBE,QAAhB,EAA0BhN,MAA1B,GAAmC,CAAnC,KAAyC/D,CAAC,CAAC+D,MAF7C,EAGE;AACA,YAAI4oC,IAAJ,EAAU;AACRpuC,cAAI,CAACsS,UAAL,CAAgBE,QAAhB,IAA4B,EAA5B;AACAg3C,YAAE;AACF;AACD;AACF;AACF;;AACD,QAAIxpD,IAAI,CAACkwC,kBAAL,KAA4B,IAA5B,IAAoClwC,IAAI,CAACypD,UAAL,KAAoB7nD,SAA5D,EAAuE;AACrE,UAAIk9B,KAAK,IAAI9+B,IAAI,CAACypD,UAAL,KAAoB7nD,SAAjC,EAA4C;AAC1C,YAAI,CAAC5B,IAAI,CAACs5B,UAAV,EAAsB;AACpB;AACD;;AACDiwB,UAAE,GAAGnoC,IAAI,CAACQ,GAAL,CAAS5hB,IAAI,CAACs5B,UAAL,CAAgB9mB,QAAzB,EAAmCA,QAAnC,CAAL;AACAf,UAAE,GAAG2P,IAAI,CAACO,GAAL,CAAS3hB,IAAI,CAACs5B,UAAL,CAAgB9mB,QAAzB,EAAmCA,QAAnC,CAAL;;AACA,aAAKzQ,CAAC,GAAGwnD,EAAT,EAAa93C,EAAE,IAAI1P,CAAnB,EAAsBA,CAAC,IAAI,CAA3B,EAA8B;AAC5Bie,gBAAM,CAACje,CAAD,CAAN;AACA/B,cAAI,CAACy5B,YAAL,CAAkBrwB,IAAlB,CAAuBrH,CAAvB;AACD;AACF,OAVD,MAUO;AACLie,cAAM,CAACxN,QAAD,CAAN;AACAxS,YAAI,CAACy5B,YAAL,GAAoB,EAApB;AACAz5B,YAAI,CAACy5B,YAAL,CAAkBrwB,IAAlB,CAAuBoJ,QAAvB;AACD;AACF;;AACDg3C,MAAE;AACH,GA7DD;AA8DA;AACF;AACA;AACA;AACA;AACA;AACA;;;AACExpD,MAAI,CAAC+jD,YAAL,GAAoB,UAAUvxC,QAAV,EAAoB;AACtCxS,QAAI,CAACwE,aAAL,CAAmB,cAAnB,EAAmC;AACjC8W,eAAS,EAAEtb,IAAI,CAACqb,UAAL,CAAgB7I,QAAhB,CADsB;AAEjCtK,UAAI,EAAElI,IAAI,CAACmQ,QAAL,CAAcqC,QAAd,CAF2B;AAGjCA,cAAQ,EAAEA;AAHuB,KAAnC;AAKAxS,QAAI,CAACysB,YAAL,CAAkBja,QAAlB,EAA4BgU,IAA5B;AACAxmB,QAAI,CAACysB,YAAL,CAAkBja,QAAlB,EAA4BvP,OAA5B;AACA,WAAOjD,IAAI,CAACysB,YAAL,CAAkBja,QAAlB,CAAP;AACA,WAAOxS,IAAI,CAACyW,KAAL,CAAWwpB,KAAX,CAAiBztB,QAAjB,CAAP;AACA,WAAOxS,IAAI,CAACqb,UAAL,CAAgB7I,QAAhB,CAAP;AACAxS,QAAI,CAACwE,aAAL,CAAmB,WAAnB,EAAgC;AAC9ByS,gBAAU,EAAEjX,IAAI,CAAC6B,KAAL,CAAWoV;AADO,KAAhC;AAGAjX,QAAI,CAACiI,MAAL,CAAY,IAAZ;AACAjI,QAAI,CAACuV,IAAL,CAAU,IAAV;AACD,GAhBD;AAiBA;AACF;AACA;AACA;AACA;AACA;AACA;;;AACEvV,MAAI,CAAC8jD,UAAL,GAAkB,UAAUtxC,QAAV,EAAoB;AACpC,QAAIk3C,MAAM,GAAG1pD,IAAI,CAACmtC,IAAL,CAAUyN,kBAAV,IAAgC,EAA7C;AAAA,QACEl9B,sBAAsB,GAAG1d,IAAI,CAAC2d,yBAAL,EAD3B;AAAA,QAEEC,kBAAkB,GAChB5d,IAAI,CAACyW,KAAL,CAAWnD,OAAX,CAAmBghB,UAAnB,IAAiCt0B,IAAI,CAAC6B,KAAL,CAAW+b,kBAHhD;AAAA,QAIE9L,CAAC,GAAG9R,IAAI,CAACyW,KAAL,CAAWwpB,KAAX,CAAiBztB,QAAjB,KAA8BxS,IAAI,CAAC6B,KAAL,CAAW8nD,cAJ/C;AAAA,QAKEx1B,QALF;;AAMA,QAAI,CAACn0B,IAAI,CAACqb,UAAL,CAAgB7I,QAAhB,CAAL,EAAgC;AAC9Bk3C,YAAM,CAACz2B,KAAP,GAAejzB,IAAI,CAACkJ,UAAL,CAAgB+pB,KAA/B;AACAy2B,YAAM,CAACz/C,IAAP,GAAcjK,IAAI,CAACkJ,UAAL,CAAgBqN,cAAhB,GACVvW,IAAI,CAACkJ,UAAL,CAAgBe,IAAhB,GAAuB,MAAvB,GAAgCuI,QADtB,GAEV5Q,SAFJ;AAGA8nD,YAAM,CAAC7nD,KAAP,GAAe6nD,MAAM,CAAC7nD,KAAP,IAAgB7B,IAAI,CAAC6B,KAApC;AACA6nD,YAAM,CAACxmD,UAAP,GAAoB;AAClB6L,kBAAU,EAAE/O,IAAI,CAACmB,IADC;AAElBmb,gBAAQ,EAAE,sBAFQ;AAGlB/Y,oBAAY,EAAEuO,CAHI;AAIlBtF,mBAAW,EAAExM,IAAI,CAACwO,KAAL,GAAaoP,kBAJR;AAKlBrO,cAAM,EAAE;AAAEf,eAAK,EAAExO,IAAI,CAACwO,KAAL,GAAaoP;AAAtB,SALU;AAMlBrC,kBAAU,EAAEqC,kBANM;AAOlBpC,iBAAS,EAAEkC,sBAPO;AAQlBwB,oBAAY,EAAElf,IAAI,CAACmB,IAAL,CAAU+B,UARN;AASlBA,kBAAU,EAAElD,IAAI,CAACmB,IAAL,CAAU+B,UATJ;AAUlBrB,aAAK,EAAE,MAVW;AAWlBqG,YAAI,EAAElI,IAAI,CAACmQ,QAAL,CAAcqC,QAAd;AAXY,OAApB;AAaA2hB,cAAQ,GAAGn0B,IAAI,CAACk7B,UAAL,CAAgBwuB,MAAhB,CAAX;AACA1pD,UAAI,CAACqb,UAAL,CAAgB7I,QAAhB,IAA4B2hB,QAA5B;AACD;;AACDA,YAAQ,GAAGn0B,IAAI,CAACqb,UAAL,CAAgB7I,QAAhB,CAAX;AACA2hB,YAAQ,CAACH,OAAT,GAAmB,IAAnB;AACAh0B,QAAI,CAACwE,aAAL,CAAmB,YAAnB,EAAiC;AAC/B2vB,cAAQ,EAAEA,QADqB;AAE/BjsB,UAAI,EAAElI,IAAI,CAACmQ,QAAL,CAAcqC,QAAd,CAFyB;AAG/BA,cAAQ,EAAEA;AAHqB,KAAjC;AAKAxS,QAAI,CAACysB,YAAL,CAAkBja,QAAlB,IAA8B2hB,QAA9B;AACAn0B,QAAI,CAACyW,KAAL,CAAWwpB,KAAX,CAAiBztB,QAAjB,IAA6BV,CAA7B;AACA9R,QAAI,CAACwE,aAAL,CAAmB,WAAnB,EAAgC;AAAErC,YAAM,EAAEnC,IAAI,CAAC6B,KAAL,CAAWoV;AAArB,KAAhC;AACAjX,QAAI,CAACiI,MAAL,CAAY,IAAZ;AACD,GAxCD;AAyCA;AACF;AACA;AACA;AACA;AACA;AACA;;;AACEjI,MAAI,CAACgyC,UAAL,GAAkB,UAAUx/B,QAAV,EAAoB;AACpC,QAAIxL,CAAC,GAAGhH,IAAI,CAACysB,YAAL,CAAkBja,QAAlB,CAAR;;AACA,QAAIxL,CAAJ,EAAO;AACL,aAAOhH,IAAI,CAAC+jD,YAAL,CAAkBvxC,QAAlB,CAAP;AACD;;AACDxS,QAAI,CAAC8jD,UAAL,CAAgBtxC,QAAhB;AACD,GAND;AAOA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACExS,MAAI,CAAC+R,eAAL,GAAuB,UAAU9H,IAAV,EAAgB;AACrC,QAAIlI,CAAJ;AAAA,QACEiF,CAAC,GAAGhH,IAAI,CAACkU,SAAL,EADN;;AAEA,SAAKnS,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGiF,CAAC,CAACxB,MAAlB,EAA0BzD,CAAC,IAAI,CAA/B,EAAkC;AAChC,UAAIiF,CAAC,CAACjF,CAAD,CAAD,CAAKkI,IAAL,KAAcA,IAAlB,EAAwB;AACtB,eAAOjD,CAAC,CAACjF,CAAD,CAAR;AACD;AACF;AACF,GARD;AASA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACE/B,MAAI,CAACsW,WAAL,GAAmB,UAAUszC,qBAAV,EAAiCC,mBAAjC,EAAsD;AACvE,QAAMvhD,MAAM,GAAGtI,IAAI,CAACkU,SAAL,EAAf;AACA,QAAMb,MAAM,GAAGrT,IAAI,CAACqT,MAAL,CAAYC,OAA3B;AACA,QAAMw2C,aAAa,GAAG,EAAtB;AACA,QAAI,OAAOD,mBAAP,KAA+B,QAAnC,EACEA,mBAAmB,GAAGD,qBAAtB;;AACF,SACE,IAAI72C,UAAU,GAAG62C,qBADnB,EAEE72C,UAAU,IAAI82C,mBAFhB,EAGE92C,UAAU,EAHZ,EAIE;AACA,UAAME,WAAW,GAAGI,MAAM,CAACN,UAAD,CAA1B;;AACA,UAAIE,WAAW,IAAI,CAAf,IAAoB,CAAC3K,MAAM,CAAC2K,WAAD,CAAN,CAAoB4C,MAA7C,EAAqD;AACnDi0C,qBAAa,CAAC1gD,IAAd,CAAmB6J,WAAnB;AACA3K,cAAM,CAAC2K,WAAD,CAAN,CAAoB4C,MAApB,GAA6B,IAA7B;AAEA7V,YAAI,CAACwE,aAAL,CAAmB,YAAnB,EAAiC;AAC/ByO,qBAAW,EAAXA;AAD+B,SAAjC;AAGD;AACF;;AAED,QAAI62C,aAAa,CAACtkD,MAAd,GAAuB,CAA3B,EAA8B;AAC5BxF,UAAI,CAAC8V,cAAL;AACAlI,gBAAU,CAAC,YAAY;AACrB5N,YAAI,CAACiI,MAAL,CAAY,IAAZ;AACD,OAFS,EAEP,EAFO,CAAV;AAGD;;AAEDjI,QAAI,CAACwE,aAAL,CAAmB,aAAnB,EAAkC;AAChCslD,mBAAa,EAAbA;AADgC,KAAlC;AAGD,GAhCD;AAiCA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACE9pD,MAAI,CAACsxC,aAAL,GAAqB,UAAUsY,qBAAV,EAAiCC,mBAAjC,EAAsD;AACzE,QAAMx2C,MAAM,GAAGrT,IAAI,CAACqT,MAAL,CAAYC,OAA3B;AACA,QAAMhL,MAAM,GAAGtI,IAAI,CAACkU,SAAL,EAAf;;AAEA,SAAK,IAAIlN,CAAC,GAAG4iD,qBAAb,EAAoC5iD,CAAC,IAAI6iD,mBAAzC,EAA8D7iD,CAAC,EAA/D,EAAmE;AACjE,UAAMiM,WAAW,GAAGI,MAAM,CAACrM,CAAD,CAA1B;AACA,UAAMvF,CAAC,GAAG6G,MAAM,CAAC2K,WAAD,CAAhB;;AAEA,UAAIxR,CAAC,IAAIA,CAAC,CAACoU,MAAX,EAAmB;AACjBpU,SAAC,CAACoU,MAAF,GAAW,KAAX;AAEA7V,YAAI,CAACwE,aAAL,CAAmB,cAAnB,EAAmC;AACjCyO,qBAAW,EAAXA;AADiC,SAAnC;AAGD;AACF;;AACDjT,QAAI,CAACwY,OAAL;AACD,GAjBD;AAkBA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACExY,MAAI,CAAC4X,QAAL,GAAgB,UAAUkkB,aAAV,EAAyBC,WAAzB,EAAsC;AACpD,QACEwe,kEAAoB,CAACv6C,IAAI,CAACw1B,eAAN,EAAuB,CAACsG,aAAD,EAAgBC,WAAhB,CAAvB,CADtB,EAGE/7B,IAAI,CAACwY,OAAL;AACH,GALD;AAMA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACExY,MAAI,CAACuxC,UAAL,GAAkB,UAAUzV,aAAV,EAAyBC,WAAzB,EAAsC;AACtD/7B,QAAI,CAACw1B,eAAL,GAAuBx1B,IAAI,CAACw1B,eAAL,CAAqBruB,MAArB,CACrB,UAACiM,KAAD;AAAA,aAAWA,KAAK,CAAC,CAAD,CAAL,KAAa0oB,aAAb,IAA8B1oB,KAAK,CAAC,CAAD,CAAL,KAAa2oB,WAAtD;AAAA,KADqB,CAAvB;AAGA/7B,QAAI,CAACwY,OAAL;AACD,GALD;AAMA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACExY,MAAI,CAACq2C,iBAAL,GAAyB,UAAUpsC,IAAV,EAAgB8pB,QAAhB,EAA0B;AACjD,QAAI,CAAC/zB,IAAI,CAAC2B,MAAV,EAAkB;AAChB;AACD;;AAED,QAAMsR,WAAW,GACfhJ,IAAI,KAAK,YAAT,GAAwB,CAAC,CAAzB,GAA6BjK,IAAI,CAAC+R,eAAL,CAAqB9H,IAArB,EAA2BvE,KAD1D;AAGA,QAAMqkD,OAAO,GAAG3oC,IAAI,CAACO,GAAL,CACd3hB,IAAI,CAACs/C,uBAAL,CAA6Br1C,IAA7B,CADc,EAEdjK,IAAI,CAAC6B,KAAL,CAAWuwC,cAFG,CAAhB;AAKApyC,QAAI,CAACyW,KAAL,CAAWnD,OAAX,CAAmBL,WAAnB,IAAkC82C,OAAlC;AAEA/pD,QAAI,CAACwE,aAAL,CAAmB,cAAnB,EAAmC;AACjCzC,OAAC,EAAEgoD,OAD8B;AAEjC9nD,OAAC,EAAEjC,IAAI,CAACmyC,sBAFyB;AAGjClE,kBAAY,EAAEjuC,IAAI,CAAC+0B;AAHc,KAAnC;;AAMA,QAAI,CAAChB,QAAL,EAAe;AACb/zB,UAAI,CAACiI,MAAL;AACAjI,UAAI,CAACuV,IAAL,CAAU,IAAV;AACD;AACF,GAzBD;AA0BA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEvV,MAAI,CAAC0jD,aAAL,GAAqB,UAAUp0C,IAAV,EAAgBkD,QAAhB,EAA0B;AAC7C;AACA,QAAIA,QAAQ,KAAK5Q,SAAjB,EAA4B;AAC1B,aACE5B,IAAI,CAACs3B,YAAL,CAAkBnwB,MAAlB,CAAyB,UAAU6H,CAAV,EAAa;AACpC,eAAOA,CAAC,CAACiE,WAAF,KAAkB3D,IAAlB,IAA0BN,CAAC,CAACwD,QAAF,KAAeA,QAAhD;AACD,OAFD,EAEGhN,MAFH,GAEY,CAHd;AAKD;;AACD,QAAIzD,CAAJ;AAAA,QACEkuB,CAAC,GAAGjwB,IAAI,CAACs3B,YAAL,CAAkB9xB,MADxB;;AAEA,SAAKzD,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkuB,CAAhB,EAAmBluB,CAAC,IAAI,CAAxB,EAA2B;AACzB,UACEuN,IAAI,CAACvN,CAAL,KAAW/B,IAAI,CAACs3B,YAAL,CAAkBv1B,CAAlB,EAAqBA,CAAhC,IACAuN,IAAI,CAACrN,CAAL,KAAWjC,IAAI,CAACs3B,YAAL,CAAkBv1B,CAAlB,EAAqBE,CAFlC,EAGE;AACA,eAAO,IAAP;AACD;AACF;;AACD,WAAO,KAAP;AACD,GApBD;AAqBA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEjC,MAAI,CAACqX,KAAL,GAAa,UACXogC,UADW,EAEXtlB,SAFW,EAGX8oB,YAHW,EAIX+O,kBAJW,EAKX;AACA,QAAIrwB,CAAJ;AAAA,QACE3qB,CAAC,GAAGhP,IAAI,CAACkU,SAAL,GAAiB/M,MAAjB,CAAwB,UAAUgP,GAAV,EAAe;AACzC,aAAOA,GAAG,CAAClM,IAAJ,KAAawtC,UAApB;AACD,KAFG,CADN;;AAIA,QACEz3C,IAAI,CAACwE,aAAL,CAAmB,kBAAnB,EAAuC;AACrCyF,UAAI,EAAEwtC,UAD+B;AAErCtlB,eAAS,EAAEA;AAF0B,KAAvC,CADF,EAKE;AACA;AACD;;AACDnyB,QAAI,CAACo7B,OAAL,GAAeqc,UAAf;AACAz3C,QAAI,CAACgsB,cAAL,GAAsBmG,SAAtB;;AACA,QAAI,CAACnyB,IAAI,CAACmQ,QAAN,IAAkBnQ,IAAI,CAACmQ,QAAL,CAAc3K,MAAd,KAAyB,CAA/C,EAAkD;AAChD;AACD;;AACD,QAAIwJ,CAAC,CAACxJ,MAAF,KAAa,CAAjB,EAAoB;AAClB,YAAM,IAAIlE,KAAJ,CAAU,mCAAV,CAAN;AACD;;AACDq4B,KAAC,GAAGshB,YAAY,IAAIjsC,CAAC,CAAC,CAAD,CAAD,CAAKi7C,MAArB,IAA+BjqD,IAAI,CAACu7C,OAAL,CAAavsC,CAAC,CAAC,CAAD,CAAD,CAAKnE,IAAlB,CAAnC;;AACA,QAAI,CAAC8uB,CAAD,IAAM3qB,CAAC,CAAC,CAAD,CAAD,CAAKnE,IAAL,KAAcjJ,SAAxB,EAAmC;AACjC4Y,aAAO,CAACC,IAAR,CACE,oDADF,EAEEzL,CAAC,CAAC,CAAD,CAAD,CAAKnE,IAFP;AAID;;AACD7K,QAAI,CAACuU,SAAL,CAAeymC,GAAf,CACEvD,UADF,EAEEtlB,SAFF,EAGE,OAAOwH,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8B35B,IAAI,CAACu7C,OAAL,CAAazyC,MAH7C;AAKA9I,QAAI,CAACwY,OAAL;AACAxY,QAAI,CAACwE,aAAL,CAAmB,YAAnB,EAAiC;AAC/ByF,UAAI,EAAEwtC,UADyB;AAE/BtlB,eAAS,EAAEA;AAFoB,KAAjC;;AAKA,QAAI63B,kBAAJ,EAAwB;AACtB;AACD;;AACDhqD,QAAI,CAAC8V,cAAL;AACD,GAhDD;AAkDA;AACF;AACA;AACA;AACA;AACA;AACA;;;AACE,WAASo0C,QAAT,CAAkBC,QAAlB,EAA4BlwC,IAA5B,EAAkCC,EAAlC,EAAsC;AACpC,QAAI6pB,MAAM,GAAG,KAAb;AACA,QAAM5rB,SAAS,GACbgyC,QAAQ,KAAK,MAAb,GAAsBnqD,IAAI,CAAC8Y,WAA3B,GAAyC9Y,IAAI,CAAC0Y,cADhD;;AAEA,SAAK,IAAI1R,CAAC,GAAGmR,SAAS,CAAC3S,MAAV,GAAmB,CAAhC,EAAmCwB,CAAC,IAAI,CAAxC,EAA2CA,CAAC,EAA5C,EAAgD;AAC9C,UAAMqR,MAAM,GAAGF,SAAS,CAACnR,CAAD,CAAxB;AACA,UAAM4a,GAAG,GAAGvJ,MAAM,CAAC,CAAD,CAAN,CAAU4B,IAAtB;AAAA,UACE0H,GAAG,GAAGtJ,MAAM,CAACA,MAAM,CAAC7S,MAAP,GAAgB,CAAjB,CAAN,CAA0B0U,EADlC;;AAEA,UAAID,IAAI,IAAI2H,GAAR,IAAe1H,EAAE,IAAIyH,GAAzB,EAA8B;AAC5B,YAAI1H,IAAI,KAAK2H,GAAT,IAAgB1H,EAAE,KAAKyH,GAAvB,IAA8BtJ,MAAM,CAAC7S,MAAP,KAAkB,CAApD,EAAuD,OAD3B,CACmC;AAC/D;;AACA;AACD;;AACD,WAAK,IAAIk3C,EAAE,GAAG,CAAd,EAAiBA,EAAE,GAAGrkC,MAAM,CAAC7S,MAA7B,EAAqCk3C,EAAE,EAAvC,EAA2C;AACzC,YAAM1d,CAAC,GAAG3mB,MAAM,CAACqkC,EAAD,CAAhB;AACA,YAAIziC,IAAI,GAAG+kB,CAAC,CAAC9kB,EAAb,EAAiB;;AACjB,YAAID,IAAI,IAAI+kB,CAAC,CAAC/kB,IAAd,EAAoB;AAClB,cAAIC,EAAE,GAAG8kB,CAAC,CAAC9kB,EAAX,EAAe;AACb,gBAAID,IAAI,KAAK+kB,CAAC,CAAC/kB,IAAf,EAAqB;AACnB9B,uBAAS,CAACjM,MAAV,CAAiBlF,CAAjB,EAAoB,CAApB,EAAuB,CAAC;AAAEiT,oBAAI,EAAJA,IAAF;AAAQC,kBAAE,EAAFA,EAAR;AAAY9B,yBAAS,EAAE;AAAvB,eAAD,CAAvB;AACApY,kBAAI,CAACwY,OAAL;AACA;AACD;;AACD,kBAAM,IAAIlX,KAAJ,6BAA+B6oD,QAA/B,EAAN;AACD;;AACD,cAAIjwC,EAAE,KAAK8kB,CAAC,CAAC9kB,EAAb,EAAiB;AACf,gBAAID,IAAI,KAAK+kB,CAAC,CAAC/kB,IAAf,EAAqB,OADN,CACc;AAC9B;;AACD8pB,gBAAM,GAAG,IAAT;AACA;AACD;;AACD,YAAI7pB,EAAE,IAAI8kB,CAAC,CAAC/kB,IAAZ,EAAkB;AAChB,cAAIC,EAAE,GAAG8kB,CAAC,CAAC9kB,EAAX,EAAe,MAAM,IAAI5Y,KAAJ,6BAA+B6oD,QAA/B,EAAN;AACfhyC,mBAAS,CAACjM,MAAV,CAAiBlF,CAAjB,EAAoB,CAApB,EAAuB,CAAC;AAAEiT,gBAAI,EAAJA,IAAF;AAAQC,cAAE,EAAFA,EAAR;AAAY9B,qBAAS,EAAE;AAAvB,WAAD,CAAvB;AACD,SAHD,MAGO;AACLC,gBAAM,CAACnM,MAAP,CAAcwwC,EAAd,EAAkB,CAAlB,EAAqB;AAAEziC,gBAAI,EAAJA,IAAF;AAAQC,cAAE,EAAFA,EAAR;AAAY9B,qBAAS,EAAE;AAAvB,WAArB;AACD;;AACDpY,YAAI,CAACwY,OAAL;AACA;AACD;;AACD,UAAIurB,MAAJ,EAAY;AACZ1rB,YAAM,CAACjP,IAAP,CAAY;AAAE6Q,YAAI,EAAJA,IAAF;AAAQC,UAAE,EAAFA,EAAR;AAAY9B,iBAAS,EAAE;AAAvB,OAAZ;AACApY,UAAI,CAACwY,OAAL;AACA;AACD;;AACD,QAAIurB,MAAJ,EAAY5rB,SAAS,CAAC/O,IAAV,CAAe,CAAC;AAAE6Q,UAAI,EAAJA,IAAF;AAAQC,QAAE,EAAFA,EAAR;AAAY9B,eAAS,EAAE;AAAvB,KAAD,CAAf,EAAZ,KACKD,SAAS,CAACof,OAAV,CAAkB,CAAC;AAAEtd,UAAI,EAAJA,IAAF;AAAQC,QAAE,EAAFA,EAAR;AAAY9B,eAAS,EAAE;AAAvB,KAAD,CAAlB;AACLpY,QAAI,CAACwY,OAAL;AACD;AACD;AACF;AACA;AACA;AACA;AACA;AACA;;;AACE,WAAS4xC,WAAT,CAAqBjyC,SAArB,EAAgC8B,IAAhC,EAAsCC,EAAtC,EAA0C;AACxC,SAAK,IAAIlT,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmR,SAAS,CAAC3S,MAA9B,EAAsCwB,CAAC,EAAvC,EAA2C;AACzC,UAAMqR,MAAM,GAAGF,SAAS,CAACnR,CAAD,CAAxB;;AACA,WAAK,IAAI01C,EAAE,GAAG,CAAd,EAAiBA,EAAE,GAAGrkC,MAAM,CAAC7S,MAA7B,EAAqCk3C,EAAE,EAAvC,EAA2C;AACzC,YAAMnkC,KAAK,GAAGF,MAAM,CAACqkC,EAAD,CAApB;;AACA,YAAInkC,KAAK,CAAC0B,IAAN,KAAeA,IAAf,IAAuB1B,KAAK,CAAC2B,EAAN,KAAaA,EAAxC,EAA4C;AAC1C,cAAI7B,MAAM,CAAC7S,MAAP,IAAiB,CAArB,EAAwB2S,SAAS,CAACjM,MAAV,CAAiBlF,CAAjB,EAAoB,CAApB,EAAxB,KACKqR,MAAM,CAACnM,MAAP,CAAcwwC,EAAd,EAAkB,CAAlB;AACL18C,cAAI,CAACwY,OAAL;AACA;AACD;AACF;AACF;AACF;AACD;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACExY,MAAI,CAAC+Z,YAAL,GAAoB,UAAUswC,eAAV,EAA2BC,cAA3B,EAA2C;AAC7D;AACA,QAAMhiD,MAAM,GAAGtI,IAAI,CAACkU,SAAL,EAAf;AACA,QAAIq2C,QAAJ,EAAcC,OAAd;;AACA,SAAK,IAAIxjD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsB,MAAM,CAAC9C,MAA3B,EAAmCwB,CAAC,EAApC,EAAwC;AACtC,UAAM4M,EAAE,GAAGtL,MAAM,CAACtB,CAAD,CAAjB;AACA,UAAIujD,QAAQ,IAAIC,OAAhB,EAAyB;;AACzB,UAAI52C,EAAE,CAAC3J,IAAH,KAAYogD,eAAhB,EAAiC;AAC/BE,gBAAQ,GAAG32C,EAAX;AACA;AACD;;AACD,UAAIA,EAAE,CAAC3J,IAAH,KAAYqgD,cAAhB,EAAgC;AAC9BE,eAAO,GAAG52C,EAAV;AACA;AACD;AACF;;AACD,QAAI,CAAC22C,QAAL,EAAe,MAAM,IAAIjpD,KAAJ,wCAAN;AACf,QAAI,CAACkpD,OAAL,EAAc,MAAM,IAAIlpD,KAAJ,uCAAN;AACd,QAAIkpD,OAAO,CAACv3C,WAAR,GAAsBs3C,QAAQ,CAACt3C,WAA/B,KAA+C,IAAnD,EACE,MAAM,IAAI3R,KAAJ,6BAAN;AAEF,QAAM2Y,IAAI,GAAGswC,QAAQ,CAACt3C,WAAtB;AACA,QAAMiH,EAAE,GAAGswC,OAAO,CAACv3C,WAAnB;AACA,QAAM9O,EAAE,GAAG;AAAEoU,WAAK,EAAE;AAAE1N,YAAI,EAAE,SAAR;AAAmBoP,YAAI,EAAJA,IAAnB;AAAyBC,UAAE,EAAFA;AAAzB;AAAT,KAAX;;AACA,QAAI;AACFgwC,cAAQ,CAAC,SAAD,EAAYjwC,IAAZ,EAAkBC,EAAlB,CAAR;AACD,KAFD,CAEE,OAAOuwC,KAAP,EAAc;AACdtmD,QAAE,CAACsmD,KAAH,GAAWA,KAAX;AACD;;AACDzqD,QAAI,CAACwE,aAAL,CAAmB,kBAAnB,EAAuCL,EAAvC;AACD,GA9BD;AA+BA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEnE,MAAI,CAAC4a,SAAL,GAAiB,UAAU8vC,YAAV,EAAwBC,UAAxB,EAAoC;AACnD,QAAI,CAAClV,MAAM,CAACmV,SAAP,CAAiBF,YAAjB,CAAD,IAAmCA,YAAY,GAAG,CAAtD,EACE,MAAM,IAAIppD,KAAJ,8CAAN;AAEF,QAAMupD,UAAU,GAAG7qD,IAAI,CAACmQ,QAAL,CAAc3K,MAAjC;AACA,QACE,CAACiwC,MAAM,CAACmV,SAAP,CAAiBF,YAAjB,CAAD,IACAC,UAAU,IAAID,YADd,IAEAC,UAAU,IAAIE,UAHhB,EAKE,MAAM,IAAIvpD,KAAJ,wCAAN;AACF,QAAM6C,EAAE,GAAG;AACToU,WAAK,EAAE;AACL1N,YAAI,EAAE,MADD;AAELoP,YAAI,EAAEywC,YAFD;AAGLxwC,UAAE,EAAEywC;AAHC;AADE,KAAX;;AAOA,QAAI;AACFT,cAAQ,CAAC,MAAD,EAASQ,YAAT,EAAuBC,UAAvB,CAAR;AACD,KAFD,CAEE,OAAOF,KAAP,EAAc;AACdtmD,QAAE,CAACsmD,KAAH,GAAWA,KAAX;AACD;;AACDzqD,QAAI,CAACwE,aAAL,CAAmB,kBAAnB,EAAuCL,EAAvC;AACD,GAxBD;AAyBA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEnE,MAAI,CAACua,kBAAL,GAA0B,UAAU8vC,eAAV,EAA2BC,cAA3B,EAA2C;AACnE;AACA,QAAMhiD,MAAM,GAAGtI,IAAI,CAACkU,SAAL,EAAf;AACA,QAAIq2C,QAAJ,EAAcC,OAAd;;AACA,SAAK,IAAIxjD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsB,MAAM,CAAC9C,MAA3B,EAAmCwB,CAAC,EAApC,EAAwC;AACtC,UAAM4M,EAAE,GAAGtL,MAAM,CAACtB,CAAD,CAAjB;AACA,UAAIujD,QAAQ,IAAIC,OAAhB,EAAyB;;AACzB,UAAI52C,EAAE,CAAC3J,IAAH,KAAYogD,eAAhB,EAAiC;AAC/BE,gBAAQ,GAAG32C,EAAX;AACA;AACD;;AACD,UAAIA,EAAE,CAAC3J,IAAH,KAAYqgD,cAAhB,EAAgC;AAC9BE,eAAO,GAAG52C,EAAV;AACA;AACD;AACF;;AACD,QAAI,CAAC22C,QAAL,EAAe,MAAM,IAAIjpD,KAAJ,wCAAN;AACf,QAAI,CAACkpD,OAAL,EAAc,MAAM,IAAIlpD,KAAJ,uCAAN;AACd,QAAM2Y,IAAI,GAAGswC,QAAQ,CAACt3C,WAAtB;AACA,QAAMiH,EAAE,GAAGswC,OAAO,CAACv3C,WAAnB;AACAm3C,eAAW,CAACpqD,IAAI,CAAC0Y,cAAN,EAAsBuB,IAAtB,EAA4BC,EAA5B,CAAX;AACD,GArBD;AAsBA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEla,MAAI,CAAC+a,eAAL,GAAuB,UAAU2vC,YAAV,EAAwBC,UAAxB,EAAoC;AACzDP,eAAW,CAACpqD,IAAI,CAAC8Y,WAAN,EAAmB4xC,YAAnB,EAAiCC,UAAjC,CAAX;AACD,GAFD;AAGA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACE3qD,MAAI,CAACwjD,kBAAL,GAA0B,UAAU6G,eAAV,EAA2BC,cAA3B,EAA2C;AACnE;AACA,QAAMhiD,MAAM,GAAGtI,IAAI,CAACkU,SAAL,EAAf;AACA,QAAIq2C,QAAJ,EAAcC,OAAd;;AACA,SAAK,IAAIxjD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsB,MAAM,CAAC9C,MAA3B,EAAmCwB,CAAC,EAApC,EAAwC;AACtC,UAAM4M,EAAE,GAAGtL,MAAM,CAACtB,CAAD,CAAjB;AACA,UAAIujD,QAAQ,IAAIC,OAAhB,EAAyB;;AACzB,UAAI52C,EAAE,CAAC3J,IAAH,KAAYogD,eAAhB,EAAiC;AAC/BE,gBAAQ,GAAG32C,EAAX;AACA;AACD;;AACD,UAAIA,EAAE,CAAC3J,IAAH,KAAYqgD,cAAhB,EAAgC;AAC9BE,eAAO,GAAG52C,EAAV;AACA;AACD;AACF;;AACD,QAAI,CAAC22C,QAAD,IAAa,CAACC,OAAlB,EAA2B;AAC3B,QAAMvwC,IAAI,GAAGswC,QAAQ,CAACt3C,WAAtB;AACA,QAAMiH,EAAE,GAAGswC,OAAO,CAACv3C,WAAnB;;AACA,QAAIjT,IAAI,CAACwxC,WAAL,CAAiB;AAAE3mC,UAAI,EAAE,GAAR;AAAaoP,UAAI,EAAJA,IAAb;AAAmBC,QAAE,EAAFA;AAAnB,KAAjB,CAAJ,EAA+C;AAC7Cla,UAAI,CAACsR,kBAAL;AACAtR,UAAI,CAAC8V,cAAL;AACA9V,UAAI,CAACwY,OAAL;AACD;AACF,GAxBD;AAyBA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACExY,MAAI,CAACyjD,eAAL,GAAuB,UAAUiH,YAAV,EAAwBC,UAAxB,EAAoC;AACzD,QAAI3qD,IAAI,CAACwxC,WAAL,CAAiB;AAAE3mC,UAAI,EAAE,GAAR;AAAaoP,UAAI,EAAEywC,YAAnB;AAAiCxwC,QAAE,EAAEywC;AAArC,KAAjB,CAAJ,EAAyE;AACvE3qD,UAAI,CAACsR,kBAAL;AACAtR,UAAI,CAAC8V,cAAL;AACA9V,UAAI,CAACwY,OAAL;AACD;AACF,GAND;;AAQAxY,MAAI,CAAC8uC,QAAL,GAAgB,UAAUlpC,CAAV,EAAa;AAC3B,QAAIA,CAAC,CAAC7D,CAAF,GAAM,CAAN,IAAW6D,CAAC,CAAC7D,CAAF,GAAM/B,IAAI,CAACwO,KAAtB,IAA+B5I,CAAC,CAAC3D,CAAF,GAAM,CAArC,IAA0C2D,CAAC,CAAC3D,CAAF,GAAMjC,IAAI,CAACmC,MAAzD,EAAiE;AAC/D,aAAO,KAAP;AACD;;AACD,WAAO,IAAP;AACD,GALD;AAMA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEnC,MAAI,CAAC20C,aAAL,GAAqB,UAAUgU,OAAV,EAAmBC,OAAnB,EAA4B;AAC/C,QAAIkC,GAAG,GAAG,EAAV;AACA9qD,QAAI,CAACy5B,YAAL,GAAoB,EAApB;AACAz5B,QAAI,CAAC05B,eAAL,GAAuB,EAAvB;AACA15B,QAAI,CAACsS,UAAL,CAAgB7M,OAAhB,CAAwB,UAAU2K,GAAV,EAAeoC,QAAf,EAAyB;AAC/Cs4C,SAAG,CAACt4C,QAAQ,GAAGo2C,OAAZ,CAAH,GAA0B,EAA1B;AACA5oD,UAAI,CAACy5B,YAAL,CAAkBrwB,IAAlB,CAAuBoJ,QAAQ,GAAGo2C,OAAlC;AACAx4C,SAAG,CAAC3K,OAAJ,CAAY,UAAUu8B,QAAV,EAAoB;AAC9B8oB,WAAG,CAACt4C,QAAQ,GAAGo2C,OAAZ,CAAH,CAAwBx/C,IAAxB,CAA6B44B,QAAQ,GAAG2mB,OAAxC;AACA,YAAI3oD,IAAI,CAAC05B,eAAL,CAAqBvtB,OAArB,CAA6B61B,QAAQ,GAAG2mB,OAAxC,MAAqD,CAAC,CAA1D,EACE3oD,IAAI,CAAC05B,eAAL,CAAqBtwB,IAArB,CAA0B44B,QAAQ,GAAG2mB,OAArC;AACH,OAJD;AAKD,KARD;AASA3oD,QAAI,CAACsS,UAAL,GAAkBw4C,GAAlB;AACD,GAdD;AAeA;AACF;AACA;AACA;AACA;AACA;AACA;;;AACE9qD,MAAI,CAACw1C,kBAAL,GAA0B,UAAUzH,QAAV,EAAoB;AAC5C,QAAM4J,aAAa,GAAG33C,IAAI,CAAC04C,kBAAL,EAAtB;AAEA14C,QAAI,CAACwE,aAAL,CAAmB,aAAnB,EAAkC;AAChC8yC,WAAK,EAAEK;AADyB,KAAlC;;AAIA,QAAI5J,QAAJ,EAAc;AACZ;AACD;;AAED1qC,yBAAqB,CAAC;AAAA,aAAMrD,IAAI,CAACuV,IAAL,EAAN;AAAA,KAAD,CAArB;AACD,GAZD;AAaA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEvV,MAAI,CAACwoB,MAAL,GAAc,UAAUsiC,GAAV,EAAe/oD,CAAf,EAAkBE,CAAlB,EAAqB;AACjC,QAAIkuC,YAAY,GAAGnwC,IAAI,CAACowC,eAAL,EAAnB;AAAA,QACE2a,aAAa,GAAG/qD,IAAI,CAAC83C,gBAAL,EADlB;AAAA,QAEEkT,eAAe,GAAGF,GAAG,CAACtlD,MAFxB;AAAA,QAGEylD,EAHF;AAAA,QAIEC,YAAY,GAAG,CAACztC,QAJlB;AAAA,QAKE0tC,KAAK,GAAG1tC,QALV;AAAA,QAME2tC,EAAE,GAAGnpD,CAAC,GAAG,CANX;AAQA6oD,OAAG,CAACrlD,OAAJ,CAAY,UAAU2K,GAAV,EAAeoC,QAAf,EAAyB;AACnC,UAAIA,QAAQ,KAAKw4C,eAAjB,EAAkC;AAChC;AACD;;AACD,UAAI56C,GAAG,CAAC5K,MAAJ,KAAe,CAAnB,EAAsB;AACpB;AACD;;AACD2lD,WAAK,GAAG/pC,IAAI,CAACQ,GAAL,CAAS5hB,IAAI,CAAC+3C,uBAAL,CAA6Bh2C,CAA7B,CAAT,EAA0CopD,KAA1C,CAAR;AACAD,kBAAY,GAAG9pC,IAAI,CAACO,GAAL,CAASupC,YAAT,EAAuB96C,GAAG,CAAC5K,MAA3B,CAAf;AACA4K,SAAG,CAAC3K,OAAJ,CAAY,UAAUu8B,QAAV,EAAoB;AAC9B;AACAA,gBAAQ,GAAGhiC,IAAI,CAAC+3C,uBAAL,CAA6B/V,QAA7B,CAAX;;AACA,YAAI,CAAC+oB,aAAa,CAAC/oB,QAAD,CAAlB,EAA8B;AAC5B;AACD,SAL6B,CAM9B;;;AACA,YAAI,CAAChiC,IAAI,CAACkI,IAAV,EAAgB;AACdlI,cAAI,CAACkI,IAAL,GAAY,EAAZ;AACD;;AACD,YAAI,CAAClI,IAAI,CAACkI,IAAL,CAAUsK,QAAV,CAAL,EAA0B;AACxBxS,cAAI,CAACkI,IAAL,CAAUsK,QAAV,IAAsB,EAAtB;AACD,SAZ6B,CAa9B;;;AACAxS,YAAI,CAACkI,IAAL,CAAUsK,QAAV,EAAoBu4C,aAAa,CAAC/oB,QAAD,CAAb,CAAwB/3B,IAA5C,IAAoD,IAApD;AACD,OAfD;AAgBD,KAzBD;AA2BA6gD,OAAG,CAACrlD,OAAJ,CAAY,UAAU2K,GAAV,EAAe1K,KAAf,EAAsB;AAChC,UAAI2lD,eAAJ;AACAD,QAAE,IAAI,CAAN;AACAH,QAAE,GAAGjrD,IAAI,CAAC+3C,uBAAL,CAA6Bh2C,CAA7B,CAAL;AACAqO,SAAG,CAAC3K,OAAJ,CAAY,UAAUu8B,QAAV,EAAoBspB,IAApB,EAA0B;AACpCtpB,gBAAQ,GAAGhiC,IAAI,CAAC+3C,uBAAL,CAA6B/V,QAA7B,CAAX;;AACA,YAAIspB,IAAI,GAAG,CAAX,EAAc;AACZ;AACA;AACAL,YAAE,IAAIjpB,QAAQ,GAAGqpB,eAAjB;AACD;;AACDA,uBAAe,GAAGrpB,QAAlB;;AACA,YACEA,QAAQ,KAAK,CAAC,CAAd,IACA,CAAC+oB,aAAa,CAACE,EAAD,CADd,IAEA,CAACF,aAAa,CAAC/oB,QAAD,CAFd,IAGA;AACAhiC,YAAI,CAACkI,IAAL,CAAU1C,MAAV,GAAmB,CAAnB,GAAuB4lD,EAJvB,IAKAA,EAAE,GAAG,CANP,EAOE;AACA;AACD,SAjBmC,CAkBpC;;;AACA,YAAI,CAACprD,IAAI,CAACkI,IAAL,CAAUkjD,EAAV,CAAL,EAAoB;AAClBprD,cAAI,CAACkI,IAAL,CAAUkjD,EAAV,IAAgB,EAAhB;AACD,SArBmC,CAsBpC;;;AACAprD,YAAI,CAACkI,IAAL,CAAUkjD,EAAV,EAAcL,aAAa,CAACE,EAAD,CAAb,CAAkBhhD,IAAhC,IACEkmC,YAAY,CAACzqC,KAAD,CAAZ,CAAoBqlD,aAAa,CAAC/oB,QAAD,CAAb,CAAwB/3B,IAA5C,CADF;AAED,OAzBD;AA0BD,KA9BD;AA+BD,GAnED;AAoEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEjK,MAAI,CAACga,wBAAL,GAAgC,UAAU/G,WAAV,EAAuB;AACrD,QAAI,CAACjT,IAAI,CAACkJ,UAAL,CAAgBgQ,oBAArB,EAA2C,OAAO,EAAP;AAC3C,QAAMqjC,MAAM,GAAG,EAAf;;AACA,SAAK,IAAIv1C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGhH,IAAI,CAAC0Y,cAAL,CAAoBlT,MAAxC,EAAgDwB,CAAC,EAAjD,EAAqD;AACnD,UAAMqR,MAAM,GAAGrY,IAAI,CAAC0Y,cAAL,CAAoB1R,CAApB,CAAf;;AACA,WAAK,IAAIsR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,MAAM,CAAC7S,MAA3B,EAAmC8S,CAAC,EAApC,EAAwC;AACtC,YAAMC,KAAK,GAAGF,MAAM,CAACC,CAAD,CAApB;;AACA,YAAIrF,WAAW,IAAIsF,KAAK,CAAC0B,IAArB,IAA6BhH,WAAW,IAAIsF,KAAK,CAAC2B,EAAtD,EAA0D;AACxDqiC,gBAAM,CAACnzC,IAAP,CAAYmP,KAAZ;AACA;AACD;AACF;AACF;;AACD,WAAOgkC,MAAP;AACD,GAdD;AAeA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEv8C,MAAI,CAAC6a,qBAAL,GAA6B,UAAUrI,QAAV,EAAoB;AAC/C,QAAI,CAACxS,IAAI,CAACkJ,UAAL,CAAgBoQ,iBAArB,EAAwC,OAAO,EAAP;AACxC,QAAMijC,MAAM,GAAG,EAAf;;AACA,SAAK,IAAIv1C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGhH,IAAI,CAAC8Y,WAAL,CAAiBtT,MAArC,EAA6CwB,CAAC,EAA9C,EAAkD;AAChD,UAAMqR,MAAM,GAAGrY,IAAI,CAAC8Y,WAAL,CAAiB9R,CAAjB,CAAf;;AACA,WAAK,IAAIsR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,MAAM,CAAC7S,MAA3B,EAAmC8S,CAAC,EAApC,EAAwC;AACtC,YAAMC,KAAK,GAAGF,MAAM,CAACC,CAAD,CAApB;;AACA,YAAI9F,QAAQ,IAAI+F,KAAK,CAAC0B,IAAlB,IAA0BzH,QAAQ,IAAI+F,KAAK,CAAC2B,EAAhD,EAAoD;AAClDqiC,gBAAM,CAACnzC,IAAP,CAAYmP,KAAZ;AACA;AACD;AACF;AACF;;AACD,WAAOgkC,MAAP;AACD,GAdD;AAgBA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEv8C,MAAI,CAAC4jD,eAAL,GAAuB,UAAU3wC,WAAV,EAAuB;AAC5C,WACEjT,IAAI,CAACs3B,YAAL,CAAkBnwB,MAAlB,CAAyB,UAAU6H,CAAV,EAAa;AACpC,aAAOA,CAAC,CAACiE,WAAF,KAAkBA,WAAzB;AACD,KAFD,EAEGzN,MAFH,GAEY,CAHd;AAKD,GAND;AAOA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACExF,MAAI,CAAC2jD,YAAL,GAAoB,UAAUnxC,QAAV,EAAoB;AACtC,WACExS,IAAI,CAACs3B,YAAL,CAAkBnwB,MAAlB,CAAyB,UAAU6H,CAAV,EAAa;AACpC,aAAOA,CAAC,CAACwD,QAAF,KAAeA,QAAtB;AACD,KAFD,EAEGhN,MAFH,GAEY,CAHd;AAKD,GAND;AAOA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACExF,MAAI,CAACye,qBAAL,GAA6B,UAAU1c,CAAV,EAAaE,CAAb,EAAgB;AAC3C,WAAOjC,IAAI,CAACs3B,YAAL,CAAkBnwB,MAAlB,CAAyB,UAAU6H,CAAV,EAAa;AAC3C,aAAOA,CAAC,CAACiE,WAAF,KAAkBlR,CAAlB,IAAuBiN,CAAC,CAACwD,QAAF,KAAevQ,CAA7C;AACD,KAFM,EAEJ,CAFI,CAAP;AAGD,GAJD;AAKA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEjC,MAAI,CAACqvC,kBAAL,GAA0B,UAAUttC,CAAV,EAAaE,CAAb,EAAgB;AACxC,QAAMspD,UAAU,GAAGvrD,IAAI,CAAC+8B,uBAAxB;AACA,QAAIwuB,UAAU,CAAC/lD,MAAX,IAAqB,CAAzB,EAA4B;;AAC5B,SAAK,IAAIwB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGukD,UAAU,CAAC/lD,MAA/B,EAAuCwB,CAAC,EAAxC,EAA4C;AAC1C,UAAMooC,SAAS,GAAGmc,UAAU,CAACvkD,CAAD,CAA5B;AACA,UACEjF,CAAC,IAAIqtC,SAAS,CAACrtC,CAAf,IACAE,CAAC,IAAImtC,SAAS,CAACntC,CADf,IAEAF,CAAC,IAAIqtC,SAAS,CAACpS,EAFf,IAGA/6B,CAAC,IAAImtC,SAAS,CAACnS,EAJjB,EAME,OAAOmS,SAAP;AACH;AACF,GAbD;AAcA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEpvC,MAAI,CAACgxC,gBAAL,GAAwB,UAAUjvC,CAAV,EAAaE,CAAb,EAAgB;AACtC,QAAMoW,MAAM,GAAGrY,IAAI,CAAC0Y,cAAL,CAAoBlT,MAAnC;AACA,QAAI6S,MAAM,IAAI,CAAd,EAAiB;AACjB,QAAMmzC,KAAK,GAAGxrD,IAAI,CAAC+X,wBAAL,EAAd;AACA,QAAI9V,CAAC,IAAIupD,KAAT,EAAgB;;AAChB,SAAK,IAAIxkD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGhH,IAAI,CAACqgC,aAAL,CAAmB76B,MAAvC,EAA+CwB,CAAC,EAAhD,EAAoD;AAClD,UAAMg4B,CAAC,GAAGh/B,IAAI,CAACqgC,aAAL,CAAmBr5B,CAAnB,CAAV;AACA,UAAIg4B,CAAC,CAACn0B,IAAF,KAAW,GAAf,EAAoB;AACpB,UAAI9I,CAAC,IAAIi9B,CAAC,CAACj9B,CAAP,IAAYE,CAAC,IAAI+8B,CAAC,CAAC/8B,CAAnB,IAAwBF,CAAC,IAAIi9B,CAAC,CAAChC,EAA/B,IAAqC/6B,CAAC,IAAI+8B,CAAC,CAAC/B,EAAhD,EAAoD,OAAO+B,CAAP;AACrD;AACF,GAVD;AAWA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEh/B,MAAI,CAACkxC,aAAL,GAAqB,UAAUnvC,CAAV,EAAaE,CAAb,EAAgB;AACnC,QAAMoW,MAAM,GAAGrY,IAAI,CAAC8Y,WAAL,CAAiBtT,MAAhC;AACA,QAAI6S,MAAM,IAAI,CAAd,EAAiB;AACjB,QAAMozC,KAAK,GAAGzrD,IAAI,CAACiY,oBAAL,EAAd;AACA,QAAIlW,CAAC,IAAI0pD,KAAT,EAAgB;;AAChB,SAAK,IAAIzkD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGhH,IAAI,CAACqgC,aAAL,CAAmB76B,MAAvC,EAA+CwB,CAAC,EAAhD,EAAoD;AAClD,UAAMg4B,CAAC,GAAGh/B,IAAI,CAACqgC,aAAL,CAAmBr5B,CAAnB,CAAV;AACA,UAAIg4B,CAAC,CAACn0B,IAAF,KAAW,GAAf,EAAoB;AACpB,UAAI9I,CAAC,IAAIi9B,CAAC,CAACj9B,CAAP,IAAYE,CAAC,IAAI+8B,CAAC,CAAC/8B,CAAnB,IAAwBF,CAAC,IAAIi9B,CAAC,CAAChC,EAA/B,IAAqC/6B,CAAC,IAAI+8B,CAAC,CAAC/B,EAAhD,EAAoD,OAAO+B,CAAP;AACrD;AACF,GAVD;AAWA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEh/B,MAAI,CAAC0c,SAAL,GAAiB,UAAU3a,CAAV,EAAaE,CAAb,EAAgBypD,mBAAhB,EAAqC;AACpD,aAASC,SAAT,CAAmBC,OAAnB,EAA4B;AAC1B,UACEA,OAAO,CAAC7pD,CAAR,GAAY6pD,OAAO,CAACp9C,KAApB,GAA4BxO,IAAI,CAACkJ,UAAL,CAAgB2iD,gBAAhB,GAAmC,GAA/D,GACE9pD,CADF,IAEA6pD,OAAO,CAAC7pD,CAAR,GAAY6pD,OAAO,CAACp9C,KAApB,GAA4BxO,IAAI,CAACkJ,UAAL,CAAgB2iD,gBAAhB,GAAmC,GAA/D,GAAqE9pD,CAHvE,EAIE;AACA,eAAO,GAAP;AACD;;AACD,UACE6pD,OAAO,CAAC7pD,CAAR,GAAY/B,IAAI,CAACkJ,UAAL,CAAgB2iD,gBAAhB,GAAmC,GAA/C,GAAqD9pD,CAArD,IACA6pD,OAAO,CAAC7pD,CAAR,GAAY/B,IAAI,CAACkJ,UAAL,CAAgB2iD,gBAAhB,GAAmC,GAA/C,GAAqD9pD,CAFvD,EAGE;AACA,eAAO,GAAP;AACD;;AACD,UACE6pD,OAAO,CAAC3pD,CAAR,GAAY2pD,OAAO,CAACzpD,MAApB,GAA6BnC,IAAI,CAACkJ,UAAL,CAAgB2iD,gBAAhB,GAAmC,GAAhE,GACE5pD,CADF,IAEA2pD,OAAO,CAAC3pD,CAAR,GAAY2pD,OAAO,CAACzpD,MAApB,GAA6BnC,IAAI,CAACkJ,UAAL,CAAgB2iD,gBAAhB,GAAmC,GAAhE,GAAsE5pD,CAHxE,EAIE;AACA,eAAO,GAAP;AACD;;AACD,UACE2pD,OAAO,CAAC3pD,CAAR,GAAYjC,IAAI,CAACkJ,UAAL,CAAgB2iD,gBAAhB,GAAmC,GAA/C,GAAqD5pD,CAArD,IACA2pD,OAAO,CAAC3pD,CAAR,GAAYjC,IAAI,CAACkJ,UAAL,CAAgB2iD,gBAAhB,GAAmC,GAA/C,GAAqD5pD,CAFvD,EAGE;AACA,eAAO,GAAP;AACD;AACF;;AACD,QAAI,CAACjC,IAAI,CAACs3B,YAAV,EAAwB;AACtB;AACD;;AACDv1B,KAAC,IAAI/B,IAAI,CAACiY,oBAAL,EAAL;AACAhW,KAAC,IAAIjC,IAAI,CAAC+X,wBAAL,EAAL;;AAEA,QAAI/X,IAAI,CAAConC,eAAL,KAAyBxlC,SAA7B,EAAwC;AACtC,UAAIG,CAAC,IAAI,CAAT,EAAYA,CAAC,GAAG,CAAJ;AACZ,UAAIA,CAAC,IAAI/B,IAAI,CAACwO,KAAd,EAAqBzM,CAAC,GAAG/B,IAAI,CAACwO,KAAL,GAAa,CAAjB;AACrB,UAAIvM,CAAC,IAAI,CAAT,EAAYA,CAAC,GAAG,CAAJ;AACZ,UAAIA,CAAC,IAAIjC,IAAI,CAACmC,MAAd,EAAsBF,CAAC,GAAGjC,IAAI,CAACmC,MAAL,GAAc,CAAlB;AACvB;;AAED,QAAI4hB,MAAJ;AAAA,QACE+nC,GAAG,GAAGJ,mBAAmB,GAAG1rD,IAAI,CAACkJ,UAAL,CAAgB6iD,eAAnB,GAAqC,CADhE;AAAA,QAEEC,QAAQ,GAAGhsD,IAAI,CAACkJ,UAAL,CAAgB+iD,kBAAhB,KAAuC,MAFpD;AAAA,QAGEjlD,CAHF;AAAA,QAIEipB,CAAC,GAAGjwB,IAAI,CAACs3B,YAAL,CAAkB9xB,MAJxB;AAAA,QAKE0mD,UALF;AAAA,QAMEC,eAAe,GAAGH,QAAQ,GAAGhsD,IAAI,CAACmvC,UAAR,GAAqB,WANjD;AAAA,QAOEid,eAAe,GAAGJ,QAAQ,GAAGhsD,IAAI,CAACmvC,UAAR,GAAqB,WAPjD;AAAA,QAQE7/B,IARF;AAAA,QASEs8C,OATF;;AAUA,QAAI,CAAC5rD,IAAI,CAACs3B,YAAN,IAAsB,CAACt3B,IAAI,CAACs3B,YAAL,CAAkB9xB,MAA7C,EAAqD;AACnD;AACD;;AACDxF,QAAI,CAACyO,QAAL,GAAgB,IAAhB;;AACA,QAAI,EAAExM,CAAC,GAAGjC,IAAI,CAACmC,MAAT,IAAmBF,CAAC,GAAG,CAAvB,IAA4BF,CAAC,GAAG/B,IAAI,CAACwO,KAArC,IAA8CzM,CAAC,GAAG,CAApD,CAAJ,EAA4D;AAC1D/B,UAAI,CAACyO,QAAL,GAAgB,KAAhB;AACA,aAAO;AACL67B,mBAAW,EAAE,SADR;AAELjkB,eAAO,EAAE;AAFJ,OAAP;AAID;;AACD,SAAKrf,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGipB,CAAhB,EAAmBjpB,CAAC,IAAI,CAAxB,EAA2B;AACzBsI,UAAI,GAAGtP,IAAI,CAACs3B,YAAL,CAAkBtwB,CAAlB,CAAP,CADyB,CAEzB;;AACA4kD,aAAO,GAAG;AACR7pD,SAAC,EAAEuN,IAAI,CAACvN,CADA;AAERE,SAAC,EAAEqN,IAAI,CAACrN,CAFA;AAGRE,cAAM,EAAEmN,IAAI,CAACnN,MAHL;AAIRqM,aAAK,EAAEc,IAAI,CAACd;AAJJ,OAAV;;AAMA,UACEk9C,mBAAmB,IACnB,gCAAgC7iD,IAAhC,CAAqCyG,IAAI,CAACzN,KAA1C,CAFF,EAGE;AACA+pD,eAAO,CAAC7pD,CAAR,IAAa+pD,GAAb;AACAF,eAAO,CAAC3pD,CAAR,IAAa6pD,GAAb;AACAF,eAAO,CAACzpD,MAAR,IAAkB2pD,GAAlB;AACAF,eAAO,CAACp9C,KAAR,IAAiBs9C,GAAjB;AACD;;AACD,UACEF,OAAO,CAAC7pD,CAAR,GAAY/B,IAAI,CAAC6B,KAAL,CAAW2c,eAAvB,GAAyCzc,CAAzC,IACA6pD,OAAO,CAAC7pD,CAAR,GAAY6pD,OAAO,CAACp9C,KAApB,GAA4BxO,IAAI,CAAC6B,KAAL,CAAW2c,eAAvC,GAAyDzc,CADzD,IAEA6pD,OAAO,CAAC3pD,CAAR,GAAYjC,IAAI,CAAC6B,KAAL,CAAW2c,eAAvB,GAAyCvc,CAFzC,IAGA2pD,OAAO,CAAC3pD,CAAR,GAAY2pD,OAAO,CAACzpD,MAApB,GAA6BnC,IAAI,CAAC6B,KAAL,CAAW2c,eAAxC,GAA0Dvc,CAJ5D,EAKE;AACA,YAAI,oBAAoB4G,IAApB,CAAyByG,IAAI,CAACzN,KAA9B,CAAJ,EAA0C;AACxC,cAAI7B,IAAI,CAAC2kC,QAAL,KAAkB,sBAAtB,EAA8C;AAC9Cr1B,cAAI,CAACg7B,WAAL,GAAmBh7B,IAAI,CAACzN,KAAxB;AACAyN,cAAI,CAAC+W,OAAL,GAAe,MAAf;AACA,iBAAO/W,IAAP;AACD;;AACD,YAAI,uBAAuBzG,IAAvB,CAA4ByG,IAAI,CAACzN,KAAjC,CAAJ,EAA6C;AAC3C,cAAI7B,IAAI,CAAC2kC,QAAL,KAAkB,mBAAtB,EAA2C;AAC3Cr1B,cAAI,CAACg7B,WAAL,GAAmBh7B,IAAI,CAACzN,KAAxB;AACAyN,cAAI,CAAC+W,OAAL,GAAe,MAAf;AACA,iBAAO/W,IAAP;AACD;;AACD,YAAI,oBAAoBzG,IAApB,CAAyByG,IAAI,CAACzN,KAA9B,CAAJ,EAA0C;AACxCyN,cAAI,CAACg7B,WAAL,GAAmBh7B,IAAI,CAACzN,KAAxB;AACAyN,cAAI,CAAC+W,OAAL,GAAe,WAAf;AACA,iBAAO/W,IAAP;AACD;;AACD,YAAI,4BAA4BzG,IAA5B,CAAiCyG,IAAI,CAACzN,KAAtC,CAAJ,EAAkD;AAChDyN,cAAI,CAACg7B,WAAL,GAAmB,qBAAnB;AACAh7B,cAAI,CAAC+W,OAAL,GAAe,qBAAf;AACA/W,cAAI,CAACqF,WAAL,GAAmB,IAAnB;AACArF,cAAI,CAAC+8C,mBAAL,GAA2B,IAA3B;;AACA,cAAIpqD,CAAC,GAAGjC,IAAI,CAACsC,SAAL,CAAemrC,GAAf,CAAmBrkB,CAAnB,CAAqBnnB,CAArB,GAAyBjC,IAAI,CAACsC,SAAL,CAAey0B,eAAhD,EAAiE;AAC/DznB,gBAAI,CAACg7B,WAAL,GAAmB,wBAAnB;AACAh7B,gBAAI,CAAC+W,OAAL,GAAe,wBAAf;AACD,WAHD,MAGO,IAAIpkB,CAAC,GAAGjC,IAAI,CAACsC,SAAL,CAAemrC,GAAf,CAAmBrkB,CAAnB,CAAqBnnB,CAA7B,EAAgC;AACrCqN,gBAAI,CAACg7B,WAAL,GAAmB,qBAAnB;AACAh7B,gBAAI,CAAC+W,OAAL,GAAe,qBAAf;AACD;;AACDrmB,cAAI,CAACsiB,MAAL,GAAc,SAAd;AACA,iBAAOhT,IAAP;AACD;;AACD,YAAI,8BAA8BzG,IAA9B,CAAmCyG,IAAI,CAACzN,KAAxC,CAAJ,EAAoD;AAClDyN,cAAI,CAACg7B,WAAL,GAAmB,uBAAnB;AACAh7B,cAAI,CAAC+W,OAAL,GAAe,uBAAf;AACA/W,cAAI,CAACqF,WAAL,GAAmB,IAAnB;AACArF,cAAI,CAACg9C,qBAAL,GAA6B,IAA7B;;AACA,cAAIvqD,CAAC,GAAG/B,IAAI,CAACsC,SAAL,CAAemrC,GAAf,CAAmB37B,CAAnB,CAAqB/P,CAArB,GAAyB/B,IAAI,CAACsC,SAAL,CAAeo0B,cAAhD,EAAgE;AAC9DpnB,gBAAI,CAACg7B,WAAL,GAAmB,yBAAnB;AACAh7B,gBAAI,CAAC+W,OAAL,GAAe,yBAAf;AACD,WAHD,MAGO,IAAItkB,CAAC,GAAG/B,IAAI,CAACsC,SAAL,CAAemrC,GAAf,CAAmB37B,CAAnB,CAAqB/P,CAA7B,EAAgC;AACrCuN,gBAAI,CAACg7B,WAAL,GAAmB,wBAAnB;AACAh7B,gBAAI,CAAC+W,OAAL,GAAe,wBAAf;AACD;;AACDrmB,cAAI,CAACsiB,MAAL,GAAc,SAAd;AACA,iBAAOhT,IAAP;AACD;;AACDyU,cAAM,GAAG4nC,SAAS,CAACC,OAAD,CAAlB,CAhDA,CAiDA;;AACAM,kBAAU,GACRF,QAAQ,IACR18C,IAAI,CAACmpB,eADL,IAEAnpB,IAAI,CAACmpB,eAAL,CAAqBtsB,OAArB,CAA6B4X,MAA7B,MAAyC,CAAC,CAH5C;;AAIA,YACE,CAAC,GAAD,EAAM,GAAN,EAAW5X,OAAX,CAAmB4X,MAAnB,MAA+B,CAAC,CAAhC,KACC/jB,IAAI,CAACkJ,UAAL,CAAgBqjD,iBAAhB,IAAqCL,UADtC,MAEElsD,IAAI,CAACkJ,UAAL,CAAgBsjD,yBAAhB,IAA6Cl9C,IAAI,CAACgrB,QAAnD,IACC,CAAChrB,IAAI,CAACgrB,QADP,IAEC4xB,UAJF,MAKElsD,IAAI,CAACkJ,UAAL,CAAgBujD,oBAAhB,KACCn9C,IAAI,CAACuF,WAAL,IAAoBvF,IAAI,CAACsF,QAD1B,CAAD,IAEC,EAAEtF,IAAI,CAACuF,WAAL,IAAoBvF,IAAI,CAACsF,QAA3B,CAPF,CADF,EASE;AACA,cACE,CAACtF,IAAI,CAAC6J,cAAL,IACC7J,IAAI,CAACsF,QADN,IAEE5U,IAAI,CAACkJ,UAAL,CAAgBsjD,yBAAhB,IAA6Cl9C,IAAI,CAACgrB,QAFrD,KAGAvW,MAAM,KAAK,GAJb,EAKE;AACAzU,gBAAI,CAAC+W,OAAL,GAAe,WAAf;AACA/W,gBAAI,CAACg7B,WAAL,GAAmB,WAAnB;AACA,mBAAOh7B,IAAP;AACD;;AACD,cAAI,EAAEA,IAAI,CAAC6J,cAAL,IAAuB7J,IAAI,CAACsF,QAA9B,KAA2Cs3C,UAA/C,EAA2D;AACzD58C,gBAAI,CAAC+W,OAAL,GAAe8lC,eAAf;AACA78C,gBAAI,CAACg7B,WAAL,GAAmBvmB,MAAM,GAAG,OAA5B;AACA,mBAAOzU,IAAP;AACD;AACF;;AACD,YACE,CAAC,GAAD,EAAM,GAAN,EAAWnD,OAAX,CAAmB4X,MAAnB,MAA+B,CAAC,CAAhC,IACAzU,IAAI,CAACkD,QAAL,GAAgB,CAAC,CADjB,KAECxS,IAAI,CAACkJ,UAAL,CAAgBwjD,cAAhB,IAAkCR,UAFnC,MAGElsD,IAAI,CAACkJ,UAAL,CAAgByjD,sBAAhB,IAA0Cr9C,IAAI,CAACgrB,QAAhD,IACC,CAAChrB,IAAI,CAACgrB,QADP,IAEC4xB,UALF,KAMA,CAAC58C,IAAI,CAAC6J,cAPR,EAQE;AACA,cACE,CAAC7J,IAAI,CAACuF,WAAL,IACCvF,IAAI,CAACsF,QADN,IAEE5U,IAAI,CAACkJ,UAAL,CAAgByjD,sBAAhB,IAA0Cr9C,IAAI,CAACgrB,QAFlD,KAGAvW,MAAM,KAAK,GAJb,EAKE;AACAzU,gBAAI,CAAC+W,OAAL,GAAe,WAAf;AACA/W,gBAAI,CAACg7B,WAAL,GAAmB,WAAnB;AACA,mBAAOh7B,IAAP;AACD;;AACD,cAAI,EAAEA,IAAI,CAACuF,WAAL,IAAoBvF,IAAI,CAACsF,QAA3B,KAAwCs3C,UAA5C,EAAwD;AACtD58C,gBAAI,CAAC+W,OAAL,GAAe+lC,eAAf;AACA98C,gBAAI,CAACg7B,WAAL,GAAmBvmB,MAAM,GAAG,OAA5B;AACA,mBAAOzU,IAAP;AACD;AACF;;AACD,YAAIA,IAAI,CAACzN,KAAL,KAAe,kBAAnB,EAAuC;AACrC,cACG,CAAC7B,IAAI,CAAC0Z,gBAAL,CAAsBpK,IAAI,CAAC2D,WAA3B,CAAD,IACC3D,IAAI,CAACvN,CAAL,GACEuN,IAAI,CAACd,KADP,GAEExO,IAAI,CAACkJ,UAAL,CAAgB0jD,kBAFlB,GAGE5sD,IAAI,CAAC6B,KAAL,CAAW2c,eAHb,GAIEzc,CALJ,IAMA,CAAC/B,IAAI,CAACkJ,UAAL,CAAgB2qC,kBAPnB,EAQE;AACAvkC,gBAAI,CAACg7B,WAAL,GAAmB,MAAnB;AACAh7B,gBAAI,CAAC+W,OAAL,GAAe,MAAf;AACD,WAXD,MAWO;AACL/W,gBAAI,CAAC+W,OAAL,GAAermB,IAAI,CAACmvC,UAApB;AACA7/B,gBAAI,CAACg7B,WAAL,GAAmB,gBAAnB;AACD;;AACD,iBAAOh7B,IAAP;AACD;;AACD,YAAIA,IAAI,CAACzN,KAAL,KAAe,eAAnB,EAAoC;AAClC,cACG,CAAC7B,IAAI,CAACkpD,aAAL,CAAmB55C,IAAI,CAACkD,QAAxB,CAAD,IACCxS,IAAI,CAACkJ,UAAL,CAAgB2jD,eAAhB,IACGv9C,IAAI,CAACrN,CAAL,GAASjC,IAAI,CAAC6B,KAAL,CAAW2c,eADvB,IAEEvc,CAHJ,IAIA,CAACjC,IAAI,CAACkJ,UAAL,CAAgB2qC,kBALnB,EAME;AACAvkC,gBAAI,CAACg7B,WAAL,GAAmB,MAAnB;AACAh7B,gBAAI,CAAC+W,OAAL,GAAe,MAAf;AACD,WATD,MASO;AACL/W,gBAAI,CAAC+W,OAAL,GAAermB,IAAI,CAACmvC,UAApB;AACA7/B,gBAAI,CAACg7B,WAAL,GAAmB,aAAnB;AACD;;AACD,iBAAOh7B,IAAP;AACD;;AACD,YAAIA,IAAI,CAACqN,MAAT,EAAiB;AACf3c,cAAI,CAACyO,QAAL,GAAgB,KAAhB;AACAa,cAAI,CAACg7B,WAAL,GAAmB,WAAnB;AACAh7B,cAAI,CAAC+W,OAAL,GAAe,WAAf;AACA,iBAAO/W,IAAP;AACD;;AACD,YAAIA,IAAI,CAACzN,KAAL,KAAe,WAAnB,EAAgC;AAC9B7B,cAAI,CAACyO,QAAL,GAAgB,KAAhB;AACAa,cAAI,CAACg7B,WAAL,GAAmB,MAAnB;AACAh7B,cAAI,CAAC+W,OAAL,GAAe,MAAf;AACA,iBAAO/W,IAAP;AACD;;AACDA,YAAI,CAACg7B,WAAL,GAAmB,MAAnB;AACAh7B,YAAI,CAAC+W,OAAL,GAAe,MAAf;AACA,eAAO/W,IAAP;AACD;AACF;;AACDtP,QAAI,CAACyO,QAAL,GAAgB,IAAhB;AACAzO,QAAI,CAACsiB,MAAL,GAAc,SAAd;AACA,WAAO;AACLgoB,iBAAW,EAAE,YADR;AAELjkB,aAAO,EAAE,YAFJ;AAGLxkB,WAAK,EAAE,YAHF;AAIL4S,kBAAY,EAAE;AAJT,KAAP;AAMD,GA1PD;AA2PA;AACF;AACA;AACA;AACA;AACA;AACA;;;AACEzU,MAAI,CAAC6vC,kBAAL,GAA0B,YAAY;AACpC,QAAI7nB,GAAG,GAAG;AAAEjmB,OAAC,EAAE0b,QAAL;AAAexb,OAAC,EAAEwb;AAAlB,KAAV;AAAA,QACEwK,IAAI,GAAG;AAAElmB,OAAC,EAAE,CAAC0b,QAAN;AAAgBxb,OAAC,EAAE,CAACwb;AAApB,KADT;AAEAzd,QAAI,CAACsS,UAAL,CAAgB7M,OAAhB,CAAwB,UAAU2K,GAAV,EAAeoC,QAAf,EAAyB;AAC/C,UAAIs6C,MAAJ,EAAYC,MAAZ;AACA/kC,SAAG,CAAC/lB,CAAJ,GAAQuQ,QAAQ,GAAGwV,GAAG,CAAC/lB,CAAf,GAAmBuQ,QAAnB,GAA8BwV,GAAG,CAAC/lB,CAA1C;AACAgmB,UAAI,CAAChmB,CAAL,GAASuQ,QAAQ,GAAGyV,IAAI,CAAChmB,CAAhB,GAAoBuQ,QAApB,GAA+ByV,IAAI,CAAChmB,CAA7C;AACA6qD,YAAM,GAAG1rC,IAAI,CAACO,GAAL,CAASvd,KAAT,CAAe,IAAf,EAAqBgM,GAArB,CAAT;AACA28C,YAAM,GAAG3rC,IAAI,CAACQ,GAAL,CAASxd,KAAT,CAAe,IAAf,EAAqBgM,GAArB,CAAT;AACA4X,SAAG,CAACjmB,CAAJ,GAAQgrD,MAAM,GAAG/kC,GAAG,CAACjmB,CAAb,GAAiBgrD,MAAjB,GAA0B/kC,GAAG,CAACjmB,CAAtC;AACAkmB,UAAI,CAAClmB,CAAL,GAAS+qD,MAAM,GAAG7kC,IAAI,CAAClmB,CAAd,GAAkB+qD,MAAlB,GAA2B7kC,IAAI,CAAClmB,CAAzC;AACD,KARD;AASA,WAAO;AACLG,SAAG,EAAE8lB,GAAG,CAAC/lB,CADJ;AAELD,UAAI,EAAEgmB,GAAG,CAACjmB,CAFL;AAGL4C,YAAM,EAAEsjB,IAAI,CAAChmB,CAHR;AAIL8C,WAAK,EAAEkjB,IAAI,CAAClmB;AAJP,KAAP;AAMD,GAlBD;AAmBA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACE/B,MAAI,CAAC6jD,iBAAL,GAAyB,UAAUnuC,CAAV,EAAa;AACpCA,KAAC,GAAGA,CAAC,IAAI1V,IAAI,CAAC4f,YAAd;AACA,WAAO3a,MAAM,CAAC8L,IAAP,CAAY2E,CAAC,CAAC,CAAD,CAAD,IAAQ;AAAE,WAAK;AAAP,KAApB,EAAiCzE,GAAjC,CAAqC,SAAS+7C,mBAAT,CAC1C97C,GAD0C,EAE1CxL,KAF0C,EAG1C;AACA,UAAImF,IAAI,GAAG7K,IAAI,CAACy+C,oBAAL,CAA0BvtC,GAA1B,EAA+BwE,CAA/B,CAAX;AAAA,UACE1O,CAAC,GAAG;AACFiD,YAAI,EAAEiH,GADJ;AAEFjN,aAAK,EAAEqB,KAAK,CAACqD,QAAQ,CAACuI,GAAD,EAAM,EAAN,CAAT,CAAL,GACHA,GADG,GAEHlR,IAAI,CAAC2kD,cAAL,CAAoBzzC,GAApB,EAAyBvK,WAAzB,EAJF;AAKFjB,aAAK,EAAEA,KALL;AAMFuN,mBAAW,EAAEvN,KANX;AAOFmF,YAAI,EAAEA,IAPJ;AAQF1D,cAAM,EAAEnH,IAAI,CAACmH,MAAL,CAAY0D,IAAZ;AARN,OADN;;AAWA,UACE7K,IAAI,CAAC8W,cAAL,IACA9W,IAAI,CAAC8W,cAAL,CAAoBgmC,UADpB,IAEA98C,IAAI,CAAC8W,cAAL,CAAoBgmC,UAApB,CAA+B91C,CAAC,CAACiD,IAAjC,MAA2CrI,SAH7C,EAIE;AACAoF,SAAC,CAAC6O,MAAF,GAAW,CAAC7V,IAAI,CAAC8W,cAAL,CAAoBgmC,UAApB,CAA+B91C,CAAC,CAACiD,IAAjC,CAAZ;AACD;;AACD,aAAOjD,CAAP;AACD,KAvBM,CAAP;AAwBD,GA1BD;AA2BA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEhH,MAAI,CAACgjD,cAAL,GAAsB,YAAY;AAChChjD,QAAI,CAAC2f,OAAL,GAAe,EAAf;AACD,GAFD;AAGA;AACF;AACA;AACA;AACA;AACA;AACA;;;AACE3f,MAAI,CAACywC,UAAL,GAAkB,UAAUwc,MAAV,EAAkB7e,IAAlB,EAAwB;AACxCpuC,QAAI,CAACuwC,eAAL,GAAuB0c,MAAM,IAAIjtD,IAAI,CAACuwC,eAAtC;AACA,QAAIpsC,EAAJ;AAAA,QACEpC,CADF;AAAA,QAEEE,CAFF;AAAA,QAGER,CAAC,GAAGzB,IAAI,CAACkU,SAAL,EAHN;;AAIA,QAAI,CAACk6B,IAAL,EAAW;AACTpuC,UAAI,CAACsS,UAAL,GAAkB,EAAlB;AACAtS,UAAI,CAACy5B,YAAL,GAAoB,EAApB;AACAz5B,UAAI,CAAC05B,eAAL,GAAuB,EAAvB;AACD;;AACD,QACE15B,IAAI,CAACuwC,eAAL,CAAqBruC,GAArB,GAA2B,CAAC,CAA5B,IACAlC,IAAI,CAACuwC,eAAL,CAAqB5rC,MAArB,GAA8B3E,IAAI,CAACmQ,QAAL,CAAc3K,MAD5C,IAEAxF,IAAI,CAACuwC,eAAL,CAAqBvuC,IAArB,GAA4B,CAAC,CAF7B,IAGAhC,IAAI,CAACuwC,eAAL,CAAqBxrC,KAArB,GAA6BtD,CAAC,CAAC+D,MAJjC,EAKE;AACA,YAAM,IAAIlE,KAAJ,CAAU,2BAAV,CAAN;AACD;;AACD,SACES,CAAC,GAAG/B,IAAI,CAACuwC,eAAL,CAAqBruC,GAD3B,EAEEH,CAAC,IAAI/B,IAAI,CAACuwC,eAAL,CAAqB5rC,MAF5B,EAGE5C,CAAC,IAAI,CAHP,EAIE;AACA/B,UAAI,CAACsS,UAAL,CAAgBvQ,CAAhB,IAAqB,EAArB;AACA/B,UAAI,CAACy5B,YAAL,CAAkBrwB,IAAlB,CAAuBrH,CAAvB;;AACA,WACEE,CAAC,GAAGjC,IAAI,CAACuwC,eAAL,CAAqBvuC,IAD3B,EAEEC,CAAC,IAAIjC,IAAI,CAACuwC,eAAL,CAAqBxrC,KAF5B,EAGE9C,CAAC,IAAI,CAHP,EAIE;AACA,YAAIjC,IAAI,CAACsS,UAAL,CAAgBvQ,CAAhB,EAAmBoK,OAAnB,CAA2BlK,CAA3B,MAAkC,CAAC,CAAvC,EAA0C;AACxCjC,cAAI,CAACsS,UAAL,CAAgBvQ,CAAhB,EAAmBqH,IAAnB,CAAwBnH,CAAxB;AACD;;AACD,YAAIA,CAAC,KAAK,CAAC,CAAP,IAAYjC,IAAI,CAAC05B,eAAL,CAAqBvtB,OAArB,CAA6BlK,CAA7B,MAAoC,CAAC,CAArD,EAAwD;AACtDjC,cAAI,CAAC05B,eAAL,CAAqBtwB,IAArB,CAA0BnH,CAA1B;AACD;AACF;AACF;;AACDkC,MAAE,GAAG;AACHmO,gBAAU,EAAEtS,IAAI,CAACsS,UADd;AAEHi+B,qBAAe,EAAEvwC,IAAI,CAACuwC,eAFnB;AAGHF,mBAAa,EAAErwC,IAAI,CAACswC,gBAAL;AAHZ,KAAL;AAKArrC,UAAM,CAACC,cAAP,CAAsBf,EAAtB,EAA0B,cAA1B,EAA0C;AACxCgB,SAAG,EAAE,eAAY;AACf,eAAOnF,IAAI,CAACowC,eAAL,EAAP;AACD;AAHuC,KAA1C;AAKApwC,QAAI,CAACwE,aAAL,CAAmB,kBAAnB,EAAuCL,EAAvC;AACD,GAlDD;AAmDA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEnE,MAAI,CAACs/C,uBAAL,GAA+B,UAAUr1C,IAAV,EAAgB;AAC7C,QAAIksB,CAAC,GAAG,CAAC1Y,QAAT;;AACA,QAAIxT,IAAI,KAAK,YAAb,EAA2B;AACzBjK,UAAI,CAAComB,GAAL,CAAS8M,IAAT,GAAgBlzB,IAAI,CAAC6B,KAAL,CAAWqrD,iBAA3B;AACA,aACEltD,IAAI,CAAComB,GAAL,CAASgK,WAAT,CACE,CACEpwB,IAAI,CAACmQ,QAAL,CAAc3K,MAAd,IAAwBxF,IAAI,CAACkJ,UAAL,CAAgB46B,UAAhB,GAA6B,CAA7B,GAAiC,CAAzD,CADF,EAEEva,QAFF,EADF,EAIE/a,KAJF,GAKAxO,IAAI,CAAC6B,KAAL,CAAWsrD,eALX,GAMAntD,IAAI,CAAC6B,KAAL,CAAWurD,yBANX,GAOAptD,IAAI,CAAC6B,KAAL,CAAWwrD,yBAPX,GAQArtD,IAAI,CAAC6B,KAAL,CAAWyrD,wBARX,IASCttD,IAAI,CAACkJ,UAAL,CAAgByjB,IAAhB,GACG3sB,IAAI,CAAC6B,KAAL,CAAWwqB,cAAX,GACArsB,IAAI,CAAC6B,KAAL,CAAWuqB,mBADX,GAEApsB,IAAI,CAAC6B,KAAL,CAAWsqB,oBAHd,GAIG,CAbJ,CADF;AAgBD;;AACD,QAAIohC,SAAS,GAAG,IAAhB;AACAvtD,QAAI,CAACkU,SAAL,GAAiBzO,OAAjB,CAAyB,UAAU0Q,GAAV,EAAe;AACtC,UAAIA,GAAG,CAAClM,IAAJ,KAAaA,IAAjB,EAAuB;AACrB;AACD;;AACDjK,UAAI,CAAComB,GAAL,CAAS8M,IAAT,GAAgBlzB,IAAI,CAAC6B,KAAL,CAAW2rD,oBAA3B;AACA,UAAI//C,CAAC,GACHzN,IAAI,CAAComB,GAAL,CAASgK,WAAT,CAAqBja,GAAG,CAAClS,KAAJ,IAAakS,GAAG,CAAClM,IAAtC,EAA4CuE,KAA5C,GACAxO,IAAI,CAAC6B,KAAL,CAAW4rD,4BADX,GAEAztD,IAAI,CAAC6B,KAAL,CAAW6rD,2BAFX,GAGA1tD,IAAI,CAAC6B,KAAL,CAAW8rD,qBAJb;AAKAx3B,OAAC,GAAG1oB,CAAC,GAAG0oB,CAAJ,GAAQ1oB,CAAR,GAAY0oB,CAAhB;AACAo3B,eAAS,GAAGvtD,IAAI,CAAC4Q,UAAL,CAAgBuF,GAAG,CAACtL,IAApB,CAAZ;AACD,KAZD;AAaA7K,QAAI,CAACmQ,QAAL,CAAc1K,OAAd,CAAsB,UAAU2K,GAAV,EAAe;AACnC,UAAIye,IAAI,GAAGze,GAAG,CAACnG,IAAD,CAAd;;AACA,UAAIsjD,SAAJ,EAAe;AACb1+B,YAAI,GAAG0+B,SAAS,CAAC;AAAEj+C,cAAI,EAAE;AAAEjK,iBAAK,EAAEwpB;AAAT;AAAR,SAAD,CAAhB;AACD;;AACD7uB,UAAI,CAAComB,GAAL,CAAS8M,IAAT,GAAgBlzB,IAAI,CAAC6B,KAAL,CAAW+rD,QAA3B;AACA,UAAIngD,CAAC,GACHzN,IAAI,CAAComB,GAAL,CAASgK,WAAT,CAAqBvB,IAArB,EAA2BrgB,KAA3B,GACAxO,IAAI,CAAC6B,KAAL,CAAWgsD,gBADX,GAEA7tD,IAAI,CAAC6B,KAAL,CAAWkd,eAFX,GAGA/e,IAAI,CAAC6B,KAAL,CAAW8rD,qBAJb;AAKAx3B,OAAC,GAAG1oB,CAAC,GAAG0oB,CAAJ,GAAQ1oB,CAAR,GAAY0oB,CAAhB;AACD,KAZD;AAaA,WAAOA,CAAP;AACD,GAjDD;AAkDA;AACF;AACA;AACA;AACA;AACA;;;AACEn2B,MAAI,CAACymC,cAAL,GAAsB,YAAY;AAChC,WAAOzmC,IAAI,CAAC83C,gBAAL,GAAwB9iC,MAAxB,CAA+B,UAAU84C,KAAV,EAAiBv+C,MAAjB,EAAyB;AAC7D,aAAOu+C,KAAK,GAAGnlD,QAAQ,CAAC4G,MAAM,CAACf,KAAP,IAAgBxO,IAAI,CAAC6B,KAAL,CAAWmV,SAA5B,EAAuC,EAAvC,CAAvB;AACD,KAFM,EAEJ,CAFI,CAAP;AAGD,GAJD;AAKA;AACF;AACA;AACA;AACA;AACA;AACA;;;AACEhX,MAAI,CAAC6kC,YAAL,GAAoB,UAAUryB,QAAV,EAAoB;AACtC,WAAO,CAACxS,IAAI,CAACyW,KAAL,CAAWC,IAAX,CAAgBlE,QAAhB,KAA6BxS,IAAI,CAAC6B,KAAL,CAAWoV,UAAzC,IAAuDjX,IAAI,CAACihB,KAAnE;AACD,GAFD;AAGA;AACF;AACA;AACA;AACA;AACA;AACA;;;AACEjhB,MAAI,CAAC8zB,cAAL,GAAsB,UAAU7gB,WAAV,EAAuB;AAC3C,WACE,CAACjT,IAAI,CAACyW,KAAL,CAAWnD,OAAX,CAAmBL,WAAnB,KACCjT,IAAI,CAACkU,SAAL,GAAiBjB,WAAjB,EAA8BzE,KAD/B,IAECxO,IAAI,CAAC6B,KAAL,CAAWmV,SAFb,IAE0BhX,IAAI,CAACihB,KAHjC;AAKD,GAND;;AAOAjhB,MAAI,CAAC4Q,UAAL,CAAgB9H,MAAhB,GAAyB,SAASilD,mBAAT,CAA6BnoD,CAA7B,EAAgC;AACvD,WAAOA,CAAC,CAAC0J,IAAF,CAAOjK,KAAP,KAAiBzD,SAAjB,GAA6BgE,CAAC,CAAC0J,IAAF,CAAOjK,KAApC,GAA4C,EAAnD;AACD,GAFD;;AAGArF,MAAI,CAAC4Q,UAAL,CAAgBsjB,aAAhB,GAAgCl0B,IAAI,CAAC4Q,UAAL,CAAgB9H,MAAhD;AACA9I,MAAI,CAAC4Q,UAAL,CAAgBo9C,UAAhB,GAA6BhuD,IAAI,CAAC4Q,UAAL,CAAgB9H,MAA7C;AACA9I,MAAI,CAAC4Q,UAAL,CAAgBpI,MAAhB,GAAyBxI,IAAI,CAAC4Q,UAAL,CAAgB9H,MAAzC;AACA9I,MAAI,CAAC4Q,UAAL,UAAsB5Q,IAAI,CAAC4Q,UAAL,CAAgB9H,MAAtC;AACA9I,MAAI,CAAC4Q,UAAL,CAAgBqY,IAAhB,GAAuBjpB,IAAI,CAAC4Q,UAAL,CAAgB9H,MAAvC;;AACA9I,MAAI,CAACu7C,OAAL,CAAazyC,MAAb,GAAsB,UAAU2uC,UAAV,EAAsBtlB,SAAtB,EAAiC;AACrD,QAAI87B,GAAG,GAAG97B,SAAS,KAAK,KAAxB;AACA,WAAO,UAAUzkB,CAAV,EAAaiF,CAAb,EAAgB;AACrB,UAAMu7C,MAAM,GAAGxgD,CAAC,CAAC+pC,UAAD,CAAD,IAAiB,EAAhC;AACA,UAAM0W,MAAM,GAAGx7C,CAAC,CAAC8kC,UAAD,CAAD,IAAiB,EAAhC;;AACA,UAAIwW,GAAJ,EAAS;AACP,YAAI,CAACC,MAAM,CAACE,aAAZ,EAA2B;AACzB,iBAAO,CAAP;AACD;;AACD,eAAOF,MAAM,CAACE,aAAP,CAAqBD,MAArB,CAAP;AACD;;AACD,UAAI,CAACA,MAAM,CAACC,aAAZ,EAA2B;AACzB,eAAO,CAAP;AACD;;AACD,aAAOD,MAAM,CAACC,aAAP,CAAqBF,MAArB,CAAP;AACD,KAbD;AAcD,GAhBD;;AAiBAluD,MAAI,CAACu7C,OAAL,CAAa/yC,MAAb,GAAsB,UAAUivC,UAAV,EAAsBtlB,SAAtB,EAAiC;AACrD,QAAI87B,GAAG,GAAG97B,SAAS,KAAK,KAAxB;AACA,WAAO,UAAUzkB,CAAV,EAAaiF,CAAb,EAAgB;AACrB,UAAIs7C,GAAJ,EAAS;AACP,eAAOvgD,CAAC,CAAC+pC,UAAD,CAAD,GAAgB9kC,CAAC,CAAC8kC,UAAD,CAAxB;AACD;;AACD,aAAO9kC,CAAC,CAAC8kC,UAAD,CAAD,GAAgB/pC,CAAC,CAAC+pC,UAAD,CAAxB;AACD,KALD;AAMD,GARD;;AASAz3C,MAAI,CAACu7C,OAAL,CAAa8S,IAAb,GAAoB,UAAU5W,UAAV,EAAsBtlB,SAAtB,EAAiC;AACnD,QAAI87B,GAAG,GAAG97B,SAAS,KAAK,KAAxB;AACA,WAAO,UAAUzkB,CAAV,EAAaiF,CAAb,EAAgB;AACrB,UAAIs7C,GAAJ,EAAS;AACP,eACE,IAAIK,IAAJ,CAAS5gD,CAAC,CAAC+pC,UAAD,CAAV,EAAwB8W,OAAxB,KAAoC,IAAID,IAAJ,CAAS37C,CAAC,CAAC8kC,UAAD,CAAV,EAAwB8W,OAAxB,EADtC;AAGD;;AACD,aACE,IAAID,IAAJ,CAAS37C,CAAC,CAAC8kC,UAAD,CAAV,EAAwB8W,OAAxB,KAAoC,IAAID,IAAJ,CAAS5gD,CAAC,CAAC+pC,UAAD,CAAV,EAAwB8W,OAAxB,EADtC;AAGD,KATD;AAUD,GAZD;AAaD,C;;;;;;;;;;;;;;;;;;;AC7/DD;;AACA;AACa;;AAEb,6BAAe,oCAAUvuD,IAAV,EAAgB;AAC7B,MAAIwuD,YAAY,GAAG,EAAnB;AAAA,MACEC,iBADF;AAAA,MAEEC,WAFF;AAAA,MAGEC,kBAHF;AAIA3uD,MAAI,CAAC4pC,eAAL,GAAuB,EAAvB;AACA5pC,MAAI,CAAC0pC,UAAL,GAAkB,EAAlB;AACA1pC,MAAI,CAAC2pC,cAAL,GAAsB,EAAtB;AACA3pC,MAAI,CAAC4uD,eAAL,GAAuB,CAAvB;;AACA5uD,MAAI,CAAC6uD,WAAL,GAAmB,UAAUjpD,CAAV,EAAakpD,UAAb,EAAyB;AAC1C,QAAIrhD,CAAC,GAAGqhD,UAAU,GAAGlpD,CAAC,CAACwjC,OAAF,CAAU0lB,UAAV,CAAH,GAA2BlpD,CAAC,CAACwjC,OAAF,CAAU,CAAV,CAA7C;AAAA,QACE1lC,IAAI,GAAG1D,IAAI,CAAC2B,MAAL,CAAY+C,qBAAZ,EADT;AAAA,QAEE/D,GAFF;;AAGA,QAAI,CAAC8M,CAAL,EAAQ;AACN;AACD;;AACD9M,OAAG,GAAG;AACJoB,OAAC,EAAE0L,CAAC,CAAC2R,OAAF,GAAY1b,IAAI,CAAC1B,IADhB;AAEJC,OAAC,EAAEwL,CAAC,CAAC4R,OAAF,GAAY3b,IAAI,CAACxB;AAFhB,KAAN;;AAIA,QAAIlC,IAAI,CAACyb,WAAT,EAAsB;AACpB9a,SAAG,CAACoB,CAAJ,IAAS/B,IAAI,CAAC6c,gBAAd;AACAlc,SAAG,CAACsB,CAAJ,IAASjC,IAAI,CAAC+c,eAAd;AACD;;AACD,WAAO;AACLhb,OAAC,EAAEpB,GAAG,CAACoB,CADF;AAELE,OAAC,EAAEtB,GAAG,CAACsB,CAFF;AAGLyB,UAAI,EAAEA;AAHD,KAAP;AAKD,GApBD,CAT6B,CA8B7B;;;AACA1D,MAAI,CAAC+uD,eAAL,GAAuB;AACrBC,UAAM,EAAE,gBAAUvhD,CAAV,EAAa;AACnB,aAAOA,CAAP;AACD,KAHoB;AAIrBwhD,cAAU,EAAE,oBAAUxhD,CAAV,EAAa;AACvB,aAAOA,CAAC,GAAGA,CAAX;AACD,KANoB;AAOrByhD,eAAW,EAAE,qBAAUzhD,CAAV,EAAa;AACxB,aAAOA,CAAC,IAAI,IAAIA,CAAR,CAAR;AACD,KAToB;AAUrB0hD,iBAAa,EAAE,uBAAU1hD,CAAV,EAAa;AAC1B,aAAOA,CAAC,GAAG,GAAJ,GAAU,IAAIA,CAAJ,GAAQA,CAAlB,GAAsB,CAAC,CAAD,GAAK,CAAC,IAAI,IAAIA,CAAT,IAAcA,CAAhD;AACD,KAZoB;AAarB2hD,eAAW,EAAE,qBAAU3hD,CAAV,EAAa;AACxB,aAAOA,CAAC,GAAGA,CAAJ,GAAQA,CAAf;AACD,KAfoB;AAgBrB4hD,gBAAY,EAAE,sBAAU5hD,CAAV,EAAa;AACzB,aAAO,EAAEA,CAAF,GAAMA,CAAN,GAAUA,CAAV,GAAc,CAArB;AACD,KAlBoB;AAmBrB6hD,kBAAc,EAAE,wBAAU7hD,CAAV,EAAa;AAC3B,aAAOA,CAAC,GAAG,GAAJ,GAAU,IAAIA,CAAJ,GAAQA,CAAR,GAAYA,CAAtB,GAA0B,CAACA,CAAC,GAAG,CAAL,KAAW,IAAIA,CAAJ,GAAQ,CAAnB,KAAyB,IAAIA,CAAJ,GAAQ,CAAjC,IAAsC,CAAvE;AACD,KArBoB;AAsBrB8hD,eAAW,EAAE,qBAAU9hD,CAAV,EAAa;AACxB,aAAOA,CAAC,GAAGA,CAAJ,GAAQA,CAAR,GAAYA,CAAnB;AACD,KAxBoB;AAyBrB+hD,gBAAY,EAAE,sBAAU/hD,CAAV,EAAa;AACzB,aAAO,IAAI,EAAEA,CAAF,GAAMA,CAAN,GAAUA,CAAV,GAAcA,CAAzB;AACD,KA3BoB;AA4BrBgiD,kBAAc,EAAE,wBAAUhiD,CAAV,EAAa;AAC3B,aAAOA,CAAC,GAAG,GAAJ,GAAU,IAAIA,CAAJ,GAAQA,CAAR,GAAYA,CAAZ,GAAgBA,CAA1B,GAA8B,IAAI,IAAI,EAAEA,CAAN,GAAUA,CAAV,GAAcA,CAAd,GAAkBA,CAA3D;AACD,KA9BoB;AA+BrBiiD,eAAW,EAAE,qBAAUjiD,CAAV,EAAa;AACxB,aAAOA,CAAC,GAAGA,CAAJ,GAAQA,CAAR,GAAYA,CAAZ,GAAgBA,CAAvB;AACD,KAjCoB;AAkCrBkiD,gBAAY,EAAE,sBAAUliD,CAAV,EAAa;AACzB,aAAO,IAAI,EAAEA,CAAF,GAAMA,CAAN,GAAUA,CAAV,GAAcA,CAAd,GAAkBA,CAA7B;AACD,KApCoB;AAqCrBmiD,kBAAc,EAAE,wBAAUniD,CAAV,EAAa;AAC3B,aAAOA,CAAC,GAAG,GAAJ,GAAU,KAAKA,CAAL,GAASA,CAAT,GAAaA,CAAb,GAAiBA,CAAjB,GAAqBA,CAA/B,GAAmC,IAAI,KAAK,EAAEA,CAAP,GAAWA,CAAX,GAAeA,CAAf,GAAmBA,CAAnB,GAAuBA,CAArE;AACD;AAvCoB,GAAvB;;AAyCAzN,MAAI,CAAC6vD,MAAL,GAAc,UAAUpiD,CAAV,EAAakF,CAAb,EAAgB3D,CAAhB,EAAmB0G,CAAnB,EAAsB;AAClC,WACE1G,CAAC,GAAGhP,IAAI,CAAC+uD,eAAL,CAAqB/uD,IAAI,CAACkJ,UAAL,CAAgB4mD,iBAArC,EAAwDriD,CAAC,GAAGiI,CAA5D,CAAJ,GAAqE/C,CADvE;AAGD,GAJD;;AAKA3S,MAAI,CAAC+vD,iBAAL,GAAyB,YAAY;AACnC/vD,QAAI,CAAC+pC,KAAL,GAAa,EACX,CAAC/pC,IAAI,CAAC0pC,UAAL,CAAgB3nC,CAAhB,GAAoB/B,IAAI,CAACgwD,eAAL,CAAqBjuD,CAA1C,KACC/B,IAAI,CAAC0pC,UAAL,CAAgBj8B,CAAhB,GAAoBzN,IAAI,CAACgwD,eAAL,CAAqBviD,CAD1C,CADW,CAAb;AAIAzN,QAAI,CAACgqC,KAAL,GAAa,EACX,CAAChqC,IAAI,CAAC0pC,UAAL,CAAgBznC,CAAhB,GAAoBjC,IAAI,CAACgwD,eAAL,CAAqB/tD,CAA1C,KACCjC,IAAI,CAAC0pC,UAAL,CAAgBj8B,CAAhB,GAAoBzN,IAAI,CAACgwD,eAAL,CAAqBviD,CAD1C,CADW,CAAb;AAIAzN,QAAI,CAACgwD,eAAL,GAAuB;AACrBjuD,OAAC,EAAE/B,IAAI,CAAC0pC,UAAL,CAAgB3nC,CADE;AAErBE,OAAC,EAAEjC,IAAI,CAAC0pC,UAAL,CAAgBznC,CAFE;AAGrBwL,OAAC,EAAEioB,WAAW,CAACC,GAAZ;AAHkB,KAAvB;AAKD,GAdD;;AAeA31B,MAAI,CAACiwD,YAAL,GAAoB,YAAY;AAC9BjwD,QAAI,CAAC2oC,IAAL,GAAY,EACV,CAAC3oC,IAAI,CAAC0pC,UAAL,CAAgB3nC,CAAhB,GAAoB/B,IAAI,CAACkwD,UAAL,CAAgBnuD,CAArC,KACC/B,IAAI,CAAC0pC,UAAL,CAAgBj8B,CAAhB,GAAoBzN,IAAI,CAACkwD,UAAL,CAAgBziD,CADrC,CADU,CAAZ;AAIAzN,QAAI,CAAC0oC,IAAL,GAAY,EACV,CAAC1oC,IAAI,CAAC0pC,UAAL,CAAgBznC,CAAhB,GAAoBjC,IAAI,CAACkwD,UAAL,CAAgBjuD,CAArC,KACCjC,IAAI,CAAC0pC,UAAL,CAAgBj8B,CAAhB,GAAoBzN,IAAI,CAACkwD,UAAL,CAAgBziD,CADrC,CADU,CAAZ;AAIAzN,QAAI,CAACkwD,UAAL,GAAkB;AAChBnuD,OAAC,EAAE/B,IAAI,CAAC0pC,UAAL,CAAgB3nC,CADH;AAEhBE,OAAC,EAAEjC,IAAI,CAAC0pC,UAAL,CAAgBznC,CAFH;AAGhBwL,OAAC,EAAEioB,WAAW,CAACC,GAAZ;AAHa,KAAlB;AAKD,GAdD;;AAeA31B,MAAI,CAACmwD,iBAAL,GAAyB,YAAY;AACnC,QAAI,CAACnwD,IAAI,CAAC2B,MAAN,IAAgB,CAAC3B,IAAI,CAACsC,SAAL,CAAeo0C,QAApC,EAA8C;AAC5C,aAAOrzC,qBAAqB,CAACrD,IAAI,CAACmwD,iBAAN,CAA5B;AACD;;AACD,QAAIznD,CAAC,GAAGgtB,WAAW,CAACC,GAAZ,EAAR;AAAA,QACEjgB,CAAC,GAAG1V,IAAI,CAACkJ,UAAL,CAAgBknD,+BADtB;AAAA,QAEE3iD,CAFF;AAGAA,KAAC,GAAG/E,CAAC,GAAG1I,IAAI,CAAC0pC,UAAL,CAAgBj8B,CAAxB;AACAzN,QAAI,CAAC4uD,eAAL,IAAwB,CAAxB;AACA5uD,QAAI,CAAC4pC,eAAL,CAAqB7nC,CAArB,GAAyB/B,IAAI,CAAC6vD,MAAL,CACvBpiD,CADuB,EAEvBzN,IAAI,CAAC0pC,UAAL,CAAgBnnC,UAFO,EAGvBvC,IAAI,CAAC2pC,cAAL,CAAoB5nC,CAHG,EAIvB2T,CAJuB,CAAzB;AAMA1V,QAAI,CAAC4pC,eAAL,CAAqB3nC,CAArB,GAAyBjC,IAAI,CAAC6vD,MAAL,CACvBpiD,CADuB,EAEvBzN,IAAI,CAAC0pC,UAAL,CAAgBlnC,SAFO,EAGvBxC,IAAI,CAAC2pC,cAAL,CAAoB1nC,CAHG,EAIvByT,CAJuB,CAAzB;;AAMA,QACEjI,CAAC,GAAGiI,CAAJ,IACC1V,IAAI,CAAC4pC,eAAL,CAAqB3nC,CAArB,KAA2BjC,IAAI,CAACsC,SAAL,CAAeE,SAA1C,IACCxC,IAAI,CAAC4pC,eAAL,CAAqB7nC,CAArB,KAA2B/B,IAAI,CAACsC,SAAL,CAAeC,UAF5C,IAGAvC,IAAI,CAACqwD,aAJP,EAKE;AACA;AACD;;AACDrwD,QAAI,CAACsC,SAAL,CAAeo0C,QAAf,CAAwB12C,IAAI,CAAC4pC,eAAL,CAAqB7nC,CAA7C,EAAgD/B,IAAI,CAAC4pC,eAAL,CAAqB3nC,CAArE;AACAoB,yBAAqB,CAACrD,IAAI,CAACmwD,iBAAN,CAArB;AACD,GA/BD;;AAgCAnwD,MAAI,CAACswD,aAAL,GAAqB,UAAUhhD,IAAV,EAAgB;AACnCtP,QAAI,CAACkgB,WAAL,CAAiB5Q,IAAI,CAAC2D,WAAtB,EAAmC3D,IAAI,CAACkD,QAAxC;AACD,GAFD;;AAGAxS,MAAI,CAAC6mB,UAAL,GAAkB,UAAUjhB,CAAV,EAAa;AAC7B,QAAIA,CAAC,CAAC2qD,cAAF,CAAiB,CAAjB,CAAJ,EAAyB;AACvBvwD,UAAI,CAACqqC,UAAL,GAAkBrqC,IAAI,CAAC6uD,WAAL,CAAiBjpD,CAAjB,CAAlB;AACA5F,UAAI,CAACwwD,YAAL,GAAoBxwD,IAAI,CAAC0c,SAAL,CAClB1c,IAAI,CAACqqC,UAAL,CAAgBtoC,CADE,EAElB/B,IAAI,CAACqqC,UAAL,CAAgBpoC,CAFE,EAGlB,IAHkB,CAApB;AAKD;;AACD,QACEjC,IAAI,CAACwE,aAAL,CAAmB,YAAnB,EAAiC;AAC/BiY,iBAAW,EAAE7W,CADkB;AAE/B0J,UAAI,EAAEtP,IAAI,CAACwwD;AAFoB,KAAjC,CADF,EAKE;AACA;AACD;;AACDxwD,QAAI,CAACsR,kBAAL;AACAnE,iBAAa,CAACnN,IAAI,CAACywD,iBAAN,CAAb;AACA1iD,gBAAY,CAAC/N,IAAI,CAAC0wD,mBAAN,CAAZ;AACA1wD,QAAI,CAAC2wD,eAAL,GAAuB/qD,CAAvB;AACA5F,QAAI,CAACqwD,aAAL,GAAqB,IAArB;AACArwD,QAAI,CAAC4uD,eAAL,GAAuB,CAAvB;AACA5uD,QAAI,CAAC6Q,eAAL,CAAqBjL,CAArB;;AACA,QAAIA,CAAC,CAACwjC,OAAF,CAAU5jC,MAAV,KAAqB,CAArB,IAA0BI,CAAC,CAAC2qD,cAAF,CAAiB,CAAjB,CAA1B,IAAiD,CAACvwD,IAAI,CAAC4wD,WAA3D,EAAwE;AACtE5wD,UAAI,CAACmpC,WAAL,GAAmB,CAAnB;AACAnpC,UAAI,CAACqqC,UAAL,GAAkBrqC,IAAI,CAACqqC,UAAL,IAAmBrqC,IAAI,CAAC6wD,WAA1C;AACA7wD,UAAI,CAAC8wD,gBAAL,GAAwB;AACtB/uD,SAAC,EAAE/B,IAAI,CAACsC,SAAL,CAAeC,UADI;AAEtBN,SAAC,EAAEjC,IAAI,CAACsC,SAAL,CAAeE,SAFI;AAGtBiL,SAAC,EAAEioB,WAAW,CAACC,GAAZ;AAHmB,OAAxB;AAKA31B,UAAI,CAAC0pC,UAAL,GAAkB;AAChB3nC,SAAC,EAAE,CADa;AAEhBE,SAAC,EAAE,CAFa;AAGhBM,kBAAU,EAAEvC,IAAI,CAACsC,SAAL,CAAeC,UAHX;AAIhBC,iBAAS,EAAExC,IAAI,CAACsC,SAAL,CAAeE,SAJV;AAKhBiL,SAAC,EAAEzN,IAAI,CAAC8wD,gBAAL,CAAsBrjD;AALT,OAAlB;AAOAzN,UAAI,CAACkwD,UAAL,GAAkB;AAChBnuD,SAAC,EAAE/B,IAAI,CAAC0pC,UAAL,CAAgB3nC,CADH;AAEhBE,SAAC,EAAEjC,IAAI,CAAC0pC,UAAL,CAAgBznC,CAFH;AAGhBwL,SAAC,EAAEzN,IAAI,CAAC0pC,UAAL,CAAgBj8B;AAHH,OAAlB;AAKAzN,UAAI,CAACgwD,eAAL,GAAuB;AACrBjuD,SAAC,EAAE/B,IAAI,CAAC0pC,UAAL,CAAgB3nC,CADE;AAErBE,SAAC,EAAEjC,IAAI,CAAC0pC,UAAL,CAAgBznC,CAFE;AAGrBwL,SAAC,EAAEzN,IAAI,CAAC0pC,UAAL,CAAgBj8B;AAHE,OAAvB;AAKAzN,UAAI,CAAC0wD,mBAAL,GAA2B9iD,UAAU,CAAC,YAAY;AAChD5N,YAAI,CAACmb,gBAAL,CAAsBvV,CAAtB,EAAyB5F,IAAI,CAACqqC,UAA9B;AACD,OAFoC,EAElCrqC,IAAI,CAACkJ,UAAL,CAAgB6nD,sBAFkB,CAArC;AAGA/wD,UAAI,CAACywD,iBAAL,GAAyBvjD,WAAW,CAClClN,IAAI,CAAC+vD,iBAD6B,EAElCvB,YAFkC,CAApC;;AAIA,UACExuD,IAAI,CAACwwD,YAAL,KACCxwD,IAAI,CAACwwD,YAAL,CAAkB7zC,MAAlB,IACC,CAAC,MAAD,EAAS,SAAT,EAAoBxQ,OAApB,CAA4BnM,IAAI,CAACwwD,YAAL,CAAkBnqC,OAA9C,MAA2D,CAAC,CAF9D,CADF,EAIE;AACArmB,YAAI,CAACyO,QAAL,GAAgB,KAAhB;AACA;AACD;;AACDzO,UAAI,CAACyO,QAAL,GAAgB,IAAhB;;AACA,UAAIzO,IAAI,CAACwwD,YAAL,CAAkB93B,QAAtB,EAAgC;AAC9B,YAAI14B,IAAI,CAACwwD,YAAL,CAAkB37C,WAAtB,EAAmC;AACjC7U,cAAI,CAACywC,UAAL,CAAgB;AACdvuC,eAAG,EAAElC,IAAI,CAACwwD,YAAL,CAAkBh+C,QADT;AAEd7N,kBAAM,EAAE3E,IAAI,CAACwwD,YAAL,CAAkBh+C,QAFZ;AAGdxQ,gBAAI,EAAE,CAHQ;AAId+C,iBAAK,EAAE/E,IAAI,CAAC83C,gBAAL,GAAwBtyC,MAAxB,GAAiC;AAJ1B,WAAhB;AAMAxF,cAAI,CAACuV,IAAL,CAAU,IAAV;AACD,SARD,MAQO,IAAIvV,IAAI,CAACwwD,YAAL,CAAkBr3C,cAAtB,EAAsC;AAC3C,cAAInZ,IAAI,CAACkJ,UAAL,CAAgB4oC,yBAAhB,KAA8C,MAAlD,EAA0D;AACxD,gBAAI9xC,IAAI,CAACo7B,OAAL,KAAiBp7B,IAAI,CAACwwD,YAAL,CAAkBjhD,MAAlB,CAAyBtF,IAA9C,EAAoD;AAClDjK,kBAAI,CAACgsB,cAAL,GACEhsB,IAAI,CAACgsB,cAAL,KAAwB,KAAxB,GAAgC,MAAhC,GAAyC,KAD3C;AAED,aAHD,MAGO;AACLhsB,kBAAI,CAACgsB,cAAL,GAAsB,KAAtB;AACD;;AACDhsB,gBAAI,CAACqX,KAAL,CAAWrX,IAAI,CAACwwD,YAAL,CAAkBjhD,MAAlB,CAAyBtF,IAApC,EAA0CjK,IAAI,CAACgsB,cAA/C;AACD;;AACD,cAAIhsB,IAAI,CAACkJ,UAAL,CAAgB4oC,yBAAhB,KAA8C,QAAlD,EAA4D;AAC1D9xC,gBAAI,CAACywC,UAAL,CAAgB;AACdvuC,iBAAG,EAAE,CADS;AAEdyC,oBAAM,EAAE3E,IAAI,CAACmQ,QAAL,CAAc3K,MAAd,GAAuB,CAFjB;AAGdxD,kBAAI,EAAEhC,IAAI,CAACwwD,YAAL,CAAkBv9C,WAHV;AAIdlO,mBAAK,EAAE/E,IAAI,CAACwwD,YAAL,CAAkBv9C;AAJX,aAAhB;AAMAjT,gBAAI,CAACuV,IAAL,CAAU,IAAV;AACD;AACF;;AACDvV,YAAI,CAACgxD,cAAL,CAAoBprD,CAApB;AACA;AACD;AACF;;AACD,QAAI5F,IAAI,CAAC4wD,WAAT,EAAsB;AACpB;AACD;;AACD7vD,YAAQ,CAACgC,IAAT,CAAczC,gBAAd,CAA+B,WAA/B,EAA4CN,IAAI,CAACixD,SAAjD,EAA4D;AAC1DC,aAAO,EAAE;AADiD,KAA5D;AAGAnwD,YAAQ,CAACgC,IAAT,CAAczC,gBAAd,CAA+B,UAA/B,EAA2CN,IAAI,CAACmxD,QAAhD,EAA0D,KAA1D;AACApwD,YAAQ,CAACgC,IAAT,CAAczC,gBAAd,CAA+B,aAA/B,EAA8CN,IAAI,CAACoxD,WAAnD,EAAgE,KAAhE;AACApxD,QAAI,CAACuV,IAAL,CAAU,IAAV;AACD,GA3GD;;AA4GAvV,MAAI,CAACqxD,WAAL,GAAmB,UAAU/hD,IAAV,EAAgBgiD,UAAhB,EAA4B;AAC7C,QAAIhiD,IAAI,CAACkD,QAAL,KAAkB5Q,SAAlB,IAA+B0N,IAAI,CAAC2D,WAAL,KAAqBrR,SAAxD,EAAmE;AACjE;AACD;;AACD5B,QAAI,CAACuxD,cAAL,GAAsB,IAAtB;AACA,QAAItE,MAAM,GAAGjtD,IAAI,CAAC6vC,kBAAL,EAAb;;AACA,QACEyhB,UAAU,KAAK,qBAAf,IACAhiD,IAAI,CAACkD,QAAL,IAAiBy6C,MAAM,CAAC/qD,GADxB,IAEAoN,IAAI,CAAC2D,WAAL,IAAoBg6C,MAAM,CAACloD,KAH7B,EAIE;AACAkoD,YAAM,CAACtoD,MAAP,GAAgB2K,IAAI,CAACkD,QAArB;AACAy6C,YAAM,CAACjrD,IAAP,GAAcsN,IAAI,CAAC2D,WAAnB;AACD,KAPD,MAOO,IACLq+C,UAAU,KAAK,qBAAf,IACAhiD,IAAI,CAACkD,QAAL,IAAiBy6C,MAAM,CAACtoD,MADxB,IAEA2K,IAAI,CAAC2D,WAAL,IAAoBg6C,MAAM,CAACloD,KAHtB,EAIL;AACAkoD,YAAM,CAAC/qD,GAAP,GAAaoN,IAAI,CAACkD,QAAlB;AACAy6C,YAAM,CAACjrD,IAAP,GAAcsN,IAAI,CAAC2D,WAAnB;AACD,KAPM,MAOA,IACLq+C,UAAU,KAAK,qBAAf,IACAhiD,IAAI,CAACkD,QAAL,IAAiBy6C,MAAM,CAACtoD,MADxB,IAEA2K,IAAI,CAAC2D,WAAL,IAAoBg6C,MAAM,CAACjrD,IAHtB,EAIL;AACAirD,YAAM,CAAC/qD,GAAP,GAAaoN,IAAI,CAACkD,QAAlB;AACAy6C,YAAM,CAACloD,KAAP,GAAeuK,IAAI,CAAC2D,WAApB;AACD,KAPM,MAOA,IACLq+C,UAAU,KAAK,qBAAf,IACAhiD,IAAI,CAACkD,QAAL,IAAiBy6C,MAAM,CAAC/qD,GADxB,IAEAoN,IAAI,CAAC2D,WAAL,IAAoBg6C,MAAM,CAACjrD,IAHtB,EAIL;AACAirD,YAAM,CAACtoD,MAAP,GAAgB2K,IAAI,CAACkD,QAArB;AACAy6C,YAAM,CAACloD,KAAP,GAAeuK,IAAI,CAAC2D,WAApB;AACD;;AACD,QAAIjT,IAAI,CAACkJ,UAAL,CAAgBo9B,aAAhB,KAAkC,KAAlC,IAA2Ch3B,IAAI,CAACkD,QAAL,KAAkB,CAAC,CAAlE,EAAqE;AACnEy6C,YAAM,CAACjrD,IAAP,GAAc,CAAd;AACAirD,YAAM,CAACloD,KAAP,GAAe/E,IAAI,CAACkU,SAAL,GAAiB1O,MAAjB,GAA0B,CAAzC;AACD,KAHD,MAGO;AACLynD,YAAM,CAACjrD,IAAP,GAAcof,IAAI,CAACO,GAAL,CAAS,CAAT,EAAYsrC,MAAM,CAACjrD,IAAnB,CAAd;AACD;;AACDhC,QAAI,CAACywC,UAAL,CAAgBwc,MAAhB;AACAjtD,QAAI,CAACuV,IAAL,CAAU,IAAV;AACD,GA3CD;;AA4CA,WAASi8C,SAAT,CAAmB5rD,CAAnB,EAAsB;AACpB,QAAI+mC,EAAJ,EAAQ8kB,EAAR,EAAYC,WAAZ,EAAyBC,WAAzB,EAAsCC,WAAtC,EAAmDC,WAAnD,EAAgE1lB,GAAhE,EAAqE2lB,EAArE,EAAyEC,EAAzE;;AACA,QAAI/xD,IAAI,CAACwE,aAAL,CAAmB,iBAAnB,EAAsC;AAAEiY,iBAAW,EAAE7W;AAAf,KAAtC,CAAJ,EAA+D;AAC7D;AACD;;AACDmI,gBAAY,CAAC4gD,kBAAD,CAAZ;;AACA,QAAI/oD,CAAC,CAAC2qD,cAAF,CAAiB,CAAjB,CAAJ,EAAyB;AACvBvwD,UAAI,CAACqpC,aAAL,GAAqBrpC,IAAI,CAAC6uD,WAAL,CAAiBjpD,CAAjB,CAArB;AACD;;AACD,QAAIA,CAAC,CAAC2qD,cAAF,CAAiB,CAAjB,CAAJ,EAAyB;AACvBvwD,UAAI,CAACspC,cAAL,GAAsBtpC,IAAI,CAAC6uD,WAAL,CAAiBjpD,CAAjB,EAAoB,CAApB,CAAtB;AACD;;AACD,QACEwb,IAAI,CAACuH,GAAL,CAAS3oB,IAAI,CAAC0pC,UAAL,CAAgB3nC,CAAzB,IAA8Bqf,IAAI,CAACuH,GAAL,CAAS3oB,IAAI,CAAC0pC,UAAL,CAAgBznC,CAAzB,CAA9B,GACAjC,IAAI,CAACkJ,UAAL,CAAgB8oD,aAFlB,EAGE;AACAjkD,kBAAY,CAAC/N,IAAI,CAAC0wD,mBAAN,CAAZ;AACD;;AACD,QAAI9qD,CAAC,CAACwjC,OAAF,CAAU5jC,MAAV,KAAqB,CAArB,IAA0BxF,IAAI,CAACqpC,aAA/B,IAAgDrpC,IAAI,CAACspC,cAAzD,EAAyE;AACvEwoB,QAAE,GAAG9xD,IAAI,CAACqpC,aAAL,CAAmBpnC,CAAxB;AACA8vD,QAAE,GAAG/xD,IAAI,CAACspC,cAAL,CAAoBrnC,CAAzB;;AACA,UAAI,CAACjC,IAAI,CAACkpC,cAAV,EAA0B;AACxBlpC,YAAI,CAACkpC,cAAL,GAAsB9nB,IAAI,CAACuH,GAAL,CAASmpC,EAAE,GAAGC,EAAd,CAAtB;AACA/xD,YAAI,CAACgpC,UAAL,GAAkBhpC,IAAI,CAACihB,KAAvB;AACD;;AACDjhB,UAAI,CAACmpC,WAAL,GAAmB,CAAnB;AACAnpC,UAAI,CAACipC,UAAL,GAAkBjpC,IAAI,CAACkpC,cAAL,GAAsB9nB,IAAI,CAACuH,GAAL,CAASmpC,EAAE,GAAGC,EAAd,CAAxC;AACA/xD,UAAI,CAACihB,KAAL,GACEjhB,IAAI,CAACgpC,UAAL,GACAhpC,IAAI,CAACipC,UAAL,GAAkBjpC,IAAI,CAACkJ,UAAL,CAAgB+oD,oBAFpC;AAGAjyD,UAAI,CAACihB,KAAL,GAAaG,IAAI,CAACQ,GAAL,CACXR,IAAI,CAACO,GAAL,CAAS3hB,IAAI,CAACihB,KAAd,EAAqBjhB,IAAI,CAACkJ,UAAL,CAAgBgpD,YAArC,CADW,EAEXlyD,IAAI,CAACkJ,UAAL,CAAgBipD,YAFL,CAAb;AAIAnyD,UAAI,CAAC4wD,WAAL,GAAmB,IAAnB;AACA5wD,UAAI,CAACiI,MAAL,CAAY,IAAZ;AACAjI,UAAI,CAACuyC,gBAAL;AACA;AACD;;AACD,QAAIvyC,IAAI,CAAC4wD,WAAT,EAAsB;AACpB;AACD;;AACD5wD,QAAI,CAACmpC,WAAL,GAAmB,CAAnB;AACAnpC,QAAI,CAACqpC,aAAL,GAAqBrpC,IAAI,CAACqpC,aAAL,IAAsBrpC,IAAI,CAACspC,cAAhD;AACAqD,MAAE,GAAG3sC,IAAI,CAAC2d,yBAAL,EAAL;AACA8zC,MAAE,GAAGzxD,IAAI,CAAC6d,qBAAL,EAAL;AACA6zC,eAAW,GACT1xD,IAAI,CAACwO,KAAL,GAAaxO,IAAI,CAAC6B,KAAL,CAAWic,cAAxB,GAAyC9d,IAAI,CAACqpC,aAAL,CAAmBtnC,CAA5D,GACA/B,IAAI,CAACkJ,UAAL,CAAgB21C,mBAFlB;AAGA8S,eAAW,GACT3xD,IAAI,CAACqpC,aAAL,CAAmBtnC,CAAnB,GAAuB0vD,EAAvB,GAA4BzxD,IAAI,CAACkJ,UAAL,CAAgB21C,mBAD9C;AAEA+S,eAAW,GACT5xD,IAAI,CAACmC,MAAL,GAAcnC,IAAI,CAAC6B,KAAL,CAAWic,cAAzB,GAA0C9d,IAAI,CAACqpC,aAAL,CAAmBpnC,CAA7D,GACAjC,IAAI,CAACkJ,UAAL,CAAgB21C,mBAFlB;AAGAgT,eAAW,GACT7xD,IAAI,CAACqpC,aAAL,CAAmBpnC,CAAnB,GAAuB0qC,EAAvB,GAA4B3sC,IAAI,CAACkJ,UAAL,CAAgB21C,mBAD9C;AAEA1S,OAAG,GAAGnsC,IAAI,CAAC6B,KAAL,CAAWic,cAAjB;;AACA,aAASs0C,WAAT,GAAuB;AACrB,UAAIrwD,CAAC,GAAG/B,IAAI,CAACsC,SAAL,CAAeC,UAAvB;AAAA,UACEN,CAAC,GAAGjC,IAAI,CAACsC,SAAL,CAAeE,SADrB;AAEAT,OAAC,IAAI2vD,WAAW,GAAG1xD,IAAI,CAACkJ,UAAL,CAAgBoqC,wBAAnB,GAA8C,CAA9D;AACArxC,OAAC,IAAI2vD,WAAW,GAAG5xD,IAAI,CAACkJ,UAAL,CAAgBoqC,wBAAnB,GAA8C,CAA9D;AACArxC,OAAC,IAAI4vD,WAAW,GAAG7xD,IAAI,CAACkJ,UAAL,CAAgBoqC,wBAAnB,GAA8C,CAA9D;AACAvxC,OAAC,IAAI4vD,WAAW,GAAG3xD,IAAI,CAACkJ,UAAL,CAAgBoqC,wBAAnB,GAA8C,CAA9D;AACAtzC,UAAI,CAACsC,SAAL,CAAeo0C,QAAf,CAAwB30C,CAAxB,EAA2BE,CAA3B;AACA0sD,wBAAkB,GAAG/gD,UAAU,CAC7BwkD,WAD6B,EAE7BpyD,IAAI,CAACkJ,UAAL,CAAgBmqC,gBAFa,CAA/B;AAID;;AACDztC,KAAC,CAACiL,eAAF;AACA7Q,QAAI,CAAC0pC,UAAL,GAAkB;AAChB3nC,OAAC,EAAE/B,IAAI,CAACqpC,aAAL,CAAmBtnC,CAAnB,GAAuB/B,IAAI,CAACqqC,UAAL,CAAgBtoC,CAD1B;AAEhBE,OAAC,EAAEjC,IAAI,CAACqpC,aAAL,CAAmBpnC,CAAnB,GAAuBjC,IAAI,CAACqqC,UAAL,CAAgBpoC,CAF1B;AAGhBM,gBAAU,EAAEvC,IAAI,CAACsC,SAAL,CAAeC,UAHX;AAIhBC,eAAS,EAAExC,IAAI,CAACsC,SAAL,CAAeE,SAJV;AAKhBiL,OAAC,EAAEioB,WAAW,CAACC,GAAZ;AALa,KAAlB;AAOA31B,QAAI,CAAC+0B,WAAL,GAAmB/0B,IAAI,CAAC0c,SAAL,CACjB1c,IAAI,CAACqpC,aAAL,CAAmBtnC,CADF,EAEjB/B,IAAI,CAACqpC,aAAL,CAAmBpnC,CAFF,CAAnB;AAIAjC,QAAI,CAACwE,aAAL,CAAmB,WAAnB,EAAgC;AAAEiY,iBAAW,EAAE7W,CAAf;AAAkB0J,UAAI,EAAEtP,IAAI,CAAC+0B;AAA7B,KAAhC;AACA/0B,QAAI,CAACiwD,YAAL;AACAjwD,QAAI,CAACiqC,aAAL,GAAqBvU,WAAW,CAACC,GAAZ,KAAoB31B,IAAI,CAAC8wD,gBAAL,CAAsBrjD,CAA/D;AACAzN,QAAI,CAACqwD,aAAL,GAAqB,IAArB;AACArwD,QAAI,CAAC4uD,eAAL,GAAuB,CAAvB;;AACA,QACE5uD,IAAI,CAACuxD,cAAL,KACCG,WAAW,IAAIC,WAAf,IAA8BE,WAA9B,IAA6CD,WAD9C,CADF,EAGE;AACAQ,iBAAW;AACZ;;AACD,QAAI,mBAAmBvpD,IAAnB,CAAwB7I,IAAI,CAACwwD,YAAL,CAAkB3uD,KAA1C,CAAJ,EAAsD;AACpD7B,UAAI,CAACsC,SAAL,CAAeE,SAAf,GACExC,IAAI,CAACsC,SAAL,CAAeuK,YAAf,IACC,CAAC7M,IAAI,CAACqpC,aAAL,CAAmBpnC,CAAnB,GAAuB0qC,EAAvB,GAA4BR,GAA7B,KACEnsC,IAAI,CAACsC,SAAL,CAAeH,MAAf,GAAwBgqC,GAAxB,GAA8BQ,EADhC,CADD,CADF;AAIA;AACD;;AACD,QAAI,qBAAqB9jC,IAArB,CAA0B7I,IAAI,CAACwwD,YAAL,CAAkB3uD,KAA5C,CAAJ,EAAwD;AACtD7B,UAAI,CAACsC,SAAL,CAAeC,UAAf,GACEvC,IAAI,CAACsC,SAAL,CAAeq0B,WAAf,IACC,CAAC32B,IAAI,CAACqpC,aAAL,CAAmBtnC,CAAnB,GAAuB0vD,EAAvB,GAA4BtlB,GAA7B,KAAqCnsC,IAAI,CAACsC,SAAL,CAAekM,KAAf,GAAuB29B,GAAvB,GAA6BslB,EAAlE,CADD,CADF;AAGA;AACD;;AACD,QAAI,oBAAoB5oD,IAApB,CAAyB7I,IAAI,CAACwwD,YAAL,CAAkB3uD,KAA3C,CAAJ,EAAuD;AACrD7B,UAAI,CAACqxD,WAAL,CAAiBrxD,IAAI,CAAC+0B,WAAtB,EAAmC/0B,IAAI,CAACwwD,YAAL,CAAkB3uD,KAArD;AACA;AACD;;AACD7B,QAAI,CAACsC,SAAL,CAAeo0C,QAAf,CACE12C,IAAI,CAAC8wD,gBAAL,CAAsB/uD,CAAtB,GAA0B/B,IAAI,CAAC0pC,UAAL,CAAgB3nC,CAD5C,EAEE/B,IAAI,CAAC8wD,gBAAL,CAAsB7uD,CAAtB,GAA0BjC,IAAI,CAAC0pC,UAAL,CAAgBznC,CAF5C;AAID;;AACDjC,MAAI,CAACixD,SAAL,GAAiB,UAAUrrD,CAAV,EAAa;AAC5B,QAAI8oD,WAAJ,EAAiB;AACf;AACD;;AACDrrD,yBAAqB,CAAC,YAAY;AAChCqrD,iBAAW,GAAG,IAAd;AACA8C,eAAS,CAAC5rD,CAAD,CAAT;AACA8oD,iBAAW,GAAG,KAAd;AACD,KAJoB,CAArB;AAKD,GATD;;AAUA1uD,MAAI,CAACgxD,cAAL,GAAsB,UAAUprD,CAAV,EAAa;AACjC5F,QAAI,CAACkpC,cAAL,GAAsBtnC,SAAtB;AACA5B,QAAI,CAACuxD,cAAL,GAAsB,KAAtB;AACApkD,iBAAa,CAACnN,IAAI,CAAC2uD,kBAAN,CAAb;AACAxhD,iBAAa,CAACnN,IAAI,CAAC0wD,mBAAN,CAAb;AACAvjD,iBAAa,CAACnN,IAAI,CAACywD,iBAAN,CAAb;AACA7qD,KAAC,CAACiL,eAAF;AACA9P,YAAQ,CAACgC,IAAT,CAAc4C,mBAAd,CAAkC,WAAlC,EAA+C3F,IAAI,CAACixD,SAApD,EAA+D;AAC7DC,aAAO,EAAE;AADoD,KAA/D;AAGAnwD,YAAQ,CAACgC,IAAT,CAAc4C,mBAAd,CAAkC,UAAlC,EAA8C3F,IAAI,CAACmxD,QAAnD,EAA6D,KAA7D;AACApwD,YAAQ,CAACgC,IAAT,CAAc4C,mBAAd,CAAkC,aAAlC,EAAiD3F,IAAI,CAACoxD,WAAtD,EAAmE,KAAnE;AACD,GAZD;;AAaApxD,MAAI,CAACmxD,QAAL,GAAgB,UAAUvrD,CAAV,EAAa;AAC3B,QACE5F,IAAI,CAACwE,aAAL,CAAmB,UAAnB,EAA+B;AAAEiY,iBAAW,EAAE7W,CAAf;AAAkB0J,UAAI,EAAEtP,IAAI,CAAC+0B;AAA7B,KAA/B,CADF,EAEE;AACA;AACD;;AACD/0B,QAAI,CAACkpC,cAAL,GAAsBtnC,SAAtB;;AACA,QAAIgE,CAAC,CAAC2qD,cAAF,CAAiB,CAAjB,CAAJ,EAAyB;AACvBvwD,UAAI,CAACqpC,aAAL,GAAqBznC,SAArB;AACD;;AACD,QAAIgE,CAAC,CAAC2qD,cAAF,CAAiB,CAAjB,CAAJ,EAAyB;AACvBvwD,UAAI,CAACspC,cAAL,GAAsB1nC,SAAtB;AACD;;AACD,QAAI5B,IAAI,CAAC4wD,WAAT,EAAsB;AACpB,UAAIhrD,CAAC,CAACwjC,OAAF,CAAU5jC,MAAV,KAAqB,CAAzB,EAA4B;AAC1BxF,YAAI,CAAC4wD,WAAL,GAAmB,KAAnB;AACD;;AACD;AACD;;AACD,QAAIyB,EAAE,GACJjxC,IAAI,CAACuH,GAAL,CAAS3oB,IAAI,CAAC0pC,UAAL,CAAgB3nC,CAAzB,IAA8Bqf,IAAI,CAACuH,GAAL,CAAS3oB,IAAI,CAAC0pC,UAAL,CAAgBznC,CAAzB,CAA9B,GACAjC,IAAI,CAACkJ,UAAL,CAAgB8oD,aAFlB;;AAGA,QAAI1sD,KAAK,CAACtF,IAAI,CAAC2oC,IAAN,CAAT,EAAsB;AACpB3oC,UAAI,CAAC2oC,IAAL,GAAY,CAAZ;AACD;;AACD,QAAIrjC,KAAK,CAACtF,IAAI,CAAC0oC,IAAN,CAAT,EAAsB;AACpB1oC,UAAI,CAAC0oC,IAAL,GAAY,CAAZ;AACD;;AACD,QAAIpjC,KAAK,CAACtF,IAAI,CAAC+pC,KAAN,CAAT,EAAuB;AACrB/pC,UAAI,CAAC+pC,KAAL,GAAa,CAAb;AACD;;AACD,QAAIzkC,KAAK,CAACtF,IAAI,CAACgqC,KAAN,CAAT,EAAuB;AACrBhqC,UAAI,CAACgqC,KAAL,GAAa,CAAb;AACD;;AACDhqC,QAAI,CAAC2pC,cAAL,CAAoB5nC,CAApB,GACE/B,IAAI,CAAC2oC,IAAL,GAAY3oC,IAAI,CAACkJ,UAAL,CAAgBopD,wBAD9B;AAEAtyD,QAAI,CAAC2pC,cAAL,CAAoB1nC,CAApB,GACEjC,IAAI,CAAC0oC,IAAL,GAAY1oC,IAAI,CAACkJ,UAAL,CAAgBopD,wBAD9B;AAEAtyD,QAAI,CAAC+vD,iBAAL;;AACA,QACE,CAACsC,EAAD,IACAryD,IAAI,CAAC4uD,eAAL,KAAyB,CADzB,KAECxtC,IAAI,CAACuH,GAAL,CAAS3oB,IAAI,CAAC+pC,KAAd,IAAuB/pC,IAAI,CAACkJ,UAAL,CAAgBqpD,2BAAvC,IACCnxC,IAAI,CAACuH,GAAL,CAAS3oB,IAAI,CAACgqC,KAAd,IAAuBhqC,IAAI,CAACkJ,UAAL,CAAgBqpD,2BAHzC,KAIA,CAAC,WAAW1pD,IAAX,CAAgB7I,IAAI,CAACwwD,YAAL,CAAkB3uD,KAAlC,CAJD,IAKA,CAACwwD,EANH,EAOE;AACAryD,UAAI,CAACqwD,aAAL,GAAqB,KAArB;AACArwD,UAAI,CAACmwD,iBAAL;AACD;;AACDnwD,QAAI,CAACgxD,cAAL,CAAoBprD,CAApB;AACD,GAnDD;;AAoDA5F,MAAI,CAACoxD,WAAL,GAAmB,UAAUxrD,CAAV,EAAa;AAC9B,QACE5F,IAAI,CAACwE,aAAL,CAAmB,aAAnB,EAAkC;AAChCiY,iBAAW,EAAE7W,CADmB;AAEhC0J,UAAI,EAAEtP,IAAI,CAAC+0B;AAFqB,KAAlC,CADF,EAKE;AACA;AACD;;AACD/0B,QAAI,CAACgxD,cAAL,CAAoBprD,CAApB;AACD,GAVD;AAWD,C;;;;;;;;;;;;;ACnfD,2BAA2B,SAAS,cAAc,4BAA4B,YAAY,qBAAqB,2DAA2D,uCAAuC,qCAAqC,oBAAoB,EAAE,iBAAiB,4FAA4F,eAAe,wCAAwC,SAAS,EAAE,mBAAmB,8BAA8B,qDAAqD,0BAA0B,6CAA6C,sBAAsB,6DAA6D,YAAY,eAAe,SAAS,iBAAiB,iCAAiC,iBAAiB,YAAY,UAAU,sBAAsB,mBAAmB,iDAAiD,iBAAiB,kBAAkB,aAAa,sCAAsC,SAAS,EAAE,0DAA0D,8BAA8B,MAAM,sBAAsB,6BAA6B,iBAAiB,aAAa,sCAAsC,SAAS,EAAE,WAAW,k5HAAk5H,W;;;;;;UCAhnK;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCrBA;WACA;WACA;WACA,cAAc,0BAA0B,EAAE;WAC1C,cAAc,eAAe;WAC7B,gCAAgC,YAAY;WAC5C;WACA,E;;;;;WCPA;WACA;WACA;WACA;WACA,wCAAwC,yCAAyC;WACjF;WACA;WACA,E;;;;;WCPA,6CAA6C,wDAAwD,E;;;;;WCArG;WACA;WACA;WACA,sDAAsD,kBAAkB;WACxE;WACA,+CAA+C,cAAc;WAC7D,E;;;;UCNA;UACA;UACA;UACA","file":"canvas-datagrid.debug.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"canvasDatagrid\"] = factory();\n\telse\n\t\troot[\"canvasDatagrid\"] = factory();\n})(self, function() {\nreturn ","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false, Event: false*/\n'use strict';\n\nexport default function (self) {\n let zIndexTop;\n\n function applyButtonMenuItemStyle(buttonMenuItemContainer) {\n self.createInlineStyle(\n buttonMenuItemContainer,\n 'canvas-datagrid-button-menu-item' + (self.mobile ? '-mobile' : ''),\n );\n buttonMenuItemContainer.addEventListener('mouseover', function () {\n self.createInlineStyle(\n buttonMenuItemContainer,\n 'canvas-datagrid-button-menu-item:hover',\n );\n });\n buttonMenuItemContainer.addEventListener('mouseout', function () {\n self.createInlineStyle(\n buttonMenuItemContainer,\n 'canvas-datagrid-button-menu-item',\n );\n });\n }\n\n function applyButtonStyle(button) {\n self.createInlineStyle(button, 'canvas-datagrid-button-wrapper');\n button.addEventListener('mouseover', function () {\n if (!self.buttonMenu) {\n self.createInlineStyle(button, 'canvas-datagrid-button-wrapper:hover');\n }\n });\n button.addEventListener('mouseout', function () {\n if (!self.buttonMenu) {\n self.createInlineStyle(button, 'canvas-datagrid-button-wrapper');\n }\n });\n }\n\n function createButton(pos, items, imgSrc) {\n var wrapper = document.createElement('div'),\n buttonArrow = document.createElement('div'),\n buttonIcon = document.createElement('div'),\n intf = {};\n\n if (!Array.isArray(items)) {\n throw new Error('createButton expects an array.');\n }\n\n function init() {\n var loc = {},\n s = self.scrollOffset(self.canvas);\n\n if (zIndexTop === undefined) {\n zIndexTop = self.style.buttonZIndex;\n }\n\n applyButtonStyle(wrapper);\n self.createInlineStyle(buttonIcon, 'canvas-datagrid-button-icon');\n self.createInlineStyle(buttonArrow, 'canvas-datagrid-button-arrow');\n\n loc.x = pos.left - s.left;\n loc.y = pos.top - s.top;\n loc.height = 0;\n zIndexTop += 1;\n wrapper.style.position = 'absolute';\n wrapper.style.zIndex = zIndexTop;\n wrapper.style.left = loc.x + 'px';\n wrapper.style.top = loc.y + 'px';\n wrapper.left = pos.left + self.scrollBox.scrollLeft;\n wrapper.top = pos.top + self.scrollBox.scrollTop;\n buttonArrow.innerHTML = self.style.buttonArrowDownHTML;\n if (imgSrc) {\n let img = document.createElement('img');\n img.setAttribute('src', imgSrc);\n img.style.maxWidth = '100%';\n img.style.height = '100%';\n buttonIcon.appendChild(img);\n }\n wrapper.appendChild(buttonIcon);\n wrapper.appendChild(buttonArrow);\n document.body.appendChild(wrapper);\n wrapper.addEventListener('click', toggleButtonMenu);\n }\n\n intf.wrapper = wrapper;\n intf.items = items;\n init();\n\n intf.dispose = function () {\n if (wrapper.parentNode) {\n wrapper.parentNode.removeChild(wrapper);\n }\n };\n return intf;\n }\n\n function toggleButtonMenu() {\n function createDisposeEvent() {\n requestAnimationFrame(function () {\n document.addEventListener('click', self.disposeButtonMenu);\n });\n }\n if (self.buttonMenu) {\n self.disposeButtonMenu();\n } else {\n let pos = {\n left: self.button.wrapper.left - self.scrollBox.scrollLeft,\n top:\n self.button.wrapper.top +\n self.button.wrapper.offsetHeight -\n self.scrollBox.scrollTop,\n };\n self.buttonMenu = createButtonMenu(pos, self.button.items);\n self.createInlineStyle(\n self.button.wrapper,\n 'canvas-datagrid-button-wrapper:active',\n );\n createDisposeEvent();\n }\n }\n\n function createButtonMenu(pos, items) {\n var buttonMenu = document.createElement('div'),\n selectedIndex = -1,\n intf = {},\n rect;\n\n function createItems() {\n function addItem(item, menuItemContainer) {\n function addContent(content) {\n if (content === null) {\n return;\n }\n\n if (typeof content === 'object') {\n menuItemContainer.appendChild(content);\n return;\n }\n\n applyButtonMenuItemStyle(menuItemContainer);\n menuItemContainer.innerHTML = content;\n return;\n }\n\n addContent(item.title);\n item.buttonMenuItemContainer = menuItemContainer;\n\n if (item.click) {\n menuItemContainer.addEventListener('click', function (ev) {\n item.click.apply(self, [ev]);\n self.disposeButton();\n });\n }\n }\n\n for (let item of items) {\n var buttonMenuItemContainer = document.createElement('div');\n addItem(item, buttonMenuItemContainer);\n buttonMenu.appendChild(buttonMenuItemContainer);\n }\n }\n\n function clickIndex(idx) {\n items[idx].buttonMenuItemContainer.dispatchEvent(new Event('click'));\n }\n\n function init() {\n var loc = {},\n s = self.scrollOffset(self.canvas);\n\n if (zIndexTop === undefined) {\n zIndexTop = self.style.buttonZIndex;\n }\n\n createItems();\n self.createInlineStyle(\n buttonMenu,\n 'canvas-datagrid-button-menu' + (self.mobile ? '-mobile' : ''),\n );\n\n loc.x = pos.left - s.left;\n loc.y = pos.top - s.top;\n loc.height = 0;\n zIndexTop += 1;\n buttonMenu.style.position = 'absolute';\n buttonMenu.style.zIndex = zIndexTop;\n buttonMenu.style.left = loc.x + 'px';\n buttonMenu.style.top = loc.y + 'px';\n document.body.appendChild(buttonMenu);\n rect = buttonMenu.getBoundingClientRect();\n\n if (rect.bottom > window.innerHeight) {\n loc.y =\n self.button.wrapper.top -\n buttonMenu.offsetHeight -\n self.scrollBox.scrollTop;\n if (loc.y < 0) {\n loc.y = self.style.buttonMenuWindowMargin;\n }\n\n if (\n buttonMenu.offsetHeight >\n window.innerHeight - self.style.buttonMenuWindowMargin\n ) {\n buttonMenu.style.height =\n window.innerHeight - self.style.buttonMenuWindowMargin * 2 + 'px';\n }\n }\n\n if (rect.right > window.innerWidth) {\n loc.x -=\n rect.right - window.innerWidth + self.style.buttonMenuWindowMargin;\n }\n\n if (loc.x < 0) {\n loc.x = self.style.buttonMenuWindowMargin;\n }\n\n if (loc.y < 0) {\n loc.y = self.style.buttonMenuWindowMargin;\n }\n\n buttonMenu.style.left = loc.x + 'px';\n buttonMenu.style.top = loc.y + 'px';\n }\n\n intf.buttonMenu = buttonMenu;\n init();\n intf.clickIndex = clickIndex;\n intf.rect = rect;\n intf.items = items;\n\n intf.dispose = function () {\n if (buttonMenu.parentNode) {\n buttonMenu.parentNode.removeChild(buttonMenu);\n }\n };\n\n Object.defineProperty(intf, 'selectedIndex', {\n get: function get() {\n return selectedIndex;\n },\n set: function set(value) {\n if (typeof value !== 'number' || isNaN(value) || !isFinite(value)) {\n throw new Error('Button menu selected index must be a sane number.');\n }\n\n selectedIndex = value;\n\n if (selectedIndex > items.length - 1) {\n selectedIndex = items.length - 1;\n }\n\n if (selectedIndex < 0) {\n selectedIndex = 0;\n }\n\n items.forEach(function (item, index) {\n if (index === selectedIndex) {\n return self.createInlineStyle(\n item.buttonMenuItemContainer,\n 'canvas-datagrid-button-menu-item:hover',\n );\n }\n\n self.createInlineStyle(\n item.buttonMenuItemContainer,\n 'canvas-datagrid-button-menu-item',\n );\n });\n },\n });\n return intf;\n }\n\n self.disposeButtonMenu = function () {\n if (self.buttonMenu) {\n document.removeEventListener('click', self.disposeButtonMenu);\n self.buttonMenu.dispose();\n self.buttonMenu = undefined;\n self.createInlineStyle(\n self.button.wrapper,\n 'canvas-datagrid-button-wrapper:hover',\n );\n }\n };\n\n self.disposeButton = function (e) {\n if (e && e.keyCode !== 27) return;\n document.removeEventListener('keydown', self.disposeButton);\n zIndexTop = self.style.buttonZIndex;\n self.disposeButtonMenu();\n\n if (self.button) {\n self.button.dispose();\n }\n\n self.button = undefined;\n };\n\n self.moveButtonPos = function () {\n self.button.wrapper.style.left =\n self.button.wrapper.left - self.scrollBox.scrollLeft + 'px';\n self.button.wrapper.style.top =\n self.button.wrapper.top - self.scrollBox.scrollTop + 'px';\n self.disposeButtonMenu();\n };\n\n self.attachButton = function (pos, items, imgSrc) {\n function createDisposeEvent() {\n requestAnimationFrame(function () {\n document.addEventListener('keydown', self.disposeButton);\n });\n }\n\n if (self.button) {\n self.disposeButton();\n }\n\n self.button = createButton(pos, items, imgSrc);\n createDisposeEvent();\n };\n return;\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nimport defaults from './defaults';\n\nexport default function () {\n var typeMap,\n component = {};\n component.dehyphenateProperty = function hyphenateProperty(prop) {\n prop = prop.replace('--cdg-', '');\n var p = '',\n nextLetterCap;\n Array.prototype.forEach.call(prop, function (char) {\n if (nextLetterCap) {\n nextLetterCap = false;\n p += char.toUpperCase();\n return;\n }\n if (char === '-') {\n nextLetterCap = true;\n return;\n }\n p += char;\n });\n return p;\n };\n component.hyphenateProperty = function hyphenateProperty(prop, cust) {\n var p = '';\n Array.prototype.forEach.call(prop, function (char) {\n if (char === char.toUpperCase()) {\n p += '-' + char.toLowerCase();\n return;\n }\n p += char;\n });\n return (cust ? '--cdg-' : '') + p;\n };\n function getDefaultItem(base, item) {\n var i = {},\n r;\n defaults(i);\n r = i.defaults[base].filter(function (i) {\n return (\n i[0].toLowerCase() === item.toLowerCase() ||\n component.hyphenateProperty(i[0]) === item.toLowerCase() ||\n component.hyphenateProperty(i[0], true) === item.toLowerCase()\n );\n })[0];\n return r;\n }\n component.applyComponentStyle = function (supressChangeAndDrawEvents, intf) {\n if (!intf.isComponent) {\n return;\n }\n var cStyle = window.getComputedStyle(\n intf.tagName === 'CANVAS-DATAGRID' ? intf : intf.canvas,\n null,\n ),\n defs = {};\n intf.computedStyle = cStyle;\n defaults(defs);\n defs = defs.defaults.styles;\n defs.forEach(function (def) {\n var val;\n val = cStyle.getPropertyValue(component.hyphenateProperty(def[0], true));\n if (val === '') {\n val = cStyle.getPropertyValue(\n component.hyphenateProperty(def[0], false),\n );\n }\n if (val !== '' && typeof val === 'string') {\n intf.setStyleProperty(\n def[0],\n typeMap[typeof def[1]](\n val.replace(/^\\s+/, '').replace(/\\s+$/, ''),\n def[1],\n ),\n true,\n );\n }\n });\n if (!supressChangeAndDrawEvents && intf.dispatchEvent) {\n requestAnimationFrame(function () {\n intf.resize(true);\n });\n intf.dispatchEvent('stylechanged', intf.style);\n }\n };\n typeMap = {\n data: function (strData) {\n try {\n return JSON.parse(strData);\n } catch (e) {\n throw new Error('Cannot read JSON data in canvas-datagrid data.');\n }\n },\n schema: function (strSchema) {\n try {\n return JSON.parse(strSchema);\n } catch (e) {\n throw new Error(\n 'Cannot read JSON data in canvas-datagrid schema attribute.',\n );\n }\n },\n number: function (strNum, def) {\n var n = parseInt(strNum, 10);\n return isNaN(n) ? def : n;\n },\n boolean: function (strBool) {\n return /true/i.test(strBool);\n },\n string: function (str) {\n return str;\n },\n };\n component.getObservableAttributes = function () {\n var i = {},\n attrs = ['data', 'schema', 'style', 'className', 'name'];\n defaults(i);\n i.defaults.attributes.forEach(function (attr) {\n attrs.push(attr[0].toLowerCase());\n });\n return attrs;\n };\n component.disconnectedCallback = function () {\n this.connected = false;\n };\n component.connectedCallback = function () {\n var intf = this;\n intf.parentDOMNode.innerHTML = '';\n intf.parentDOMNode.appendChild(intf.canvas);\n intf.connected = true;\n component.observe(intf);\n component.applyComponentStyle(true, intf);\n intf.resize(true);\n };\n component.adoptedCallback = function () {\n this.resize();\n };\n component.attributeChangedCallback = function (attrName, oldVal, newVal) {\n var tfn,\n intf = this,\n def;\n if (attrName === 'style') {\n component.applyComponentStyle(false, intf);\n return;\n }\n if (attrName === 'data') {\n if (intf.dataType === 'application/x-canvas-datagrid') {\n intf.dataType = 'application/json+x-canvas-datagrid';\n }\n intf.data = newVal;\n return;\n }\n if (attrName === 'schema') {\n intf.schema = typeMap.schema(newVal);\n return;\n }\n if (attrName === 'name') {\n intf.name = newVal;\n return;\n }\n if (attrName === 'class' || attrName === 'className') {\n return;\n }\n def = getDefaultItem('attributes', attrName);\n if (def) {\n tfn = typeMap[typeof def[1]];\n intf.attributes[def[0]] = tfn(newVal);\n return;\n }\n if (/^on/.test(attrName)) {\n intf.addEventListener('on' + attrName, Function('e', newVal));\n }\n return;\n };\n component.observe = function (intf) {\n var observer;\n if (!window.MutationObserver) {\n return;\n }\n intf.applyComponentStyle = function () {\n component.applyComponentStyle(false, intf);\n intf.resize();\n };\n /**\n * Applies the computed css styles to the grid. In some browsers, changing directives in attached style sheets does not automatically update the styles in this component. It is necessary to call this method to update in these cases.\n * @memberof canvasDatagrid\n * @name applyComponentStyle\n * @method\n */\n observer = new window.MutationObserver(function (mutations) {\n var checkInnerHTML, checkStyle;\n Array.prototype.forEach.call(mutations, function (mutation) {\n if (\n mutation.attributeName === 'class' ||\n mutation.attributeName === 'style'\n ) {\n checkStyle = true;\n return;\n }\n if (mutation.target.nodeName === 'STYLE') {\n checkStyle = true;\n return;\n }\n if (\n mutation.target.parentNode &&\n mutation.target.parentNode.nodeName === 'STYLE'\n ) {\n checkStyle = true;\n return;\n }\n if (\n mutation.target === intf &&\n (mutation.addedNodes.length > 0 || mutation.type === 'characterData')\n ) {\n checkInnerHTML = true;\n }\n });\n if (checkStyle) {\n intf.applyComponentStyle(false, intf);\n }\n if (checkInnerHTML) {\n if (intf.dataType === 'application/x-canvas-datagrid') {\n intf.dataType = 'application/json+x-canvas-datagrid';\n }\n intf.data = intf.innerHTML;\n }\n });\n observer.observe(intf, {\n characterData: true,\n childList: true,\n attributes: true,\n subtree: true,\n });\n Array.prototype.forEach.call(\n document.querySelectorAll('style'),\n function (el) {\n observer.observe(el, {\n characterData: true,\n childList: true,\n attributes: true,\n subtree: true,\n });\n },\n );\n };\n return component;\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false, Event: false*/\n'use strict';\n\nexport default function (self) {\n var zIndexTop, hoverScrollTimeout, autoCompleteContext;\n function applyContextItemStyle(contextItemContainer) {\n self.createInlineStyle(\n contextItemContainer,\n 'canvas-datagrid-context-menu-item' + (self.mobile ? '-mobile' : ''),\n );\n contextItemContainer.addEventListener('mouseover', function () {\n self.createInlineStyle(\n contextItemContainer,\n 'canvas-datagrid-context-menu-item:hover',\n );\n });\n contextItemContainer.addEventListener('mouseout', function () {\n self.createInlineStyle(\n contextItemContainer,\n 'canvas-datagrid-context-menu-item',\n );\n });\n }\n function createContextMenu(ev, pos, items, parentContextMenu) {\n var container = document.createElement('div'),\n upArrow = document.createElement('div'),\n downArrow = document.createElement('div'),\n children = [],\n selectedIndex = -1,\n intf = {},\n rect;\n if (!Array.isArray(items)) {\n throw new Error('createContextMenu expects an array.');\n }\n function createItems() {\n items.forEach(function (item) {\n var contextItemContainer = document.createElement('div'),\n childMenuArrow;\n function removeChildContext(e) {\n if (\n e.relatedTarget === container ||\n item.contextMenu.container === e.relatedTarget ||\n childMenuArrow === e.relatedTarget ||\n contextItemContainer === e.relatedTarget ||\n item.contextMenu.container.contains(e.relatedTarget)\n ) {\n return;\n }\n item.contextMenu.dispose();\n children.splice(children.indexOf(item.contextMenu), 1);\n item.contextMenu = undefined;\n contextItemContainer.removeEventListener(\n 'mouseout',\n removeChildContext,\n );\n container.removeEventListener('mouseout', removeChildContext);\n contextItemContainer.setAttribute('contextOpen', '0');\n contextItemContainer.setAttribute('opening', '0');\n }\n function contextAddCallback(items) {\n // check yet again if the user hasn't moved off\n if (\n contextItemContainer.getAttribute('opening') !== '1' ||\n contextItemContainer.getAttribute('contextOpen') === '1'\n ) {\n return;\n }\n var cPos = contextItemContainer.getBoundingClientRect();\n cPos = {\n left:\n cPos.left +\n self.style.childContextMenuMarginLeft +\n container.offsetWidth,\n top: cPos.top + self.style.childContextMenuMarginTop,\n bottom: cPos.bottom,\n right: cPos.right,\n };\n item.contextMenu = createContextMenu(ev, cPos, items, intf);\n contextItemContainer.setAttribute('contextOpen', '1');\n contextItemContainer.addEventListener('mouseout', removeChildContext);\n container.addEventListener('mouseout', removeChildContext);\n children.push(item.contextMenu);\n }\n function createChildContext() {\n var i;\n if (contextItemContainer.getAttribute('contextOpen') === '1') {\n return;\n }\n contextItemContainer.setAttribute('opening', '1');\n if (typeof item.items === 'function') {\n i = item.items.apply(intf, [\n function (items) {\n contextAddCallback(items);\n },\n ]);\n if (i !== undefined && Array.isArray(i)) {\n contextAddCallback(i);\n }\n return;\n }\n contextAddCallback(item.items);\n }\n function addItem(item) {\n function addContent(content) {\n if (content === null) {\n return;\n }\n if (typeof content === 'function') {\n return addContent(content(ev));\n }\n if (typeof content === 'object') {\n contextItemContainer.appendChild(content);\n return;\n }\n applyContextItemStyle(contextItemContainer);\n contextItemContainer.innerHTML = content;\n return;\n }\n addContent(item.title);\n item.contextItemContainer = contextItemContainer;\n if (\n (item.items && item.items.length > 0) ||\n typeof item.items === 'function'\n ) {\n childMenuArrow = document.createElement('div');\n self.createInlineStyle(\n childMenuArrow,\n 'canvas-datagrid-context-child-arrow',\n );\n childMenuArrow.innerHTML = self.style.childContextMenuArrowHTML;\n contextItemContainer.appendChild(childMenuArrow);\n contextItemContainer.addEventListener(\n 'mouseover',\n createChildContext,\n );\n contextItemContainer.addEventListener('mouseout', function () {\n contextItemContainer.setAttribute('opening', '0');\n });\n }\n if (item.click) {\n contextItemContainer.addEventListener('click', function (ev) {\n item.click.apply(self, [ev]);\n });\n }\n }\n addItem(item);\n container.appendChild(contextItemContainer);\n });\n }\n function clickIndex(idx) {\n items[idx].contextItemContainer.dispatchEvent(new Event('click'));\n }\n function checkArrowVisibility() {\n if (container.scrollTop > 0) {\n self.parentDOMNode.appendChild(upArrow);\n } else if (upArrow.parentNode) {\n upArrow.parentNode.removeChild(upArrow);\n }\n if (\n container.scrollTop >=\n container.scrollHeight - container.offsetHeight &&\n downArrow.parentNode\n ) {\n downArrow.parentNode.removeChild(downArrow);\n } else if (\n container.scrollHeight - container.offsetHeight > 0 &&\n !(\n container.scrollTop >=\n container.scrollHeight - container.offsetHeight\n )\n ) {\n self.parentDOMNode.appendChild(downArrow);\n }\n }\n function fade(element) {\n var opacity = 1;\n var timer = setInterval(function () {\n if (opacity <= 0.1) {\n clearInterval(timer);\n element.style.display = 'none';\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n }\n }\n element.style.opacity = opacity;\n element.style.filter = 'alpha(opacity=' + opacity * 100 + ')';\n opacity -= opacity * 0.1;\n }, self.attributes.animationDurationHideContextMenu * 0.1);\n }\n function unfade(element) {\n var opacity = 0.1;\n element.style.display = 'block';\n var timer = setInterval(function () {\n if (opacity >= 1) {\n clearInterval(timer);\n }\n element.style.opacity = opacity;\n element.style.filter = 'alpha(opacity=' + opacity * 100 + ')';\n opacity += opacity * 0.1;\n }, self.attributes.animationDurationShowContextMenu * 0.1);\n }\n function startHoverScroll(type) {\n return function t() {\n var a = self.attributes.contextHoverScrollAmount;\n if (type === 'up' && container.scrollTop === 0) {\n return;\n }\n if (type === 'down' && container.scrollTop === container.scrollHeight) {\n return;\n }\n container.scrollTop += type === 'up' ? -a : a;\n hoverScrollTimeout = setTimeout(\n t,\n self.attributes.contextHoverScrollRateMs,\n type,\n );\n };\n }\n function endHoverScroll(type) {\n return function () {\n clearTimeout(hoverScrollTimeout);\n };\n }\n function init() {\n var loc = {},\n s = self.scrollOffset(self.canvas);\n if (zIndexTop === undefined) {\n zIndexTop = self.style.contextMenuZIndex;\n }\n createItems();\n self.createInlineStyle(\n container,\n 'canvas-datagrid-context-menu' + (self.mobile ? '-mobile' : ''),\n );\n loc.x = pos.left - s.left;\n loc.y = pos.top - s.top;\n loc.height = 0;\n zIndexTop += 1;\n container.style.opacity = 0;\n container.style.position = 'absolute';\n upArrow.style.color = self.style.contextMenuArrowColor;\n downArrow.style.color = self.style.contextMenuArrowColor;\n [upArrow, downArrow].forEach(function (el) {\n el.style.textAlign = 'center';\n el.style.position = 'absolute';\n el.style.zIndex = zIndexTop + 1;\n });\n container.style.zIndex = zIndexTop;\n if (parentContextMenu && parentContextMenu.inputDropdown) {\n container.style.maxHeight =\n window.innerHeight -\n loc.y -\n self.style.autocompleteBottomMargin +\n 'px';\n container.style.minWidth = pos.width + 'px';\n loc.y += pos.height;\n }\n if (self.mobile) {\n container.style.width = pos.width + 'px';\n }\n container.style.left = loc.x + 'px';\n container.style.top = loc.y + 'px';\n container.addEventListener('scroll', checkArrowVisibility);\n container.addEventListener('wheel', function (e) {\n if (self.hasFocus) {\n container.scrollTop += e.deltaY;\n container.scrollLeft += e.deltaX;\n }\n checkArrowVisibility();\n });\n upArrow.innerHTML = self.style.contextMenuArrowUpHTML;\n downArrow.innerHTML = self.style.contextMenuArrowDownHTML;\n container.appendChild(upArrow);\n document.body.appendChild(downArrow);\n document.body.appendChild(container);\n unfade(container);\n rect = container.getBoundingClientRect();\n // TODO: fix !(parentContextMenu && parentContextMenu.inputDropdown) state (autocomplete)\n if (rect.bottom > window.innerHeight) {\n if (!(parentContextMenu && parentContextMenu.inputDropdown)) {\n loc.y -=\n rect.bottom +\n self.style.contextMenuWindowMargin -\n window.innerHeight;\n }\n if (loc.y < 0) {\n loc.y = self.style.contextMenuWindowMargin;\n }\n if (\n container.offsetHeight >\n window.innerHeight - self.style.contextMenuWindowMargin\n ) {\n container.style.height =\n window.innerHeight - self.style.contextMenuWindowMargin * 2 + 'px';\n }\n }\n if (rect.right > window.innerWidth) {\n loc.x -=\n rect.right - window.innerWidth + self.style.contextMenuWindowMargin;\n }\n if (loc.x < 0) {\n loc.x = self.style.contextMenuWindowMargin;\n }\n if (loc.y < 0) {\n loc.y = self.style.contextMenuWindowMargin;\n }\n container.style.left = loc.x + 'px';\n container.style.top = loc.y + 'px';\n rect = container.getBoundingClientRect();\n upArrow.style.top = rect.top + 'px';\n downArrow.style.top =\n rect.top + rect.height - downArrow.offsetHeight + 'px';\n upArrow.style.left = rect.left + 'px';\n downArrow.style.left = rect.left + 'px';\n downArrow.style.width = container.offsetWidth + 'px';\n upArrow.style.width = container.offsetWidth + 'px';\n downArrow.addEventListener('mouseover', startHoverScroll('down'));\n downArrow.addEventListener('mouseout', endHoverScroll('down'));\n upArrow.addEventListener('mouseover', startHoverScroll('up'));\n upArrow.addEventListener('mouseout', endHoverScroll('up'));\n checkArrowVisibility();\n }\n intf.parentGrid = self.intf;\n intf.parentContextMenu = parentContextMenu;\n intf.container = container;\n init();\n intf.clickIndex = clickIndex;\n intf.rect = rect;\n intf.items = items;\n intf.upArrow = upArrow;\n intf.downArrow = downArrow;\n intf.dispose = function () {\n clearTimeout(hoverScrollTimeout);\n children.forEach(function (c) {\n c.dispose();\n });\n [downArrow, upArrow, container].forEach(function (el) {\n fade(el);\n });\n };\n Object.defineProperty(intf, 'selectedIndex', {\n get: function () {\n return selectedIndex;\n },\n set: function (value) {\n if (typeof value !== 'number' || isNaN(value || !isFinite(value))) {\n throw new Error('Context menu selected index must be a sane number.');\n }\n selectedIndex = value;\n if (selectedIndex > items.length - 1) {\n selectedIndex = items.length - 1;\n }\n if (selectedIndex < 0) {\n selectedIndex = 0;\n }\n items.forEach(function (item, index) {\n if (index === selectedIndex) {\n return self.createInlineStyle(\n item.contextItemContainer,\n 'canvas-datagrid-context-menu-item:hover',\n );\n }\n self.createInlineStyle(\n item.contextItemContainer,\n 'canvas-datagrid-context-menu-item',\n );\n });\n },\n });\n return intf;\n }\n function createFilterContextMenuItems(e) {\n var filterContainer = document.createElement('div'),\n filterLabel = document.createElement('div'),\n filterAutoCompleteButton = document.createElement('button'),\n filterInput = document.createElement('input'),\n n =\n e.cell && e.cell.header\n ? e.cell.header.title || e.cell.header.name\n : '',\n iRect;\n function checkRegExpErrorState() {\n filterInput.style.background = self.style.contextFilterInputBackground;\n filterInput.style.color = self.style.contextFilterInputColor;\n if (self.invalidFilterRegEx) {\n filterInput.style.background =\n self.style.contextFilterInvalidRegExpBackground;\n filterInput.style.color = self.style.contextFilterInvalidRegExpColor;\n }\n }\n function fillAutoComplete() {\n var count = 0;\n var items = {};\n var blanksItem = [];\n\n self.viewData.forEach(function (row) {\n var cellValue =\n row[e.cell.header.name] == null\n ? row[e.cell.header.name]\n : String(row[e.cell.header.name]).trim();\n var value = self.blankValues.includes(cellValue)\n ? self.attributes.blanksText\n : cellValue;\n\n if (items[value] || count > self.attributes.maxAutoCompleteItems) {\n return;\n }\n count += 1;\n items[value] = {\n title: self.formatters[e.cell.header.type || 'string']({\n cell: { value: value },\n }),\n click: function (e) {\n filterInput.value = value;\n e.stopPropagation();\n filterInput.dispatchEvent(new Event('keyup'));\n self.disposeAutocomplete();\n return;\n },\n };\n });\n\n if (Object.keys(items).indexOf(self.attributes.blanksText) !== -1) {\n blanksItem.push(items[self.attributes.blanksText]);\n delete items[self.attributes.blanksText];\n }\n\n return blanksItem.concat(\n Object.keys(items).map(function (key) {\n return items[key];\n }),\n );\n }\n\n function createAutoCompleteContext(ev) {\n if (ev && ['ArrowDown', 'ArrowUp', 'Enter', 'Tab'].includes(ev.key)) {\n return;\n }\n\n var autoCompleteItems = fillAutoComplete();\n\n iRect = filterInput.getBoundingClientRect();\n if (autoCompleteContext) {\n autoCompleteContext.dispose();\n autoCompleteContext = undefined;\n }\n autoCompleteContext = createContextMenu(\n e,\n {\n left: iRect.left,\n top: iRect.top,\n right: iRect.right,\n bottom: iRect.bottom,\n height: iRect.height,\n width: iRect.width,\n },\n autoCompleteItems,\n { inputDropdown: true },\n );\n autoCompleteContext.selectedIndex = 0;\n }\n self.createInlineStyle(filterLabel, 'canvas-datagrid-context-menu-label');\n self.createInlineStyle(\n filterAutoCompleteButton,\n 'canvas-datagrid-context-menu-filter-button',\n );\n self.createInlineStyle(\n filterInput,\n 'canvas-datagrid-context-menu-filter-input',\n );\n checkRegExpErrorState();\n filterInput.onclick = self.disposeAutocomplete;\n filterInput.addEventListener('keydown', function (e) {\n if (e.key === 'ArrowDown') {\n autoCompleteContext.selectedIndex += 1;\n }\n\n if (e.key === 'ArrowUp') {\n autoCompleteContext.selectedIndex -= 1;\n }\n\n if (e.key === 'Enter') {\n autoCompleteContext.clickIndex(autoCompleteContext.selectedIndex);\n self.disposeContextMenu();\n }\n\n if (e.key === 'Tab') {\n autoCompleteContext.clickIndex(autoCompleteContext.selectedIndex);\n e.preventDefault();\n }\n\n if (e.key === 'Escape') {\n self.disposeContextMenu();\n }\n });\n filterInput.addEventListener('keyup', function () {\n self.setFilter(e.cell.header.name, filterInput.value);\n });\n filterInput.addEventListener('keyup', createAutoCompleteContext);\n ['focus', 'blur', 'keydown', 'keyup', 'change'].forEach(function (en) {\n filterInput.addEventListener(en, checkRegExpErrorState);\n });\n filterInput.value = e.cell.header\n ? self.columnFilters[e.cell.header.name] || ''\n : '';\n filterLabel.innerHTML = self.attributes.filterOptionText.replace(/%s/g, n);\n filterAutoCompleteButton.onclick = function () {\n if (autoCompleteContext) {\n return self.disposeAutocomplete();\n }\n createAutoCompleteContext();\n };\n filterAutoCompleteButton.innerHTML = self.style.contextFilterButtonHTML;\n filterContainer.addEventListener('click', function (e) {\n return e.stopPropagation();\n });\n filterContainer.appendChild(filterLabel);\n filterContainer.appendChild(filterInput);\n filterContainer.appendChild(filterAutoCompleteButton);\n e.items.push({\n title: filterContainer,\n });\n if (Object.keys(self.columnFilters).length) {\n Object.keys(self.columnFilters).forEach(function (cf) {\n var h = self.getHeaderByName(cf);\n e.items.push({\n title: self.attributes.removeFilterOptionText.replace(\n /%s/g,\n h.title || h.name,\n ),\n click: function removeFilterClick(e) {\n e.preventDefault();\n self.setFilter(cf, '');\n self.controlInput.focus();\n },\n });\n });\n }\n }\n\n /**\n * Return a tuple if the user selected contiguous columns, otherwise `null`.\n * Info: Because the user may reorder the columns,\n * the schemaIndex of the first item may be greater than the schemaIndex of the second item,\n * but the columnIndex of the firs item must less than the columnIndex of the second item.\n * @param {any[]} schema from `self.getSchema()`\n * @returns {any[]} column schemas tuple (each schema has an additional field `schemaIndex`)\n */\n function getSelectedContiguousColumns(ev, schema) {\n const memoKey = '__contiguousColumns';\n if (Array.isArray(ev[memoKey]) || ev[memoKey] === null) return ev[memoKey];\n ev[memoKey] = null;\n\n if (!Array.isArray(self.selections) || self.selections.length === 0) return;\n const selection = self.selections[0];\n if (!selection || selection.length === 0) return;\n for (let rowIndex = 0; rowIndex < self.viewData.length; rowIndex++) {\n const row = self.viewData[rowIndex];\n if (!row) continue;\n const compare = self.selections[rowIndex];\n if (!compare) return;\n if (compare.length !== selection.length) return;\n for (let i = 0; i < selection.length; i++)\n if (selection[i] !== compare[i]) return;\n }\n selection.sort((a, b) => a - b);\n\n /** @type {number[][]} */\n const ranges = [];\n let begin = selection[0];\n let end = selection[0];\n for (let i = 1; i < selection.length; i++) {\n const orderIndex = selection[i];\n if (orderIndex === end + 1) {\n end = orderIndex;\n continue;\n }\n ranges.push([begin, end]);\n begin = orderIndex;\n end = orderIndex;\n }\n ranges.push([begin, end]);\n\n const currentOrderIndex = ev.cell.columnIndex;\n const matchedRange = ranges.find(\n (range) =>\n currentOrderIndex >= range[0] &&\n currentOrderIndex <= range[1] &&\n range[0] !== range[1],\n );\n if (!matchedRange) return;\n\n /** @type {number[]} orders[index] => columnIndex */\n const orders = self.orders.columns;\n if (!Array.isArray(orders)) return;\n\n const matchedSchema = matchedRange.map((orderIndex) => {\n const schemaIndex = orders[orderIndex];\n const thisSchema = schema[schemaIndex];\n return Object.assign({}, thisSchema, { orderIndex });\n });\n if (matchedSchema.findIndex((it) => !it) >= 0) return;\n return (ev[memoKey] = matchedSchema);\n }\n /**\n * @param {boolean} [allowOnlyOneRow]\n * @returns {number[]} a rowIndex tuple. It can contains one row index or two row indexes.\n */\n function getSelectedContiguousRows(allowOnlyOneRow) {\n let range = [];\n let prev = -2;\n let ok = true;\n self.selections.forEach(function (row, index) {\n if (!ok) return;\n if (prev < -1) {\n prev = index;\n range[0] = index;\n return;\n }\n if (index !== prev + 1 || !row || row.length === 0) {\n ok = false;\n return;\n }\n prev = index;\n range[1] = index;\n });\n if (ok) {\n if (range.length === 1) return allowOnlyOneRow ? range : null;\n return range;\n }\n }\n function addDefaultContextMenuItem(e) {\n const schema = self.getSchema();\n /**\n * A map between columnIndex and column data\n * @type {Map<string,any>}\n */\n let columns;\n const getColumnsMap = () => {\n if (!columns)\n columns = new Map(schema.map((_col) => [_col.columnIndex, _col]));\n return columns;\n };\n const isSorting =\n self.orderings.columns && self.orderings.columns.length > 0;\n\n const isNormalCell =\n !(\n e.cell.isBackground ||\n e.cell.isColumnHeaderCellCap ||\n e.cell.isScrollBar ||\n e.cell.isCorner ||\n e.cell.isRowHeader\n ) && e.cell.header;\n if (self.attributes.showFilter && isNormalCell) {\n createFilterContextMenuItems(e);\n }\n if (\n self.attributes.showCopy &&\n self.selections.reduce(function (p, r) {\n return p + r.length;\n }, 0) > 0\n ) {\n e.items.push({\n title: self.attributes.copyText,\n click: function () {\n document.execCommand('copy');\n self.disposeContextMenu();\n self.controlInput.focus();\n },\n });\n }\n if (self.attributes.showPaste && self.clipBoardData) {\n e.items.push({\n title: self.attributes.pasteText,\n click: function () {\n self.paste(self.clipBoardData, e.cell.columnIndex, e.cell.rowIndex);\n self.draw();\n },\n });\n }\n if (self.attributes.showColumnSelector) {\n e.items.push({\n title: self.attributes.columnSelectorText,\n items: function () {\n var d = [];\n self.getSchema().forEach(function (column) {\n function toggleColumnVisibility(e) {\n column.hidden = !column.hidden;\n self.dispatchEvent('togglecolumn', {\n column: column,\n hidden: column.hidden,\n });\n e.preventDefault();\n self.stopPropagation(e);\n self.disposeContextMenu();\n self.resize(true);\n self.setStorageData();\n }\n var el = document.createElement('div');\n applyContextItemStyle(el);\n el.addEventListener('touchstart', toggleColumnVisibility);\n el.addEventListener('click', toggleColumnVisibility);\n el.innerHTML =\n (column.hidden\n ? self.attributes.columnSelectorHiddenText\n : self.attributes.columnSelectorVisibleText) +\n (column.title || column.name);\n d.push({\n title: el,\n });\n });\n return d;\n },\n });\n if (e.cell && e.cell.header && e.cell.columnIndex > -1) {\n // This variable represents the order index because of the following codes from `draw.js`:\n // columnIndex: columnOrderIndex,\n const columnOrderIndex = e.cell.columnIndex;\n const columnIndex = self.orders.columns[columnOrderIndex];\n\n const contiguousColumns = getSelectedContiguousColumns(e, schema);\n let title = '';\n if (contiguousColumns) {\n title = contiguousColumns\n .map((col) => col.title || col.name)\n .join('-');\n } else {\n const column = schema[columnIndex];\n if (column) title = column.title || column.name;\n }\n e.items.push({\n title: self.attributes.hideColumnText.replace(/%s/gi, title),\n click: function (ev) {\n ev.preventDefault();\n self.stopPropagation(ev);\n self.disposeContextMenu();\n if (contiguousColumns) {\n self.hideColumns(\n contiguousColumns[0].orderIndex,\n contiguousColumns[1].orderIndex,\n );\n } else {\n self.hideColumns(columnOrderIndex);\n }\n },\n });\n }\n }\n if (\n self.attributes.saveAppearance &&\n self.attributes.showClearSettingsOption &&\n (Object.keys(self.sizes.rows).length > 0 ||\n Object.keys(self.sizes.columns).length > 0)\n ) {\n e.items.push({\n title: self.attributes.clearSettingsOptionText,\n click: function (e) {\n e.preventDefault();\n self.sizes.rows = {};\n self.sizes.columns = {};\n self.createRowOrders();\n self.createColumnOrders();\n self.storedSettings = undefined;\n self.dispatchEvent('resizecolumn', {\n columnWidth: self.style.cellWidth,\n });\n self.dispatchEvent('resizerow', {\n cellHeight: self.style.cellHeight,\n });\n self.setStorageData();\n self.resize(true);\n self.disposeContextMenu();\n self.controlInput.focus();\n },\n });\n }\n if (\n self.attributes.allowSorting &&\n self.attributes.showOrderByOption &&\n isNormalCell\n ) {\n e.items.push({\n title: self.attributes.showOrderByOptionTextAsc.replace(\n '%s',\n e.cell.header.title || e.cell.header.name,\n ),\n click: function (ev) {\n ev.preventDefault();\n self.order(e.cell.header.name, 'asc');\n self.controlInput.focus();\n },\n });\n e.items.push({\n title: self.attributes.showOrderByOptionTextDesc.replace(\n '%s',\n e.cell.header.title || e.cell.header.name,\n ),\n click: function (ev) {\n ev.preventDefault();\n self.order(e.cell.header.name, 'desc');\n self.disposeContextMenu();\n self.controlInput.focus();\n },\n });\n }\n\n //#region hide rows\n const canHideRows = !isSorting && e.cell.isRowHeader && e.cell.header;\n if (canHideRows) {\n const range = getSelectedContiguousRows(true);\n if (range) {\n const boundRowIndexes = range.map((viewRowIndex) =>\n self.getBoundRowIndexFromViewRowIndex(viewRowIndex),\n );\n let title;\n if (boundRowIndexes.length === 1) {\n if (typeof boundRowIndexes[0] === 'number')\n title = boundRowIndexes[0] + 1;\n else title = range[0] + 1;\n\n title = self.attributes.showHideRow.replace('%s', title);\n // hide one row\n e.items.push({\n title,\n click: function (ev) {\n ev.preventDefault();\n self.hideRows(boundRowIndexes[0], boundRowIndexes[0]);\n },\n });\n } else if (boundRowIndexes[0] <= boundRowIndexes[1]) {\n title = boundRowIndexes\n .map((it, index) => {\n if (typeof it === 'number') return it + 1;\n return range[index] + 1;\n })\n .join('-');\n title = self.attributes.showHideRows.replace('%s', title);\n // hide rows\n e.items.push({\n title,\n click: function (ev) {\n ev.preventDefault();\n self.hideRows(boundRowIndexes[0], boundRowIndexes[1]);\n },\n });\n }\n }\n }\n //#endregion hide rows\n\n //#region group/ungroup columns\n const groupAreaHeight = self.getColumnGroupAreaHeight();\n const groupAreaWidth = self.getRowGroupAreaWidth();\n const setCollapseStateForAllGroups = (allGroups, collapsed) => {\n if (allGroups.length === 0) return;\n for (let i = 0; i < allGroups.length; i++) {\n const groups = allGroups[i];\n for (let j = 0; j < groups.length; j++) {\n const group = groups[j];\n group.collapsed = collapsed;\n }\n }\n self.refresh();\n };\n if (e.pos && e.pos.y < groupAreaHeight) {\n e.items.push({\n title: self.attributes.showRemoveAllGroupColumns,\n click: function (ev) {\n ev.preventDefault();\n self.groupedColumns = [];\n self.refresh();\n },\n });\n e.items.push({\n title: self.attributes.showExpandAllGroupColumns,\n click: function (ev) {\n ev.preventDefault();\n setCollapseStateForAllGroups(self.groupedColumns, false);\n },\n });\n e.items.push({\n title: self.attributes.showCollapseAllGroupColumns,\n click: function (ev) {\n ev.preventDefault();\n setCollapseStateForAllGroups(self.groupedColumns, true);\n },\n });\n }\n if (e.pos && e.pos.x < groupAreaWidth) {\n e.items.push({\n title: self.attributes.showRemoveAllGroupRows,\n click: function (ev) {\n ev.preventDefault();\n self.groupedRows = [];\n self.refresh();\n },\n });\n e.items.push({\n title: self.attributes.showExpandAllGroupRows,\n click: function (ev) {\n ev.preventDefault();\n setCollapseStateForAllGroups(self.groupedRows, false);\n },\n });\n e.items.push({\n title: self.attributes.showCollapseAllGroupRows,\n click: function (ev) {\n ev.preventDefault();\n setCollapseStateForAllGroups(self.groupedRows, true);\n },\n });\n }\n\n const canGroupByColumns =\n self.attributes.allowGroupingColumns &&\n e.cell.isColumnHeader &&\n e.cell.header &&\n e.cell.header.index > 0;\n const canUngroupColumns =\n self.attributes.allowGroupingColumns && e.cell.isColumnHeader;\n const canGroupByRows =\n !isSorting &&\n self.attributes.allowGroupingRows &&\n e.cell.isRowHeader &&\n e.cell.header;\n const canUngroupRows =\n self.attributes.allowGroupingRows && e.cell.isRowHeader;\n\n if (canGroupByColumns) {\n /** @type {number[]} */\n const groupIndexes = [];\n /** @type {number} */\n const headerIndex = e.cell.header.index;\n let col = headerIndex;\n for (; col >= 0; col--) {\n if (!self.isColumnSelected(col)) break;\n groupIndexes[0] = col;\n }\n for (col = headerIndex; ; col++) {\n if (!self.isColumnSelected(col)) break;\n groupIndexes[1] = col;\n }\n if (\n col !== headerIndex &&\n groupIndexes.length === 2 &&\n groupIndexes[1] > groupIndexes[0] &&\n self.isNewGroupRangeValid(\n self.groupedColumns,\n groupIndexes[0],\n groupIndexes[1],\n )\n ) {\n const columns = getColumnsMap();\n const groupTitles = [];\n const groupNames = [];\n for (let i = 0; i < groupIndexes.length; i++) {\n const columnIndex = groupIndexes[i];\n const column = columns.get(columnIndex);\n if (column) {\n groupNames.push(column.name);\n groupTitles.push(column.title || column.name || column.index);\n }\n }\n if (groupNames[0] && groupNames[1]) {\n // show group options\n e.items.push({\n title: self.attributes.showGroupColumns.replace(\n '%s',\n groupTitles[0] + '-' + groupTitles[1],\n ),\n click: function (ev) {\n ev.preventDefault();\n self.groupColumns(groupNames[0], groupNames[1]);\n self.controlInput.focus();\n },\n });\n }\n }\n }\n if (canUngroupColumns) {\n const columnIndex = e.cell.columnIndex;\n const groups = self.getGroupsColumnBelongsTo(columnIndex);\n const columns = getColumnsMap();\n for (let i = 0; i < groups.length; i++) {\n const { from, to } = groups[i];\n const cell0 = columns.get(from);\n const cell1 = columns.get(to);\n if (cell0 && cell1) {\n const formatArgs =\n (cell0.title || cell0.name || cell0.index) +\n '-' +\n (cell1.title || cell1.name || cell1.index);\n e.items.push({\n title: self.attributes.showRemoveGroupColumns.replace(\n '%s',\n formatArgs,\n ),\n click: function (ev) {\n ev.preventDefault();\n self.removeGroupColumns(cell0.name, cell1.name);\n self.controlInput.focus();\n },\n });\n } else {\n console.warn(`Cannot find column ${from} or column ${to}`);\n }\n }\n }\n if (canGroupByRows) {\n const range = getSelectedContiguousRows(false) || [];\n const rangeTitle = range\n .map((rowIndex) => {\n const index = self.getBoundRowIndexFromViewRowIndex(rowIndex);\n if (typeof index === 'number') return index + 1;\n return rowIndex + 1;\n })\n .join('-');\n if (\n range.length === 2 &&\n self.isNewGroupRangeValid(self.groupedRows, range[0], range[1])\n ) {\n e.items.push({\n title: self.attributes.showGroupRows.replace('%s', rangeTitle),\n click: function (ev) {\n ev.preventDefault();\n self.groupRows(range[0], range[1]);\n },\n });\n }\n }\n if (canUngroupRows) {\n const rowIndex = e.cell.rowIndex;\n const groups = self.getGroupsRowBelongsTo(rowIndex);\n for (let i = 0; i < groups.length; i++) {\n const { from, to } = groups[i];\n const rangeTitle = [from, to]\n .map((rowIndex) => {\n const index = self.getBoundRowIndexFromViewRowIndex(rowIndex);\n if (typeof index === 'number') return index + 1;\n return rowIndex + 1;\n })\n .join('-');\n e.items.push({\n title: self.attributes.showRemoveGroupRows.replace('%s', rangeTitle),\n click: function (ev) {\n ev.preventDefault();\n self.removeGroupRows(from, to);\n self.controlInput.focus();\n },\n });\n }\n }\n //#endregion group/ungroup columns\n }\n self.disposeAutocomplete = function () {\n if (autoCompleteContext) {\n autoCompleteContext.dispose();\n autoCompleteContext = undefined;\n }\n };\n self.disposeContextMenu = function (event) {\n document.removeEventListener('click', self.disposeContextMenu);\n zIndexTop = self.style.contextMenuZIndex;\n self.disposeAutocomplete();\n if (self.contextMenu) {\n self.contextMenu.dispose();\n }\n self.contextMenu = undefined;\n if (event) {\n self.canvas.focus();\n self.mousedown(event);\n self.mouseup(event);\n }\n };\n self.contextmenuEvent = function (e, overridePos) {\n if (!self.hasFocus && e.target !== self.canvas) {\n return;\n }\n // don't create context menu for parents if current position is located in child grid\n const children = Object.keys(self.childGrids);\n for (let i = 0; i < children.length; i++) {\n const childGrid = self.childGrids[children[i]];\n const parentNode = childGrid && childGrid.parentNode;\n if (!parentNode) continue;\n const { offsetLeft, offsetWidth, offsetTop, offsetHeight } = parentNode;\n if ((e.x >= offsetLeft && e.x <= offsetLeft + offsetWidth) === false)\n continue;\n if ((e.y >= offsetTop && e.y <= offsetTop + offsetHeight) === false)\n continue;\n return; // in child grid\n }\n // don't create context menu for child if current position is located in parent grid\n if (self.isChildGrid && self.parentNode) {\n //#region check is current child grid closed\n const childGridsOfParent = self.parentGrid && self.parentGrid.childGrids;\n if (!childGridsOfParent || !Array.isArray(childGridsOfParent)) return;\n const matchedMe = childGridsOfParent.find((grid) => {\n const nodeA = grid.parentNode;\n const nodeB = self.parentNode;\n return (\n nodeA.offsetTop == nodeB.offsetTop &&\n nodeA.offsetLeft === nodeB.offsetLeft\n );\n });\n if (!matchedMe) return;\n //#endregion\n\n let x0 = self.parentNode.offsetLeft;\n let x1 = self.parentNode.offsetLeft + self.parentNode.offsetWidth;\n let y0 = self.parentNode.offsetTop;\n let y1 = self.parentNode.offsetTop + self.parentNode.offsetHeight;\n let node = self.parentNode.parentNode;\n while (node) {\n const { offsetLeft, offsetWidth, offsetTop, offsetHeight } = node;\n if (offsetLeft > x0) x0 = offsetLeft;\n if (offsetTop > y0) y0 = offsetTop;\n const newX1 = offsetLeft + offsetWidth;\n const newY1 = offsetTop + offsetHeight;\n if (newX1 < x1) x1 = newX1;\n if (newY1 < y1) y1 = newY1;\n if (node.nodeType !== 'canvas-datagrid-tree') break;\n node = node.parentNode;\n }\n if ((e.x >= x0 && e.x <= x1 && e.y >= y0 && e.y <= y1) === false) return;\n }\n function createDisposeEvent() {\n requestAnimationFrame(function () {\n document.addEventListener('click', self.disposeContextMenu);\n window.removeEventListener('mouseup', createDisposeEvent);\n });\n }\n var contextPosition,\n items = [],\n pos = overridePos || self.getLayerPos(e),\n ev = {\n NativeEvent: e,\n cell: self.getCellAt(pos.x, pos.y),\n pos,\n items: items,\n };\n if (!ev.cell.isGrid) {\n addDefaultContextMenuItem(ev);\n }\n if (e.type !== 'mousedown' && self.dispatchEvent('contextmenu', ev)) {\n return;\n }\n if (!ev.cell.isGrid) {\n if (self.contextMenu) {\n self.disposeContextMenu();\n }\n contextPosition = {\n left:\n pos.x +\n pos.rect.left +\n self.style.contextMenuMarginLeft +\n self.canvasOffsetLeft,\n top:\n pos.y +\n pos.rect.top +\n self.style.contextMenuMarginTop +\n self.canvasOffsetTop,\n right: ev.cell.width + ev.cell.x + pos.rect.left,\n bottom: ev.cell.height + ev.cell.y + pos.rect.top,\n height: ev.cell.height,\n width: ev.cell.width,\n };\n if (self.mobile) {\n contextPosition.left = self.style.mobileContextMenuMargin + 'px';\n contextPosition.width =\n self.width - self.style.mobileContextMenuMargin * 2 + 'px';\n }\n if (e.type == 'mousedown') {\n contextPosition.top += self.style.filterButtonMenuOffsetTop;\n }\n self.contextMenu = createContextMenu(ev, contextPosition, items);\n if (e.type == 'mousedown') {\n window.addEventListener('mouseup', createDisposeEvent);\n } else {\n createDisposeEvent();\n }\n e.preventDefault();\n }\n };\n return;\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n\n'use strict';\nexport default function (self) {\n self.defaults = {\n attributes: [\n ['allowColumnReordering', true],\n ['allowColumnResize', true],\n ['allowColumnResizeFromCell', false],\n ['allowFreezingRows', false],\n ['allowFreezingColumns', false],\n ['allowMovingSelection', true],\n ['allowRowHeaderResize', true],\n ['allowRowReordering', false],\n ['allowRowResize', true],\n ['allowRowResizeFromCell', false],\n ['allowSorting', true],\n ['allowGroupingRows', true],\n ['allowGroupingColumns', true],\n ['animationDurationShowContextMenu', 50],\n ['animationDurationHideContextMenu', 50],\n ['autoGenerateSchema', false],\n ['autoResizeColumns', false],\n ['autoResizeRows', false],\n ['autoScrollOnMousemove', false],\n ['autoScrollMargin', 5],\n ['blanksText', '(Blanks)'],\n ['borderDragBehavior', 'none'],\n ['borderResizeZone', 10],\n ['clearSettingsOptionText', 'Clear saved settings'],\n ['columnHeaderClickBehavior', 'sort'],\n ['columnSelectorHiddenText', ' '],\n ['columnSelectorText', 'Add/Remove columns'],\n ['columnSelectorVisibleText', '\\u2713'],\n ['contextHoverScrollAmount', 2],\n ['contextHoverScrollRateMs', 5],\n ['copyHeadersOnSelectAll', true],\n ['copyText', 'Copy'],\n ['debug', false],\n ['editable', true],\n ['ellipsisText', '...'],\n ['filterOptionText', 'Filter %s'],\n ['filterTextPrefix', '(filtered) '],\n ['filterFrozenRows', true],\n ['globalRowResize', false],\n ['hideColumnText', 'Hide %s'],\n ['showUnhideColumnsIndicator', false],\n ['showUnhideRowsIndicator', false],\n ['showHideRow', 'Hide row %s'],\n ['showHideRows', 'Hide rows %s'],\n ['hoverMode', 'cell'],\n ['keepFocusOnMouseOut', false],\n ['maxAutoCompleteItems', 200],\n ['multiLine', false],\n ['name', ''],\n ['pageUpDownOverlap', 1],\n ['pasteText', 'Paste'],\n ['persistantSelectionMode', false],\n ['removeFilterOptionText', 'Remove filter on %s'],\n ['reorderDeadZone', 3],\n ['resizeScrollZone', 20],\n ['rowGrabZoneSize', 5],\n ['columnGrabZoneSize', 30],\n ['saveAppearance', true],\n ['scrollAnimationPPSThreshold', 0.75],\n ['scrollPointerLock', false],\n ['scrollRepeatRate', 75],\n ['selectionFollowsActiveCell', false],\n ['selectionHandleBehavior', 'none'],\n ['selectionMode', 'cell'],\n ['selectionScrollIncrement', 20],\n ['selectionScrollZone', 20],\n ['showClearSettingsOption', true],\n ['showColumnHeaders', true],\n ['showColumnSelector', true],\n ['showCopy', false],\n ['showFilter', true],\n ['showFilterInCell', false],\n ['showNewRow', false],\n ['showOrderByOption', true],\n ['showOrderByOptionTextAsc', 'Order by %s ascending'],\n ['showOrderByOptionTextDesc', 'Order by %s descending'],\n //#region grouping\n ['showGroupColumns', 'Group columns %s'],\n ['showGroupRows', 'Group rows %s'],\n ['showRemoveGroupColumns', 'Remove group %s'],\n ['showRemoveGroupRows', 'Remove group %s'],\n ['showRemoveAllGroupColumns', 'Remove all column groups'],\n ['showRemoveAllGroupRows', 'Remove all row groups'],\n ['showExpandAllGroupColumns', 'Expand all column groups'],\n ['showExpandAllGroupRows', 'Expand all row groups'],\n ['showCollapseAllGroupColumns', 'Collapse all column groups'],\n ['showCollapseAllGroupRows', 'Collapse all row groups'],\n ['columnGroupIndicatorPosition', 'right'],\n ['rowGroupIndicatorPosition', 'bottom'],\n //#endregion grouping\n ['showPaste', false],\n ['showPerformance', false],\n ['showRowHeaders', true],\n ['showRowNumbers', true],\n ['showRowNumberGaps', true],\n ['singleSelectionMode', false],\n ['snapToRow', false],\n ['sortFrozenRows', true],\n ['touchContextMenuTimeMs', 800],\n ['touchDeadZone', 3],\n ['touchEasingMethod', 'easeOutQuad'],\n ['touchReleaseAcceleration', 1000],\n ['touchReleaseAnimationDurationMs', 2000],\n ['touchScrollZone', 20],\n ['touchSelectHandleZone', 20],\n ['touchZoomSensitivity', 0.005],\n ['touchZoomMin', 0.5],\n ['touchZoomMax', 1.75],\n ['maxPixelRatio', 2],\n ['tree', false],\n ['treeHorizontalScroll', false],\n ['rowTree', []],\n ['rowTreeColIndex', 0],\n ['columnTree', []],\n ['columnTreeRowStartIndex', 0],\n ['columnTreeRowEndIndex', 0],\n ],\n styles: [\n ['activeCellBackgroundColor', 'rgba(255, 255, 255, 1)'],\n ['activeCellBorderColor', 'rgba(110, 168, 255, 1)'],\n ['activeCellBorderWidth', 1],\n ['activeCellColor', 'rgba(0, 0, 0, 1)'],\n ['activeCellFont', '16px sans-serif'],\n ['activeCellHoverBackgroundColor', 'rgba(255, 255, 255, 1)'],\n ['activeCellHorizontalAlignment', 'left'],\n ['activeCellHoverColor', 'rgba(0, 0, 0, 1)'],\n ['activeCellOverlayBorderColor', 'rgba(66, 133, 244, 1)'],\n ['activeCellOverlayBorderWidth', 1],\n ['activeCellPaddingBottom', 5],\n ['activeCellPaddingLeft', 5],\n ['activeCellPaddingRight', 5],\n ['activeCellPaddingTop', 5],\n ['activeCellSelectedBackgroundColor', 'rgba(236, 243, 255, 1)'],\n ['activeCellSelectedColor', 'rgba(0, 0, 0, 1)'],\n ['activeCellVerticalAlignment', 'center'],\n ['activeColumnHeaderCellBackgroundColor', 'rgba(225, 225, 225, 1)'],\n ['activeColumnHeaderCellColor', 'rgba(0, 0, 0, 1)'],\n ['activeRowHeaderCellBackgroundColor', 'rgba(225, 225, 225, 1)'],\n ['activeRowHeaderCellColor', 'rgba(0, 0, 0, 1)'],\n ['autocompleteBottomMargin', 60],\n ['autosizeHeaderCellPadding', 8],\n ['autosizePadding', 5],\n ['buttonActiveBackgroundColor', 'rgba(255, 255, 255, 1)'],\n ['buttonActiveBorderColor', 'rgba(110, 168, 255, 1)'],\n ['buttonArrowColor', 'rgba(50, 50, 50, 1)'],\n ['buttonArrowDownHTML', '▼'],\n ['buttonZIndex', 10000],\n ['buttonBackgroundColor', 'rgba(255, 255, 255, 1)'],\n ['buttonBorderColor', 'rgba(172, 172, 172, 1)'],\n ['buttonHoverBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['buttonMenuWindowMargin', 30],\n ['buttonPadding', '3px'],\n ['cellAutoResizePadding', 13],\n ['cellBackgroundColor', 'rgba(255, 255, 255, 1)'],\n ['cellBorderColor', 'rgba(195, 199, 202, 1)'],\n ['cellBorderWidth', 1],\n ['cellColor', 'rgba(0, 0, 0, 1)'],\n ['cellFont', '16px sans-serif'],\n ['cellGridHeight', 250],\n ['cellHeight', 24],\n ['cellHeightWithChildGrid', 150],\n ['cellHorizontalAlignment', 'left'],\n ['cellHoverBackgroundColor', 'rgba(255, 255, 255, 1)'],\n ['cellHoverColor', 'rgba(0, 0, 0, 1)'],\n ['cellPaddingBottom', 5],\n ['cellPaddingLeft', 5],\n ['cellPaddingRight', 5],\n ['cellPaddingTop', 5],\n ['cellSelectedBackgroundColor', 'rgba(236, 243, 255, 1)'],\n ['cellSelectedColor', 'rgba(0, 0, 0, 1)'],\n ['cellTreeIconBorderColor', 'rgba(162, 174, 207, 1)'],\n ['cellTreeIconFillColor', 'rgba(240, 240, 240, 1)'],\n ['cellTreeIconHoverFillColor', 'rgba(198, 217, 233, 1)'],\n ['cellTreeIconLineColor', 'rgba(43, 53, 81, 1)'],\n ['cellTreeIconLineWidth', 1.5],\n ['cellTreeIconMarginLeft', 0],\n ['cellTreeIconMarginRight', 5],\n ['cellTreeIconMarginTop', 6],\n ['cellTreeIconWidth', 13],\n ['cellVerticalAlignment', 'center'],\n ['cellWidth', 250],\n ['cellWidthWithChildGrid', 250],\n ['cellWhiteSpace', 'nowrap'],\n ['cellLineHeight', 1],\n ['cellLineSpacing', 3],\n ['childContextMenuArrowColor', 'rgba(43, 48, 43, 1)'],\n ['childContextMenuArrowHTML', '►'],\n ['childContextMenuMarginLeft', -11],\n ['childContextMenuMarginTop', -6],\n ['columnGroupRowHeight', 25],\n ['columnHeaderCellBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['columnHeaderCellBorderColor', 'rgba(172, 172, 172, 1)'],\n ['columnHeaderCellBorderWidth', 1],\n ['columnHeaderCellCapBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['columnHeaderCellCapBorderColor', 'rgba(172, 172, 172, 1)'],\n ['columnHeaderCellCapBorderWidth', 1],\n ['columnHeaderCellColor', 'rgba(50, 50, 50, 1)'],\n ['columnHeaderCellFont', '16px sans-serif'],\n ['columnHeaderCellHeight', 25],\n ['columnHeaderCellHorizontalAlignment', 'left'],\n ['columnHeaderCellHoverBackgroundColor', 'rgba(235, 235, 235, 1)'],\n ['columnHeaderCellHoverColor', 'rgba(0, 0, 0, 1)'],\n ['columnHeaderCellPaddingBottom', 5],\n ['columnHeaderCellPaddingLeft', 5],\n ['columnHeaderCellPaddingRight', 5],\n ['columnHeaderCellPaddingTop', 5],\n ['columnHeaderCellVerticalAlignment', 'center'],\n ['columnHeaderOrderByArrowBorderColor', 'rgba(195, 199, 202, 1)'],\n ['columnHeaderOrderByArrowBorderWidth', 1],\n ['columnHeaderOrderByArrowColor', 'rgba(155, 155, 155, 1)'],\n ['columnHeaderOrderByArrowHeight', 8],\n ['columnHeaderOrderByArrowMarginLeft', 0],\n ['columnHeaderOrderByArrowMarginRight', 5],\n ['columnHeaderOrderByArrowMarginTop', 6],\n ['columnHeaderOrderByArrowWidth', 13],\n ['contextFilterButtonBorder', 'solid 1px rgba(158, 163, 169, 1)'],\n ['contextFilterButtonBorderRadius', '3px'],\n ['contextFilterButtonHTML', '▼'],\n ['contextFilterInputBackground', 'rgba(255,255,255,1)'],\n ['contextFilterInputBorder', 'solid 1px rgba(158, 163, 169, 1)'],\n ['contextFilterInputBorderRadius', '0'],\n ['contextFilterInputColor', 'rgba(0,0,0,1)'],\n ['contextFilterInputFontFamily', 'sans-serif'],\n ['contextFilterInputFontSize', '14px'],\n ['contextFilterInvalidRegExpBackground', 'rgba(180, 6, 1, 1)'],\n ['contextFilterInvalidRegExpColor', 'rgba(255, 255, 255, 1)'],\n ['contextMenuArrowColor', 'rgba(43, 48, 43, 1)'],\n ['contextMenuArrowDownHTML', '▼'],\n ['contextMenuArrowUpHTML', '▲'],\n ['contextMenuBackground', 'rgba(240, 240, 240, 1)'],\n ['contextMenuBorder', 'solid 1px rgba(158, 163, 169, 1)'],\n ['contextMenuBorderRadius', '3px'],\n ['contextMenuChildArrowFontSize', '12px'],\n ['contextMenuColor', 'rgba(43, 48, 43, 1)'],\n ['contextMenuCursor', 'default'],\n ['contextMenuFilterButtonFontFamily', 'sans-serif'],\n ['contextMenuFilterButtonFontSize', '10px'],\n ['contextMenuFilterInvalidExpresion', 'rgba(237, 155, 156, 1)'],\n ['contextMenuFontFamily', 'sans-serif'],\n ['contextMenuFontSize', '16px'],\n ['contextMenuHoverBackground', 'rgba(182, 205, 250, 1)'],\n ['contextMenuHoverColor', 'rgba(43, 48, 153, 1)'],\n ['contextMenuItemBorderRadius', '3px'],\n ['contextMenuItemMargin', '2px'],\n ['contextMenuLabelDisplay', 'inline-block'],\n ['contextMenuLabelMargin', '0 3px 0 0'],\n ['contextMenuLabelMaxWidth', '700px'],\n ['contextMenuLabelMinWidth', '75px'],\n ['contextMenuMarginLeft', 3],\n ['contextMenuMarginTop', -3],\n ['contextMenuOpacity', '0.98'],\n ['contextMenuPadding', '2px'],\n ['contextMenuWindowMargin', 30],\n ['contextMenuZIndex', 10000],\n ['cornerCellBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['cornerCellBorderColor', 'rgba(202, 202, 202, 1)'],\n ['debugBackgroundColor', 'rgba(0, 0, 0, .0)'],\n ['debugColor', 'rgba(255, 15, 24, 1)'],\n ['debugEntitiesColor', 'rgba(76, 231, 239, 1.00)'],\n ['debugFont', '11px sans-serif'],\n ['debugPerfChartBackground', 'rgba(29, 25, 26, 1.00)'],\n ['debugPerfChartTextColor', 'rgba(255, 255, 255, 0.8)'],\n ['debugPerformanceColor', 'rgba(252, 255, 37, 1.00)'],\n ['debugScrollHeightColor', 'rgba(248, 33, 103, 1.00)'],\n ['debugScrollWidthColor', 'rgba(66, 255, 27, 1.00)'],\n ['debugTouchPPSXColor', 'rgba(246, 102, 24, 1.00)'],\n ['debugTouchPPSYColor', 'rgba(186, 0, 255, 1.00)'],\n ['display', 'inline-block'],\n ['editCellBackgroundColor', 'white'],\n ['editCellBorder', 'solid 1px rgba(110, 168, 255, 1)'],\n ['editCellBoxShadow', '0 2px 5px rgba(0,0,0,0.4)'],\n ['editCellColor', 'black'],\n ['editCellFontFamily', 'sans-serif'],\n ['editCellFontSize', '16px'],\n ['editCellPaddingLeft', 4],\n ['editCellZIndex', 10000],\n ['filterButtonActiveBackgroundColor', 'rgba(225, 225, 225, 1)'],\n ['filterButtonArrowBorderColor', 'rgba(195, 199, 202, 1)'],\n ['filterButtonArrowBorderWidth', 1],\n ['filterButtonArrowClickRadius', 5],\n ['filterButtonArrowColor', 'rgba(50, 50, 50, 1)'],\n ['filterButtonArrowHeight', 5],\n ['filterButtonArrowWidth', 8],\n ['filterButtonBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['filterButtonBorderColor', 'rgba(172, 172, 172, 1)'],\n ['filterButtonBorderRadius', 3],\n ['filterButtonHeight', 20],\n ['filterButtonHoverBackgroundColor', 'rgba(235, 235, 235, 1)'],\n ['filterButtonMenuOffsetTop', 10],\n ['filterButtonWidth', 20],\n ['frozenMarkerHoverColor', 'rgba(165, 198, 254, 1)'],\n ['frozenMarkerHoverBorderColor', 'rgba(165, 198, 254, 1)'],\n ['frozenMarkerActiveColor', 'rgba(165, 198, 254, 0.2)'],\n ['frozenMarkerActiveBorderColor', 'rgba(165, 198, 254, 0.5)'],\n ['frozenMarkerActiveHeaderColor', 'rgba(165, 198, 254, 1)'],\n ['frozenMarkerColor', 'rgba(221, 221, 221, 1)'],\n ['frozenMarkerBorderColor', 'rgba(221, 221, 221, 1)'],\n ['frozenMarkerBorderWidth', 1],\n ['frozenMarkerHeaderColor', 'rgba(188, 188, 188, 1)'],\n ['frozenMarkerWidth', 4],\n ['groupingAreaBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['gridBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['gridBorderCollapse', 'collapse'],\n ['gridBorderColor', 'rgba(202, 202, 202, 1)'],\n ['gridBorderWidth', 1],\n ['groupIndicatorColor', 'rgba(155, 155, 155, 1)'],\n ['groupIndicatorBackgroundColor', 'rgba(255, 255, 255, 1)'],\n ['height', 'auto'],\n ['maxHeight', 'inherit'],\n ['maxWidth', 'inherit'],\n ['minColumnWidth', 45],\n ['minHeight', 'inherit'],\n ['minRowHeight', 24],\n ['minWidth', 'inherit'],\n ['mobileContextMenuMargin', 10],\n ['mobileEditInputHeight', 30],\n ['mobileEditFontFamily', 'sans-serif'],\n ['mobileEditFontSize', '16px'],\n ['moveOverlayBorderWidth', 1],\n ['moveOverlayBorderColor', 'rgba(66, 133, 244, 1)'],\n ['moveOverlayBorderSegments', '12, 7'],\n ['name', 'default'],\n ['overflowY', 'auto'],\n ['overflowX', 'auto'],\n ['reorderMarkerBackgroundColor', 'rgba(0, 0, 0, 0.1)'],\n ['reorderMarkerBorderColor', 'rgba(0, 0, 0, 0.2)'],\n ['reorderMarkerBorderWidth', 1.25],\n ['reorderMarkerIndexBorderColor', 'rgba(66, 133, 244, 1)'],\n ['reorderMarkerIndexBorderWidth', 2.75],\n ['rowGroupColumnWidth', 25],\n ['rowHeaderCellBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['rowHeaderCellBorderColor', 'rgba(200, 200, 200, 1)'],\n ['rowHeaderCellBorderWidth', 1],\n ['rowHeaderCellColor', 'rgba(50, 50, 50, 1)'],\n ['rowHeaderCellFont', '16px sans-serif'],\n ['rowHeaderCellHeight', 25],\n ['rowHeaderCellHorizontalAlignment', 'left'],\n ['rowHeaderCellHoverBackgroundColor', 'rgba(235, 235, 235, 1)'],\n ['rowHeaderCellHoverColor', 'rgba(0, 0, 0, 1)'],\n ['rowHeaderCellPaddingBottom', 5],\n ['rowHeaderCellPaddingLeft', 5],\n ['rowHeaderCellPaddingRight', 5],\n ['rowHeaderCellPaddingTop', 5],\n ['rowHeaderCellRowNumberGapHeight', 5],\n ['rowHeaderCellRowNumberGapColor', 'rgba(50, 50, 50, 1)'],\n ['rowHeaderCellSelectedBackgroundColor', 'rgba(217, 217, 217, 1)'],\n ['rowHeaderCellSelectedColor', 'rgba(50, 50, 50, 1)'],\n ['rowHeaderCellVerticalAlignment', 'center'],\n ['rowHeaderCellWidth', 57],\n ['scrollBarActiveColor', 'rgba(125, 125, 125, 1)'],\n ['scrollBarBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['scrollBarBorderColor', 'rgba(202, 202, 202, 1)'],\n ['scrollBarBorderWidth', 0.5],\n ['scrollBarBoxBorderRadius', 4.125],\n ['scrollBarBoxColor', 'rgba(192, 192, 192, 1)'],\n ['scrollBarBoxMargin', 2],\n ['scrollBarBoxMinSize', 15],\n ['scrollBarBoxWidth', 8],\n ['scrollBarCornerBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['scrollBarCornerBorderColor', 'rgba(202, 202, 202, 1)'],\n ['scrollBarWidth', 11],\n ['selectionHandleBorderColor', 'rgba(255, 255, 255, 1)'],\n ['selectionHandleBorderWidth', 1.5],\n ['selectionHandleColor', 'rgba(66, 133, 244, 1)'],\n ['selectionHandleSize', 8],\n ['selectionHandleType', 'square'],\n ['selectionOverlayBorderColor', 'rgba(66, 133, 244, 1)'],\n ['selectionOverlayBorderWidth', 1],\n ['treeArrowBorderColor', 'rgba(195, 199, 202, 1)'],\n ['treeArrowBorderWidth', 1],\n ['treeArrowClickRadius', 5],\n ['treeArrowColor', 'rgba(155, 155, 155, 1)'],\n ['treeArrowHeight', 8],\n ['treeArrowMarginLeft', 0],\n ['treeArrowMarginRight', 5],\n ['treeArrowMarginTop', 6],\n ['treeArrowWidth', 13],\n ['treeGridHeight', 250],\n ['unhideIndicatorColor', 'rgba(0, 0, 0, 1)'],\n ['unhideIndicatorBackgroundColor', 'rgba(255, 255, 255, 1)'],\n ['unhideIndicatorBorderColor', 'rgba(174, 193, 232, 1)'],\n ['unhideIndicatorSize', 16],\n ['width', 'auto'],\n ],\n };\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nexport default function (self) {\n self.getClippingRect = function (ele) {\n var boundingRect = self.position(self.parentNode),\n eleRect = self.position(ele),\n s = self.scrollOffset(self.canvas),\n clipRect = {\n x: 0,\n y: 0,\n h: 0,\n w: 0,\n },\n parentRect = {\n x: -Infinity,\n y: -Infinity,\n h: Infinity,\n w: Infinity,\n },\n columnHeaderCellHeight = self.getColumnHeaderCellHeight(),\n rowHeaderCellWidth = self.getRowHeaderCellWidth();\n boundingRect.top -= s.top;\n boundingRect.left -= s.left;\n eleRect.top -= s.top;\n eleRect.left -= s.left;\n clipRect.h =\n boundingRect.top +\n boundingRect.height -\n ele.offsetTop -\n self.style.scrollBarWidth;\n clipRect.w =\n boundingRect.left +\n boundingRect.width -\n ele.offsetLeft -\n self.style.scrollBarWidth;\n clipRect.x = boundingRect.left + eleRect.left * -1 + rowHeaderCellWidth;\n clipRect.y = boundingRect.top + eleRect.top * -1 + columnHeaderCellHeight;\n return {\n x: clipRect.x > parentRect.x ? clipRect.x : parentRect.x,\n y: clipRect.y > parentRect.y ? clipRect.y : parentRect.y,\n h: clipRect.h < parentRect.h ? clipRect.h : parentRect.h,\n w: clipRect.w < parentRect.w ? clipRect.w : parentRect.w,\n };\n };\n self.clipElement = function (ele) {\n var clipRect = self.getClippingRect(ele);\n if (clipRect.w < 0) {\n clipRect.w = 0;\n }\n if (clipRect.h < 0) {\n clipRect.h = 0;\n }\n ele.style.clip =\n 'rect(' +\n clipRect.y +\n 'px,' +\n clipRect.w +\n 'px,' +\n clipRect.h +\n 'px,' +\n clipRect.x +\n 'px' +\n ')';\n // INFO https://developer.mozilla.org/en-US/docs/Web/CSS/clip\n // clip has been \"deprecated\" for clipPath. Of course nothing but chrome\n // supports clip path, so we'll keep using clip until someday clipPath becomes\n // more widely support. The code below works correctly, but setting clipPath and clip\n // at the same time has undesirable results.\n // ele.style.clipPath = 'polygon('\n // + clipRect.x + 'px ' + clipRect.y + 'px,'\n // + clipRect.x + 'px ' + clipRect.h + 'px,'\n // + clipRect.w + 'px ' + clipRect.h + 'px,'\n // + clipRect.w + 'px ' + clipRect.y + 'px'\n // + ')';\n };\n self.scrollOffset = function (e) {\n var x = 0,\n y = 0,\n scrollingElement = document.scrollingElement || {\n scrollLeft: 0,\n scrollTop: 0,\n };\n while (\n e.parentNode &&\n e.nodeName !== 'CANVAS-DATAGRID' &&\n e !== self.intf\n ) {\n if (\n e.nodeType !== 'canvas-datagrid-tree' &&\n e.nodeType !== 'canvas-datagrid-cell'\n ) {\n x -= e.scrollLeft;\n y -= e.scrollTop;\n }\n e = e.parentNode;\n }\n return {\n left: x - scrollingElement.scrollLeft,\n top: y - scrollingElement.scrollTop,\n };\n };\n self.resizeEditInput = function () {\n if (self.input && self.input.editCell) {\n var pos = self.canvas.getBoundingClientRect(),\n s = self.scrollOffset(self.intf),\n bm = self.style.gridBorderCollapse === 'collapse' ? 1 : 2,\n borderWidth = self.style.cellBorderWidth * bm,\n cell = self.getVisibleCellByIndex(\n self.input.editCell.columnIndex,\n self.input.editCell.rowIndex,\n ) || { x: -100, y: -100, height: 0, width: 0 };\n if (self.mobile) {\n self.input.style.left = '0';\n self.input.style.top =\n self.height -\n self.style.mobileEditInputHeight -\n borderWidth -\n 1 +\n 'px';\n self.input.style.height = self.style.mobileEditInputHeight + 'px';\n self.input.style.width = self.width - borderWidth - 1 + 'px';\n return;\n }\n let groupAreaOffsetY = self.getColumnGroupAreaHeight();\n let groupAreaOffsetX = self.getRowGroupAreaWidth();\n if (self.parentNode) {\n const { columnGroupsAreaHeight, rowGroupsAreaWidth } = self.parentNode;\n if (columnGroupsAreaHeight) groupAreaOffsetY += columnGroupsAreaHeight;\n if (rowGroupsAreaWidth) groupAreaOffsetX += rowGroupsAreaWidth;\n }\n self.input.style.left =\n pos.left +\n cell.x +\n self.canvasOffsetLeft -\n s.left +\n groupAreaOffsetX +\n 'px';\n self.input.style.top =\n pos.top +\n cell.y -\n self.style.cellBorderWidth +\n self.canvasOffsetTop -\n s.top +\n groupAreaOffsetY +\n 'px';\n self.input.style.height = cell.height - borderWidth + 'px';\n self.input.style.width = cell.width - self.style.cellPaddingLeft + 'px';\n self.clipElement(self.input);\n }\n };\n self.position = function (e, ignoreScrollOffset) {\n var x = 0,\n y = 0,\n s = e,\n h,\n w;\n let calculatedTree = false;\n while (e.offsetParent && e.nodeName !== 'CANVAS-DATAGRID') {\n const isTree = e.nodeType === 'canvas-datagrid-tree';\n if (!isTree || !calculatedTree) {\n x += e.offsetLeft;\n y += e.offsetTop;\n h = e.offsetHeight;\n w = e.offsetWidth;\n }\n if (isTree) calculatedTree = true;\n e = e.offsetParent;\n }\n if (ignoreScrollOffset) {\n return { left: x, top: y, height: h, width: w };\n }\n e = s;\n s = self.scrollOffset(e);\n return { left: x + s.left, top: y + s.top, height: h, width: w };\n };\n self.getLayerPos = function (e) {\n var rect = self.canvas.getBoundingClientRect(),\n pos = {\n x: e.clientX - rect.left,\n y: e.clientY - rect.top,\n };\n if (self.isChildGrid) {\n pos.x -= self.canvasOffsetLeft;\n pos.y -= self.canvasOffsetTop;\n if (self.parentNode.rowGroupsAreaWidth)\n pos.x -= self.parentNode.rowGroupsAreaWidth;\n if (self.parentNode.columnGroupsAreaHeight)\n pos.y -= self.parentNode.columnGroupsAreaHeight;\n }\n return {\n x: pos.x,\n y: pos.y,\n rect: rect,\n };\n };\n /**\n * Ends editing, optionally aborting the edit.\n * @memberof canvasDatagrid\n * @name endEdit\n * @method\n * @param {boolean} abort When true, abort the edit.\n */\n self.endEdit = function (abort) {\n var cell = self.input.editCell,\n y = cell.rowIndex;\n function abortEdit() {\n abort = true;\n }\n if (\n self.dispatchEvent('beforeendedit', {\n cell: cell,\n newValue: self.input.value,\n oldValue: cell.value,\n abort: abortEdit,\n input: self.input,\n })\n ) {\n return false;\n }\n if (self.input.value !== cell.value && !abort) {\n self.changes[y] = self.changes[y] || {};\n self.changes[y][cell.header.name] = self.input.value;\n if (!cell.data) {\n self.originalData[cell.boundRowIndex] = {};\n cell.data = self.originalData[cell.boundRowIndex];\n }\n cell.data[cell.header.name] = self.input.value;\n if (y === self.viewData.length) {\n if (\n self.dispatchEvent('newrow', {\n value: self.input.value,\n defaultValue: cell.value,\n aborted: abort,\n cell: cell,\n input: self.input,\n })\n ) {\n return false;\n }\n self.addRow(cell.data);\n self.createNewRowData();\n }\n self.draw(true);\n }\n if (self.input.parentNode) {\n self.input.parentNode.removeChild(self.input);\n }\n self.intf.focus();\n self.dispatchEvent('endedit', {\n cell: cell,\n value: self.input.value,\n aborted: abort,\n input: self.input,\n });\n self.input = undefined;\n return true;\n };\n /**\n * Begins editing at cell x, row y.\n * @memberof canvasDatagrid\n * @name beginEditAt\n * @method\n * @param {number} x The column index of the cell to edit.\n * @param {number} y The row index of the cell to edit.\n * @param {boolean} inEnterMode If true, starting to type in cell will replace the\n * cell's previous value instead of appending, and using the arrow keys will allow\n * the user to navigate to adjacent cells instead of moving the text cursor around\n * (default is false, and means user is in 'edit' mode).\n */\n self.beginEditAt = function (x, y, NativeEvent, inEnterMode = false) {\n if (!self.attributes.editable) {\n return;\n }\n if (self.input) {\n self.endEdit();\n }\n var cell = self.getVisibleCellByIndex(x, y),\n s = self.getSchema(),\n adjacentCells,\n enumItems,\n enu,\n option,\n valueInEnum;\n if (!(cell && cell.header)) {\n return;\n }\n //HACK for IE10, does not like literal enum\n enu = cell.header['enum'];\n if (\n self.dispatchEvent('beforebeginedit', {\n cell: cell,\n NativeEvent: NativeEvent,\n })\n ) {\n return false;\n }\n self.scrollIntoView(x, y);\n self.setActiveCell(x, y);\n adjacentCells = self.getAdjacentCells();\n if (enu) {\n self.input = document.createElement('select');\n } else {\n self.input = document.createElement(\n self.attributes.multiLine ? 'textarea' : 'input',\n );\n }\n cell = self.getVisibleCellByIndex(x, y);\n //HACK on mobile devices sometimes edit can begin without the cell being in view, I don't know how.\n if (!cell) {\n return;\n }\n if (enu) {\n // add enums\n if (typeof enu === 'function') {\n enumItems = enu.apply(self.intf, [{ cell: cell }]);\n } else if (Array.isArray(enu)) {\n enumItems = enu;\n }\n enumItems.forEach(function (e) {\n var i = document.createElement('option'),\n val,\n title;\n if (Array.isArray(e)) {\n val = e[0];\n title = e[1];\n } else {\n val = e;\n title = e;\n }\n if (val === cell.value) {\n valueInEnum = true;\n }\n i.value = val;\n i.innerHTML = title;\n self.input.appendChild(i);\n });\n if (!valueInEnum) {\n option = document.createElement('option');\n option.value = cell.value;\n option.innerHTML = cell.value;\n self.input.appendChild(option);\n }\n self.input.addEventListener('change', function () {\n self.endEdit();\n self.draw(true);\n });\n }\n // if the user has not prevented the default action, append to the body\n if (\n !self.dispatchEvent('appendeditinput', { cell: cell, input: self.input })\n ) {\n document.body.appendChild(self.input);\n }\n self.createInlineStyle(\n self.input,\n self.mobile\n ? 'canvas-datagrid-edit-mobile-input'\n : 'canvas-datagrid-edit-input',\n );\n self.input.style.position = 'absolute';\n self.input.editCell = cell;\n self.resizeEditInput();\n self.input.style.zIndex = self.style.editCellZIndex;\n self.input.style.fontSize =\n parseInt(self.style.editCellFontSize, 10) * self.scale + 'px';\n\n var cellValueIsEmpty = [null, undefined].indexOf(cell.value) !== -1;\n var shouldClearCellValue = cellValueIsEmpty || inEnterMode;\n\n self.input.value = shouldClearCellValue ? '' : cell.value;\n let width = Math.round(\n self.input.value.length *\n parseInt(self.style.editCellFontSize, 10) *\n 0.7 *\n self.scale,\n );\n if (width + self.style.cellPaddingLeft < cell.width) {\n width = cell.width - self.style.cellPaddingLeft;\n } else if (width > self.width - cell.x - self.style.scrollBarWidth) {\n width = self.width - cell.x - self.style.scrollBarWidth;\n self.input.style.height = 'auto';\n }\n self.input.style.width = width + 'px';\n self.input.focus();\n self.input.addEventListener('click', self.stopPropagation);\n self.input.addEventListener('dblclick', self.stopPropagation);\n self.input.addEventListener('mouseup', self.stopPropagation);\n self.input.addEventListener('mousedown', self.stopPropagation);\n self.input.addEventListener('keydown', function (e) {\n var nx = cell.columnIndex,\n ny = cell.rowIndex;\n\n if (e.key === 'Escape') {\n self.endEdit(true); // end edit and abort the value change\n self.draw(true);\n } else if (e.key === 'Enter' && self.attributes.multiLine && e.altKey) {\n self.input.value = self.input.value + '\\n';\n self.input.scrollTop = self.input.scrollHeight;\n } else if (e.key === 'Enter') {\n self.endEdit();\n\n // Move to cell in next or previous row\n var nextRowIndex = e.shiftKey\n ? Math.max(0, ny - 1)\n : Math.min(ny + 1, self.viewData.length - 1);\n\n if (nextRowIndex !== ny) {\n self.scrollIntoView(nx, nextRowIndex);\n self.setActiveCell(nx, nextRowIndex);\n }\n\n self.draw(true);\n } else if (\n ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(e.key) &&\n inEnterMode\n ) {\n switch (e.key) {\n case 'ArrowUp':\n ny = Math.max(0, ny - 1);\n break;\n case 'ArrowDown':\n ny = Math.min(ny + 1, self.viewData.length - 1);\n break;\n case 'ArrowLeft':\n nx = Math.max(nx - 1, 0);\n break;\n case 'ArrowRight':\n nx = adjacentCells.right;\n break;\n }\n\n self.endEdit();\n\n self.scrollIntoView(nx, ny);\n self.setActiveCell(nx, ny);\n\n self.draw(true);\n } else if (e.key === 'Tab') {\n e.preventDefault();\n if (!self.endEdit()) {\n return;\n }\n if (e.shiftKey) {\n nx = adjacentCells.left;\n } else {\n nx = adjacentCells.right;\n }\n if (adjacentCells.left === x && e.shiftKey) {\n nx = adjacentCells.last;\n ny -= 1;\n }\n if (adjacentCells.right === x && !e.shiftKey) {\n nx = adjacentCells.first;\n ny += 1;\n }\n if (ny < 0) {\n ny = self.viewData.length - 1;\n }\n if (ny > self.viewData.length - 1) {\n ny = 0;\n }\n self.scrollIntoView(nx, ny);\n self.beginEditAt(nx, ny, e);\n } else {\n let width = Math.round(\n self.input.value.length *\n parseInt(self.style.editCellFontSize, 10) *\n 0.7 *\n self.scale,\n );\n if (width + self.style.cellPaddingLeft < cell.width) {\n width = cell.width - self.style.cellPaddingLeft;\n } else if (width > self.width - cell.x - self.style.scrollBarWidth) {\n width = self.width - cell.x - self.style.scrollBarWidth;\n self.input.style.height = 'auto';\n }\n self.input.style.width = width + 'px';\n }\n });\n\n self.dispatchEvent('beginedit', { cell: cell, input: self.input });\n };\n self.createInlineStyle = function (el, className) {\n var css = {\n 'canvas-datagrid-button-wrapper': {\n display: 'inline-block',\n padding: self.style.buttonPadding,\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: self.style.buttonBorderColor,\n cursor: 'pointer',\n background: self.style.buttonBackgroundColor,\n userSelect: 'none',\n },\n 'canvas-datagrid-button-wrapper:hover': {\n borderColor: self.style.buttonBorderColor,\n background: self.style.buttonHoverBackgroundColor,\n },\n 'canvas-datagrid-button-wrapper:active': {\n borderColor: self.style.buttonActiveBorderColor,\n background: self.style.buttonActiveBackgroundColor,\n },\n 'canvas-datagrid-button-icon': {\n width: '18px',\n height: '18px',\n display: 'inline-block',\n verticalAlign: 'middle',\n },\n 'canvas-datagrid-button-arrow': {\n display: 'inline-block',\n color: self.style.buttonArrowColor,\n fontSize: '9px',\n },\n 'canvas-datagrid-button-menu-item-mobile': {\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n color: 'inherit',\n background: 'inherit',\n margin: self.style.contextMenuItemMargin,\n borderRadius: self.style.contextMenuItemBorderRadius,\n verticalAlign: 'middle',\n },\n 'canvas-datagrid-button-menu-item': {\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n color: 'inherit',\n background: 'inherit',\n margin: self.style.contextMenuItemMargin,\n borderRadius: self.style.contextMenuItemBorderRadius,\n verticalAlign: 'middle',\n },\n 'canvas-datagrid-button-menu-item:hover': {\n background: self.style.contextMenuHoverBackground,\n color: self.style.contextMenuHoverColor,\n },\n 'canvas-datagrid-button-menu-label': {\n margin: self.style.contextMenuLabelMargin,\n display: self.style.contextMenuLabelDisplay,\n minWidth: self.style.contextMenuLabelMinWidth,\n maxWidth: self.style.contextMenuLabelMaxWidth,\n },\n 'canvas-datagrid-button-menu-mobile': {\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n background: self.style.contextMenuBackground,\n color: self.style.contextMenuColor,\n border: self.style.contextMenuBorder,\n padding: self.style.contextMenuPadding,\n borderRadius: self.style.contextMenuBorderRadius,\n opacity: self.style.contextMenuOpacity,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n },\n 'canvas-datagrid-button-menu': {\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n background: self.style.contextMenuBackground,\n color: self.style.contextMenuColor,\n border: self.style.contextMenuBorder,\n padding: self.style.contextMenuPadding,\n borderRadius: self.style.contextMenuBorderRadius,\n opacity: self.style.contextMenuOpacity,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n cursor: self.style.contextMenuCursor,\n },\n 'canvas-datagrid-context-menu-filter-input': {\n height: '19px',\n verticalAlign: 'bottom',\n marginLeft: '2px',\n padding: '0',\n background: self.style.contextFilterInputBackground,\n color: self.style.contextFilterInputColor,\n border: self.style.contextFilterInputBorder,\n borderRadius: self.style.contextFilterInputBorderRadius,\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextFilterInputFontFamily,\n fontSize: self.style.contextFilterInputFontSize,\n },\n 'canvas-datagrid-context-menu-filter-button': {\n height: '19px',\n verticalAlign: 'bottom',\n marginLeft: '2px',\n padding: '0',\n background: self.style.contextMenuBackground,\n color: self.style.contextMenuColor,\n border: self.style.contextFilterButtonBorder,\n borderRadius: self.style.contextFilterButtonBorderRadius,\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFilterButtonFontFamily,\n fontSize: self.style.contextMenuFilterButtonFontSize,\n },\n 'canvas-datagrid-context-child-arrow': {\n cssFloat: 'right',\n color: self.style.childContextMenuArrowColor,\n fontSize: self.style.contextMenuChildArrowFontSize,\n fontFamily: self.style.contextMenuFontFamily,\n verticalAlign: 'middle',\n },\n 'canvas-datagrid-autocomplete': {\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n background: self.style.contextMenuBackground,\n color: self.style.contextMenuColor,\n border: self.style.contextMenuBorder,\n padding: self.style.contextMenuPadding,\n borderRadius: self.style.contextMenuBorderRadius,\n opacity: self.style.contextMenuOpacity,\n position: 'absolute',\n zIndex: 9999,\n overflow: 'hidden',\n },\n 'canvas-datagrid-autocomplete-item': {\n background: self.style.contextMenuBackground,\n color: self.style.contextMenuColor,\n },\n 'canvas-datagrid-autocomplete-item:hover': {\n background: self.style.contextMenuHoverBackground,\n color: self.style.contextMenuHoverColor,\n },\n 'canvas-datagrid-canvas': {\n position: 'absolute',\n zIndex: '-1',\n },\n 'canvas-datagrid': {\n display: 'block',\n },\n 'canvas-datagrid-control-input': {\n position: 'fixed',\n top: '-5px',\n left: '-5px',\n border: 'none',\n opacity: '0',\n cursor: 'pointer',\n width: '1px',\n height: '1px',\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n },\n 'canvas-datagrid-edit-mobile-input': {\n boxSizing: 'content-box',\n outline: 'none',\n margin: '0',\n padding: '0 0 0 0',\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.mobileEditFontFamily,\n fontSize: self.style.mobileEditFontSize,\n border: self.style.editCellBorder,\n color: self.style.editCellColor,\n background: self.style.editCellBackgroundColor,\n appearance: 'none',\n webkitAppearance: 'none',\n mozAppearance: 'none',\n borderRadius: '0',\n },\n 'canvas-datagrid-edit-input': {\n boxSizing: 'content-box',\n outline: 'none',\n margin: '0',\n padding: '0 0 0 ' + self.style.editCellPaddingLeft + 'px',\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.editCellFontFamily,\n fontSize: self.style.editCellFontSize,\n boxShadow: self.style.editCellBoxShadow,\n border: self.style.editCellBorder,\n color: self.style.editCellColor,\n background: self.style.editCellBackgroundColor,\n appearance: 'none',\n webkitAppearance: 'none',\n mozAppearance: 'none',\n borderRadius: '0',\n },\n 'canvas-datagrid-context-menu-item-mobile': {\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n color: 'inherit',\n background: 'inherit',\n margin: self.style.contextMenuItemMargin,\n borderRadius: self.style.contextMenuItemBorderRadius,\n verticalAlign: 'middle',\n },\n 'canvas-datagrid-context-menu-item': {\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n color: 'inherit',\n background: 'inherit',\n margin: self.style.contextMenuItemMargin,\n borderRadius: self.style.contextMenuItemBorderRadius,\n verticalAlign: 'middle',\n },\n 'canvas-datagrid-context-menu-item:hover': {\n background: self.style.contextMenuHoverBackground,\n color: self.style.contextMenuHoverColor,\n },\n 'canvas-datagrid-context-menu-label': {\n margin: self.style.contextMenuLabelMargin,\n display: self.style.contextMenuLabelDisplay,\n minWidth: self.style.contextMenuLabelMinWidth,\n maxWidth: self.style.contextMenuLabelMaxWidth,\n },\n 'canvas-datagrid-context-menu-mobile': {\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n background: self.style.contextMenuBackground,\n color: self.style.contextMenuColor,\n border: self.style.contextMenuBorder,\n padding: self.style.contextMenuPadding,\n borderRadius: self.style.contextMenuBorderRadius,\n opacity: self.style.contextMenuOpacity,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n },\n 'canvas-datagrid-context-menu': {\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n background: self.style.contextMenuBackground,\n color: self.style.contextMenuColor,\n border: self.style.contextMenuBorder,\n padding: self.style.contextMenuPadding,\n borderRadius: self.style.contextMenuBorderRadius,\n opacity: self.style.contextMenuOpacity,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n cursor: self.style.contextMenuCursor,\n },\n 'canvas-datagrid-invalid-search-regExp': {\n background: self.style.contextMenuFilterInvalidExpresion,\n },\n };\n if (css[className]) {\n Object.keys(css[className]).map(function (prop) {\n el.style[prop] = css[className][prop];\n });\n }\n return;\n };\n self.appendTo = function (e) {\n self.parentNode = e;\n self.setDom();\n };\n self.setDom = function () {\n if (self.isChildGrid) {\n self.parentGrid = self.parentNode.parentGrid;\n self.ctx = self.parentGrid.context;\n self.canvas = self.parentGrid.canvas;\n self.controlInput = self.parentGrid.controlInput;\n self.eventParent = self.canvas;\n } else {\n self.controlInput = self.controlInput || document.createElement('input');\n self.controlInput.onblur = self.intf.blur;\n self.createInlineStyle(\n self.controlInput,\n 'canvas-datagrid-control-input',\n );\n self.isChildGrid = false;\n self.parentDOMNode = self.parentNode;\n self.parentIsCanvas = /^canvas$/i.test(self.parentDOMNode.tagName);\n if (self.parentIsCanvas) {\n self.canvas = self.parentDOMNode;\n } else {\n self.canvas = document.createElement('canvas');\n self.parentDOMNode.appendChild(self.canvas);\n }\n document.body.appendChild(self.controlInput);\n self.createInlineStyle(self.canvas, 'canvas-datagrid');\n self.ctx = self.canvas.getContext('2d');\n self.ctx.textBaseline = 'alphabetic';\n self.eventParent = self.canvas;\n }\n self.parentNodeStyle = self.canvas.style;\n self.controlInput.setAttribute('readonly', true);\n self.controlInput.addEventListener('blur', function (e) {\n if (e.target !== self.canvas) {\n self.hasFocus = false;\n }\n });\n self.eventParent.addEventListener('scroll', self.resize, false);\n self.eventParent.addEventListener('touchstart', self.touchstart, false);\n self.eventParent.addEventListener('mousedown', self.mousedown, false);\n self.eventParent.addEventListener('dblclick', self.dblclick, false);\n self.eventParent.addEventListener('click', self.click, false);\n window.addEventListener('mouseup', self.mouseup, false);\n window.addEventListener('mousemove', self.mousemove);\n self[self.isChildGrid ? 'parentGrid' : 'eventParent'].addEventListener(\n 'wheel',\n self.scrollWheel,\n false,\n );\n self.canvas.addEventListener('contextmenu', self.contextmenuEvent, false);\n self.controlInput.addEventListener('copy', self.copy);\n self.controlInput.addEventListener('cut', self.cut);\n self.controlInput.addEventListener('paste', self.paste);\n self.controlInput.addEventListener('keypress', self.keypress, false);\n self.controlInput.addEventListener('keyup', self.keyup, false);\n self.controlInput.addEventListener('keydown', self.keydown, false);\n window.addEventListener('resize', self.resize);\n };\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals XMLSerializer: false, define: true, Blob: false, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nexport default function (self) {\n var perfCounters = [],\n cachedImagesDrawn = false,\n drawCount = 0,\n perfWindowSize = 300,\n entityCount = [],\n hiddenFrozenColumnCount = 0,\n scrollDebugCounters = [],\n touchPPSCounters = [];\n self.htmlImageCache = {};\n // more heavyweight version than fillArray defined in intf.js\n function fillArray(low, high, step, def) {\n step = step || 1;\n var i = [],\n x;\n for (x = low; x <= high; x += step) {\n i[x] = def === undefined ? x : typeof def === 'function' ? def(x) : def;\n }\n return i;\n }\n function drawPerfLine(w, h, x, y, perfArr, arrIndex, max, color, useAbs) {\n var i = w / perfArr.length,\n r = h / max;\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.beginPath();\n self.ctx.moveTo(x, y + h);\n perfArr.forEach(function (n) {\n var val = arrIndex === undefined ? n : n[arrIndex],\n cx,\n cy;\n if (useAbs) {\n val = Math.abs(val);\n }\n cx = x + i;\n cy = y + h - val * r;\n self.ctx.lineTo(cx, cy);\n x += i;\n });\n self.ctx.moveTo(x + w, y + h);\n self.ctx.strokeStyle = color;\n self.ctx.stroke();\n }\n function drawOnAllImagesLoaded() {\n var loaded = true;\n Object.keys(self.htmlImageCache).forEach(function (html) {\n if (!self.htmlImageCache[html].img.complete) {\n loaded = false;\n }\n });\n if (loaded && !cachedImagesDrawn) {\n cachedImagesDrawn = true;\n self.draw();\n }\n }\n function drawHtml(cell) {\n var img,\n v = cell.innerHTML || cell.formattedValue,\n cacheKey =\n v.toString() + cell.rowIndex.toString() + cell.columnIndex.toString(),\n x = Math.round(cell.x + self.canvasOffsetLeft),\n y = Math.round(cell.y + self.canvasOffsetTop);\n if (self.htmlImageCache[cacheKey]) {\n img = self.htmlImageCache[cacheKey].img;\n if (\n self.htmlImageCache[cacheKey].height !== cell.height ||\n self.htmlImageCache[cacheKey].width !== cell.width\n ) {\n // height and width of the cell has changed, invalidate cache\n self.htmlImageCache[cacheKey] = undefined;\n } else {\n if (!img.complete) {\n return;\n }\n return self.ctx.drawImage(img, x, y);\n }\n } else {\n cachedImagesDrawn = false;\n }\n img = new Image(cell.width, cell.height);\n self.htmlImageCache[cacheKey] = {\n img,\n width: cell.width,\n height: cell.height,\n };\n img.onload = function () {\n self.ctx.drawImage(img, x, y);\n drawOnAllImagesLoaded();\n };\n img.src =\n 'data:image/svg+xml;base64,' +\n btoa(\n '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"' +\n cell.width +\n '\" height=\"' +\n cell.height +\n '\">\\n' +\n '<foreignObject class=\"node\" x=\"0\" y=\"0\" width=\"100%\" height=\"100%\">\\n' +\n '<body xmlns=\"http://www.w3.org/1999/xhtml\" style=\"margin:0;padding:0;\">\\n' +\n v +\n '\\n' +\n '</body>' +\n '</foreignObject>\\n' +\n '</svg>\\n',\n );\n }\n /**\n * @param {number[]} coords [x0,y0, x1,y1, x2,y2, ...]\n * @param {boolean} [fill] fill the area that construct by these lines but not stroke\n */\n function drawLines(coords, fill) {\n if (coords.length < 4) return;\n self.ctx.beginPath();\n self.ctx.moveTo(\n coords[0] + self.canvasOffsetLeft,\n coords[1] + self.canvasOffsetTop,\n );\n for (let i = 2; i < coords.length; i += 2) {\n const x = coords[i] + self.canvasOffsetLeft;\n const y = coords[i + 1] + self.canvasOffsetTop;\n self.ctx.lineTo(x, y);\n }\n if (fill) self.ctx.fill();\n else self.ctx.stroke();\n }\n /**\n * @param {number} x based-X (left-top)\n * @param {number} y based-Y (left-top)\n * @param {number} width\n * @param {boolean} collapsed true: '+'; false: '-'\n */\n function drawGroupHandle(x, y, width, collapsed) {\n fillRect(x, y, width, width);\n strokeRect(x, y, width, width);\n const cx = x + width * 0.5;\n const cy = y + width * 0.5;\n drawLines([x + width * 0.2, cy, x + width * 0.78, cy]);\n if (collapsed) drawLines([cx, y + width * 0.22, cx, y + width * 0.8]);\n }\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} size\n * @param {string} dir Direction of the triangle, one of the 't','b','l' and 'r'\n * @param {boolean} [active]\n */\n function drawUnhideIndicator(x, y, size, dir, active) {\n const minPadding = size * 0.2;\n const maxPadding = size * 0.3;\n /** The long edge width of the triangle */\n const longEdge = size - 2 * minPadding;\n /** The median width of the triangle */\n const median = size - 2 * maxPadding;\n const halfLongEdge = longEdge * 0.5;\n let x0, y0;\n let coords, borderCoords;\n switch (dir) {\n case 'r':\n x0 = x + maxPadding;\n y0 = y + minPadding;\n borderCoords = [x, y, x + size, y, x + size, y + size, x, y + size];\n coords = [x0, y0, x0, y0 + longEdge, x0 + median, y0 + halfLongEdge];\n break;\n case 'l':\n x0 = x + size - maxPadding;\n y0 = y + minPadding;\n borderCoords = [x + size, y, x, y, x, y + size, x + size, y + size];\n coords = [x0, y0, x0, y0 + longEdge, x0 - median, y0 + halfLongEdge];\n break;\n case 't':\n x0 = x + minPadding;\n y0 = y + size - maxPadding;\n borderCoords = [x, y + size, x, y, x + size, y, x + size, y + size];\n coords = [x0, y0, x0 + longEdge, y0, x0 + halfLongEdge, y0 - median];\n break;\n case 'b':\n x0 = x + minPadding;\n y0 = y + maxPadding;\n borderCoords = [x, y, x, y + size, x + size, y + size, x + size, y];\n coords = [x0, y0, x0 + longEdge, y0, x0 + halfLongEdge, y0 + median];\n break;\n }\n\n if (active) {\n self.ctx.strokeStyle = self.style.unhideIndicatorBorderColor;\n self.ctx.lineWidth = 2;\n drawLines(borderCoords);\n\n self.ctx.fillStyle = self.style.unhideIndicatorBackgroundColor;\n let offset = dir === 'r' || dir === 'b' ? 1 : 0;\n if (dir === 'l' || dir === 'r')\n fillRect(x - offset, y, size + offset, size);\n else fillRect(x, y - offset, size, size + offset);\n }\n\n self.ctx.fillStyle = self.style.unhideIndicatorColor;\n drawLines(coords, true);\n }\n function drawOrderByArrow(x, y) {\n var mt = self.style.columnHeaderOrderByArrowMarginTop * self.scale,\n ml = self.style.columnHeaderOrderByArrowMarginLeft * self.scale,\n mr = self.style.columnHeaderOrderByArrowMarginRight * self.scale,\n aw = self.style.columnHeaderOrderByArrowWidth * self.scale,\n ah = self.style.columnHeaderOrderByArrowHeight * self.scale;\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.fillStyle = self.style.columnHeaderOrderByArrowColor;\n self.ctx.strokeStyle = self.style.columnHeaderOrderByArrowBorderColor;\n self.ctx.beginPath();\n x = x + ml;\n y = y + mt;\n if (self.orderDirection === 'asc') {\n self.ctx.lineTo(x, y + ah);\n self.ctx.lineTo(x + aw, y + ah);\n self.ctx.lineTo(x + aw * 0.5, y);\n self.ctx.lineTo(x, y + ah);\n } else {\n self.ctx.moveTo(x, y);\n self.ctx.lineTo(x + aw, y);\n self.ctx.lineTo(x + aw * 0.5, y + ah);\n self.ctx.moveTo(x, y);\n }\n self.ctx.stroke();\n self.ctx.fill();\n return ml + aw + mr;\n }\n function drawTreeArrow(cell, x, y) {\n var mt = self.style.treeArrowMarginTop * self.scale,\n mr = self.style.treeArrowMarginRight * self.scale,\n ml = self.style.treeArrowMarginLeft * self.scale,\n aw = self.style.treeArrowWidth * self.scale,\n ah = self.style.treeArrowHeight * self.scale;\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.fillStyle = self.style.treeArrowColor;\n self.ctx.strokeStyle = self.style.treeArrowBorderColor;\n self.ctx.beginPath();\n x = x + ml;\n y = y + mt;\n if (self.openChildren[cell.rowIndex]) {\n self.ctx.moveTo(x, y);\n self.ctx.lineTo(x + aw, y);\n self.ctx.lineTo(x + aw * 0.5, y + ah);\n self.ctx.moveTo(x, y);\n } else {\n self.ctx.lineTo(x, y);\n self.ctx.lineTo(x + ah, y + aw * 0.5);\n self.ctx.lineTo(x, y + aw);\n self.ctx.lineTo(x, y);\n }\n self.ctx.stroke();\n self.ctx.fill();\n return ml + aw + mr;\n }\n function drawCellTreeIcon(cell, tree, rowTree) {\n const parentCount = rowTree ? tree.parentCount : 0;\n const iconSize = self.style.cellTreeIconWidth * self.scale,\n marginTop = self.style.cellTreeIconMarginTop * self.scale,\n marginRight = self.style.cellTreeIconMarginRight * self.scale,\n marginLeft =\n self.style.cellTreeIconMarginLeft * self.scale +\n parentCount * (iconSize + cell.paddingLeft);\n\n let x = cell.x + cell.paddingLeft + self.canvasOffsetLeft + marginLeft,\n y = cell.y + self.canvasOffsetTop + marginTop;\n\n if (tree.icon) {\n self.ctx.beginPath();\n const oldFillStyle = self.ctx.fillStyle;\n const oldStrokeStyle = self.ctx.strokeStyle;\n\n if (cell.hovered && self.hovers.onCellTreeIcon) {\n self.ctx.fillStyle = self.style.cellTreeIconHoverFillColor;\n } else {\n self.ctx.fillStyle = self.style.cellTreeIconFillColor;\n }\n\n self.ctx.fillRect(x, y, iconSize, iconSize);\n self.ctx.strokeStyle = self.style.cellTreeIconBorderColor;\n self.ctx.rect(x, y, iconSize, iconSize);\n self.ctx.stroke();\n\n self.ctx.beginPath();\n if (tree.expand) {\n self.ctx.moveTo(x + 3, y + iconSize * 0.5);\n self.ctx.lineTo(x + iconSize - 3, y + iconSize * 0.5);\n } else {\n self.ctx.moveTo(x + 2, y + iconSize * 0.5);\n self.ctx.lineTo(x + iconSize - 2, y + iconSize * 0.5);\n self.ctx.moveTo(x + iconSize * 0.5, y + 2);\n self.ctx.lineTo(x + iconSize * 0.5, y + iconSize - 2);\n }\n self.ctx.lineWidth = self.style.cellTreeIconLineWidth;\n self.ctx.strokeStyle = self.style.cellTreeIconLineColor;\n self.ctx.stroke();\n\n self.ctx.strokeStyle = oldStrokeStyle;\n self.ctx.fillStyle = oldFillStyle;\n }\n\n return marginLeft + iconSize + marginRight;\n }\n function drawFilterButtonArrow(x, y) {\n var mt =\n ((self.style.filterButtonHeight - self.style.filterButtonArrowHeight) /\n 2) *\n self.scale,\n ml =\n ((self.style.filterButtonWidth - self.style.filterButtonArrowWidth) /\n 2) *\n self.scale,\n aw = self.style.filterButtonArrowWidth * self.scale,\n ah = self.style.filterButtonArrowHeight * self.scale;\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.fillStyle = self.style.filterButtonArrowColor;\n self.ctx.strokeStyle = self.style.filterButtonArrowBorderColor;\n self.ctx.beginPath();\n x = x + ml;\n y = y + mt;\n\n self.ctx.moveTo(x, y);\n self.ctx.lineTo(x + aw, y);\n self.ctx.lineTo(x + aw * 0.5, y + ah);\n self.ctx.moveTo(x, y);\n\n self.ctx.stroke();\n self.ctx.fill();\n return ml + aw;\n }\n function radiusRect(x, y, w, h, radius) {\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n var r = x + w,\n b = y + h;\n self.ctx.beginPath();\n self.ctx.moveTo(x + radius, y);\n self.ctx.lineTo(r - radius, y);\n self.ctx.quadraticCurveTo(r, y, r, y + radius);\n self.ctx.lineTo(r, y + h - radius);\n self.ctx.quadraticCurveTo(r, b, r - radius, b);\n self.ctx.lineTo(x + radius, b);\n self.ctx.quadraticCurveTo(x, b, x, b - radius);\n self.ctx.lineTo(x, y + radius);\n self.ctx.quadraticCurveTo(x, y, x + radius, y);\n }\n function fillRect(x, y, w, h) {\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.fillRect(x, y, w, h);\n }\n function strokeRect(x, y, w, h) {\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.strokeRect(x, y, w, h);\n }\n function fillText(text, x, y) {\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.fillText(text, x, y);\n }\n function fillCircle(x, y, r) {\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.beginPath();\n self.ctx.arc(x, y, r, 0, 2 * Math.PI);\n self.ctx.fill();\n }\n function strokeCircle(x, y, r) {\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.beginPath();\n self.ctx.arc(x, y, r, 0, 2 * Math.PI);\n self.ctx.stroke();\n }\n function clipFrozenArea(mode) {\n // 0 both, 1 rows, 2 cols\n // self.lastFrozenColumnPixel;\n // self.lastFrozenRowPixel;\n self.ctx.beginPath();\n if (mode === 0) {\n self.ctx.moveTo(self.lastFrozenColumnPixel, self.lastFrozenRowPixel);\n self.ctx.lineTo(self.lastFrozenColumnPixel, self.height);\n self.ctx.lineTo(self.width, self.height);\n self.ctx.lineTo(self.width, self.lastFrozenRowPixel);\n }\n if (mode === 1) {\n self.ctx.moveTo(0, self.lastFrozenRowPixel);\n self.ctx.lineTo(0, self.height);\n self.ctx.lineTo(self.width, self.height);\n self.ctx.lineTo(self.width, self.lastFrozenRowPixel);\n }\n if (mode === 2) {\n self.ctx.moveTo(self.lastFrozenColumnPixel, 0);\n self.ctx.lineTo(self.width, 0);\n self.ctx.lineTo(self.width, self.height);\n self.ctx.lineTo(self.lastFrozenColumnPixel, self.height);\n }\n self.ctx.clip();\n }\n function fillHandle(x, y, r) {\n if (self.style.selectionHandleType === 'circle') {\n return fillCircle(x, y, r * 0.5);\n }\n fillRect(x - r * 0.5, y - r * 0.5, r, r);\n }\n function strokeHandle(x, y, r) {\n if (self.style.selectionHandleType === 'circle') {\n return strokeCircle(x, y, r * 0.5);\n }\n strokeRect(x - r * 0.5, y - r * 0.5, r, r);\n }\n function addselectionHandle(c, pos) {\n var hw = self.style.selectionHandleSize,\n p = {\n tr: function () {\n fillHandle(c.x + c.width, c.y, hw);\n strokeHandle(c.x + c.width, c.y, hw);\n },\n br: function () {\n fillHandle(c.x + c.width, c.y + c.height, hw);\n strokeHandle(c.x + c.width, c.y + c.height, hw);\n },\n tl: function () {\n fillHandle(c.x, c.y, hw);\n strokeHandle(c.x, c.y, hw);\n },\n bl: function () {\n fillHandle(c.x, c.y + c.height, hw);\n strokeHandle(c.x, c.y + c.height, hw);\n },\n };\n p[pos]();\n }\n function addBorderLine(c, pos) {\n self.ctx.beginPath();\n var p = {\n t: function () {\n self.ctx.moveTo(\n c.x + self.canvasOffsetLeft,\n c.y + self.canvasOffsetTop,\n );\n self.ctx.lineTo(\n c.x + self.canvasOffsetLeft + c.width,\n c.y + self.canvasOffsetTop,\n );\n },\n r: function () {\n self.ctx.moveTo(\n c.x + self.canvasOffsetLeft + c.width,\n c.y + self.canvasOffsetTop,\n );\n self.ctx.lineTo(\n c.x + self.canvasOffsetLeft + c.width,\n c.y + self.canvasOffsetTop + c.height,\n );\n },\n b: function () {\n self.ctx.moveTo(\n c.x + self.canvasOffsetLeft,\n c.y + self.canvasOffsetTop + c.height,\n );\n self.ctx.lineTo(\n c.x + self.canvasOffsetLeft + c.width,\n c.y + self.canvasOffsetTop + c.height,\n );\n },\n l: function () {\n self.ctx.moveTo(\n c.x + self.canvasOffsetLeft,\n c.y + self.canvasOffsetTop,\n );\n self.ctx.lineTo(\n c.x + self.canvasOffsetLeft,\n c.y + self.canvasOffsetTop + c.height,\n );\n },\n };\n p[pos]();\n self.ctx.stroke();\n }\n function addEllipsis(text, width) {\n var c,\n w = 0;\n if (self.ellipsisCache[text] && self.ellipsisCache[text][width]) {\n return self.ellipsisCache[text][width];\n }\n //TODO Add ellipsis back when there is a fast way to do it\n w = self.ctx.measureText(text).width;\n self.ellipsisCache[text] = self.ellipsisCache[text] || {};\n c = { value: text, width: w };\n self.ellipsisCache[text][width] = c;\n return c;\n }\n function wrapText(cell, splitChar) {\n if (!cell.formattedValue) {\n return {\n lines: [{ width: 0, value: '' }],\n width: 0,\n height: cell.calculatedLineHeight,\n };\n }\n var max = 0,\n n = '\\n',\n x,\n word,\n words = cell.formattedValue.split(splitChar),\n textHeight = cell.calculatedLineHeight,\n lines = [],\n out = [],\n wrap = self.style.cellWhiteSpace !== 'nowrap',\n autoResize = self.attributes.autoResizeRows && wrap,\n elWidth,\n et = self.attributes.ellipsisText,\n elClipLength,\n plWidth,\n clippedVal,\n ogWordWidth,\n previousLine,\n line = {\n width: 0,\n value: '',\n },\n cHeight = wrap ? cell.paddedHeight : cell.calculatedLineHeight;\n lines.push(line);\n elWidth = self.ctx.measureText(' ' + et).width;\n for (x = 0; x < words.length; x += 1) {\n word = words[x];\n var curSplitChar = word[word.length - 1] === '-' ? '' : splitChar;\n var measure = self.ctx.measureText(word + curSplitChar);\n if (line.width + measure.width + elWidth < cell.paddedWidth) {\n line.value += word + curSplitChar;\n line.width += measure.width;\n continue;\n }\n // if there is a hyphenated word that is too long\n // split it and add the split set to the array\n // then back up and re-read new split set\n // this behavior seems right, it might not be\n if (/\\w-\\w/.test(word) && cell.paddedWidth < measure.width) {\n var arr = word.split('-');\n arr = arr.map((item, index) => {\n return index === arr.length - 1 ? item : item + '-';\n });\n words.splice(x, 1, ...arr);\n x -= 1;\n continue;\n }\n line = {\n width: measure.width,\n value: word + curSplitChar,\n };\n if (x === 0) {\n lines = [];\n lines.push(line);\n }\n textHeight += cell.calculatedLineHeight;\n if (textHeight > cHeight && !autoResize) {\n if (lines.length === 0) {\n break;\n }\n elClipLength = 1;\n previousLine = lines[lines.length - 1];\n if (previousLine.width < cell.paddedWidth && words.length === 1) {\n break;\n }\n clippedVal = previousLine.value + word;\n plWidth = self.ctx.measureText(clippedVal + et).width;\n var originText = clippedVal;\n if (plWidth > cell.paddedWidth) {\n var stepLength = parseInt(clippedVal.length / 2);\n var direction = -1;\n while (stepLength > 0) {\n clippedVal = originText.substr(\n 0,\n stepLength * direction + clippedVal.length,\n );\n plWidth = self.ctx.measureText(clippedVal + et).width;\n direction = plWidth > cell.paddedWidth ? -1 : 1;\n stepLength = parseInt(stepLength / 2);\n }\n }\n clippedVal =\n clippedVal + (originText.length != clippedVal.length ? et : '');\n previousLine.value = clippedVal;\n previousLine.width = plWidth;\n break;\n }\n if (x > 0) {\n lines.push(line);\n }\n }\n return {\n lines: lines,\n width: max,\n height: cell.calculatedLineHeight * lines.length,\n };\n }\n function drawText(cell, treeCellPadding = 0) {\n var ll = cell.text.lines.length,\n h = cell.fontHeight * cell.lineHeight,\n x,\n line,\n wrap = self.style.cellWhiteSpace !== 'nowrap',\n textHeight = 0;\n for (x = 0; x < cell.text.lines.length; x += 1) {\n line = cell.text.lines[x];\n var vPos =\n Math.max(\n (cell.height -\n (wrap ? cell.text.height : cell.calculatedLineHeight)) *\n 0.5,\n 0,\n ) + h,\n hPos =\n cell.paddingLeft +\n treeCellPadding +\n cell.treeArrowWidth +\n cell.orderByArrowWidth;\n if (cell.horizontalAlignment === 'right') {\n hPos =\n cell.paddingLeft + treeCellPadding + cell.paddedWidth - line.width;\n } else if (cell.horizontalAlignment === 'center') {\n hPos =\n cell.paddingLeft +\n treeCellPadding +\n (cell.paddedWidth + cell.paddingRight) / 2 -\n line.width / 2;\n }\n if (cell.verticalAlignment === 'top') {\n vPos = cell.calculatedLineHeight;\n } else if (cell.verticalAlignment === 'bottom') {\n vPos = cell.height - cell.paddingBottom - cell.text.height;\n }\n line.height = h + cell.lineSpacing;\n line.offsetLeft = hPos;\n line.offsetTop = vPos;\n line.x = cell.x + hPos;\n line.y = cell.y + textHeight + vPos;\n textHeight += line.height;\n fillText(line.value, line.x, line.y);\n }\n if (self.attributes.debug && cell.active) {\n requestAnimationFrame(function () {\n self.ctx.font = self.style.debugFont;\n self.ctx.fillStyle = self.style.debugColor;\n fillText(\n JSON.stringify(\n {\n x: cell.x,\n y: cell.y,\n h: cell.height,\n w: cell.width,\n pw: cell.paddedWidth,\n idx: cell.columnIndex,\n idx_ord: cell.sortColumnIndex,\n },\n null,\n '\\t',\n ),\n cell.x + 14,\n cell.y + 14,\n );\n fillText(\n JSON.stringify(\n cell.text.lines.map(function (l) {\n return { w: l.width, v: l.value.length };\n }),\n null,\n '\\t',\n ),\n cell.x + 14,\n cell.y + 30,\n );\n });\n }\n }\n function getFrozenColumnsWidth() {\n var w = 0,\n s = self.getSchema(),\n x = 0,\n n = Math.min(self.frozenColumn, s.length),\n collapsedGroups = self.getCollapsedColumnGroups(),\n column;\n hiddenFrozenColumnCount = 0;\n while (x < n) {\n column = s[x];\n if (column.hidden) {\n hiddenFrozenColumnCount += 1;\n } else {\n const isCollapsed =\n collapsedGroups.findIndex(\n (group) => x >= group.from && x <= group.to,\n ) >= 0;\n if (isCollapsed) {\n hiddenFrozenColumnCount += 1;\n } else {\n w += self.getColumnWidth(x);\n }\n }\n x += 1;\n }\n return w;\n }\n /**\n * Redraws the grid. No matter what the change, this is the only method required to refresh everything.\n * @memberof canvasDatagrid\n * @name draw\n * @method\n */\n // r = literal row index\n // rd = row data array\n // i = user order index\n // o = literal data index\n // y = y drawing cursor\n // x = x drawing cursor\n // s = visible schema array\n // cx = current x drawing cursor sub calculation var\n // cy = current y drawing cursor sub calculation var\n // a = static cell (like corner cell)\n // p = perf counter\n // l = data length\n // u = current cell\n // h = current height\n // w = current width\n self.draw = function (internal) {\n if (self.dispatchEvent('beforedraw', {})) {\n return;\n }\n if (!self.isChildGrid && (!self.height || !self.width)) {\n return;\n }\n if (self.isChildGrid && internal) {\n requestAnimationFrame(self.parentGrid.draw);\n return;\n }\n if (self.intf.visible === false) {\n return;\n }\n // initial values\n var checkScrollHeight,\n rowHeaderCell,\n p,\n cx,\n cy,\n treeGrid,\n rowOpen,\n rowHeight,\n cornerCell,\n y,\n x,\n c,\n h,\n w,\n schema,\n rowIndex,\n rowData,\n aCell,\n viewData = self.viewData || [],\n bc = self.style.gridBorderCollapse === 'collapse',\n selectionBorders = [],\n moveBorders = [],\n selectionHandles = [],\n rowHeaders = [],\n l = viewData.length,\n u = self.currentCell || {},\n columnHeaderCellHeight = self.getColumnHeaderCellHeight(),\n rowHeaderCellWidth = self.getRowHeaderCellWidth(),\n rowGroupsAreaWidth = self.getRowGroupAreaWidth(),\n columnGroupsAreaHeight = self.getColumnGroupAreaHeight(),\n /** key: boundRowIndex, value: `{y,h}` */\n rowGroupsRectInfo = {},\n /** value: `{y,h}` */\n rowGroupsFrozenInfo = {},\n /** key: columnIndex, value: `{x,w}` */\n columnGroupsRectInfo = {},\n collapsedColumnGroups = self.getCollapsedColumnGroups(),\n collapsedRowGroups = self.getCollapsedRowGroups(),\n cellHeight = self.style.cellHeight,\n currentRowIndexOffset = 0,\n /** @type {Array<{from:number,plus:number}>} */\n rowIndexOffsetByHiddenRows = self.hiddenRowRanges\n .map((range) => ({\n from: range[0],\n plus: range[1] - range[0] + 1,\n }))\n .sort((a, b) => a.from - b.from);\n drawCount += 1;\n p = performance.now();\n self.visibleRowHeights = [];\n // if data length has changed, there is no way to know\n if (viewData.length > self.orders.rows.length) {\n self.createRowOrders();\n }\n function saveRowGroupsRectInfo(cell) {\n let index = cell.boundRowIndex;\n if (index >= -1 === false)\n if (cell.rowIndex === -1) index = -1;\n else return;\n if (rowGroupsRectInfo[index]) return;\n rowGroupsRectInfo[index] = { y: cell.y, h: cell.height };\n }\n function saveColumnGroupsRectInfo(cell) {\n const index = cell.columnIndex;\n if (columnGroupsRectInfo[index]) return;\n columnGroupsRectInfo[index] = { x: cell.x, w: cell.width };\n }\n /**\n * @param {number} columnIndex\n * @returns {boolean}\n */\n function isColumnCollapsedByGroup(columnIndex) {\n return (\n collapsedColumnGroups.findIndex(\n (group) => columnIndex >= group.from && columnIndex <= group.to,\n ) >= 0\n );\n }\n\n function drawScrollBars() {\n var drawCorner,\n en = self.scrollBox.entities,\n m = self.style.scrollBarBoxMargin * 2;\n self.ctx.strokeStyle = self.style.scrollBarBorderColor;\n self.ctx.lineWidth = self.style.scrollBarBorderWidth;\n if (self.frozenColumn > 0) {\n en.horizontalBox.x =\n rowHeaderCellWidth +\n self.style.scrollBarBoxMargin +\n self.scrollCache.x[self.frozenColumn - 1] +\n (en.horizontalBar.width -\n self.scrollCache.x[self.frozenColumn - 1] -\n self.scrollBox.scrollBoxWidth) *\n (self.scrollBox.scrollLeft / self.scrollBox.scrollWidth);\n } else {\n en.horizontalBox.x =\n rowHeaderCellWidth +\n self.style.scrollBarBoxMargin +\n (en.horizontalBar.width - self.scrollBox.scrollBoxWidth) *\n (self.scrollBox.scrollLeft / self.scrollBox.scrollWidth);\n }\n en.verticalBox.y =\n columnHeaderCellHeight +\n self.style.scrollBarBoxMargin +\n self.scrollCache.y[self.frozenRow] +\n (en.verticalBar.height -\n self.scrollBox.scrollBoxHeight -\n self.scrollCache.y[self.frozenRow]) *\n (self.scrollBox.scrollTop / self.scrollBox.scrollHeight);\n if (self.scrollBox.horizontalBarVisible) {\n self.ctx.fillStyle = self.style.scrollBarBackgroundColor;\n fillRect(\n en.horizontalBar.x,\n en.horizontalBar.y,\n en.horizontalBar.width + m,\n en.horizontalBar.height,\n );\n strokeRect(\n en.horizontalBar.x,\n en.horizontalBar.y,\n en.horizontalBar.width + m,\n en.horizontalBar.height,\n );\n self.ctx.fillStyle = self.style.scrollBarBoxColor;\n if (self.scrollBox.horizontalBoxVisible) {\n if (/horizontal/.test(u.context)) {\n self.ctx.fillStyle = self.style.scrollBarActiveColor;\n }\n radiusRect(\n en.horizontalBox.x,\n en.horizontalBox.y,\n en.horizontalBox.width,\n en.horizontalBox.height,\n self.style.scrollBarBoxBorderRadius,\n );\n self.ctx.stroke();\n self.ctx.fill();\n }\n drawCorner = true;\n self.visibleCells.unshift(en.horizontalBar);\n self.visibleCells.unshift(en.horizontalBox);\n }\n if (self.scrollBox.verticalBarVisible) {\n self.ctx.fillStyle = self.style.scrollBarBackgroundColor;\n fillRect(\n en.verticalBar.x,\n en.verticalBar.y,\n en.verticalBar.width,\n en.verticalBar.height + m,\n );\n strokeRect(\n en.verticalBar.x,\n en.verticalBar.y,\n en.verticalBar.width,\n en.verticalBar.height + m,\n );\n if (self.scrollBox.verticalBoxVisible) {\n self.ctx.fillStyle = self.style.scrollBarBoxColor;\n if (/vertical/.test(u.context)) {\n self.ctx.fillStyle = self.style.scrollBarActiveColor;\n }\n radiusRect(\n en.verticalBox.x,\n en.verticalBox.y,\n en.verticalBox.width,\n en.verticalBox.height,\n self.style.scrollBarBoxBorderRadius,\n );\n self.ctx.stroke();\n self.ctx.fill();\n }\n drawCorner = true;\n self.visibleCells.unshift(en.verticalBar);\n self.visibleCells.unshift(en.verticalBox);\n }\n if (drawCorner) {\n //corner\n self.ctx.strokeStyle = self.style.scrollBarCornerBorderColor;\n self.ctx.fillStyle = self.style.scrollBarCornerBackgroundColor;\n radiusRect(\n en.corner.x,\n en.corner.y,\n en.corner.width,\n en.corner.height,\n 0,\n );\n self.ctx.stroke();\n self.ctx.fill();\n self.visibleCells.unshift(en.corner);\n }\n }\n function createHandlesOverlayArray(cell) {\n if (self.attributes.allowMovingSelection || self.mobile) {\n if (\n cell.selectionBorderTop &&\n cell.selectionBorderRight &&\n self.mobile\n ) {\n selectionHandles.push([cell, 'tr']);\n cell.selectionHandle = 'tr';\n }\n if (\n cell.selectionBorderTop &&\n cell.selectionBorderLeft &&\n self.mobile\n ) {\n selectionHandles.push([cell, 'tl']);\n cell.selectionHandle = 'tl';\n }\n if (\n cell.selectionBorderBottom &&\n cell.selectionBorderLeft &&\n self.mobile\n ) {\n selectionHandles.push([cell, 'bl']);\n cell.selectionHandle = 'bl';\n }\n if (\n cell.selectionBorderBottom &&\n cell.selectionBorderRight &&\n (self.attributes.selectionHandleBehavior !== 'none' || self.mobile)\n ) {\n selectionHandles.push([cell, 'br']);\n cell.selectionHandle = 'br';\n }\n }\n }\n function createBorderOverlayArray(\n cell,\n drawArray,\n propPrefix,\n offsetPoint,\n ) {\n offsetPoint = offsetPoint || { x: 0, y: 0 };\n cell.selectionBorder = '';\n if (\n !cell.isRowHeader &&\n self.selections[cell.rowIndex + -offsetPoint.y] &&\n self.selections[cell.rowIndex + -offsetPoint.y].indexOf(\n cell.columnIndex + -offsetPoint.x,\n ) !== -1\n ) {\n if (\n (!self.selections[cell.rowIndex - 1 + -offsetPoint.y] ||\n self.selections[cell.rowIndex - 1 + -offsetPoint.y].indexOf(\n cell.columnIndex + -offsetPoint.x,\n ) === -1 ||\n cell.rowIndex === 0) &&\n !cell.isHeader\n ) {\n drawArray.push([cell, 't']);\n cell[propPrefix + 'BorderTop'] = true;\n cell[propPrefix + 'Border'] += 't';\n }\n if (\n !self.selections[cell.rowIndex + 1 + -offsetPoint.y] ||\n self.selections[cell.rowIndex + 1 + -offsetPoint.y].indexOf(\n cell.columnIndex + -offsetPoint.x,\n ) === -1\n ) {\n drawArray.push([cell, 'b']);\n cell[propPrefix + 'BorderBottom'] = true;\n cell[propPrefix + 'Border'] += 'b';\n }\n if (\n !self.selections[cell.rowIndex + -offsetPoint.y] ||\n cell.columnIndex === 0 ||\n self.selections[cell.rowIndex + -offsetPoint.y].indexOf(\n cell.columnIndex - 1 + -offsetPoint.x,\n ) === -1\n ) {\n drawArray.push([cell, 'l']);\n cell[propPrefix + 'BorderLeft'] = true;\n cell[propPrefix + 'Border'] += 'l';\n }\n if (\n !self.selections[cell.rowIndex + -offsetPoint.y] ||\n cell.columnIndex === schema.length ||\n self.selections[cell.rowIndex + -offsetPoint.y].indexOf(\n cell.columnIndex + 1 + -offsetPoint.x,\n ) === -1\n ) {\n drawArray.push([cell, 'r']);\n cell[propPrefix + 'BorderRight'] = true;\n cell[propPrefix + 'Border'] += 'r';\n }\n }\n }\n function drawCell(rowData, rowOrderIndex, rowIndex) {\n return function drawEach(header, headerIndex, columnOrderIndex) {\n if (header.hidden) {\n return 0;\n }\n var cellStyle = header.style || 'cell',\n cellGridAttributes,\n cell,\n isHeader = /HeaderCell/.test(cellStyle),\n isCorner = /cornerCell/.test(cellStyle),\n isRowHeader = 'rowHeaderCell' === cellStyle,\n isColumnHeader = 'columnHeaderCell' === cellStyle,\n isFilterable =\n self.filterable.rows.includes(rowIndex) &&\n self.filterable.columns.includes(headerIndex),\n wrap = self.style.cellWhiteSpace !== 'nowrap',\n selected =\n self.selections[rowOrderIndex] &&\n self.selections[rowOrderIndex].indexOf(columnOrderIndex) !== -1,\n hovered =\n self.hovers.rowIndex === rowOrderIndex &&\n (self.attributes.hoverMode === 'row' ||\n self.hovers.columnIndex === columnOrderIndex),\n openedFilter =\n self.selectedFilterButton.rowIndex == rowIndex &&\n self.selectedFilterButton.columnIndex == headerIndex,\n active =\n self.activeCell.rowIndex === rowOrderIndex &&\n self.activeCell.columnIndex === columnOrderIndex,\n isColumnHeaderCellCap = cellStyle === 'columnHeaderCellCap',\n rawValue = rowData ? rowData[header.name] : undefined,\n isGrid = header.type === 'canvas-datagrid',\n activeHeader =\n (self.orders.rows[self.activeCell.rowIndex] === rowOrderIndex ||\n self.selectedRows.indexOf(rowOrderIndex) >= 0 ||\n self.orders.columns[self.activeCell.columnIndex] ===\n headerIndex ||\n self.selectedColumns.indexOf(headerIndex) >= 0) &&\n (columnOrderIndex === -1 || rowOrderIndex === -1)\n ? isRowHeader\n ? 'activeRowHeaderCell'\n : 'activeColumnHeaderCell'\n : false,\n val,\n f = self.formatters[header.type || 'string'],\n orderByArrowSize = 0,\n treeArrowSize = 0,\n cellWidth = self.sizes.columns[headerIndex] || header.width,\n ev = {\n value: rawValue,\n row: rowData,\n header: header,\n };\n if (isColumnHeaderCellCap) {\n cellWidth = w - x;\n }\n // if no data or schema are defined, a width is provided to the stub column\n if (cellWidth === undefined) {\n cellWidth = self.style.cellWidth;\n }\n cellWidth = cellWidth * self.scale;\n if (x + cellWidth + self.style.cellBorderWidth < 0) {\n x += cellWidth + self.style.cellBorderWidth;\n }\n if (active && cellStyle !== 'cornerCell') {\n cellStyle = 'activeCell';\n }\n if (self.visibleRows.indexOf(rowIndex) === -1 && !isHeader) {\n self.visibleRows.push(rowIndex);\n }\n val = self.dispatchEvent('formatcellvalue', ev);\n cx = x;\n cy = y;\n if (cellStyle === 'cornerCell') {\n cx = 0;\n cy = 0;\n } else if (isRowHeader) {\n cx = 0;\n } else if (isHeader) {\n cy = 0;\n }\n cell = {\n type: isGrid ? 'canvas-datagrid-cell' : header.type,\n style: cellStyle,\n nodeType: 'canvas-datagrid-cell',\n x: cx,\n y: cy,\n fontHeight: (self.style[cellStyle + 'FontHeight'] || 0) * self.scale,\n horizontalAlignment: self.style[cellStyle + 'HorizontalAlignment'],\n verticalAlignment: self.style[cellStyle + 'VerticalAlignment'],\n paddingLeft:\n (self.style[cellStyle + 'PaddingLeft'] || 0) * self.scale,\n paddingTop: (self.style[cellStyle + 'PaddingTop'] || 0) * self.scale,\n paddingRight:\n (self.style[cellStyle + 'PaddingRight'] || 0) * self.scale,\n paddingBottom:\n (self.style[cellStyle + 'PaddingBottom'] || 0) * self.scale,\n whiteSpace: self.style.cellWhiteSpace,\n lineHeight: self.style.cellLineHeight,\n lineSpacing: self.style.cellLineSpacing,\n offsetTop: self.canvasOffsetTop + cy,\n offsetLeft: self.canvasOffsetLeft + cx,\n scrollTop: self.scrollBox.scrollTop,\n scrollLeft: self.scrollBox.scrollLeft,\n active: active || activeHeader,\n hovered: hovered,\n selected: selected,\n width: cellWidth,\n height: cellHeight,\n offsetWidth: cellWidth,\n offsetHeight: cellHeight,\n parentNode: self.intf.parentNode,\n offsetParent: self.intf.parentNode,\n data: rowData,\n isCorner: isCorner,\n isHeader: isHeader,\n isColumnHeader: isColumnHeader,\n isColumnHeaderCellCap: isColumnHeaderCellCap,\n isRowHeader: isRowHeader,\n isFilterable: isFilterable,\n openedFilter: openedFilter,\n rowOpen: rowOpen,\n header: header,\n\n columnIndex: columnOrderIndex,\n rowIndex: rowOrderIndex,\n\n viewRowIndex: rowOrderIndex,\n viewColumnIndex: columnOrderIndex,\n\n boundRowIndex: self.getBoundRowIndexFromViewRowIndex(rowOrderIndex),\n boundColumnIndex: self.getBoundColumnIndexFromViewColumnIndex(\n columnOrderIndex,\n ),\n\n sortColumnIndex: headerIndex,\n sortRowIndex: rowIndex,\n\n isGrid: isGrid,\n isNormal: !isGrid && !isCorner && !isHeader,\n gridId: (self.attributes.name || '') + rowIndex + ':' + headerIndex,\n parentGrid: self.intf,\n innerHTML: '',\n activeHeader: activeHeader,\n value:\n isHeader && !isRowHeader ? header.title || header.name : rawValue,\n isRowTree:\n rowOrderIndex >= 0 &&\n columnOrderIndex == self.cellTree.rowTreeColIndex &&\n self.cellTree.rows.length > 0 &&\n self.cellTree.rows[rowOrderIndex].icon,\n isColumnTree:\n columnOrderIndex >= 0 &&\n self.cellTree.columns[rowOrderIndex] &&\n self.cellTree.columns[rowOrderIndex][columnOrderIndex].icon,\n };\n cell.calculatedLineHeight =\n cell.fontHeight * cell.lineHeight + cell.lineSpacing;\n cell.paddedWidth = cell.width - cell.paddingRight - cell.paddingLeft;\n cell.paddedHeight = cell.height - cell.paddingTop - cell.paddingBottom;\n ev.cell = cell;\n cell.userHeight = cell.isHeader ? self.sizes.rows[-1] : rowHeight;\n cell.userWidth = cell.isHeader\n ? self.sizes.columns.cornerCell\n : self.sizes.columns[headerIndex];\n self.visibleCells.unshift(cell);\n saveRowGroupsRectInfo(cell);\n saveColumnGroupsRectInfo(cell);\n if (self.dispatchEvent('beforerendercell', ev)) {\n return;\n }\n self.ctx.fillStyle = self.style[cellStyle + 'BackgroundColor'];\n self.ctx.strokeStyle = self.style[cellStyle + 'BorderColor'];\n self.ctx.lineWidth = self.style[cellStyle + 'BorderWidth'];\n if (hovered) {\n self.ctx.fillStyle = self.style[cellStyle + 'HoverBackgroundColor'];\n self.ctx.strokeStyle = self.style[cellStyle + 'HoverBorderColor'];\n }\n if (selected) {\n self.ctx.fillStyle =\n self.style[cellStyle + 'SelectedBackgroundColor'];\n self.ctx.strokeStyle = self.style[cellStyle + 'SelectedBorderColor'];\n }\n if (activeHeader) {\n self.ctx.fillStyle = self.style[activeHeader + 'BackgroundColor'];\n }\n self.dispatchEvent('rendercell', ev);\n if (cell.isGrid) {\n if (cell.height !== rowHeight) {\n cell.height = rowHeight || self.style.cellHeightWithChildGrid;\n checkScrollHeight = true;\n }\n cell.width =\n self.sizes.columns[headerIndex] ||\n self.style.cellWidthWithChildGrid;\n }\n if (rowOpen && !cell.isRowHeader) {\n cell.height = self.sizes.rows[rowIndex] || self.style.cellHeight;\n }\n if (!cell.isGrid) {\n fillRect(cx, cy, cell.width, cell.height);\n strokeRect(cx, cy, cell.width, cell.height);\n }\n self.ctx.save();\n radiusRect(cell.x, cell.y, cell.width, cell.height, 0);\n self.ctx.clip();\n self.dispatchEvent('afterrendercell', ev);\n if (cell.height !== cellHeight && !(rowOpen && !cell.isRowHeader)) {\n self.sizes.rows[isHeader ? -1 : rowIndex] = cell.height;\n checkScrollHeight = true;\n }\n if (cell.width !== cellWidth) {\n self.sizes.columns[headerIndex] = cell.width;\n checkScrollHeight = true;\n }\n if (isRowHeader && self.attributes.tree) {\n if (!self.dispatchEvent('rendertreearrow', ev)) {\n treeArrowSize = drawTreeArrow(\n cell,\n self.style[cellStyle + 'PaddingLeft'],\n cy,\n 0,\n );\n }\n }\n if ((self.attributes.showRowNumbers && isRowHeader) || !isRowHeader) {\n if (cell.isGrid && !self.dispatchEvent('beforerendercellgrid', ev)) {\n if (!self.childGrids[cell.gridId]) {\n // HACK: this only allows setting of the child grids styles if data is set _after_\n // this is less than desirable. An interface needs to be made to effect the\n // style of all cell grids. One for individual grids already exists.\n cellGridAttributes = self.cellGridAttributes;\n cellGridAttributes.name = self.attributes.saveAppearance\n ? cell.gridId\n : undefined;\n cellGridAttributes.component = false;\n cellGridAttributes.parentNode = cell;\n cellGridAttributes.data = rawValue;\n ev.cellGridAttributes = cellGridAttributes;\n if (self.dispatchEvent('beforecreatecellgrid', ev)) {\n return;\n }\n self.childGrids[cell.gridId] = self.createGrid(\n cellGridAttributes,\n );\n self.sizes.rows[rowIndex] =\n self.sizes.rows[rowIndex] || self.style.cellGridHeight;\n checkScrollHeight = true;\n }\n cell.grid = self.childGrids[cell.gridId];\n cell.grid.parentNode = cell;\n cell.grid.visible = true;\n cell.grid.draw();\n self.dispatchEvent('rendercellgrid', ev);\n } else if (!cell.isGrid) {\n if (self.childGrids[cell.gridId]) {\n self.childGrids[cell.gridId].parentNode.offsetHeight = 0;\n }\n if (isHeader && self.orderBy === header.name) {\n if (!self.dispatchEvent('renderorderbyarrow', ev)) {\n orderByArrowSize = drawOrderByArrow(\n cx + self.style[cellStyle + 'PaddingLeft'],\n 0,\n );\n }\n }\n self.ctx.fillStyle = self.style[cellStyle + 'Color'];\n if (hovered) {\n self.ctx.fillStyle = self.style[cellStyle + 'HoverColor'];\n }\n if (selected) {\n self.ctx.fillStyle = self.style[cellStyle + 'SelectedColor'];\n }\n if (activeHeader) {\n self.ctx.fillStyle = self.style[activeHeader + 'Color'];\n }\n cell.treeArrowWidth = treeArrowSize;\n cell.orderByArrowWidth = orderByArrowSize;\n // create text ref to see if height needs to expand\n val = val !== undefined ? val : f ? f(ev) : '';\n if (val === undefined && !f) {\n val = '';\n console.warn(\n 'canvas-datagrid: Unknown format ' +\n header.type +\n ' add a cellFormater',\n );\n }\n cell.formattedValue = (val !== undefined && val !== null\n ? val\n : ''\n ).toString();\n if (\n self.columnFilters &&\n self.columnFilters[val] !== undefined &&\n isHeader\n ) {\n cell.formattedValue = self.attributes.filterTextPrefix + val;\n }\n self.ctx.font =\n self.style[cellStyle + 'FontHeight'] * self.scale +\n 'px ' +\n self.style[cellStyle + 'FontName'];\n if (!self.dispatchEvent('formattext', ev)) {\n cell.text = wrapText(cell, ' ');\n }\n if (!self.dispatchEvent('rendertext', ev)) {\n if (cell.innerHTML || header.type === 'html') {\n drawHtml(cell);\n } else {\n let treeCellPadding = 0,\n isDrawText = true;\n if (\n cell.columnIndex == self.cellTree.rowTreeColIndex &&\n !cell.isColumnHeader &&\n self.cellTree.rows.length > 0 &&\n Object.keys(self.cellTree.rows[cell.rowIndex]).length > 1\n )\n treeCellPadding = drawCellTreeIcon(\n cell,\n self.cellTree.rows[cell.rowIndex],\n true,\n );\n\n if (\n !cell.isRowHeader &&\n cell.rowIndex > 0 &&\n self.cellTree.columns[cell.rowIndex - 1] &&\n self.cellTree.columns[cell.rowIndex - 1][cell.columnIndex]\n .icon\n ) {\n for (let r = cell.rowIndex - 1; r >= 0; r--) {\n if (!self.cellTree.columns[r]) break;\n if (!self.cellTree.columns[r][cell.columnIndex].icon) break;\n if (!self.cellTree.columns[r][cell.columnIndex].expand) {\n isDrawText = false;\n break;\n }\n }\n }\n if (\n isDrawText &&\n !cell.isRowHeader &&\n self.cellTree.columns[cell.rowIndex] &&\n self.cellTree.columns[cell.rowIndex][cell.columnIndex].icon\n ) {\n if (\n self.viewData.length > 0 &&\n self.viewData[cell.rowIndex][cell.columnIndex].length > 0\n )\n treeCellPadding = drawCellTreeIcon(\n cell,\n self.cellTree.columns[cell.rowIndex][cell.columnIndex],\n false,\n );\n }\n if (isDrawText) drawText(cell, treeCellPadding);\n }\n\n if (wrap && cell.text && cell.text.height > rowHeight) {\n self.sizes.rows[isHeader ? -1 : rowIndex] = cell.text.height;\n checkScrollHeight = true;\n }\n }\n }\n }\n if (active) {\n aCell = cell;\n }\n createBorderOverlayArray(cell, selectionBorders, 'selection');\n // createBorderOverlayArray calculates data for createHandlesOverlayArray so it must go 2nd\n createHandlesOverlayArray(cell);\n if (self.movingSelection) {\n createBorderOverlayArray(cell, moveBorders, 'move', self.moveOffset);\n }\n self.ctx.restore();\n\n if (isFilterable) {\n drawFilterButton(cell);\n }\n\n // Gaps may occur in row numbers between consecutively rendered rows\n // when we are filtering. We draw attention to this by drawing a thick\n // border overlapping the two consecutive row headers. If sorting, visible\n // row numbers stay the same (i.e. they don't correspond to the underlying\n // data's row number), so we do not show row gaps in that case.\n const isSorting =\n self.orderings.columns && self.orderings.columns.length > 0;\n\n if (\n isRowHeader &&\n self.attributes.showRowNumbers &&\n self.attributes.showRowNumberGaps &&\n isSorting === false\n ) {\n const previousRowNumber = self.getBoundRowIndexFromViewRowIndex(\n rowOrderIndex - 1,\n );\n let hasRowGap =\n previousRowNumber !== undefined &&\n cell.boundRowIndex > 0 &&\n cell.boundRowIndex - previousRowNumber > 1;\n if (hasRowGap && collapsedRowGroups.length > 0) {\n hasRowGap =\n collapsedRowGroups.find(\n (group) =>\n group.from === previousRowNumber &&\n group.to === cell.boundRowIndex,\n ) >= 0;\n }\n // We don't treat the row index difference from hidden rows as the row gap.\n if (hasRowGap && self.hiddenRowRanges.length > 0) {\n for (let i = 0; i < self.hiddenRowRanges.length; i++) {\n const [beginRowIndex, endRowIndex] = self.hiddenRowRanges[i];\n if (\n cell.boundRowIndex === endRowIndex + 1 &&\n previousRowNumber === beginRowIndex - 1\n ) {\n hasRowGap = false;\n break;\n }\n }\n }\n\n if (hasRowGap) {\n const barHeight = self.style.rowHeaderCellRowNumberGapHeight;\n const barColor = self.style.rowHeaderCellRowNumberGapColor;\n\n self.ctx.save();\n\n self.ctx.fillStyle = barColor;\n\n fillRect(cell.x, cell.y - barHeight / 2, cell.width, barHeight);\n\n self.ctx.restore();\n }\n }\n\n //#region draw unhide indicator for column headers\n if (isColumnHeader && self.attributes.showUnhideColumnsIndicator) {\n const hovered = self.hovers.unhideIndicator;\n const size = self.style.unhideIndicatorSize;\n const cellX = x;\n const topY = cell.y + Math.max(0.5 * (cell.height - size), 0);\n\n const isActive = (orderIndex) =>\n hovered &&\n (hovered.dir === 'l' || hovered.dir === 'r') &&\n orderIndex >= hovered.orderIndex0 &&\n orderIndex <= hovered.orderIndex1;\n const isHiddenColumn = (columnIndex) =>\n columnIndex >= 0 &&\n schema[columnIndex] &&\n schema[columnIndex].hidden;\n\n let orderIndex0, orderIndex1;\n const drawIndicator = (leftX, dir, active) => {\n self.visibleUnhideIndicators.push({\n x: leftX - 1,\n y: topY - 1,\n x2: leftX + size + 2,\n y2: topY + size + 2,\n orderIndex0,\n orderIndex1,\n dir,\n });\n if (!active) {\n const line = cell.text && cell.text.lines && cell.text.lines[0];\n if (line) {\n const iconsWidth = orderByArrowSize + treeArrowSize;\n const lineX0 = iconsWidth > 0 ? iconsWidth : line.x;\n const lineX1 = line.x + line.width;\n if (leftX + size >= lineX0 && leftX <= lineX1) return;\n }\n }\n drawUnhideIndicator(leftX, topY, size, dir, active);\n }; // end of drawIndicator\n\n let orderIndexPtr = columnOrderIndex - 1;\n const prevColumnIndex = self.orders.columns[orderIndexPtr];\n if (isHiddenColumn(prevColumnIndex)) {\n const active = isActive(prevColumnIndex);\n orderIndex0 = orderIndexPtr;\n orderIndex1 = orderIndexPtr;\n while (--orderIndexPtr >= 0) {\n if (isHiddenColumn(self.orders.columns[orderIndexPtr]))\n orderIndex0 = orderIndexPtr;\n else break;\n }\n drawIndicator(cellX, 'r', active);\n }\n\n orderIndexPtr = columnOrderIndex + 1;\n const nextColumnIndex = self.orders.columns[orderIndexPtr];\n if (isHiddenColumn(nextColumnIndex)) {\n const active = isActive(nextColumnIndex);\n orderIndex0 = orderIndexPtr;\n orderIndex1 = orderIndexPtr;\n while (++orderIndexPtr < self.orders.columns.length) {\n if (isHiddenColumn(self.orders.columns[orderIndexPtr]))\n orderIndex1 = orderIndexPtr;\n else break;\n }\n const indicatorX = x + cell.width - size;\n drawIndicator(indicatorX, 'l', active);\n }\n }\n //#endregion draw unhide indicator for column headers\n\n //#region draw unhide indicator for row headers\n if (\n isRowHeader &&\n self.attributes.showUnhideRowsIndicator &&\n self.hiddenRowRanges.length > 0\n ) {\n // Leo's comment:\n // from the first row to the last row, `rowIndex` is from 0 to the count of rows\n // but `boundRowIndex` can be disordered if there are any ordered columns or filtered columns\n // Like this statement:\n // console.log(rowIndex, cell.boundRowIndex, cell.formattedValue);\n // can output the result like this:\n // 0 1 '2'\n // 1 3 '4'\n const hovered = self.hovers.unhideIndicator;\n const size = self.style.unhideIndicatorSize;\n const leftX = cell.x + cell.width - size - 2;\n const cellY = y;\n const topIndicators = {};\n const bottomIndicators = {};\n self.hiddenRowRanges.forEach((it) => {\n topIndicators[it[0] - 1] = it;\n bottomIndicators[it[1] + 1] = it;\n });\n\n const rowIndex = cell.rowIndex + currentRowIndexOffset;\n const isActive = () =>\n hovered &&\n (hovered.dir === 't' || hovered.dir === 'b') &&\n rowIndex >= hovered.orderIndex0 - 1 &&\n rowIndex <= hovered.orderIndex1 + 1;\n\n let orderIndex0, orderIndex1;\n const drawIndicator = (topY, dir, active) => {\n self.visibleUnhideIndicators.push({\n x: leftX - 1,\n y: topY - 1,\n x2: leftX + size + 2,\n y2: topY + size + 2,\n orderIndex0,\n orderIndex1,\n dir,\n });\n drawUnhideIndicator(leftX, topY, size, dir, active);\n }; // end of drawIndicator\n\n let matched = topIndicators[rowIndex];\n if (matched) {\n const indicatorY = cellY + cell.height - size;\n [orderIndex0, orderIndex1] = matched;\n drawIndicator(indicatorY, 't', isActive());\n }\n matched = bottomIndicators[rowIndex];\n if (matched) {\n const indicatorY = cellY;\n [orderIndex0, orderIndex1] = matched;\n drawIndicator(indicatorY, 'b', isActive());\n }\n }\n //#endregion draw unhide indicator for row headers\n\n x += cell.width + (bc ? 0 : self.style.cellBorderWidth);\n return cell.width;\n }; // end of drawEach\n }\n function drawFilterButton(cell, ev) {\n var posX = cell.x + cell.width - self.style.filterButtonWidth - 1;\n var posY = cell.y + cell.height - self.style.filterButtonHeight - 2;\n if (self.dispatchEvent('beforerenderfilterbutton', ev)) {\n return;\n }\n self.ctx.save();\n self.ctx.strokeStyle = self.style.filterButtonBorderColor;\n self.ctx.fillStyle = self.style.filterButtonBackgroundColor;\n if (cell.openedFilter) {\n self.ctx.fillStyle = self.style.filterButtonActiveBackgroundColor;\n } else if (cell.hovered && self.hovers.onFilterButton) {\n self.ctx.fillStyle = self.style.filterButtonHoverBackgroundColor;\n }\n radiusRect(\n posX,\n posY,\n self.style.filterButtonWidth,\n self.style.filterButtonHeight,\n self.style.filterButtonBorderRadius,\n );\n self.ctx.stroke();\n self.ctx.fill();\n drawFilterButtonArrow(posX, posY);\n self.ctx.clip();\n self.dispatchEvent('afterrenderfilterbutton', ev);\n self.ctx.restore();\n }\n function drawRowHeader(rowData, rowIndex, rowOrderIndex) {\n if (self.attributes.showRowHeaders) {\n x = 0;\n\n // When filtering we'd like to display the actual row numbers,\n // as it is in the unfiltered data, instead of simply the viewed\n // row index + 1. If rowIndex > viewData.length, it's a new row\n // added to the end, and we want to render that new row's number\n let filteredRowNumber;\n if (self.viewData && rowIndex < self.viewData.length)\n filteredRowNumber =\n self.getBoundRowIndexFromViewRowIndex(rowIndex) + 1;\n else\n filteredRowNumber = self.originalData\n ? self.originalData.length + 1\n : rowOrderIndex + 1;\n\n let rowHeaderValue =\n self.hasActiveFilters() || self.hasCollapsedRowGroup()\n ? filteredRowNumber\n : rowIndex + 1;\n rowHeaderValue += currentRowIndexOffset;\n\n const rowHeaderCell = { rowHeaderCell: rowHeaderValue };\n const headerDescription = {\n name: 'rowHeaderCell',\n width: self.sizes.columns[-1] || self.style.rowHeaderCellWidth,\n style: 'rowHeaderCell',\n type: 'string',\n data: rowHeaderValue,\n index: -1,\n };\n rowOpen = self.openChildren[rowIndex];\n drawCell(rowHeaderCell, rowOrderIndex, rowIndex)(\n headerDescription,\n -1,\n -1,\n );\n\n if (\n rowIndexOffsetByHiddenRows[0] &&\n rowHeaderValue >= rowIndexOffsetByHiddenRows[0].from\n ) {\n const { plus } = rowIndexOffsetByHiddenRows.shift();\n currentRowIndexOffset += plus;\n }\n }\n }\n function drawHeaders() {\n var d,\n g = schema.length,\n i,\n o,\n columnHeaderCell,\n header,\n nonFrozenHeaderWidth;\n function drawHeaderColumnRange(start, end) {\n end = Math.min(end, g);\n for (o = start; o < end; o += 1) {\n i = self.orders.columns[o];\n header = schema[i];\n if (!header.hidden && !isColumnCollapsedByGroup(o)) {\n d = {\n title: header.title,\n name: header.name,\n width: header.width || self.style.cellWidth,\n style: 'columnHeaderCell',\n type: 'string',\n index: o,\n order: i,\n };\n columnHeaderCell = {\n columnHeaderCell: header.title || header.name,\n };\n x += drawCell(columnHeaderCell, -1, -1)(d, i, o);\n if (x > self.width + self.scrollBox.scrollLeft) {\n break;\n }\n }\n }\n }\n rowHeaders.forEach(function (rArgs, rhIndex) {\n y = rArgs[3];\n cellHeight = rArgs[4];\n if (rhIndex === self.frozenRow) {\n self.ctx.save();\n radiusRect(\n 0,\n self.lastFrozenRowPixel,\n self.width,\n self.height - self.lastFrozenRowPixel,\n 0,\n );\n self.ctx.clip();\n }\n drawRowHeader(rArgs[0], rArgs[1], rArgs[2]);\n });\n self.ctx.restore();\n if (self.attributes.showColumnHeaders) {\n x =\n -self.scrollBox.scrollLeft +\n self.scrollPixelLeft +\n self.style.columnHeaderCellBorderWidth;\n if (self.attributes.showRowHeaders) {\n x += rowHeaderCellWidth;\n }\n y = 0;\n // cell height might have changed during drawing\n cellHeight = self.getColumnHeaderCellHeight();\n drawHeaderColumnRange(self.scrollIndexLeft, g);\n nonFrozenHeaderWidth = x;\n x = self.style.columnHeaderCellBorderWidth;\n if (self.attributes.showRowHeaders) {\n x += rowHeaderCellWidth;\n }\n drawHeaderColumnRange(0, self.frozenColumn);\n // fill in the space right of the headers\n x = nonFrozenHeaderWidth;\n if (x < w) {\n c = {\n name: '',\n width: self.style.scrollBarWidth,\n style: 'columnHeaderCellCap',\n isColumnHeaderCell: true,\n isColumnHeaderCellCap: true,\n type: 'string',\n index: schema.length,\n };\n drawCell({ endCap: '' }, -1, -1)(c, -1, -1);\n }\n // fill in the space right of the headers\n if (self.attributes.showRowHeaders) {\n cornerCell = { cornerCell: '' };\n x = 0;\n c = {\n name: 'cornerCell',\n width: self.style.rowHeaderCellWidth,\n style: 'cornerCell',\n type: 'string',\n index: -1,\n };\n drawCell(cornerCell, -1, -1)(c, -1, -1);\n }\n }\n }\n function drawRow(rowOrderIndex, rowIndex) {\n var headerIndex,\n treeHeight,\n rowSansTreeHeight,\n columnOrderIndex,\n g = schema.length;\n if (y - cellHeight * 2 > h) {\n return false;\n }\n rowData = viewData[rowOrderIndex];\n rowOpen = self.openChildren[rowOrderIndex];\n rowSansTreeHeight =\n (self.sizes.rows[rowOrderIndex] || self.style.cellHeight) * self.scale;\n treeHeight = (rowOpen ? self.sizes.trees[rowOrderIndex] : 0) * self.scale;\n rowHeight = rowSansTreeHeight + treeHeight;\n if (y < -rowHeight) {\n return false;\n }\n if (self.attributes.showRowHeaders) {\n x += rowHeaderCellWidth;\n }\n cellHeight = rowHeight;\n //draw normal columns\n for (\n columnOrderIndex = self.scrollIndexLeft;\n columnOrderIndex < g;\n columnOrderIndex += 1\n ) {\n if (!isColumnCollapsedByGroup(columnOrderIndex)) {\n headerIndex = self.orders.columns[columnOrderIndex];\n x += drawCell(rowData, rowOrderIndex, rowIndex)(\n schema[headerIndex],\n headerIndex,\n columnOrderIndex,\n );\n }\n if (x > self.width) {\n self.scrollIndexRight = columnOrderIndex;\n self.scrollPixelRight = x;\n break;\n }\n }\n //draw frozen columns\n x = 1;\n if (self.attributes.showRowHeaders) {\n x += rowHeaderCellWidth;\n }\n for (\n columnOrderIndex = 0;\n columnOrderIndex < self.frozenColumn;\n columnOrderIndex += 1\n ) {\n if (!isColumnCollapsedByGroup(columnOrderIndex)) {\n headerIndex = self.orders.columns[columnOrderIndex];\n x += drawCell(rowData, rowOrderIndex, rowIndex)(\n schema[headerIndex],\n headerIndex,\n columnOrderIndex,\n );\n }\n if (x > self.width) {\n break;\n }\n }\n self.lastFrozenColumnPixel = x;\n // cell height might have changed during drawing\n cellHeight = rowHeight;\n x =\n -self.scrollBox.scrollLeft +\n self.scrollPixelLeft +\n self.style.cellBorderWidth;\n // don't draw a tree for the new row\n treeGrid = self.childGrids[rowOrderIndex];\n if (rowOrderIndex !== viewData.length && rowOpen) {\n treeGrid.visible = true;\n treeGrid.parentNode = {\n offsetTop: y + rowSansTreeHeight + self.canvasOffsetTop,\n offsetLeft: rowHeaderCellWidth - 1 + self.canvasOffsetLeft,\n offsetHeight: treeHeight,\n offsetWidth:\n self.width - rowHeaderCellWidth - self.style.scrollBarWidth - 1,\n offsetParent: self.intf.parentNode,\n parentNode: self.intf.parentNode,\n style: self.style,\n nodeType: 'canvas-datagrid-tree',\n scrollTop: self.scrollBox.scrollTop,\n scrollLeft: self.scrollBox.scrollLeft,\n rowIndex: rowOrderIndex,\n columnGroupsAreaHeight: columnGroupsAreaHeight,\n rowGroupsAreaWidth: rowGroupsAreaWidth,\n };\n if (self.intf.parentNode) {\n const {\n columnGroupsAreaHeight,\n rowGroupsAreaWidth,\n } = self.intf.parentNode;\n treeGrid.parentNode.columnGroupsAreaHeight +=\n columnGroupsAreaHeight || 0;\n treeGrid.parentNode.rowGroupsAreaWidth += rowGroupsAreaWidth || 0;\n }\n self.visibleCells.unshift({\n rowIndex: rowOrderIndex,\n columnIndex: 0,\n y: treeGrid.parentNode.offsetTop,\n x: treeGrid.parentNode.offsetLeft,\n height: treeGrid.height,\n width: treeGrid.width,\n style: 'tree-grid',\n type: treeGrid.parentNode.nodeType,\n });\n treeGrid.draw();\n } else if (treeGrid) {\n treeGrid.parentNode.offsetHeight = 0;\n delete self.sizes.trees[rowOrderIndex];\n }\n rowHeaders.push([rowData, rowOrderIndex, rowIndex, y, rowHeight]);\n self.visibleRowHeights[rowOrderIndex] = rowHeight;\n y += cellHeight + (bc ? 0 : self.style.cellBorderWidth);\n return true;\n }\n function initDraw() {\n self.visibleRows = [];\n schema = self.getSchema();\n self.visibleCells = [];\n self.visibleGroups = [];\n self.visibleUnhideIndicators = [];\n self.canvasOffsetTop = self.isChildGrid ? self.parentNode.offsetTop : 0.5;\n self.canvasOffsetLeft = self.isChildGrid\n ? self.parentNode.offsetLeft\n : -0.5;\n h = self.height;\n w = self.width;\n\n // patch for first row being hidden\n const firstRowIndexOffset = rowIndexOffsetByHiddenRows[0];\n if (firstRowIndexOffset && firstRowIndexOffset.from === 0) {\n currentRowIndexOffset = firstRowIndexOffset.plus;\n rowIndexOffsetByHiddenRows.shift();\n }\n }\n function drawBackground() {\n radiusRect(0, 0, w, h, 0);\n self.ctx.clip();\n self.ctx.fillStyle = self.style.gridBackgroundColor;\n fillRect(0, 0, w, h);\n }\n function initGroupArea() {\n self.ctx.translate(rowGroupsAreaWidth, columnGroupsAreaHeight);\n }\n function drawGroupArea() {\n const mx = rowGroupsAreaWidth;\n const my = columnGroupsAreaHeight;\n const frozenColumnsWidth = getFrozenColumnsWidth();\n const frozenRowsHeight =\n rowGroupsFrozenInfo.y + rowGroupsFrozenInfo.h - columnHeaderCellHeight;\n const onTheLeft = self.attributes.columnGroupIndicatorPosition === 'left';\n const onTheTop = self.attributes.rowGroupIndicatorPosition === 'top';\n\n /** @type {CanvasRenderingContext2D} */\n const ctx = self.ctx;\n ctx.save();\n ctx.fillStyle = self.style.groupingAreaBackgroundColor;\n fillRect(0, -my, w, my);\n fillRect(-mx, -my, mx, h);\n ctx.restore();\n\n //#region Columns Grouping\n /** it extends `self.groupedRows` */\n const groupedColumns = [];\n for (let row = 0; row < self.groupedColumns.length; row++) {\n const groups = self.groupedColumns[row];\n for (let j = 0; j < groups.length; j++) {\n groupedColumns.push(Object.assign({ row }, groups[j]));\n }\n }\n if (groupedColumns.length > 0) {\n const rowHeight = self.style.columnGroupRowHeight;\n const toggleHandleSize = rowHeight * 0.5;\n const toggleHandlePadding = (rowHeight - toggleHandleSize) * 0.5;\n\n for (let i = 0; i < groupedColumns.length; i++) {\n const group = groupedColumns[i];\n const { row, collapsed } = group;\n\n const topY = -my + row * rowHeight;\n const centerY = topY + rowHeight * 0.5;\n const bottomY = topY + rowHeight - toggleHandlePadding;\n const leftmostX =\n rowHeaderCellWidth - toggleHandleSize - toggleHandlePadding;\n\n const drawGroupHandleAtX = (x) =>\n drawGroupHandle(\n x,\n topY + toggleHandlePadding,\n toggleHandleSize,\n group.collapsed,\n );\n const pushToVisibleGroups = (leftX, rightX) =>\n self.visibleGroups.push({\n type: 'c',\n collapsed,\n from: group.from,\n to: group.to,\n row,\n x: leftX + mx,\n y: topY + my,\n x2: rightX + mx,\n y2: bottomY + my,\n });\n\n //#region check the relationship between this group and frozen columns\n const crossTheFrozen =\n group.from < self.frozenColumn && group.to >= self.frozenColumn;\n const notInFrozen = group.from >= self.frozenColumn;\n //#endregion\n\n if (collapsed) {\n let leftX = leftmostX + toggleHandleSize;\n // This group is not sticking on the first column\n if (group.from > 0) {\n let colIndex = group.to + 1;\n let col = columnGroupsRectInfo[colIndex];\n if (!col) {\n colIndex = group.from - 1;\n col = columnGroupsRectInfo[colIndex];\n if (!col) continue; // don't draw this group indicator because it is invisible\n leftX = col.x + col.w - toggleHandleSize * 0.5;\n } else {\n leftX = col.x + toggleHandlePadding;\n }\n if (colIndex >= self.frozenColumn) {\n const compare =\n frozenColumnsWidth + rowHeaderCellWidth - toggleHandlePadding;\n // don't draw this group indicator because it is hidden by frozen columns\n if (leftX < compare) continue;\n }\n }\n const rightX = leftX + toggleHandleSize;\n ctx.save();\n ctx.strokeStyle = self.style.groupIndicatorColor;\n ctx.fillStyle = self.style.groupIndicatorBackgroundColor;\n drawGroupHandleAtX(leftX);\n ctx.restore();\n pushToVisibleGroups(leftX, rightX);\n } // end of collapsed group\n\n /** @type {number} pointer for loop */\n let ptr;\n let left = columnGroupsRectInfo[group.from];\n let right = columnGroupsRectInfo[group.to];\n\n let containsBegining = true;\n let containsEnd = true;\n ptr = group.from;\n while (!left && ptr < group.to) {\n left = columnGroupsRectInfo[++ptr];\n containsBegining = false;\n }\n ptr = group.to;\n while (!right && ptr > group.from) {\n right = columnGroupsRectInfo[--ptr];\n containsEnd = false;\n }\n if (!left || !right) continue;\n let rightX = right.x + right.w;\n let leftX = left.x;\n if (crossTheFrozen) {\n const rightCompare = columnGroupsRectInfo[self.frozenColumn - 1];\n if (rightCompare) {\n let compareX = rightCompare.x + rightCompare.w;\n if (!onTheLeft) compareX += toggleHandleSize;\n if (compareX >= rightX) {\n right = rightCompare;\n rightX = right.x + right.w;\n containsEnd = false;\n }\n }\n }\n\n let minLeftX =\n rowHeaderCellWidth + (notInFrozen ? frozenColumnsWidth : 0);\n if (rightX + (onTheLeft ? 0 : toggleHandleSize) < minLeftX) continue;\n\n rightX -= toggleHandlePadding;\n leftX += toggleHandlePadding;\n\n ctx.save();\n ctx.strokeStyle = self.style.groupIndicatorColor;\n ctx.fillStyle = self.style.groupIndicatorBackgroundColor;\n const lineCoords = [];\n\n if (onTheLeft) {\n // avoid lines from two groups be overlapping\n minLeftX += toggleHandlePadding * 2;\n if (leftX < minLeftX) leftX = minLeftX;\n if (group.from === 0) leftX -= toggleHandlePadding * 2;\n if (rightX >= leftX) {\n lineCoords.push(leftX, centerY, rightX, centerY);\n if (containsEnd) lineCoords.push(rightX, bottomY);\n } else {\n rightX = leftX;\n }\n\n leftX -= toggleHandleSize;\n drawGroupHandleAtX(leftX);\n // add more clickable area into `visibleGroups`\n rightX += toggleHandlePadding - 1;\n } else {\n // handle on the right\n if (leftX < minLeftX) leftX = minLeftX;\n if (group.from === 0) leftX -= toggleHandlePadding * 2;\n if (containsEnd) {\n if (group.to === self.frozenColumn - 1) {\n rightX -= toggleHandleSize;\n } else {\n rightX += toggleHandlePadding * 2;\n }\n drawGroupHandleAtX(rightX);\n }\n if (leftX > rightX) {\n leftX = rightX;\n } else {\n if (group.from === 0) {\n containsBegining = true;\n leftX = leftmostX + toggleHandleSize;\n }\n if (containsBegining) lineCoords.push(leftX, bottomY);\n lineCoords.push(leftX, centerY, rightX, centerY);\n }\n\n // add more clickable area into `visibleGroups`\n leftX -= toggleHandlePadding + 1;\n if (containsEnd) rightX += toggleHandleSize;\n }\n drawLines(lineCoords);\n ctx.restore();\n pushToVisibleGroups(leftX, rightX);\n }\n }\n //#endregion Columns Grouping\n\n //#region Rows Grouping\n /** it extends `self.groupedRows` */\n const groupedRows = [];\n for (let col = 0; col < self.groupedRows.length; col++) {\n const groups = self.groupedRows[col];\n for (let j = 0; j < groups.length; j++) {\n groupedRows.push(Object.assign({ col }, groups[j]));\n }\n }\n if (groupedRows.length > 0) {\n const colWidth = self.style.rowGroupColumnWidth;\n const toggleHandleSize = colWidth * 0.5;\n const toggleHandlePadding = (colWidth - toggleHandleSize) * 0.5;\n\n for (let i = 0; i < groupedRows.length; i++) {\n const group = groupedRows[i];\n const { col, collapsed } = group;\n\n const leftX = -mx + col * colWidth;\n const centerX = leftX + colWidth * 0.5;\n const rightX = leftX + colWidth - toggleHandlePadding;\n const topmostY =\n columnHeaderCellHeight - toggleHandleSize - toggleHandlePadding;\n\n const drawGroupHandleAtY = (y) =>\n drawGroupHandle(\n leftX + toggleHandlePadding,\n y,\n toggleHandleSize,\n group.collapsed,\n );\n const pushToVisibleGroups = (topY, bottomY) =>\n self.visibleGroups.push({\n type: 'r',\n collapsed,\n from: group.from,\n to: group.to,\n col,\n x: leftX + mx,\n y: topY + my,\n x2: rightX + mx,\n y2: bottomY + my,\n });\n\n //#region check the relationship between this group and frozen columns\n const crossTheFrozen =\n group.from < self.frozenRow && group.to >= self.frozenRow;\n const notInFrozen = group.from >= self.frozenRow;\n //#endregion\n\n if (collapsed) {\n let topY = topmostY + toggleHandleSize;\n // This group is not sticking on the first column\n if (group.from > 0) {\n let rowIndex = group.to + 1;\n let row = rowGroupsRectInfo[rowIndex];\n if (!row) {\n rowIndex = group.from - 1;\n row = rowGroupsRectInfo[rowIndex];\n if (!row) continue; // don't draw this group indicator because it is invisible\n topY = row.y + row.h - toggleHandleSize * 0.5;\n } else {\n topY = row.y;\n }\n if (rowIndex >= self.frozenRow) {\n const compare =\n frozenRowsHeight +\n columnHeaderCellHeight -\n toggleHandlePadding;\n // don't draw this group indicator because it is hidden by frozen columns\n if (topY < compare) continue;\n }\n }\n const bottomY = topY + toggleHandleSize;\n ctx.save();\n ctx.strokeStyle = self.style.groupIndicatorColor;\n ctx.fillStyle = self.style.groupIndicatorBackgroundColor;\n drawGroupHandleAtY(topY);\n ctx.restore();\n pushToVisibleGroups(topY, bottomY);\n } // end of collapsed group\n\n /** @type {number} pointer for loop */\n let ptr;\n let top = rowGroupsRectInfo[group.from];\n let bottom = rowGroupsRectInfo[group.to];\n\n let containsBegining = true;\n let containsEnd = true;\n ptr = group.from;\n while (!top && ptr < group.to) {\n top = rowGroupsRectInfo[++ptr];\n containsBegining = false;\n }\n ptr = group.to;\n while (!bottom && ptr > group.from) {\n bottom = rowGroupsRectInfo[--ptr];\n containsEnd = false;\n }\n if (!top || !bottom) continue;\n let bottomY = bottom.y + bottom.h;\n let topY = top.y;\n if (crossTheFrozen) {\n const bottomCompare = rowGroupsRectInfo[self.frozenRow - 1];\n if (bottomCompare) {\n let compareY = bottomCompare.y + bottomCompare.h;\n if (!onTheTop) compareY += toggleHandleSize;\n if (compareY >= bottomY) {\n bottom = bottomCompare;\n bottomY = bottom.y + bottom.h;\n containsEnd = false;\n }\n }\n }\n\n let minTopY =\n columnHeaderCellHeight + (notInFrozen ? frozenRowsHeight : 0);\n if (bottomY + (onTheTop ? 0 : toggleHandleSize) < minTopY) continue;\n\n bottomY -= toggleHandlePadding;\n topY += toggleHandlePadding;\n\n ctx.save();\n ctx.strokeStyle = self.style.groupIndicatorColor;\n ctx.fillStyle = self.style.groupIndicatorBackgroundColor;\n const lineCoords = [];\n\n if (onTheTop) {\n // avoid lines from two groups be overlapping\n minTopY += toggleHandlePadding * 2;\n if (topY < minTopY) topY = minTopY;\n if (group.from === 0) topY -= toggleHandlePadding * 2;\n if (bottomY >= topY) {\n lineCoords.push(centerX, topY, centerX, bottomY);\n if (containsEnd) lineCoords.push(rightX, bottomY);\n } else {\n bottomY = topY;\n }\n\n topY -= toggleHandleSize;\n drawGroupHandleAtY(topY);\n\n // add more clickable area into `visibleGroups`\n bottomY += toggleHandlePadding - 1;\n } else {\n // handle on the bottom\n if (topY < minTopY) topY = minTopY;\n if (group.from === 0) topY -= toggleHandlePadding * 2;\n if (containsEnd) {\n if (group.to === self.frozenRow - 1) {\n bottomY -= toggleHandleSize;\n } else {\n // bottomY += toggleHandlePadding * 2;\n }\n drawGroupHandleAtY(bottomY);\n }\n if (topY > bottomY) {\n topY = bottomY;\n } else {\n if (group.from === 0) {\n containsBegining = true;\n topY = topmostY + toggleHandleSize;\n }\n if (containsBegining) lineCoords.push(rightX, topY);\n lineCoords.push(centerX, topY, centerX, bottomY);\n // add more clickable area into `visibleGroups`\n topY -= toggleHandlePadding + 1;\n }\n // add more clickable area into `visibleGroups`\n if (containsEnd) bottomY += toggleHandleSize;\n }\n drawLines(lineCoords);\n ctx.restore();\n pushToVisibleGroups(topY, bottomY);\n }\n }\n //#endregion Rows Grouping\n }\n function drawFrozenRows() {\n var rowOrderIndex,\n ln = Math.min(viewData.length, self.frozenRow);\n x =\n -self.scrollBox.scrollLeft +\n self.scrollPixelLeft +\n self.style.cellBorderWidth;\n y = columnHeaderCellHeight;\n for (rowIndex = 0; rowIndex < ln; rowIndex += 1) {\n rowOrderIndex = self.orders.rows[rowIndex];\n if (!drawRow(rowOrderIndex, rowIndex)) {\n break;\n }\n }\n if (self.attributes.allowFreezingRows) {\n // HACK great, another stupid magic number.\n // Background will appear as a 0.5px artifact behind the row freeze bar without this hack\n if (y > columnHeaderCellHeight) y += self.style.frozenMarkerWidth;\n y += self.style.frozenMarkerBorderWidth - 0.4999999999;\n }\n self.lastFrozenRowPixel = y;\n }\n function drawRows() {\n self.ctx.save();\n if (self.frozenRow > 0) {\n radiusRect(\n 0,\n self.lastFrozenRowPixel,\n self.width,\n self.height - self.lastFrozenRowPixel,\n 0,\n );\n self.ctx.clip();\n }\n var columnOrderIndex,\n rowOrderIndex,\n headerIndex,\n g = schema.length;\n x =\n -self.scrollBox.scrollLeft +\n self.scrollPixelLeft +\n self.style.cellBorderWidth;\n if (!self.attributes.snapToRow) {\n y +=\n -self.scrollBox.scrollTop +\n self.scrollPixelTop +\n self.style.cellBorderWidth;\n }\n for (\n rowIndex = self.frozenRow + self.scrollIndexTop;\n rowIndex < l;\n rowIndex += 1\n ) {\n rowOrderIndex = self.orders.rows[rowIndex];\n self.scrollIndexBottom = rowIndex;\n self.scrollPixelBottom = y;\n if (\n self.cellTree.rows.length > 0 &&\n Object.keys(self.cellTree.rows[rowOrderIndex]).length > 0 &&\n self.cellTree.rows[rowOrderIndex].hide\n )\n continue;\n if (!drawRow(rowOrderIndex, rowIndex)) {\n break;\n }\n }\n if (self.attributes.showNewRow) {\n if (self.attributes.showRowHeaders) {\n x += rowHeaderCellWidth;\n }\n rowHeight = cellHeight = self.style.cellHeight;\n rowOpen = false;\n for (\n columnOrderIndex = self.scrollIndexLeft;\n columnOrderIndex < g;\n columnOrderIndex += 1\n ) {\n if (!isColumnCollapsedByGroup(columnOrderIndex)) {\n headerIndex = self.orders.columns[columnOrderIndex];\n x += drawCell(self.newRow, viewData.length, viewData.length)(\n schema[headerIndex],\n headerIndex,\n columnOrderIndex,\n );\n }\n if (x > self.width + self.scrollBox.scrollLeft) {\n break;\n }\n }\n rowHeaders.push([\n self.newRow,\n viewData.length,\n viewData.length,\n y,\n rowHeight,\n ]);\n }\n self.ctx.restore();\n }\n function drawMoveMarkers() {\n if (!self.movingSelection) {\n return;\n }\n self.ctx.lineWidth = self.style.moveOverlayBorderWidth;\n self.ctx.strokeStyle = self.style.moveOverlayBorderColor;\n self.ctx.setLineDash(self.style.moveOverlayBorderSegments);\n moveBorders.forEach(function (c) {\n addBorderLine(c[0], c[1]);\n });\n self.ctx.setLineDash([]);\n }\n function drawReorderMarkers() {\n if (!self.reorderObject) {\n return;\n }\n var b = {\n height: self.reorderObject.height,\n width: self.reorderObject.width,\n x: self.reorderObject.x + self.reorderObject.dragOffset.x,\n y: self.reorderObject.y + self.reorderObject.dragOffset.y,\n },\n m = {\n width: w,\n height: h,\n x: 0,\n y: 0,\n };\n self.ctx.fillStyle = self.style.reorderMarkerBackgroundColor;\n self.ctx.lineWidth = self.style.reorderMarkerBorderWidth;\n self.ctx.strokeStyle = self.style.reorderMarkerBorderColor;\n if (self.dragMode === 'row-reorder') {\n for (var k = 0; k < self.selections.length; k++) {\n if (!self.selections[k] || k == self.reorderObject.rowIndex) continue;\n b.height += self.getRowHeight(k);\n }\n b.width = w;\n b.x = 0;\n m.width = w;\n m.height = self.currentCell.height;\n m.y = self.currentCell.y;\n fillRect(b.x, b.y, b.width, b.height);\n strokeRect(b.x, b.y, b.width, b.height);\n self.ctx.lineWidth = self.style.reorderMarkerIndexBorderWidth;\n self.ctx.strokeStyle = self.style.reorderMarkerIndexBorderColor;\n if (\n self.selectedRows.indexOf(self.reorderTarget.sortRowIndex) === -1 &&\n self.currentCell.rowIndex !== self.reorderObject.rowIndex &&\n self.currentCell.rowIndex > -1 &&\n self.currentCell.rowIndex < l\n ) {\n addBorderLine(\n m,\n self.reorderTarget.sortRowIndex > self.reorderObject.sortRowIndex\n ? 'b'\n : 't',\n );\n }\n } else if (self.dragMode === 'column-reorder' && self.reorderObject) {\n var selectedColumns = self.selections[0];\n if (selectedColumns) {\n for (var k = 1; k < selectedColumns.length; k++) {\n b.width += self.getColumnWidth(\n self.orders.columns[selectedColumns[k]],\n );\n }\n }\n b.height = h;\n b.y = 0;\n m.height = h;\n m.width = self.currentCell.width;\n m.y = 0;\n m.x = self.currentCell.x;\n fillRect(b.x, b.y, b.width, b.height);\n strokeRect(b.x, b.y, b.width, b.height);\n self.ctx.lineWidth = self.style.reorderMarkerIndexBorderWidth;\n self.ctx.strokeStyle = self.style.reorderMarkerIndexBorderColor;\n if (\n self.selectedColumns.indexOf(self.reorderTarget.sortColumnIndex) ===\n -1 &&\n self.currentCell.sortColumnIndex !==\n self.reorderObject.sortColumnIndex &&\n self.reorderTarget.columnIndex !== self.reorderObject.columnIndex &&\n self.currentCell.sortColumnIndex > -1 &&\n self.currentCell.sortColumnIndex < schema.length\n ) {\n addBorderLine(\n m,\n self.reorderTarget.columnIndex > self.reorderObject.columnIndex\n ? 'r'\n : 'l',\n );\n }\n }\n }\n function drawBorder() {\n self.ctx.lineWidth = self.style.gridBorderWidth;\n self.ctx.strokeStyle = self.style.gridBorderColor;\n strokeRect(0, 0, self.width, self.height);\n }\n function drawSelectionBorders() {\n self.ctx.lineWidth = self.style.selectionOverlayBorderWidth;\n self.ctx.strokeStyle = self.style.selectionOverlayBorderColor;\n function dsb(c) {\n addBorderLine(c[0], c[1]);\n }\n selectionBorders\n .filter(function (c) {\n return (\n c[0].rowIndex < self.frozenRow &&\n c[0].columnIndex < self.frozenColumn\n );\n })\n .forEach(dsb);\n self.ctx.save();\n clipFrozenArea(0);\n selectionBorders\n .filter(function (c) {\n return (\n c[0].rowIndex >= self.frozenRow &&\n c[0].columnIndex >= self.frozenColumn\n );\n })\n .forEach(dsb);\n self.ctx.restore();\n self.ctx.save();\n clipFrozenArea(1);\n selectionBorders\n .filter(function (c) {\n return (\n c[0].rowIndex >= self.frozenRow &&\n c[0].columnIndex < self.frozenColumn\n );\n })\n .forEach(dsb);\n self.ctx.restore();\n self.ctx.save();\n clipFrozenArea(2);\n selectionBorders\n .filter(function (c) {\n return (\n c[0].rowIndex < self.frozenRow &&\n c[0].columnIndex >= self.frozenColumn\n );\n })\n .forEach(dsb);\n self.ctx.restore();\n }\n function drawSelectionHandles() {\n if (self.mobile || self.attributes.allowMovingSelection) {\n self.ctx.lineWidth = self.style.selectionHandleBorderWidth;\n self.ctx.strokeStyle = self.style.selectionHandleBorderColor;\n self.ctx.fillStyle = self.style.selectionHandleColor;\n selectionHandles.forEach(function (c) {\n addselectionHandle(c[0], c[1]);\n var az = self.attributes.touchSelectHandleZone / 2,\n ax =\n c[0].x + (c[1] === 'tl' || c[1] === 'bl' ? 0 : c[0].width) - az,\n ay =\n c[0].y + (c[1] === 'bl' || c[1] === 'br' ? c[0].height : 0) - az;\n self.visibleCells.unshift({\n x: ax,\n y: ay,\n height: self.style.selectionHandleSize + az,\n width: self.style.selectionHandleSize + az,\n style: 'selection-handle-' + c[1],\n });\n });\n }\n }\n function drawActiveCell() {\n if (!aCell) {\n return;\n }\n self.ctx.save();\n var cl =\n self.activeCell.columnIndex + 1 > self.frozenColumn ||\n self.activeCell.rowIndex + 1 > self.frozenRow,\n acx = cl ? self.lastFrozenColumnPixel : 0,\n acy = cl ? self.lastFrozenRowPixel : 0,\n acw = cl ? self.width - self.lastFrozenColumnPixel : self.width,\n ach = cl ? self.height - self.lastFrozenRowPixel : self.height;\n radiusRect(acx, acy, acw, ach, 0);\n self.ctx.clip();\n if (self.attributes.selectionMode === 'row') {\n if (self.activeCell && self.activeCell.rowIndex === aCell.rowIndex) {\n self.ctx.lineWidth = self.style.activeCellOverlayBorderWidth;\n self.ctx.strokeStyle = self.style.activeCellOverlayBorderColor;\n strokeRect(\n 1,\n aCell.y,\n self.getHeaderWidth() + rowHeaderCellWidth,\n self.visibleRowHeights[aCell.rowIndex],\n );\n }\n } else {\n self.ctx.lineWidth = self.style.activeCellOverlayBorderWidth;\n self.ctx.strokeStyle = self.style.activeCellOverlayBorderColor;\n strokeRect(aCell.x, aCell.y, aCell.width, aCell.height);\n }\n self.ctx.restore();\n }\n function drawFrozenMarkers() {\n var my = self.lastFrozenRowPixel - self.style.frozenMarkerWidth,\n mx = self.lastFrozenColumnPixel - self.style.frozenMarkerWidth,\n xHover =\n self.currentCell && self.currentCell.style === 'frozen-row-marker',\n yHover =\n self.currentCell && self.currentCell.style === 'frozen-column-marker';\n let rowHeaderCellWidth = self.getRowHeaderCellWidth();\n self.ctx.lineWidth = self.style.frozenMarkerBorderWidth;\n if (self.attributes.allowFreezingColumns) {\n if (\n !self.freezeMarkerPosition ||\n (self.freezeMarkerPosition && self.dragMode === 'frozen-row-marker')\n ) {\n if (mx > self.style.rowHeaderCellWidth) {\n self.ctx.fillStyle = self.style.frozenMarkerColor;\n self.ctx.strokeStyle = self.style.frozenMarkerBorderColor;\n fillRect(mx, 0, self.style.frozenMarkerWidth, self.height);\n strokeRect(mx, 0, self.style.frozenMarkerWidth, self.height);\n }\n self.ctx.fillStyle = yHover\n ? self.style.frozenMarkerHoverColor\n : self.style.frozenMarkerHeaderColor;\n self.ctx.strokeStyle = yHover\n ? self.style.frozenMarkerHoverBorderColor\n : self.style.frozenMarkerHeaderColor;\n fillRect(\n mx,\n 0,\n self.style.frozenMarkerWidth,\n self.style.columnHeaderCellHeight,\n );\n strokeRect(\n mx,\n 0,\n self.style.frozenMarkerWidth,\n self.style.columnHeaderCellHeight,\n );\n }\n\n if (\n !self.dragStartObject ||\n (self.dragStartObject &&\n self.dragStartObject.style !== 'rowHeaderCell')\n ) {\n self.visibleCells.unshift({\n x: mx,\n y: 0,\n height: self.height,\n width: self.style.frozenMarkerWidth, // + self.style.frozenMarkerBorderWidth,\n style: 'frozen-column-marker',\n });\n }\n }\n if (self.attributes.allowFreezingRows) {\n if (\n !self.freezeMarkerPosition ||\n (self.freezeMarkerPosition &&\n self.dragMode === 'frozen-column-marker')\n ) {\n if (my > rowHeaderCellWidth) {\n self.ctx.fillStyle = self.style.frozenMarkerColor;\n self.ctx.strokeStyle = self.style.frozenMarkerBorderColor;\n fillRect(0, my, self.width, self.style.frozenMarkerWidth);\n strokeRect(0, my, self.width, self.style.frozenMarkerWidth);\n }\n self.ctx.fillStyle = xHover\n ? self.style.frozenMarkerHoverColor\n : self.style.frozenMarkerHeaderColor;\n self.ctx.strokeStyle = xHover\n ? self.style.frozenMarkerHoverBorderColor\n : self.style.frozenMarkerHeaderColor;\n fillRect(0, my, rowHeaderCellWidth, self.style.frozenMarkerWidth);\n strokeRect(0, my, rowHeaderCellWidth, self.style.frozenMarkerWidth);\n }\n var height =\n self.style.frozenMarkerWidth + self.style.frozenMarkerBorderWidth;\n if (\n !self.dragStartObject ||\n (self.dragStartObject &&\n self.dragStartObject.style !== 'columnHeaderCell')\n ) {\n self.visibleCells.unshift({\n x: 0,\n y: my,\n height: height,\n width: self.width,\n style: 'frozen-row-marker',\n });\n }\n rowGroupsFrozenInfo = { y: my, h: height };\n }\n if (self.freezeMarkerPosition) {\n self.ctx.fillStyle = self.style.frozenMarkerActiveColor;\n self.ctx.strokeStyle = self.style.frozenMarkerActiveBorderColor;\n if (self.dragMode === 'frozen-column-marker') {\n let posX = self.freezeMarkerPosition.x;\n let nearCell = self.getCellAt(posX, 0);\n if (self.freezeMarkerPosition.isGrab) posX = mx;\n if (posX > rowHeaderCellWidth) {\n let x =\n nearCell.x -\n self.style.frozenMarkerWidth -\n self.style.frozenMarkerBorderWidth;\n if (posX > x + nearCell.width / 2) x = x + nearCell.width;\n self.ctx.fillStyle = self.style.frozenMarkerColor;\n self.ctx.strokeStyle = self.style.frozenMarkerBorderColor;\n fillRect(x, 0, self.style.frozenMarkerWidth, self.height);\n strokeRect(x, 0, self.style.frozenMarkerWidth, self.height);\n self.ctx.fillStyle = self.style.frozenMarkerHeaderColor;\n self.ctx.strokeStyle = self.style.frozenMarkerHeaderColor;\n fillRect(\n x,\n 0,\n self.style.frozenMarkerWidth,\n self.style.columnHeaderCellHeight,\n );\n strokeRect(\n x,\n 0,\n self.style.frozenMarkerWidth,\n self.style.columnHeaderCellHeight,\n );\n }\n self.ctx.fillStyle = self.style.frozenMarkerActiveHeaderColor;\n self.ctx.strokeStyle = self.style.frozenMarkerActiveBorderColor;\n fillRect(\n posX,\n 0,\n self.style.frozenMarkerWidth,\n self.style.columnHeaderCellHeight,\n );\n strokeRect(\n posX,\n 0,\n self.style.frozenMarkerWidth,\n self.style.columnHeaderCellHeight,\n );\n self.ctx.fillStyle = self.style.frozenMarkerActiveColor;\n fillRect(posX, 0, self.style.frozenMarkerWidth, self.height);\n strokeRect(posX, 0, self.style.frozenMarkerWidth, self.height);\n } else {\n let posY = self.freezeMarkerPosition.y;\n let nearCell = self.getCellAt(0, posY);\n if (self.freezeMarkerPosition.isGrab) posY = my;\n if (posY > self.style.columnHeaderCellHeight) {\n let y =\n nearCell.y -\n self.style.frozenMarkerWidth -\n self.style.frozenMarkerBorderWidth;\n if (posY > y + nearCell.height / 2) y = y + nearCell.height;\n self.ctx.fillStyle = self.style.frozenMarkerColor;\n self.ctx.strokeStyle = self.style.frozenMarkerBorderColor;\n fillRect(0, y, self.width, self.style.frozenMarkerWidth);\n strokeRect(0, y, self.width, self.style.frozenMarkerWidth);\n self.ctx.fillStyle = self.style.frozenMarkerHeaderColor;\n self.ctx.strokeStyle = self.style.frozenMarkerHeaderColor;\n fillRect(0, y, rowHeaderCellWidth, self.style.frozenMarkerWidth);\n strokeRect(0, y, rowHeaderCellWidth, self.style.frozenMarkerWidth);\n }\n self.ctx.fillStyle = self.style.frozenMarkerActiveHeaderColor;\n self.ctx.strokeStyle = self.style.frozenMarkerActiveBorderColor;\n fillRect(0, posY, rowHeaderCellWidth, self.style.frozenMarkerWidth);\n strokeRect(0, posY, rowHeaderCellWidth, self.style.frozenMarkerWidth);\n self.ctx.fillStyle = self.style.frozenMarkerActiveColor;\n fillRect(0, posY, self.width, self.style.frozenMarkerWidth);\n strokeRect(0, posY, self.width, self.style.frozenMarkerWidth);\n }\n }\n }\n function drawPerfLines() {\n if (!self.attributes.showPerformance) {\n return;\n }\n var pw = 250,\n px =\n self.width -\n pw -\n self.style.scrollBarWidth -\n self.style.scrollBarBorderWidth * 2,\n py = columnHeaderCellHeight,\n ph = 100;\n if (scrollDebugCounters.length === 0) {\n scrollDebugCounters = fillArray(0, perfWindowSize, 1, function () {\n return [0, 0];\n });\n }\n if (touchPPSCounters.length === 0) {\n touchPPSCounters = fillArray(0, perfWindowSize, 1, function () {\n return [0, 0];\n });\n }\n if (entityCount.length === 0) {\n entityCount = fillArray(0, perfWindowSize, 1, 0);\n }\n self.ctx.lineWidth = 0.5;\n function dpl(name, perfArr, arrIndex, max, color, useAbs, rowIndex) {\n var v;\n drawPerfLine(pw, ph, px, py, perfArr, arrIndex, max, color, useAbs);\n self.ctx.fillStyle = color;\n fillRect(3 + px, py + 9 + rowIndex * 11, 8, 8);\n self.ctx.fillStyle = self.style.debugPerfChartTextColor;\n v = arrIndex !== undefined ? perfArr[0][arrIndex] : perfArr[0];\n fillText(\n name + ' ' + (isNaN(v) ? 0 : v).toFixed(3),\n 14 + px,\n py + 16 + rowIndex * 11,\n );\n }\n self.ctx.textAlign = 'left';\n self.ctx.font = self.style.debugFont;\n self.ctx.fillStyle = self.style.debugPerfChartBackground;\n fillRect(px, py, pw, ph);\n [\n [\n 'Scroll Height',\n scrollDebugCounters,\n 0,\n self.scrollBox.scrollHeight,\n self.style.debugScrollHeightColor,\n false,\n ],\n [\n 'Scroll Width',\n scrollDebugCounters,\n 1,\n self.scrollBox.scrollWidth,\n self.style.debugScrollWidthColor,\n false,\n ],\n [\n 'Performance',\n perfCounters,\n undefined,\n 200,\n self.style.debugPerformanceColor,\n false,\n ],\n [\n 'Entities',\n entityCount,\n undefined,\n 1500,\n self.style.debugEntitiesColor,\n false,\n ],\n [\n 'TouchPPSX',\n touchPPSCounters,\n 0,\n 1000,\n self.style.debugTouchPPSXColor,\n true,\n ],\n [\n 'TouchPPSY',\n touchPPSCounters,\n 1,\n 1000,\n self.style.debugTouchPPSYColor,\n true,\n ],\n ].forEach(function (i, index) {\n i.push(index);\n dpl.apply(null, i);\n });\n self.ctx.fillStyle = self.style.debugPerfChartBackground;\n entityCount.pop();\n entityCount.unshift(self.visibleCells.length);\n scrollDebugCounters.pop();\n scrollDebugCounters.unshift([\n self.scrollBox.scrollTop,\n self.scrollBox.scrollLeft,\n ]);\n touchPPSCounters.pop();\n touchPPSCounters.unshift([self.yPPS, self.xPPS]);\n }\n function drawDebug() {\n self.ctx.save();\n var d;\n if (self.attributes.showPerformance || self.attributes.debug) {\n if (perfCounters.length === 0) {\n perfCounters = fillArray(0, perfWindowSize, 1, 0);\n }\n perfCounters.pop();\n perfCounters.unshift(performance.now() - p);\n }\n if (!self.attributes.debug) {\n self.ctx.restore();\n return;\n }\n self.ctx.font = self.style.debugFont;\n d = {};\n d.perf = (\n perfCounters.reduce(function (a, b) {\n return a + b;\n }, 0) / Math.min(drawCount, perfCounters.length)\n ).toFixed(1);\n d.perfDelta = perfCounters[0].toFixed(1);\n d.frozenColumnsWidth = getFrozenColumnsWidth();\n d.htmlImages = Object.keys(self.htmlImageCache).length;\n d.reorderObject =\n 'x: ' +\n (self.reorderObject || { columnIndex: 0 }).columnIndex +\n ', y: ' +\n (self.reorderObject || { rowIndex: 0 }).rowIndex;\n d.reorderTarget =\n 'x: ' +\n (self.reorderTarget || { columnIndex: 0 }).columnIndex +\n ', y: ' +\n (self.reorderTarget || { rowIndex: 0 }).rowIndex;\n d.scale = self.scale;\n d.startScale = self.startScale;\n d.scaleDelta = self.scaleDelta;\n d.zoomDeltaStart = self.zoomDeltaStart;\n d.touchLength = self.touchLength;\n d.touches =\n 'y0: ' +\n (self.touchPosition || { y: 0 }).y +\n ' y1: ' +\n (self.touchPosition1 || { y: 0 }).y;\n d.scrollBox = self.scrollBox.toString();\n d.scrollIndex =\n 'x: ' + self.scrollIndexLeft + ', y: ' + self.scrollIndexTop;\n d.scrollPixel =\n 'x: ' + self.scrollPixelLeft + ', y: ' + self.scrollPixelTop;\n d.canvasOffset =\n 'x: ' + self.canvasOffsetLeft + ', y: ' + self.canvasOffsetTop;\n d.touchDelta = 'x: ' + self.touchDelta.x + ', y: ' + self.touchDelta.y;\n d.touchAnimateTo =\n 'x: ' + self.touchAnimateTo.x + ', y: ' + self.touchAnimateTo.y;\n d.scrollAnimation =\n 'x: ' + self.scrollAnimation.x + ', y: ' + self.scrollAnimation.y;\n d.touchPPS = 'x: ' + self.xPPS + ', y: ' + self.yPPS;\n d.touchPPST = 'x: ' + self.xPPST + ', y: ' + self.yPPST;\n d.touchDuration = self.touchDuration;\n d.pointerLockPosition = self.pointerLockPosition\n ? self.pointerLockPosition.x + ', ' + self.pointerLockPosition.y\n : '';\n d.size = 'w: ' + self.width + ', h: ' + self.height;\n d.mouse = 'x: ' + self.mouse.x + ', y: ' + self.mouse.y;\n d.touch = !self.touchStart\n ? ''\n : 'x: ' + self.touchStart.x + ', y: ' + self.touchStart.y;\n d.entities = self.visibleCells.length;\n d.hasFocus = self.hasFocus;\n d.dragMode = self.dragMode;\n if (self.currentCell) {\n d.columnIndex = self.currentCell.columnIndex;\n d.rowIndex = self.currentCell.rowIndex;\n d.sortColumnIndex = self.currentCell.sortColumnIndex;\n d.sortRowIndex = self.currentCell.sortRowIndex;\n d.context = self.currentCell.context;\n d.dragContext = self.currentCell.dragContext;\n d.style = self.currentCell.style;\n d.type = self.currentCell.type;\n }\n self.ctx.textAlign = 'right';\n self.ctx.fillStyle = self.style.debugBackgroundColor;\n fillRect(0, 0, self.width, self.height);\n Object.keys(d).forEach(function (key, index) {\n var m = key + ': ' + d[key],\n lh = 14;\n self.ctx.fillStyle = self.style.debugColor;\n fillText(\n m,\n w - 20,\n (self.attributes.showPerformance ? 140 : 24) + index * lh,\n );\n });\n self.ctx.restore();\n }\n self.ctx.save();\n initDraw();\n drawBackground();\n initGroupArea();\n drawFrozenRows();\n drawRows();\n drawActiveCell();\n drawHeaders();\n drawFrozenMarkers();\n drawSelectionHandles();\n drawReorderMarkers();\n drawMoveMarkers();\n drawBorder();\n drawSelectionBorders();\n drawScrollBars();\n if (checkScrollHeight) {\n self.resize(true);\n }\n drawGroupArea();\n drawDebug();\n drawPerfLines();\n if (self.dispatchEvent('afterdraw', {})) {\n return;\n }\n self.ctx.restore();\n };\n}\n","/*jslint browser: true, unparam: true, todo: true, plusplus: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nimport isPrintableKeyEvent from 'is-printable-key-event';\nimport { isSupportedHtml, parseData } from './util';\n\nexport default function (self) {\n var wheeling;\n self.stopPropagation = function (e) {\n e.stopPropagation();\n };\n /**\n * Adds an event listener to the given event.\n * @memberof canvasDatagrid\n * @name addEventListener\n * @method\n * @param {string} ev The name of the event to subscribe to.\n * @param {function} fn The event procedure to execute when the event is raised.\n */\n self.addEventListener = function (ev, fn) {\n self.events[ev] = self.events[ev] || [];\n self.events[ev].unshift(fn);\n };\n /**\n * Removes the given listener function from the given event. Must be an actual reference to the function that was bound.\n * @memberof canvasDatagrid\n * @name removeEventListener\n * @method\n * @param {string} ev The name of the event to unsubscribe from.\n * @param {function} fn The event procedure to execute when the event is raised.\n */\n self.removeEventListener = function (ev, fn) {\n (self.events[ev] || []).forEach(function removeEachListener(sfn, idx) {\n if (fn === sfn) {\n self.events[ev].splice(idx, 1);\n }\n });\n };\n /**\n * Fires the given event, passing an event object to the event subscribers.\n * @memberof canvasDatagrid\n * @name dispatchEvent\n * @method\n * @param {number} ev The name of the event to dispatch.\n * @param {number} e The event object.\n */\n self.dispatchEvent = function (ev, e) {\n e = ev.type ? ev : e || {};\n ev = ev.type || ev;\n var defaultPrevented;\n function preventDefault() {\n defaultPrevented = true;\n }\n if (!self.events[ev]) {\n return;\n }\n self.events[ev].forEach(function dispatchEachEvent(fn) {\n e.ctx = self.ctx;\n e.preventDefault = preventDefault;\n fn.apply(self.intf, [e]);\n });\n return defaultPrevented;\n };\n self.getRatio = function () {\n return Math.min(\n self.attributes.maxPixelRatio,\n (window.devicePixelRatio || 1) /\n (self.ctx.webkitBackingStorePixelRatio ||\n self.ctx.mozBackingStorePixelRatio ||\n self.ctx.msBackingStorePixelRatio ||\n self.ctx.oBackingStorePixelRatio ||\n self.ctx.backingStorePixelRatio ||\n 1),\n );\n };\n /**\n * @returns {number} dataWidth\n */\n self.refreshScrollCacheX = function () {\n const s = self.getSchema();\n self.scrollCache.x = [];\n\n /** @type {number} it will be used in `reduceSchema` only */\n let frozenWidth = 0;\n\n const collapsedColumnGroups = self.getCollapsedColumnGroups();\n const isColumnCollapsed = (columnIndex) =>\n collapsedColumnGroups.findIndex(\n (group) => columnIndex >= group.from && columnIndex <= group.to,\n ) >= 0;\n\n const dataWidth =\n s.reduce(function reduceSchema(accumulator, column, columnIndex) {\n // intentional redefintion of column. This causes scrollCache to be in the correct order\n const schemaIndex = self.orders.columns[columnIndex];\n const columnWidth = self.getColumnWidth(schemaIndex);\n column = s[schemaIndex];\n if (!column.hidden && !isColumnCollapsed(columnIndex))\n accumulator += columnWidth;\n if (columnIndex < self.frozenColumn) {\n self.scrollCache.x[columnIndex] = accumulator;\n frozenWidth = accumulator;\n } else {\n self.scrollCache.x[columnIndex] = Math.max(\n frozenWidth + columnWidth,\n accumulator,\n );\n }\n return accumulator;\n }, 0) || 0;\n return dataWidth;\n };\n self.resize = function (drawAfterResize) {\n if (!self.canvas) {\n return;\n }\n var x,\n v = {\n x: 0,\n y: 0,\n height: 0,\n width: 0,\n style: 'vertical-scroll-bar',\n },\n n = {\n x: 0,\n y: 0,\n height: 0,\n width: 0,\n style: 'horizontal-scroll-bar',\n },\n vb = {\n x: 0,\n y: 0,\n height: 0,\n width: 0,\n style: 'vertical-scroll-box',\n },\n nb = {\n x: 0,\n y: 0,\n height: 0,\n width: 0,\n style: 'horizontal-scroll-box',\n },\n co = {\n x: 0,\n y: 0,\n height: 0,\n width: 0,\n isCorner: true,\n isScrollBoxCorner: true,\n style: 'scroll-box-corner',\n },\n m = self.style.scrollBarBoxMargin * 2,\n b = self.style.scrollBarBorderWidth * 2,\n d = self.style.scrollBarBoxMargin * 0.5,\n sbw = self.style.scrollBarWidth + self.style.scrollBarBorderWidth * 2,\n ratio = self.getRatio(),\n bm = self.style.gridBorderCollapse === 'collapse' ? 1 : 2,\n cellBorder = self.style.cellBorderWidth * bm,\n columnHeaderCellBorder = self.style.columnHeaderCellBorderWidth * bm,\n dataHeight = 0,\n dataWidth = 0,\n dims,\n l = (self.viewData || []).length,\n columnHeaderCellHeight = self.getColumnHeaderCellHeight(),\n rowHeaderCellWidth = self.getRowHeaderCellWidth(),\n topGroupAreaHeight = self.getColumnGroupAreaHeight(),\n leftGroupAreaWidth = self.getRowGroupAreaWidth(),\n ch = self.style.cellHeight;\n // sets actual DOM canvas element\n function checkScrollBoxVisibility() {\n self.scrollBox.horizontalBarVisible =\n (self.style.width !== 'auto' &&\n dataWidth > self.scrollBox.width &&\n self.style.overflowX !== 'hidden') ||\n self.style.overflowX === 'scroll';\n self.scrollBox.horizontalBoxVisible = dataWidth > self.scrollBox.width;\n self.scrollBox.verticalBarVisible =\n (self.style.height !== 'auto' &&\n dataHeight > self.scrollBox.height &&\n self.style.overflowY !== 'hidden') ||\n self.style.overflowY === 'scroll';\n self.scrollBox.verticalBoxVisible = dataHeight > self.scrollBox.height;\n }\n function setScrollBoxSize() {\n self.scrollBox.width =\n self.width - rowHeaderCellWidth - leftGroupAreaWidth;\n self.scrollBox.height =\n self.height - columnHeaderCellHeight - topGroupAreaHeight;\n }\n function setCanvasSize() {\n if (self.isChildGrid) {\n return;\n }\n dims = {\n // HACK +1 ? maybe it's a magic cell border? Required to line up properly in auto height mode.\n height:\n columnHeaderCellHeight +\n topGroupAreaHeight +\n dataHeight +\n cellBorder +\n 1,\n width: dataWidth + rowHeaderCellWidth + cellBorder + leftGroupAreaWidth,\n };\n ['width', 'height'].forEach(function (dim) {\n //TODO: support inherit\n if (\n ['auto', undefined].indexOf(self.style[dim]) !== -1 &&\n ['auto', undefined].indexOf(self.appliedInlineStyles[dim]) !== -1\n ) {\n self.parentNodeStyle[dim] = dims[dim] + 'px';\n } else if (\n ['auto', undefined].indexOf(self.style[dim]) == -1 &&\n ['auto', undefined].indexOf(self.appliedInlineStyles[dim]) == -1\n ) {\n self.parentNodeStyle[dim] = self.style[dim];\n if (self.isComponent) {\n self.canvas.style[dim] = self.style[dim];\n }\n }\n });\n }\n dataWidth = self.refreshScrollCacheX();\n self.scrollCache.y = [];\n for (x = 0; x < l; x += 1) {\n self.scrollCache.y[x] = dataHeight;\n dataHeight +=\n ((self.sizes.rows[x] || ch) + (self.sizes.trees[x] || 0)) * self.scale +\n // HACK? if an expanded tree row is frozen it is necessary to add the tree row's height a second time.\n (self.frozenRow > x ? self.sizes.trees[x] || 0 : 0);\n }\n if (l > 1) {\n self.scrollCache.y[x] = dataHeight;\n }\n if (self.attributes.showNewRow) {\n dataHeight += ch;\n }\n if (self.attributes.snapToRow) {\n dataHeight += self.style.cellHeight;\n }\n setCanvasSize();\n if (self.isChildGrid) {\n self.width = self.parentNode.offsetWidth;\n self.height = self.parentNode.offsetHeight;\n } else if (\n self.height !== self.canvas.offsetHeight ||\n self.width !== self.canvas.offsetWidth\n ) {\n self.height = self.canvas.offsetHeight;\n self.width = self.canvas.offsetWidth;\n self.canvasOffsetLeft = self.args.canvasOffsetLeft || 0;\n self.canvasOffsetTop = self.args.canvasOffsetTop || 0;\n }\n /// calculate scroll bar dimensions\n // non-controversial\n self.scrollBox.top =\n columnHeaderCellHeight + topGroupAreaHeight + columnHeaderCellBorder;\n self.scrollBox.left = rowHeaderCellWidth + leftGroupAreaWidth;\n // width and height of scroll box\n setScrollBoxSize();\n // is the data larger than the scroll box\n checkScrollBoxVisibility();\n // if the scroll box is visible, make room for it by expanding the size of the element\n // if the other dimension is set to auto\n if (self.scrollBox.horizontalBarVisible) {\n if (self.style.height === 'auto' && !self.isChildGrid) {\n self.height += sbw;\n }\n dataHeight += sbw;\n setCanvasSize();\n setScrollBoxSize();\n checkScrollBoxVisibility();\n }\n if (self.scrollBox.verticalBarVisible) {\n if (self.style.width === 'auto' && !self.isChildGrid) {\n self.width += sbw;\n }\n dataWidth += sbw;\n setCanvasSize();\n setScrollBoxSize();\n checkScrollBoxVisibility();\n }\n // set again after bar visibility checks\n setScrollBoxSize();\n self.scrollBox.scrollWidth = dataWidth - self.scrollBox.width;\n self.scrollBox.scrollHeight = dataHeight - self.scrollBox.height;\n if (self.frozenColumn > 0) {\n self.scrollBox.widthBoxRatio =\n (self.scrollBox.width - self.scrollCache.x[self.frozenColumn - 1]) /\n dataWidth;\n } else {\n self.scrollBox.widthBoxRatio = self.scrollBox.width / dataWidth;\n }\n self.scrollBox.scrollBoxWidth =\n self.scrollBox.width * self.scrollBox.widthBoxRatio -\n self.style.scrollBarWidth -\n b -\n d;\n // TODO: This heightBoxRatio number is terribly wrong.\n // They should be a result of the size of the grid/canvas?\n // it being off causes the scroll bar to \"slide\" under\n // the dragged mouse.\n // https://github.com/TonyGermaneri/canvas-datagrid/issues/97\n self.scrollBox.heightBoxRatio =\n (self.scrollBox.height -\n columnHeaderCellHeight -\n topGroupAreaHeight -\n self.scrollCache.y[self.frozenRow]) /\n dataHeight;\n self.scrollBox.scrollBoxHeight =\n self.scrollBox.height * self.scrollBox.heightBoxRatio -\n self.style.scrollBarWidth -\n b -\n d;\n self.scrollBox.scrollBoxWidth = Math.max(\n self.scrollBox.scrollBoxWidth,\n self.style.scrollBarBoxMinSize,\n );\n self.scrollBox.scrollBoxHeight = Math.max(\n self.scrollBox.scrollBoxHeight,\n self.style.scrollBarBoxMinSize,\n );\n // horizontal\n n.x += rowHeaderCellWidth;\n n.y += self.height - self.style.scrollBarWidth - d - topGroupAreaHeight;\n n.width =\n self.width -\n self.style.scrollBarWidth -\n rowHeaderCellWidth -\n leftGroupAreaWidth -\n d -\n m;\n n.height = self.style.scrollBarWidth + self.style.scrollBarBorderWidth + d;\n // horizontal box\n nb.y = n.y + self.style.scrollBarBoxMargin;\n nb.width = self.scrollBox.scrollBoxWidth;\n nb.height = self.style.scrollBarBoxWidth;\n // vertical\n v.x +=\n self.width -\n leftGroupAreaWidth -\n self.style.scrollBarWidth -\n self.style.scrollBarBorderWidth -\n d;\n v.y += columnHeaderCellHeight + self.scrollCache.y[self.frozenRow];\n v.width = self.style.scrollBarWidth + self.style.scrollBarBorderWidth + d;\n v.height =\n self.height -\n columnHeaderCellHeight -\n topGroupAreaHeight -\n self.style.scrollBarWidth -\n d -\n m;\n // vertical box\n vb.x = v.x + self.style.scrollBarBoxMargin;\n vb.y += self.scrollCache.y[self.frozenRow];\n vb.width = self.style.scrollBarBoxWidth;\n vb.height = self.scrollBox.scrollBoxHeight;\n // corner\n co.x = n.x + n.width + m;\n co.y = v.y + v.height + m;\n co.width = self.style.scrollBarWidth + self.style.scrollBarBorderWidth;\n co.height = self.style.scrollBarWidth + self.style.scrollBarBorderWidth;\n self.scrollBox.entities = {\n horizontalBar: n,\n horizontalBox: nb,\n verticalBar: v,\n verticalBox: vb,\n corner: co,\n };\n self.scrollBox.bar = {\n v: v,\n h: n,\n };\n self.scrollBox.box = {\n v: vb,\n h: nb,\n };\n /// calculate page and dom elements\n self.page = Math.max(\n 1,\n self.visibleRows.length - 3 - self.attributes.pageUpDownOverlap,\n );\n // set canvas drawing related items\n if (!self.isChildGrid) {\n const newWidth = self.width * ratio;\n const newHeight = self.height * ratio;\n // We need to check is settings size to canvas necessary,\n // because settings the canvas'size will cause the canvas and its state be cleared\n // even if the size is the same.\n // Notes: Please don't call `self.resize()` without a subsequent call to `self.draw()`\n if (self.canvas.width !== newWidth || self.canvas.height !== newHeight) {\n self.canvas.width = newWidth;\n self.canvas.height = newHeight;\n self.ctx.scale(ratio, ratio);\n }\n }\n // resize any open dom elements (input/textarea)\n self.resizeEditInput();\n self.scroll(true);\n if (drawAfterResize) {\n self.draw(true);\n }\n self.dispatchEvent('resize', {});\n return true;\n };\n self.scroll = function (dontDraw) {\n var s = self.getSchema(),\n l = (self.viewData || []).length,\n ch = self.style.cellHeight;\n // go too far in leaps, then get focused\n self.scrollIndexTop = Math.floor(\n l * (self.scrollBox.scrollTop / self.scrollBox.scrollHeight) - 100,\n );\n self.scrollIndexTop = Math.max(self.scrollIndexTop, 0);\n self.scrollPixelTop = self.scrollCache.y[self.scrollIndexTop];\n // sometimes the grid is rendered but the height is zero\n if (self.scrollBox.scrollHeight === 0) {\n self.scrollIndexTop = 0;\n }\n self.scrollPixelTop = 0;\n self.scrollIndexLeft = self.frozenColumn;\n self.scrollPixelLeft = 0;\n while (\n self.scrollPixelTop < self.scrollBox.scrollTop &&\n self.scrollIndexTop < self.viewData.length\n ) {\n // start on index +1 since index 0 was used in \"go too far\" section above\n self.scrollIndexTop += 1;\n self.scrollPixelTop = self.scrollCache.y[self.scrollIndexTop];\n }\n while (\n self.scrollPixelLeft < self.scrollBox.scrollLeft + 1 &&\n self.scrollIndexLeft < s.length\n ) {\n self.scrollPixelLeft = self.scrollCache.x[self.scrollIndexLeft];\n self.scrollIndexLeft += 1;\n }\n if (s.length > 0) {\n self.scrollIndexLeft = Math.max(self.scrollIndexLeft - 1, 0);\n self.scrollPixelLeft -= self.getColumnWidth(\n self.orders.columns[self.scrollIndexLeft],\n );\n }\n if ((self.viewData || []).length > 0) {\n self.scrollIndexTop = Math.max(self.scrollIndexTop - 1, 0);\n self.scrollPixelTop = Math.max(\n self.scrollPixelTop -\n (self.viewData[self.scrollIndexTop]\n ? (self.sizes.rows[self.scrollIndexTop] || ch) +\n (self.sizes.trees[self.scrollIndexTop] || 0)\n : ch) *\n self.scale,\n 0,\n );\n }\n self.ellipsisCache = {};\n if (!dontDraw) {\n self.draw(true);\n }\n //TODO: figure out why this has to be delayed for child grids\n //BUG: wheeling event on 3rd level hierarchy fails to move input box\n requestAnimationFrame(self.resizeEditInput);\n self.dispatchEvent('scroll', {\n top: self.scrollBox.scrollTop,\n left: self.scrollBox.scrollLeft,\n });\n };\n self.mousemove = function (e, overridePos) {\n if (self.contextMenu || self.input) {\n return;\n }\n\n // Cancel dragging action if user ventures outside grid\n if (self.draggingItem && e.which === 0) {\n self.stopFreezeMove(e);\n self.mouseup(e);\n return;\n }\n\n self.mouse = overridePos || self.getLayerPos(e);\n var ctrl =\n (e.ctrlKey || e.metaKey || self.attributes.persistantSelectionMode) &&\n !self.attributes.singleSelectionMode,\n i,\n s = self.getSchema(),\n dragBounds,\n sBounds,\n x = self.mouse.x,\n y = self.mouse.y,\n cell = self.getCellAt(x, y),\n delta,\n ev = { NativeEvent: e, cell: cell, x: x, y: y },\n previousCell = self.currentCell;\n clearTimeout(self.scrollTimer);\n if (!self.isInGrid({ x: x, y: y })) {\n self.hasFocus = false;\n }\n if (self.dispatchEvent('mousemove', ev)) {\n return;\n }\n if (cell && self.currentCell) {\n self.rowBoundaryCrossed = self.currentCell.rowIndex !== cell.rowIndex;\n self.columnBoundaryCrossed =\n self.currentCell.columnIndex !== cell.columnIndex;\n self.cellBoundaryCrossed =\n self.rowBoundaryCrossed || self.columnBoundaryCrossed;\n ['row', 'column', 'cell'].forEach(function (prefix) {\n if (self[prefix + 'BoundaryCrossed']) {\n ev.cell = previousCell;\n self.dispatchEvent(prefix + 'mouseout', ev);\n ev.cell = cell;\n self.dispatchEvent(prefix + 'mouseover', ev);\n }\n });\n }\n self.currentCell = cell;\n\n if (\n !self.draggingItem && // It is not in dragging mode (avoid changing hovers frequent)\n cell &&\n (cell.context === 'cell' || cell.context === self.cursorGrab)\n ) {\n const indicator = self.getUnhideIndicator(self.mouse.x, self.mouse.y);\n if (indicator) {\n self.cursor = 'pointer';\n self.hovers = { unhideIndicator: indicator };\n self.draw();\n return;\n }\n }\n\n self.hovers = {};\n if (!self.draggingItem && cell) {\n self.dragItem = cell;\n self.dragMode = cell.dragContext;\n self.cursor = cell.context;\n if (cell.context === 'cell') {\n self.cursor = 'default';\n self.hovers = {\n rowIndex: cell.rowIndex,\n columnIndex: cell.columnIndex,\n onFilterButton: false,\n onCellTreeIcon: false,\n };\n if (\n cell.isFilterable &&\n x >\n cell.x +\n cell.width +\n self.canvasOffsetLeft -\n self.style.filterButtonWidth &&\n x < cell.x + cell.width + self.canvasOffsetLeft &&\n y >\n cell.y +\n cell.height +\n self.canvasOffsetTop -\n self.style.filterButtonHeight &&\n y < cell.y + cell.height + self.canvasOffsetTop\n ) {\n self.hovers.onFilterButton = true;\n self.draw();\n }\n if (cell.isRowTree || cell.isColumnTree) {\n const pc = cell.isRowTree\n ? self.cellTree.rows[cell.rowIndex].parentCount\n : 0;\n const rc = self.style.cellTreeIconWidth * self.scale,\n rx =\n cell.x +\n cell.paddingLeft +\n self.canvasOffsetLeft +\n self.style.cellTreeIconMarginLeft +\n pc * (rc + cell.paddingLeft),\n ry =\n cell.y +\n self.canvasOffsetTop +\n self.style.cellTreeIconMarginTop * self.scale;\n if (x >= rx && x <= rx + rc && y >= ry && y < ry + rc) {\n self.hovers.onCellTreeIcon = true;\n self.draw();\n }\n }\n }\n if (self.selecting || self.reorderObject) {\n delta = {\n x: Math.abs(self.dragStart.x - x),\n y: Math.abs(self.dragStart.y - y),\n };\n if (self.dragStartObject.columnIndex !== -1 && e.shiftKey) {\n self.dragStartObject = {\n rowIndex: self.activeCell.rowIndex,\n columnIndex: self.activeCell.columnIndex,\n };\n }\n dragBounds = {\n top: Math.min(self.dragStartObject.rowIndex, cell.rowIndex),\n left: Math.min(self.dragStartObject.columnIndex, cell.columnIndex),\n bottom: Math.max(self.dragStartObject.rowIndex, cell.rowIndex),\n right: Math.max(self.dragStartObject.columnIndex, cell.columnIndex),\n };\n if (self.dragStartObject.columnIndex === -1) {\n sBounds = self.getSelectionBounds();\n dragBounds.left = -1;\n dragBounds.right = s.length - 1;\n dragBounds.top = Math.min(sBounds.top, cell.rowIndex);\n dragBounds.bottom = Math.max(sBounds.bottom, cell.rowIndex);\n if (dragBounds.top < 0) dragBounds.top = 0;\n }\n\n if (self.dragStartObject.rowIndex === -1) {\n sBounds = self.getSelectionBounds();\n dragBounds.left =\n cell.columnIndex === undefined\n ? sBounds.left\n : Math.min(sBounds.left, cell.columnIndex);\n dragBounds.right =\n cell.columnIndex === undefined\n ? sBounds.right\n : Math.max(sBounds.right, cell.columnIndex);\n dragBounds.top = -1;\n dragBounds.bottom = self.viewData.length - 1;\n if (dragBounds.left < 0) dragBounds.left = 0;\n if (dragBounds.left != dragBounds.right)\n self.isMultiColumnsSelected = true;\n else self.isMultiRowsSelected = false;\n }\n\n if (\n self.dragStartObject.rowIndex !== cell.rowIndex ||\n self.dragStartObject.columnIndex !== cell.columnIndex\n ) {\n self.ignoreNextClick = true;\n }\n if (\n self.cellBoundaryCrossed ||\n (delta.x === 0 && delta.y === 0) ||\n self.attributes.selectionMode === 'row'\n ) {\n if (\n cell.rowIndex !== undefined &&\n (self.attributes.selectionMode === 'row' ||\n self.dragStartObject.columnIndex === -1) &&\n self.rowBoundaryCrossed\n ) {\n if (self.dragStartObject.rowIndex < cell.rowIndex) {\n dragBounds.top = self.dragStartObject.rowIndex;\n dragBounds.bottom = cell.rowIndex;\n } else {\n dragBounds.top = cell.rowIndex;\n dragBounds.bottom = self.dragStartObject.rowIndex;\n }\n } else if (\n cell.rowIndex !== undefined &&\n (self.attributes.selectionMode === 'column' ||\n self.dragStartObject.rowIndex === -1) &&\n self.columnBoundaryCrossed\n ) {\n if (self.dragStartObject.columnIndex < cell.columnIndex) {\n dragBounds.left = self.dragStartObject.columnIndex;\n dragBounds.right = cell.columnIndex;\n } else {\n dragBounds.left = cell.columnIndex;\n dragBounds.right = self.dragStartObject.columnIndex;\n }\n } else if (self.attributes.selectionMode !== 'row') {\n if (cell.hovered && self.hovers.onFilterButton) {\n if (cell.openedFilter) {\n cell.openedFilter = false;\n self.selectedFilterButton = {\n columnIndex: -1,\n rowIndex: -1,\n };\n } else {\n self.selectedFilterButton.rowIndex = cell.rowIndex;\n self.selectedFilterButton.columnIndex = cell.columnIndex;\n self.contextmenuEvent(e, {\n x: cell.x + cell.width - self.style.filterButtonWidth,\n y: cell.y + cell.height,\n rect: { left: 0, top: 0 },\n });\n }\n self.draw();\n return;\n } else if (\n cell.hovered &&\n self.hovers.onCellTreeIcon &&\n e.type == 'mousedown'\n ) {\n self.toggleCollapseTree(cell.rowIndex, cell.columnIndex);\n return;\n } else {\n self.selectedFilterButton = {\n columnIndex: -1,\n rowIndex: -1,\n };\n if (self.hovers.onFilterButton) return;\n if (self.hovers.onCellTreeIcon) return;\n if (!self.dragAddToSelection && cell.rowIndex !== undefined) {\n if (\n self.selections[cell.rowIndex] &&\n self.selections[cell.rowIndex].indexOf(cell.columnIndex) !==\n -1\n ) {\n self.selections[cell.rowIndex].splice(\n self.selections[cell.rowIndex].indexOf(cell.columnIndex),\n 1,\n );\n }\n } else {\n self.selections[cell.rowIndex] =\n self.selections[cell.rowIndex] || [];\n if (\n self.selections[cell.rowIndex].indexOf(cell.columnIndex) ===\n -1\n ) {\n self.selections[cell.rowIndex].push(cell.columnIndex);\n var event = {\n selections: self.selections,\n selectedData: self.getSelectedData(),\n selectedCells: self.getSelectedCells(),\n selectionBounds: self.getSelectionBounds(),\n };\n self.dispatchEvent('selectionchanged', event);\n }\n }\n }\n }\n }\n if (\n (!self.selectionBounds ||\n dragBounds.top !== self.selectionBounds.top ||\n dragBounds.left !== self.selectionBounds.left ||\n dragBounds.bottom !== self.selectionBounds.bottom ||\n dragBounds.right !== self.selectionBounds.right) &&\n !ctrl\n ) {\n if (!(cell.hovered && self.hovers.onFilterButton)) {\n self.selections = [];\n self.selectedRows = [];\n self.selectedColumns = [];\n }\n if (dragBounds.top === -1) {\n dragBounds.top = 0;\n }\n sBounds = dragBounds;\n if (self.attributes.selectionMode === 'row') {\n for (i = sBounds.top; i <= sBounds.bottom; i += 1) {\n self.selectRow(i, true, null, true);\n }\n } else {\n self.selectArea(sBounds, true);\n self.activeCell.rowIndex = sBounds.top;\n self.activeCell.columnIndex = sBounds.left;\n if (sBounds.left == -1 && sBounds.top !== sBounds.bottom) {\n self.activeCell.columnIndex = 0;\n self.isMultiRowsSelected = true;\n self.isMultiColumnsSelected = false;\n }\n }\n }\n\n if (self.attributes.autoScrollOnMousemove) {\n var movedVertically = delta.y > self.attributes.autoScrollMargin;\n var movedHorizontally = delta.x > self.attributes.autoScrollMargin;\n\n if (movedVertically && !movedHorizontally)\n self.autoScrollZone(e, -1, y, ctrl);\n else if (movedHorizontally && !movedVertically)\n self.autoScrollZone(e, x, -1, ctrl);\n else if (movedHorizontally && movedVertically)\n self.autoScrollZone(e, x, y, ctrl);\n } else {\n self.autoScrollZone(e, x, y, ctrl);\n }\n }\n }\n const columnGroup = self.getColumnGroupAt(self.mouse.x, self.mouse.y);\n if (columnGroup) self.cursor = 'pointer';\n\n const rowGroup = self.getRowGroupAt(self.mouse.x, self.mouse.y);\n if (rowGroup) self.cursor = 'pointer';\n\n self.cellBoundaryCrossed = false;\n self.rowBoundaryCrossed = false;\n self.columnBoundaryCrossed = false;\n self.draw(true);\n };\n self.click = function (e, overridePos) {\n var i,\n startingBounds = JSON.stringify(self.getSelectionBounds()),\n ctrl =\n (e.ctrlKey || e.metaKey || self.attributes.persistantSelectionMode) &&\n !self.attributes.singleSelectionMode,\n pos = overridePos || self.getLayerPos(e);\n self.currentCell = self.getCellAt(pos.x, pos.y);\n if (self.currentCell.grid !== undefined) {\n return;\n }\n function checkSelectionChange() {\n var ev,\n sb = self.getSelectionBounds();\n\n if (startingBounds === JSON.stringify(sb)) {\n return;\n }\n ev = {\n selections: self.selections,\n selectionBounds: self.getSelectionBounds(),\n selectedCells: self.getSelectedCells(),\n };\n Object.defineProperty(ev, 'selectedData', {\n get: function () {\n return self.getSelectedData();\n },\n });\n self.dispatchEvent('selectionchanged', ev);\n }\n if (self.input) {\n self.endEdit();\n }\n if (self.ignoreNextClick) {\n self.ignoreNextClick = false;\n return;\n }\n i = self.currentCell;\n if (\n self.dispatchEvent('click', { NativeEvent: e, cell: self.currentCell })\n ) {\n return;\n }\n\n const unhideIndicator = self.getUnhideIndicator(pos.x, pos.y);\n if (unhideIndicator) {\n const { dir, orderIndex0, orderIndex1 } = unhideIndicator;\n if (dir === 'l' || dir === 'r')\n self.unhideColumns(orderIndex0, orderIndex1);\n else self.unhideRows(orderIndex0, orderIndex1);\n return;\n }\n\n let group = self.getColumnGroupAt(pos.x, pos.y);\n if (!group) group = self.getRowGroupAt(pos.x, pos.y);\n if (group) {\n if (self.toggleGroup(group)) {\n self.setStorageData();\n self.refresh();\n return;\n }\n }\n\n if (!self.hasFocus) {\n return;\n }\n\n const leftOffset = self.getRowGroupAreaWidth();\n const topOffset = self.getColumnGroupAreaHeight();\n const xInGrid = pos.x - leftOffset;\n const yInGrid = pos.y - topOffset;\n if (\n ['rowHeaderCell', 'columnHeaderCell'].indexOf(self.currentCell.style) ===\n -1 &&\n !ctrl\n ) {\n if (!self.hovers.onFilterButton) {\n self.setActiveCell(i.columnIndex, i.rowIndex);\n }\n }\n if (self.currentCell.context === 'cell') {\n if (self.currentCell.style === 'cornerCell') {\n self.selectAll();\n self.draw();\n checkSelectionChange();\n return;\n }\n if (self.currentCell.style === 'columnHeaderCell') {\n if (self.attributes.columnHeaderClickBehavior === 'sort') {\n if (self.orderBy === i.header.name) {\n self.orderDirection =\n self.orderDirection === 'asc' ? 'desc' : 'asc';\n } else {\n self.orderDirection = 'asc';\n }\n self.order(i.header.name, self.orderDirection);\n checkSelectionChange();\n return;\n }\n }\n self.selections[i.rowIndex] = self.selections[i.rowIndex] || [];\n if (\n self.attributes.selectionMode === 'row' ||\n self.currentCell.style === 'rowHeaderCell'\n ) {\n if (\n self.currentCell.style === 'rowHeaderCell' &&\n self.attributes.tree &&\n xInGrid > 0 &&\n xInGrid - self.currentCell.x <\n self.style.treeArrowWidth +\n self.style.treeArrowMarginLeft +\n self.style.treeArrowMarginRight +\n self.style.treeArrowClickRadius &&\n yInGrid - self.currentCell.y <\n self.style.treeArrowHeight +\n self.style.treeArrowMarginTop +\n self.style.treeArrowClickRadius &&\n yInGrid > 0\n ) {\n self.toggleTree(i.rowIndex);\n return;\n }\n }\n if (e.shiftKey && !ctrl) {\n self.selectionBounds = self.getSelectionBounds();\n self.selectArea(undefined, false);\n }\n }\n checkSelectionChange();\n self.draw(true);\n };\n self.dragResizeColumn = function (e) {\n var pos, x, y;\n pos = self.getLayerPos(e);\n x = self.resizingStartingWidth + pos.x - self.dragStart.x;\n y = self.resizingStartingHeight + pos.y - self.dragStart.y;\n if (x < self.style.minColumnWidth) {\n x = self.style.minColumnWidth;\n }\n if (y < self.style.minRowHeight) {\n y = self.style.minRowHeight;\n }\n if (\n self.dispatchEvent('resizecolumn', {\n x: x,\n y: y,\n draggingItem: self.draggingItem,\n })\n ) {\n return false;\n }\n if (\n self.scrollBox.scrollLeft >\n self.scrollBox.scrollWidth - self.attributes.resizeScrollZone &&\n self.dragMode === 'ew-resize'\n ) {\n self.resize(true);\n }\n if (self.dragMode === 'ew-resize') {\n self.sizes.columns[\n self.draggingItem.header.style === 'rowHeaderCell'\n ? 'cornerCell'\n : self.draggingItem.sortColumnIndex\n ] = x;\n if (\n ['rowHeaderCell', 'cornerCell'].indexOf(\n self.draggingItem.header.style,\n ) !== -1\n ) {\n self.resize(true);\n }\n self.resizeChildGrids();\n return;\n }\n if (self.dragMode === 'ns-resize') {\n if (self.draggingItem.rowOpen) {\n self.sizes.trees[self.draggingItem.rowIndex] = y;\n } else if (self.attributes.globalRowResize) {\n self.style.cellHeight = y;\n } else {\n self.sizes.rows[self.draggingItem.rowIndex] = y;\n }\n self.dispatchEvent('resizerow', { row: y });\n self.resizeChildGrids();\n return;\n }\n self.ellipsisCache = {};\n };\n self.stopDragResize = function (event) {\n const pos = self.getLayerPos(event);\n\n if (self.dragMode === 'ew-resize') {\n const hasMoved = !!(pos.x - self.dragStart.x);\n // Check that dragItem is selected or part of selection.\n const dragItemIsSelected = self.isColumnSelected(\n self.dragItem.columnIndex,\n );\n\n if (hasMoved && dragItemIsSelected) {\n const width = Math.max(\n self.resizingStartingWidth + pos.x - self.dragStart.x,\n self.style.minColumnWidth,\n );\n // If the column is selected, resize it to width plus any other selected columns.\n self.fitSelectedColumns(width);\n }\n }\n\n self.resize();\n window.removeEventListener('mousemove', self.dragResizeColumn, false);\n window.removeEventListener('mouseup', self.stopDragResize, false);\n self.setStorageData();\n self.draw(true);\n self.ignoreNextClick = true;\n };\n self.scrollGrid = function (e) {\n var pos = self.getLayerPos(e);\n if (\n self.attributes.scrollPointerLock &&\n self.pointerLockPosition &&\n ['horizontal-scroll-box', 'vertical-scroll-box'].indexOf(\n self.scrollStartMode,\n ) !== -1\n ) {\n self.pointerLockPosition.x += e.movementX;\n self.pointerLockPosition.y += e.movementY;\n self.pointerLockPosition.x = Math.min(\n self.width - self.style.scrollBarWidth,\n Math.max(0, self.pointerLockPosition.x),\n );\n self.pointerLockPosition.y = Math.min(\n self.height - self.style.scrollBarWidth,\n Math.max(0, self.pointerLockPosition.y),\n );\n pos = self.pointerLockPosition;\n }\n self.scrollMode = self.getCellAt(pos.x, pos.y).context;\n if (\n self.scrollMode === 'horizontal-scroll-box' &&\n self.scrollStartMode !== 'horizontal-scroll-box'\n ) {\n self.scrollStartMode = 'horizontal-scroll-box';\n self.dragStart = pos;\n self.scrollStart.left = self.scrollBox.scrollLeft;\n clearTimeout(self.scrollTimer);\n return;\n }\n if (\n self.scrollMode === 'vertical-scroll-box' &&\n self.scrollStartMode !== 'vertical-scroll-box'\n ) {\n self.scrollStartMode = 'vertical-scroll-box';\n self.dragStart = pos;\n self.scrollStart.top = self.scrollBox.scrollTop;\n clearTimeout(self.scrollTimer);\n return;\n }\n if (\n self.scrollStartMode === 'vertical-scroll-box' &&\n self.scrollMode !== 'vertical-scroll-box'\n ) {\n self.scrollMode = 'vertical-scroll-box';\n }\n if (\n self.scrollStartMode === 'horizontal-scroll-box' &&\n self.scrollMode !== 'horizontal-scroll-box'\n ) {\n self.scrollMode = 'horizontal-scroll-box';\n }\n clearTimeout(self.scrollTimer);\n if (self.scrollModes.indexOf(self.scrollMode) === -1) {\n return;\n }\n if (self.scrollMode === 'vertical-scroll-box') {\n self.scrollBox.scrollTop =\n self.scrollStart.top +\n (pos.y - self.dragStart.y) / self.scrollBox.heightBoxRatio;\n } else if (self.scrollMode === 'vertical-scroll-top') {\n self.scrollBox.scrollTop -= self.page * self.style.cellHeight;\n self.scrollTimer = setTimeout(\n self.scrollGrid,\n self.attributes.scrollRepeatRate,\n e,\n );\n } else if (self.scrollMode === 'vertical-scroll-bottom') {\n self.scrollBox.scrollTop += self.page * self.style.cellHeight;\n self.scrollTimer = setTimeout(\n self.scrollGrid,\n self.attributes.scrollRepeatRate,\n e,\n );\n }\n if (self.scrollMode === 'horizontal-scroll-box') {\n self.scrollBox.scrollLeft =\n self.scrollStart.left +\n (pos.x - self.dragStart.x) / self.scrollBox.widthBoxRatio;\n } else if (self.scrollMode === 'horizontal-scroll-right') {\n self.scrollBox.scrollLeft += self.attributes.selectionScrollIncrement;\n self.scrollTimer = setTimeout(\n self.scrollGrid,\n self.attributes.scrollRepeatRate,\n e,\n );\n } else if (self.scrollMode === 'horizontal-scroll-left') {\n self.scrollBox.scrollLeft -= self.attributes.selectionScrollIncrement;\n self.scrollTimer = setTimeout(\n self.scrollGrid,\n self.attributes.scrollRepeatRate,\n e,\n );\n }\n };\n self.stopScrollGrid = function () {\n clearTimeout(self.scrollTimer);\n if (document.exitPointerLock) {\n document.exitPointerLock();\n }\n window.removeEventListener('mousemove', self.scrollGrid, false);\n };\n self.dragReorder = function (e) {\n var pos,\n x,\n y,\n columReorder = self.dragMode === 'column-reorder',\n rowReorder = self.dragMode === 'row-reorder';\n pos = self.getLayerPos(e);\n x = pos.x - self.dragStart.x;\n y = pos.y - self.dragStart.y;\n if (!self.attributes.allowColumnReordering && columReorder) {\n return;\n }\n if (!self.attributes.allowRowReordering && rowReorder) {\n return;\n }\n if ((e.ctrlKey || e.metaKey || e.shiftKey) && self.reorderObject) {\n if (self.dragMode === 'column-reorder' && !self.isMultiColumnsSelected) {\n self.selectColumn(self.draggingItem.header.index, false, false);\n }\n }\n if (\n self.dispatchEvent('reordering', {\n NativeEvent: e,\n source: self.dragStartObject,\n target: self.currentCell,\n dragMode: self.dragMode,\n })\n ) {\n return;\n }\n if (\n Math.abs(x) > self.attributes.reorderDeadZone ||\n Math.abs(y) > self.attributes.reorderDeadZone\n ) {\n self.reorderObject = self.draggingItem;\n if (self.isMultiRowsSelected)\n self.reorderObject = self.getVisibleCellByIndex(\n -1,\n self.activeCell.rowIndex,\n );\n if (self.isMultiColumnsSelected)\n self.reorderObject = self.getVisibleCellByIndex(\n self.activeCell.columnIndex,\n -1,\n );\n if (!self.reorderObject) return;\n self.reorderTarget = self.currentCell;\n self.reorderObject.dragOffset = {\n x: x,\n y: y,\n };\n self.autoScrollZone(\n e,\n columReorder ? pos.x : -1,\n rowReorder ? pos.y : -1,\n false,\n );\n }\n };\n self.stopDragReorder = function (e) {\n var oIndex,\n tIndex,\n odata = [],\n cr = {\n 'row-reorder': self.orders.rows,\n 'column-reorder': self.orders.columns,\n },\n i = {\n 'row-reorder': 'rowIndex',\n 'column-reorder': 'sortColumnIndex',\n }[self.dragMode];\n window.removeEventListener('mousemove', self.dragReorder, false);\n window.removeEventListener('mouseup', self.stopDragReorder, false);\n if (\n self.reorderObject &&\n self.reorderTarget &&\n ((self.dragMode === 'column-reorder' &&\n self.reorderTarget.sortColumnIndex > -1 &&\n self.reorderTarget.sortColumnIndex < self.getSchema().length) ||\n (self.dragMode === 'row-reorder' &&\n self.reorderTarget.rowIndex > -1 &&\n self.reorderTarget.rowIndex < self.viewData.length)) &&\n self.reorderObject[i] !== self.reorderTarget[i] &&\n !self.dispatchEvent('reorder', {\n NativeEvent: e,\n source: self.reorderObject,\n target: self.reorderTarget,\n dragMode: self.dragMode,\n })\n ) {\n self.ignoreNextClick = true;\n oIndex = cr[self.dragMode].indexOf(self.reorderObject[i]);\n tIndex = cr[self.dragMode].indexOf(self.reorderTarget[i]);\n if (self.dragMode === 'column-reorder') {\n var sortColumnIndices = [];\n var selectedColumnIndices = [];\n if (self.selections[0]) {\n oIndex = self.selections[0][0];\n self.selections[0].forEach(function (value) {\n sortColumnIndices.push(self.orders.columns[value]);\n });\n }\n var deleteCount = sortColumnIndices.length;\n if (\n tIndex < oIndex ||\n (tIndex > oIndex && Math.abs(tIndex - oIndex) >= deleteCount)\n ) {\n cr[self.dragMode].splice(oIndex, deleteCount);\n if (tIndex > oIndex) tIndex = tIndex - (deleteCount - 1);\n\n self.selectedColumns = [];\n for (var i = 0; i < sortColumnIndices.length; i++) {\n if (i === 0) self.activeCell.columnIndex = tIndex;\n selectedColumnIndices.push(tIndex + i);\n self.selectedColumns.push(sortColumnIndices[i]);\n cr[self.dragMode].splice(tIndex + i, 0, sortColumnIndices[i]);\n }\n\n self.orders.columns = cr[self.dragMode];\n self.viewData.forEach(function (row, rowIndex) {\n self.selections[rowIndex] = selectedColumnIndices;\n });\n }\n } else {\n var selectedRows = [];\n self.selections.forEach(function (row, rowIndex) {\n if (row) {\n selectedRows.push(row);\n odata.push(self.viewData[rowIndex]);\n }\n });\n if (\n tIndex < oIndex ||\n (tIndex > oIndex && Math.abs(tIndex - oIndex) >= odata.length)\n ) {\n self.viewData.splice(oIndex, odata.length);\n self.selections = [];\n self.selectedRows = [];\n if (tIndex > oIndex) tIndex = tIndex - (odata.length - 1);\n self.activeCell.rowIndex = tIndex;\n\n for (var i = 0; i < odata.length; i++) {\n self.viewData.splice(tIndex + i, 0, odata[i]);\n self.selections[tIndex + i] = selectedRows[i];\n self.selectedRows.push(tIndex + i);\n }\n }\n }\n self.resize();\n self.setStorageData();\n }\n self.reorderObject = undefined;\n self.reorderTarget = undefined;\n self.draw(true);\n };\n self.dragMove = function (e) {\n if (\n self.dispatchEvent('moving', { NativeEvent: e, cell: self.currentCell })\n ) {\n return;\n }\n var pos = self.getLayerPos(e);\n self.moveOffset = {\n x: self.currentCell.columnIndex - self.dragStartObject.columnIndex,\n y: self.currentCell.rowIndex - self.dragStartObject.rowIndex,\n };\n if (\n Math.abs(pos.x) > self.attributes.reorderDeadZone ||\n Math.abs(pos.y) > self.attributes.reorderDeadZone\n ) {\n setTimeout(function () {\n self.autoScrollZone(e, pos.x, pos.y, false);\n }, 1);\n }\n };\n self.stopDragMove = function (e) {\n window.removeEventListener('mousemove', self.dragMove, false);\n window.removeEventListener('mouseup', self.stopDragMove, false);\n var b = self.getSelectionBounds();\n if (\n self.dispatchEvent('endmove', { NativeEvent: e, cell: self.currentCell })\n ) {\n self.movingSelection = undefined;\n self.moveOffset = undefined;\n self.draw(true);\n return;\n }\n if (self.moveOffset) {\n self.moveTo(\n self.movingSelection,\n b.left + self.moveOffset.x,\n b.top + self.moveOffset.y,\n );\n self.moveSelection(self.moveOffset.x, self.moveOffset.y);\n }\n self.movingSelection = undefined;\n self.moveOffset = undefined;\n self.draw(true);\n };\n self.freezeMove = function (e) {\n if (\n self.dispatchEvent('freezemoving', {\n NativeEvent: e,\n cell: self.currentCell,\n })\n ) {\n return;\n }\n var pos = self.getLayerPos(e);\n\n self.ignoreNextClick = true;\n self.freezeMarkerPosition = pos;\n pos.x -= self.getRowGroupAreaWidth();\n pos.y -= self.getColumnGroupAreaHeight();\n if (\n Math.abs(pos.x) > self.attributes.reorderDeadZone ||\n Math.abs(pos.y) > self.attributes.reorderDeadZone\n ) {\n setTimeout(function () {\n self.autoScrollZone(e, pos.x, pos.y, false);\n }, 1);\n }\n };\n self.stopFreezeMove = function (e) {\n let pos = self.getLayerPos(e),\n bm = self.style.gridBorderCollapse === 'collapse' ? 1 : 2,\n columnHeaderCellBorder = self.style.columnHeaderCellBorderWidth * bm,\n columnHeaderCellHeight = self.getColumnHeaderCellHeight(),\n rowHeaderCellWidth = self.getRowHeaderCellWidth();\n pos.x -= self.getRowGroupAreaWidth();\n pos.y -= self.getColumnGroupAreaHeight();\n\n if (\n self.currentCell &&\n self.currentCell.rowIndex !== undefined &&\n self.dragMode === 'frozen-row-marker'\n ) {\n self.scrollBox.scrollTop = 0;\n self.frozenRow = self.currentCell.rowIndex + 1;\n self.scrollBox.bar.v.y =\n columnHeaderCellHeight +\n columnHeaderCellBorder +\n self.scrollCache.y[self.frozenRow];\n self.scrollBox.box.v.y =\n columnHeaderCellHeight +\n columnHeaderCellBorder +\n self.scrollCache.y[self.frozenRow];\n var dataHeight = self.scrollCache.y[self.scrollCache.y.length - 1];\n self.scrollBox.heightBoxRatio =\n (self.scrollBox.height -\n columnHeaderCellHeight -\n self.scrollCache.y[self.frozenRow]) /\n dataHeight;\n self.scrollBox.scrollBoxHeight =\n self.scrollBox.height * self.scrollBox.heightBoxRatio -\n self.style.scrollBarWidth;\n self.scrollBox.scrollBoxHeight = Math.max(\n self.scrollBox.scrollBoxHeight,\n self.style.scrollBarBoxMinSize,\n );\n self.scrollBox.box.v.height = self.scrollBox.scrollBoxHeight;\n }\n if (\n self.currentCell &&\n self.currentCell.columnIndex !== undefined &&\n self.dragMode === 'frozen-column-marker'\n ) {\n const dataWidth = self.refreshScrollCacheX();\n self.scrollBox.scrollLeft = 0;\n let x =\n self.currentCell.x -\n self.style.frozenMarkerWidth -\n self.style.frozenMarkerBorderWidth;\n if (pos.x > x + self.currentCell.width / 2)\n self.frozenColumn = self.currentCell.columnIndex + 1;\n else if (self.currentCell.columnIndex >= 0)\n self.frozenColumn = self.currentCell.columnIndex;\n self.scrollBox.bar.h.x =\n rowHeaderCellWidth + self.scrollCache.x[self.frozenColumn];\n self.scrollBox.widthBoxRatio =\n (self.scrollBox.width - self.scrollCache.x[self.frozenColumn]) /\n dataWidth;\n self.scrollBox.scrollBoxWidth =\n self.scrollBox.width * self.scrollBox.widthBoxRatio -\n self.style.scrollBarWidth;\n self.scrollBox.scrollBoxWidth = Math.max(\n self.scrollBox.scrollBoxWidth,\n self.style.scrollBarBoxMinSize,\n );\n self.scrollBox.box.h.width = self.scrollBox.scrollBoxWidth;\n }\n if (\n Math.abs(pos.x) > self.attributes.reorderDeadZone ||\n Math.abs(pos.y) > self.attributes.reorderDeadZone\n ) {\n setTimeout(function () {\n self.autoScrollZone(e, pos.x, pos.y, false);\n }, 1);\n }\n\n window.removeEventListener('mousemove', self.freezeMove, false);\n window.removeEventListener('mouseup', self.stopFreezeMove, false);\n self.freezeMarkerPosition = undefined;\n if (\n self.dispatchEvent('endfreezemove', {\n NativeEvent: e,\n cell: self.currentCell,\n })\n ) {\n self.frozenRow = self.startFreezeMove.x;\n self.frozenColumn = self.startFreezeMove.y;\n self.draw(true);\n return;\n }\n self.draw(true);\n self.resize();\n };\n self.mousedown = function (e, overridePos) {\n self.lastMouseDownTarget = e.target;\n if (\n self.dispatchEvent('mousedown', {\n NativeEvent: e,\n cell: self.currentCell,\n })\n ) {\n return;\n }\n if (!self.hasFocus) {\n return;\n }\n if (e.button === 2 || self.input) {\n return;\n }\n var ctrl = e.ctrlKey || e.metaKey,\n move = /-move/.test(self.dragMode),\n freeze = /frozen-row-marker|frozen-column-marker/.test(self.dragMode),\n resize = /-resize/.test(self.dragMode);\n const onUnhideIndicator = self.hovers && self.hovers.unhideIndicator;\n self.dragStart = overridePos || self.getLayerPos(e);\n self.scrollStart = {\n left: self.scrollBox.scrollLeft,\n top: self.scrollBox.scrollTop,\n };\n self.dragStartObject = self.getCellAt(self.dragStart.x, self.dragStart.y);\n self.dragAddToSelection = !self.dragStartObject.selected;\n if (\n !ctrl &&\n !e.shiftKey &&\n !/(vertical|horizontal)-scroll-(bar|box)/.test(\n self.dragStartObject.context,\n ) &&\n self.currentCell &&\n !self.currentCell.isColumnHeader &&\n !move &&\n !freeze &&\n !resize\n ) {\n if (\n !(self.dragMode == 'row-reorder' && self.isMultiRowsSelected) &&\n !(self.currentCell.hovered && self.hovers.onFilterButton)\n ) {\n self.selections = [];\n self.selectedRows = [];\n self.selectedColumns = [];\n }\n }\n if (self.dragStartObject.isGrid) {\n return;\n }\n if (\n self.scrollModes.indexOf(self.dragStartObject.context) !== -1 &&\n !onUnhideIndicator\n ) {\n self.scrollMode = self.dragStartObject.context;\n self.scrollStartMode = self.dragStartObject.context;\n self.scrollGrid(e);\n if (\n self.attributes.scrollPointerLock &&\n ['horizontal-scroll-box', 'vertical-scroll-box'].indexOf(\n self.scrollStartMode,\n ) !== -1\n ) {\n self.pointerLockPosition = {\n x: self.dragStart.x,\n y: self.dragStart.y,\n };\n self.canvas.requestPointerLock();\n }\n window.addEventListener('mousemove', self.scrollGrid, false);\n window.addEventListener('mouseup', self.stopScrollGrid, false);\n self.ignoreNextClick = true;\n return;\n }\n if (self.dragMode === 'cell') {\n self.selecting = true;\n if (\n (self.attributes.selectionMode === 'row' ||\n self.dragStartObject.columnIndex === -1) &&\n self.dragStartObject.rowIndex > -1\n ) {\n self.selectRow(self.dragStartObject.rowIndex, ctrl, null);\n } else if (\n (self.attributes.selectionMode === 'column' ||\n self.dragStartObject.rowIndex === -1) &&\n self.dragStartObject.columnIndex > -1\n ) {\n self.selectColumn(self.currentCell.header.index, ctrl, e.shiftKey);\n return;\n }\n if (self.attributes.selectionMode !== 'row') {\n self.mousemove(e);\n }\n return;\n }\n if (move) {\n self.draggingItem = self.dragItem;\n self.movingSelection = self.selections.concat([]);\n self.dragging = self.dragStartObject;\n if (\n self.dispatchEvent('beginmove', {\n NativeEvent: e,\n cell: self.currentCell,\n })\n ) {\n return;\n }\n window.addEventListener('mousemove', self.dragMove, false);\n window.addEventListener('mouseup', self.stopDragMove, false);\n return self.mousemove(e);\n }\n if (freeze) {\n self.draggingItem = self.dragItem;\n self.startFreezeMove = {\n x: self.frozenRow,\n y: self.frozenColumn,\n };\n if (self.dispatchEvent('beginfreezemove', { NativeEvent: e })) {\n return;\n }\n\n self.freezeMarkerPosition = self.getLayerPos(e);\n self.freezeMarkerPosition.isGrab = true;\n\n window.addEventListener('mousemove', self.freezeMove, false);\n window.addEventListener('mouseup', self.stopFreezeMove, false);\n return self.mousemove(e);\n }\n if (resize && !onUnhideIndicator) {\n self.draggingItem = self.dragItem;\n if (self.draggingItem.rowOpen) {\n self.resizingStartingHeight =\n self.sizes.trees[self.draggingItem.rowIndex];\n } else {\n self.resizingStartingHeight =\n self.sizes.rows[self.draggingItem.rowIndex] || self.style.cellHeight;\n }\n self.resizingStartingWidth =\n self.sizes.columns[\n self.draggingItem.header.style === 'rowHeaderCell'\n ? 'cornerCell'\n : self.draggingItem.sortColumnIndex\n ] || self.draggingItem.width;\n window.addEventListener('mousemove', self.dragResizeColumn, false);\n window.addEventListener('mouseup', self.stopDragResize, false);\n return;\n }\n if (['row-reorder', 'column-reorder'].indexOf(self.dragMode) !== -1) {\n self.draggingItem = self.dragStartObject;\n if (self.dragMode === 'column-reorder' && !self.isMultiColumnsSelected) {\n self.selectColumn(self.currentCell.header.index, ctrl, e.shiftKey);\n } else if (self.dragMode === 'row-reorder' && !self.isMultiRowsSelected) {\n self.selectRow(self.dragStartObject.rowIndex, ctrl, null);\n }\n window.addEventListener('mousemove', self.dragReorder, false);\n window.addEventListener('mouseup', self.stopDragReorder, false);\n return;\n }\n };\n self.mouseup = function (e) {\n clearTimeout(self.scrollTimer);\n self.cellBoundaryCrossed = true;\n self.rowBoundaryCrossed = true;\n self.columnBoundaryCrossed = true;\n self.selecting = undefined;\n self.draggingItem = undefined;\n self.dragStartObject = undefined;\n if (\n self.dispatchEvent('mouseup', { NativeEvent: e, cell: self.currentCell })\n ) {\n return;\n }\n if (!self.hasFocus && e.target !== self.canvas) {\n return;\n }\n if (self.currentCell && self.currentCell.grid !== undefined) {\n return;\n }\n if (self.contextMenu || self.input) {\n return;\n }\n if (self.dragStart && self.isInGrid(self.dragStart)) {\n self.controlInput.focus();\n }\n e.preventDefault();\n };\n // gets the horizontal adjacent cells as well as first/last based on column visibility\n self.getAdjacentCells = function () {\n var x,\n i,\n s = self.getSchema(),\n o = {};\n for (x = 0; x < s.length; x += 1) {\n i = self.orders.columns[x];\n if (!s[i].hidden) {\n if (o.first === undefined) {\n o.first = x;\n o.left = x;\n }\n o.last = x;\n if (x > self.activeCell.columnIndex && o.right === undefined) {\n o.right = x;\n }\n if (x < self.activeCell.columnIndex) {\n o.left = x;\n }\n }\n }\n if (o.right === undefined) {\n o.right = o.last;\n }\n return o;\n };\n self.keydown = function (e) {\n var i,\n ev,\n adjacentCells = self.getAdjacentCells(),\n x = Math.max(self.activeCell.columnIndex, 0),\n y = Math.max(self.activeCell.rowIndex, 0),\n ctrl = e.ctrlKey || e.metaKey,\n last = self.viewData.length - 1,\n s = self.getSchema(),\n cols = s.length - 1;\n\n var defaultPrevented = self.dispatchEvent('keydown', {\n NativeEvent: e,\n cell: self.currentCell,\n });\n\n if (defaultPrevented) {\n return;\n }\n\n if (!self.attributes.keepFocusOnMouseOut && !self.hasFocus) {\n return;\n }\n\n // If a user starts typing content, switch to \"Enter\" mode\n if (isPrintableKeyEvent(e) && !ctrl) {\n return self.beginEditAt(x, y, e, true);\n }\n\n if (self.attributes.showNewRow) {\n last += 1;\n }\n\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n\n if (e.key === 'Escape') {\n self.selectNone();\n } else if (ctrl && e.key === 'a') {\n self.selectAll();\n } else if (['Backspace', 'Delete'].includes(e.key)) {\n self.deleteSelectedData();\n } else if (e.key === 'ArrowDown') {\n y += 1;\n } else if (e.key === 'ArrowUp') {\n y -= 1;\n } else if (\n (e.key === 'ArrowLeft' && !ctrl) ||\n (e.shiftKey && e.key === 'Tab')\n ) {\n x = adjacentCells.left;\n } else if (\n (e.key === 'ArrowRight' && !ctrl) ||\n (!e.shiftKey && e.key === 'Tab')\n ) {\n x = adjacentCells.right;\n } else if (e.key === 'PageUp') {\n y -= self.page;\n e.preventDefault();\n } else if (e.key === 'PageDown') {\n y += self.page;\n e.preventDefault();\n } else if (e.key === 'Home' || (ctrl && e.key === 'ArrowUp')) {\n y = 0;\n } else if (e.key === 'End' || (ctrl && e.key === 'ArrowDown')) {\n y = self.viewData.length - 1;\n } else if (ctrl && e.key === 'ArrowRight') {\n x = adjacentCells.last;\n } else if (ctrl && e.key === 'ArrowLeft') {\n x = adjacentCells.first;\n }\n\n if (e.key === 'Enter') {\n e.preventDefault();\n return self.beginEditAt(x, y, e);\n }\n if (x < 0 || Number.isNaN(x)) {\n x = adjacentCells.first;\n }\n if (y > last) {\n y = last;\n }\n if (y < 0 || Number.isNaN(y)) {\n y = 0;\n }\n if (x > cols) {\n x = adjacentCells.last;\n }\n\n // TODO - most likely some column order related bugs in key based selection\n // Arrows\n var isArrowKey = [\n 'ArrowLeft',\n 'ArrowUp',\n 'ArrowRight',\n 'ArrowDown',\n ].includes(e.key);\n\n // Shrinking and expanding selection using shift and arrow keys\n if (e.shiftKey && isArrowKey) {\n const firstSelectedRowIndex = self.selections.findIndex((el) => !!el);\n const firstSelectedRow = self.selections[firstSelectedRowIndex];\n const firstSelectedColumnIndex = firstSelectedRow[0];\n const lastSelectedColumn = firstSelectedRow[firstSelectedRow.length - 1];\n const yAtTop = y === 0;\n const yAtBottom = y === last;\n const xAtLeft = x === 0;\n const xAtRight = x === cols;\n\n if (e.key === 'ArrowUp') {\n if (y + 1 > firstSelectedRowIndex && !yAtTop) {\n self.selections.pop();\n } else if (y < firstSelectedRowIndex) {\n self.selections[y] = self.selections[y] || [];\n self.selections[y].push(x);\n } else if (yAtTop && self.activeCell.rowIndex !== 0) {\n self.selections.pop();\n }\n }\n\n if (e.key === 'ArrowDown') {\n if (y > firstSelectedRowIndex && y === self.selections.length) {\n self.selections[y] = self.selections[y] || [];\n self.selections[y].push(x);\n } else if (y >= firstSelectedRowIndex && !yAtBottom) {\n delete self.selections[y - 1];\n } else if (yAtBottom && self.activeCell.rowIndex !== last) {\n delete self.selections[y - 1];\n }\n }\n\n for (const selection of self.selections) {\n if (e.key === 'ArrowRight' && selection) {\n if (x > lastSelectedColumn) {\n selection.push(x);\n } else if (x <= lastSelectedColumn && !xAtRight) {\n selection.shift();\n } else if (xAtRight && self.activeCell.columnIndex !== cols) {\n selection.shift();\n }\n }\n\n if (e.key === 'ArrowLeft' && selection) {\n if (x < firstSelectedColumnIndex) {\n selection.unshift(x);\n } else if (x >= firstSelectedColumnIndex && !xAtLeft) {\n selection.pop();\n } else if (xAtLeft && self.activeCell.columnIndex !== 0) {\n selection.pop();\n }\n }\n }\n\n self.selectionBounds = self.getSelectionBounds();\n self.selectArea(undefined, ctrl);\n\n self.draw(true);\n }\n\n if (x !== self.activeCell.columnIndex || y !== self.activeCell.rowIndex) {\n self.scrollIntoView(\n x !== self.activeCell.columnIndex ? x : undefined,\n y !== self.activeCell.rowIndex && !Number.isNaN(y) ? y : undefined,\n );\n\n self.setActiveCell(x, y);\n if (!e.shiftKey && self.attributes.selectionFollowsActiveCell) {\n if (!ctrl) {\n self.selections = [];\n self.selectedRows = [];\n self.selectedColumns = [];\n }\n self.selections[y] = self.selections[y] || [];\n self.selections[y].push(x);\n ev = {\n selectedData: self.getSelectedData(),\n selections: self.selections,\n selectionBounds: self.getSelectionBounds(),\n selectedCells: self.getSelectedCells(),\n };\n Object.defineProperty(ev, 'selectedData', {\n get: function () {\n return self.getSelectedData();\n },\n });\n self.dispatchEvent('selectionchanged', ev);\n }\n self.draw(true);\n }\n };\n self.keyup = function (e) {\n if (\n self.dispatchEvent('keyup', { NativeEvent: e, cell: self.currentCell })\n ) {\n return;\n }\n if (!self.hasFocus) {\n return;\n }\n };\n self.keypress = function (e) {\n if (!self.hasFocus) {\n return;\n }\n if (\n self.dispatchEvent('keypress', { NativeEvent: e, cell: self.currentCell })\n ) {\n return;\n }\n };\n self.dblclick = function (e) {\n if (\n self.dispatchEvent('dblclick', { NativeEvent: e, cell: self.currentCell })\n ) {\n return;\n }\n if (!self.hasFocus) {\n return;\n }\n if (\n self.currentCell.context === 'ew-resize' &&\n self.currentCell.style === 'columnHeaderCell'\n ) {\n // Check that double-clicked cell is selected or part of selection.\n const currentCellIsSelected = self.isColumnSelected(\n self.currentCell.columnIndex,\n );\n\n if (currentCellIsSelected) {\n // There might be more\n self.fitSelectedColumns();\n } else {\n self.fitColumnToValues(self.currentCell.header.name);\n }\n } else if (\n self.currentCell.context === 'ew-resize' &&\n self.currentCell.style === 'cornerCell'\n ) {\n self.autosize();\n } else if (\n ['cell', 'activeCell'].includes(self.currentCell.style) &&\n !self.hovers.onFilterButton &&\n !self.hovers.onCellTreeIcon\n ) {\n if (self.currentCell.isRowTree || self.currentCell.isColumnTree) {\n self.cellTreeExpandCollapse(\n self.currentCell.rowIndex,\n self.currentCell.columnIndex,\n );\n self.draw();\n } else {\n self.beginEditAt(\n self.currentCell.columnIndex,\n self.currentCell.rowIndex,\n );\n }\n }\n };\n self.scrollWheel = function (e) {\n var l,\n t,\n ev = e,\n deltaX = e.deltaX === undefined ? e.NativeEvent.deltaX : e.deltaX,\n deltaY = e.deltaY === undefined ? e.NativeEvent.deltaY : e.deltaY,\n deltaMode =\n e.deltaMode === undefined ? e.NativeEvent.deltaMode : e.deltaMode;\n var e = e.NativeEvent || e;\n if (wheeling) {\n ev.preventDefault(e);\n return;\n }\n if (self.dispatchEvent('wheel', { NativeEvent: e })) {\n return;\n }\n self.touchHaltAnimation = true;\n l = self.scrollBox.scrollLeft;\n t = self.scrollBox.scrollTop;\n if (self.hasFocus) {\n //BUG Issue 42: https://github.com/TonyGermaneri/canvas-datagrid/issues/42\n //https://stackoverflow.com/questions/20110224/what-is-the-height-of-a-line-in-a-wheel-event-deltamode-dom-delta-line\n if (deltaMode === 1) {\n // line mode = 17 pixels per line\n deltaY = deltaY * 17;\n }\n if (\n (self.scrollBox.scrollTop < self.scrollBox.scrollHeight &&\n deltaY > 0) ||\n (self.scrollBox.scrollLeft < self.scrollBox.scrollWidth &&\n deltaX > 0) ||\n (self.scrollBox.scrollTop > 0 && deltaY < 0) ||\n (self.scrollBox.scrollLeft > 0 && deltaX < 0)\n ) {\n ev.preventDefault(e);\n }\n wheeling = setTimeout(function () {\n wheeling = undefined;\n self.scrollBox.scrollTo(deltaX + l, deltaY + t);\n }, 1);\n }\n };\n self.pasteData = function (\n pasteValue,\n mimeType,\n startRowIndex,\n startColIndex,\n ) {\n if (mimeType === 'text/html' && !isSupportedHtml(pasteValue)) {\n console.warn(\n 'Unrecognized HTML format. HTML must be a simple table, e.g.: <table><tr><td>data</td></tr></table>.',\n );\n console.warn(\n 'Data with the mime type text/html not in this format will not be imported as row data.',\n );\n\n return;\n }\n var schema = self.getSchema();\n var rows = parseData(pasteValue, mimeType);\n\n // selected cell. This mimics Excel's paste functionality, and works\n // as a poor-man's fill-down.\n if (rows.length === 1 && rows[0].length === 1) {\n var cellData = rows[0][0].value.map((item) => item.value).join();\n\n self.forEachSelectedCell(function (data, rowIndex, colName) {\n data[rowIndex][colName] = cellData;\n });\n } else {\n var selections = [];\n self.selectedRows = [];\n self.selectedColumns = [];\n for (var rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n // Rows may have been moved by user, so get the actual row index\n // (instead of the row index at which the row is rendered):\n var realRowIndex = self.orders.rows[startRowIndex + rowIndex];\n var cells = rows[rowIndex];\n\n var existingRowData = self.viewData[realRowIndex];\n var newRowData = Object.assign({}, existingRowData);\n\n selections[realRowIndex] = [];\n self.selectedRows.push(realRowIndex);\n\n for (var colIndex = 0; colIndex < cells.length; colIndex++) {\n var column = schema[startColIndex + colIndex];\n\n if (!column) {\n console.warn('Paste data exceeded grid bounds. Skipping.');\n continue;\n }\n\n var columnName = column.name;\n var cellData = cells[colIndex].value\n .map((item) => item.value)\n .join('');\n\n if (cellData === undefined || cellData === null) {\n newRowData[columnName] = existingRowData[columnName];\n continue;\n }\n\n selections[realRowIndex].push(startColIndex + colIndex);\n\n newRowData[columnName] = cellData;\n if (self.selectedColumns.indexOf(startColIndex + colIndex) === -1)\n self.selectedColumns.push(startColIndex + colIndex);\n }\n\n self.originalData[self.boundRowIndexMap.get(realRowIndex)] = newRowData;\n // Update view date here to avoid a full refresh of `viewData`.\n // To stay in line with Excel and Google Sheet behaviour,\n // don't perform a full refresh (and filter/sort results)\n // as this would make any pasted values disappear and/or suddenly change position.\n self.viewData[realRowIndex] = newRowData;\n }\n self.selections = selections;\n }\n\n // selections is a sparse array, so we condense:\n var affectedCells = [];\n\n self.selections.forEach(function (row, rowIndex) {\n if (rowIndex === undefined) return;\n\n row.forEach(function (columnIndex) {\n affectedCells.push([\n rowIndex,\n columnIndex,\n self.getBoundRowIndexFromViewRowIndex(rowIndex),\n self.getBoundColumnIndexFromViewColumnIndex(columnIndex),\n ]);\n });\n });\n\n self.dispatchEvent('afterpaste', {\n cells: affectedCells,\n });\n\n return rows.length;\n };\n self.getNextVisibleColumnIndex = function (visibleColumnIndex) {\n var x,\n s = self.getVisibleSchema();\n for (x = 0; x < s.length; x += 1) {\n if (s[x].columnIndex === visibleColumnIndex) {\n return s[x + 1].columnIndex;\n }\n }\n return -1;\n };\n self.getVisibleColumnIndexOf = function (columnIndex) {\n var x,\n s = self.getVisibleSchema();\n for (x = 0; x < s.length; x += 1) {\n if (s[x].columnIndex === columnIndex) {\n return x;\n }\n }\n return -1;\n };\n self.paste = function (event) {\n if (!self.attributes.editable) {\n return;\n }\n\n var defaultPrevented = self.dispatchEvent('beforepaste', {\n NativeEvent: event,\n });\n\n if (defaultPrevented) {\n return;\n }\n\n var clipboardItems = new Map(\n Array.from(event.clipboardData.items).map((item) => [item.type, item]),\n );\n\n // Supported MIME types, in order of preference:\n var supportedMimeTypes = ['text/html', 'text/csv', 'text/plain'];\n\n // The clipboard will often contain the same data in multiple formats,\n // which can be used depending on the context in which it's pasted. Here\n // we'll prefere more structured (HTML/CSV) over less structured, when\n // available, so we try to find those first:\n var pasteableItems = supportedMimeTypes\n .map((mimeType) => clipboardItems.get(mimeType))\n .filter((item) => !!item); // filter out not-found MIME types (= undefined)\n\n if (pasteableItems.length === 0) {\n console.warn(\n 'Cannot find supported clipboard data type. Supported types are:',\n supportedMimeTypes.join(', '),\n );\n return;\n }\n\n var itemToPaste = pasteableItems[0];\n\n let startCell = [];\n for (\n let rowIndex = 0, len = self.selections.length;\n rowIndex < len;\n rowIndex++\n ) {\n const row = self.selections[rowIndex];\n if (row) {\n if (row[0] === undefined) return;\n startCell = [rowIndex, row[0] < 0 ? row[1] : row[0]];\n break;\n }\n }\n\n // itemToPaste is cleared once accessed (getData or getAsString),\n // so we need to store the type here, before reading its value:\n var pasteType = itemToPaste.type;\n\n itemToPaste.getAsString(function (pasteValue) {\n self.pasteData(pasteValue, pasteType, startCell[0], startCell[1]);\n\n self.draw();\n });\n };\n self.cut = function (event) {\n if (self.dispatchEvent('cut', { NativeEvent: event })) {\n return;\n }\n\n // Expecting instance of `ClipboardEvent` with `clipboardData` attribute\n if (!self.hasFocus || !event.clipboardData) {\n return;\n }\n\n self.copySelectedCellsToClipboard(event.clipboardData);\n\n const affectedCells = self.clearSelectedCells();\n\n self.dispatchEvent('aftercut', {\n cells: affectedCells,\n });\n\n requestAnimationFrame(() => self.draw());\n event.preventDefault();\n };\n self.copy = function (event) {\n if (self.dispatchEvent('copy', { NativeEvent: event })) {\n return;\n }\n\n // Expecting instance of `ClipboardEvent` with `clipboardData` attribute\n if (!self.hasFocus || !event.clipboardData) {\n return;\n }\n\n self.copySelectedCellsToClipboard(event.clipboardData);\n\n event.preventDefault();\n };\n return;\n}\n","'use strict';\n\nconst isSupportedHtml = function (pasteValue) {\n // We need to match new lines in the HTML, .* won't match new line characters.\n // `s` regex modifier can't be used with `ecmaVersion === 2017`.\n // As a workaround using [\\s\\S]*. Fix when we upgrade `ecmaVersion`.\n const genericDiv = /(?:^(<meta[^>]*>)?[\\s\\S]*<div[^>]*>)/;\n const genericSpan = /(?:^(<meta[^>]*>)?[\\s\\S]*<span[^>]*>)/;\n const genericTable = /(?:^(<meta[^>]*>)?[\\s\\S]*<table[^>]*>)/; // Matches Google Sheets format clipboard data format too.\n const excelTable = /(?:<!--StartFragment-->[\\s\\S]*<tr[^>]*>)/;\n const excelTableRow = /(?:<!--StartFragment-->[\\s\\S]*<td[^>]*>)/;\n\n return [\n genericDiv,\n genericTable,\n genericSpan,\n excelTable,\n excelTableRow,\n ].some((expression) => expression.test(pasteValue));\n};\n\n// Explanation of nodeType here: https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst IGNORE_NODETYPES = [8, 3]; // '#text' and '#comment'\n\nconst isHtmlTable = function (pasteValue) {\n return /(?:<table[^>]*>)|(?:<tr[^]*>)/.test(pasteValue);\n};\n\nconst sanitizeElementData = function (element) {\n // It is not entirely clear if this check on nodeType is required.\n let elementData = element.nodeType === 1 ? element.innerText : element.data;\n\n return String(elementData).replace(/\\s+/g, ' ').trim();\n};\n\nconst parseHtmlText = function (data) {\n const doc = new DOMParser().parseFromString(data, 'text/html');\n const element = doc.querySelector('div') || doc.querySelector('span');\n const elementData = sanitizeElementData(element);\n\n return elementData\n .split('\\n')\n .map((item) => item.split('\\t').map((value) => ({ value: [{ value }] })));\n};\n\nconst parseHtmlTable = function (data) {\n const doc = new DOMParser().parseFromString(data, 'text/html');\n const trs = doc.querySelectorAll('table tr');\n const rows = [];\n\n for (const tr of trs) {\n const row = [];\n\n for (const childNode of tr.childNodes) {\n if (IGNORE_NODETYPES.includes(childNode.nodeType)) continue;\n\n const col = { value: [] };\n const value = sanitizeElementData(childNode);\n\n if (value) col.value.push({ value });\n\n row.push(col);\n }\n\n rows.push(row);\n }\n\n return rows;\n};\n\nconst parseText = function (data) {\n return data\n .split('\\n')\n .map((item) => item.split('\\t').map((value) => ({ value: [{ value }] })));\n};\n\nconst parseData = function (data, mimeType) {\n if (mimeType === 'text/html' && isHtmlTable(data)) {\n return parseHtmlTable(data);\n } else if (mimeType === 'text/html') {\n return parseHtmlText(data);\n }\n\n // Default data format is string, so split on new line,\n // and then enclose in an array (a row with one cell):\n return parseText(data);\n};\n\nconst htmlSafe = function (value) {\n if (typeof value !== 'string') return value;\n\n return value.replace(/</g, '<').replace(/>/g, '>');\n};\n\nconst createTextString = function (selectedData, isNeat) {\n // Selected like [[0, 1], [0, 1]] of [[0, 3]] is neat; Selected like [[0, 1], [1, 2]] is untidy.\n // If not isNeat we just return a simple string of concatenated values.\n if (!isNeat)\n return selectedData.map((row) => Object.values(row).join('')).join('');\n\n // If isNeat, we can create tab separated mutti-line text.\n return selectedData.map((row) => Object.values(row).join('\\t')).join('\\n');\n};\n\nconst createHTMLString = function (selectedData, isNeat) {\n if (!isNeat) return createTextString(selectedData, isNeat);\n\n // If isNeat, we can create a HTML table with the selected data.\n let htmlString = '<table>';\n htmlString += selectedData\n .map(\n (row) =>\n '<tr>' +\n Object.values(row)\n .map((value) => ['<td>', htmlSafe(value), '</td>'].join(''))\n .join('') +\n '</tr>',\n )\n .join('');\n htmlString += '</table>';\n\n return htmlString;\n};\n\nexport {\n createTextString,\n createHTMLString,\n isSupportedHtml,\n htmlSafe,\n parseData,\n parseHtmlTable,\n parseHtmlText,\n parseText,\n sanitizeElementData,\n};\n","'use strict';\n\n/**\n * Merge a new hidden row range into existed ranges array\n * @param {any[]} hiddenRowRanges tuples: Array<[bgeinRowIndex, endRowIndex]>\n * @param {number[]} newRange tuple: [beginRowIndex, endRowIndex]\n * @returns {boolean}\n */\nconst mergeHiddenRowRanges = function (hiddenRowRanges, newRange) {\n const [beginRowIndex, endRowIndex] = newRange;\n if (endRowIndex < beginRowIndex) return false;\n let inserted = false;\n for (let i = 0; i < hiddenRowRanges.length; i++) {\n const range = hiddenRowRanges[i];\n if (beginRowIndex > range[1] + 1) continue;\n if (beginRowIndex <= range[0] && endRowIndex >= range[0]) {\n hiddenRowRanges[i] = [beginRowIndex, Math.max(endRowIndex, range[1])];\n inserted = true;\n break;\n }\n if (beginRowIndex >= range[0]) {\n hiddenRowRanges[i] = [range[0], Math.max(endRowIndex, range[1])];\n inserted = true;\n break;\n }\n }\n if (!inserted) hiddenRowRanges.push([beginRowIndex, endRowIndex]);\n // merge intersections after sorting ranges\n hiddenRowRanges.sort((a, b) => a[0] - b[0]);\n for (let i = 0; i < hiddenRowRanges.length - 1; i++) {\n const range = hiddenRowRanges[i];\n const nextRange = hiddenRowRanges[i + 1];\n if (nextRange[0] <= range[1] + 1) {\n hiddenRowRanges[i] = [range[0], Math.max(range[1], nextRange[1])];\n hiddenRowRanges.splice(i + 1, 1);\n i--;\n }\n }\n return true;\n};\n\nexport { mergeHiddenRowRanges };\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals HTMLElement: false, Reflect: false, define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nimport { createHTMLString, createTextString } from './events/util';\n\nexport default function (self, ctor) {\n self.scale = 1;\n self.orders = {\n rows: [],\n columns: [],\n };\n self.appliedInlineStyles = {};\n self.cellGridAttributes = {};\n self.treeGridAttributes = {};\n self.visibleRowHeights = [];\n self.hasFocus = false;\n self.activeCell = {\n columnIndex: 0,\n rowIndex: 0,\n };\n self.innerHTML = '';\n self.storageName = 'canvasDataGrid';\n self.invalidSearchExpClass = 'canvas-datagrid-invalid-search-regExp';\n self.localStyleLibraryStorageKey = 'canvas-datagrid-user-style-library';\n self.dataType = 'application/x-canvas-datagrid';\n self.orderBy = null;\n self.orderDirection = 'asc';\n self.orderings = {\n columns: [],\n add: function (orderBy, orderDirection, sortFunction) {\n self.orderings.columns = self.orderings.columns.filter(function (col) {\n return col.orderBy !== orderBy;\n });\n self.orderings.columns.push({\n orderBy: orderBy,\n orderDirection: orderDirection,\n sortFunction: sortFunction,\n });\n },\n sort: function () {\n console.warn(\n 'grid.orderings.sort has been deprecated. Please use grid.refresh().',\n );\n\n self.orderings.columns.forEach(function (col) {\n self.viewData.sort(col.sortFunction(col.orderBy, col.orderDirection));\n });\n },\n };\n self.columnFilters = {};\n self.filters = {};\n self.frozenRow = 0;\n self.frozenColumn = 0;\n self.ellipsisCache = {};\n self.scrollCache = { x: [], y: [] };\n self.scrollBox = {};\n self.visibleRows = [];\n self.visibleCells = [];\n /**\n * Each item of this array contains these properties:\n * - `x`, `y`, `x2`, `y2`\n * - `orderIndex0`, `orderIndex1`: The closed interval of the hiding rows/columns.\n * - `dir`: The directon of the unhide indicator. 'l' and 'r' for columns, 't' and 'b' for rows\n */\n self.visibleUnhideIndicators = [];\n /**\n * Each item is a tuple conatins two numbers:\n * its type difination: Array<[beginRowIndex, endRowIndex]>\n * Each tuple represents a closed Interval\n */\n self.hiddenRowRanges = [];\n /**\n * This array stored all groups information with context for drawing,\n * it is generated by drawing functions,\n * and be used for searching groups when users operate on the spreadsheet\n * Each item of this array contains these properties:\n * - `type`: its available values: 'c' and 'r'. indicates the type of this item, 'c' for column group\n * and 'r' for row group.\n * - `x`,`y`: the left-top point of this group's rendering area.\n * - `x2`, `y2`: the right-bottom of this group's rendering area.\n * - `collapsed`: this value indicates the collapsed status of this group.\n * - `from`, `to`: The column index range of this group (We use this value for searching the group)\n * - `row`: The row index for column groups (We use this value for searching the group)\n */\n self.visibleGroups = [];\n self.sizes = {\n rows: {},\n columns: {},\n trees: {},\n };\n self.selections = [];\n self.selectedRows = [];\n self.selectedColumns = [];\n self.filterable = {\n rows: [],\n columns: [],\n };\n self.selectedFilterButton = {\n columnIndex: -1,\n rowIndex: -1,\n };\n self.cellTree = {\n rows: [],\n columns: {},\n tempSchema: {},\n rowTreeColIndex: 0,\n columnTreeRowStartIndex: 0,\n columnTreeRowEndIndex: 0,\n origin: {\n rows: [],\n columns: {},\n },\n };\n self.hovers = {};\n self.attributes = {};\n self.style = {};\n self.formatters = {};\n self.sorters = {};\n self.parsers = {};\n self.schemaHashes = {};\n self.events = {};\n self.changes = [];\n self.scrollIndexTop = 0;\n self.scrollPixelTop = 0;\n self.scrollIndexLeft = 0;\n self.scrollPixelLeft = 0;\n self.childGrids = {};\n self.openChildren = {};\n\n /**\n * Array for grouped columns\n * Each item in this array is an array and it represents some grouping in one row\n * A grouping descriptor has three properties:\n * - `from`: The column index of the first column\n * - `to`: The column index of the last column\n * - `collapsed`: Is this group be collapsed\n * @example [[{ from: 1, to: 2, collapsed: false }]]\n */\n self.groupedColumns = [];\n\n /**\n * Array for grouped rows\n * Each item in this array is an array and it represents some grouping in one column\n * A grouping descriptor has three properties:\n * - `from`: The row index of the first row\n * - `to`: The row index of the last row\n * - `collapsed`: Is this group be collapsed\n * @example [[{ from: 1, to: 2, collapsed: false }]]\n */\n self.groupedRows = [];\n\n self.scrollModes = [\n 'vertical-scroll-box',\n 'vertical-scroll-top',\n 'vertical-scroll-bottom',\n 'horizontal-scroll-box',\n 'horizontal-scroll-right',\n 'horizontal-scroll-left',\n ];\n self.componentL1Events = {};\n self.eventNames = [\n 'afterdraw',\n 'afterrendercell',\n 'afterrenderfilterbutton',\n 'aftercreategroup',\n 'attributechanged',\n 'beforebeginedit',\n 'beforecreatecellgrid',\n 'beforedraw',\n 'beforeendedit',\n 'beforerendercell',\n 'beforerendercellgrid',\n 'beforerenderfilterbutton',\n 'beginedit',\n 'cellmouseout',\n 'cellmouseover',\n 'click',\n 'collapsetree',\n 'columnhide',\n 'columnunhide',\n 'contextmenu',\n 'copy',\n 'datachanged',\n 'dblclick',\n 'endedit',\n 'expandtree',\n 'formatcellvalue',\n 'keydown',\n 'keypress',\n 'keyup',\n 'mousedown',\n 'mousemove',\n 'mouseup',\n 'newrow',\n 'ordercolumn',\n 'rendercell',\n 'rendercellgrid',\n 'renderorderbyarrow',\n 'rendertext',\n 'rendertreearrow',\n 'reorder',\n 'reordering',\n 'resize',\n 'resizecolumn',\n 'resizerow',\n 'schemachanged',\n 'scroll',\n 'selectionchanged',\n 'stylechanged',\n 'touchcancel',\n 'touchend',\n 'touchmove',\n 'touchstart',\n 'wheel',\n ];\n self.mouse = { x: 0, y: 0 };\n self.getSelectedData = function (expandToRow) {\n const selectedData = [];\n const schema = self.getSchema();\n const viewDataLength = self.viewData.length;\n\n if (viewDataLength === 0) {\n return [];\n }\n\n // self.selections is a sparse array, so `viewRowIndex` here\n // will equal the row index as where it's rendered,\n // not as where it is in the original data array.\n self.selections.forEach(function (row, viewRowIndex) {\n if (!row) {\n return;\n }\n\n if (viewRowIndex === viewDataLength) {\n return;\n }\n\n if (row.length === 0) {\n selectedData[viewRowIndex] = null;\n return;\n }\n\n selectedData[viewRowIndex] = {};\n\n row.forEach(function (col) {\n if (col === -1 || !schema[col]) {\n return;\n }\n\n const orderedIndex = self.orders.columns[col];\n\n if (!expandToRow && schema[orderedIndex].hidden) {\n return;\n }\n\n if (self.viewData[viewRowIndex]) {\n selectedData[viewRowIndex][schema[orderedIndex].name] =\n self.viewData[viewRowIndex][schema[orderedIndex].name];\n }\n });\n });\n\n return selectedData;\n };\n self.getSelectedCells = function (expandToRow) {\n const selectedCells = [];\n const schema = self.getSchema();\n const viewDataLength = self.viewData.length;\n\n if (viewDataLength === 0) {\n return [];\n }\n\n for (const [viewRowIndex, row] of self.selections.entries()) {\n if (!row || row.length === 0) continue;\n\n for (const [, viewColumnIndex] of row.entries()) {\n if (viewColumnIndex === -1 || !schema[viewColumnIndex]) {\n continue;\n }\n\n const boundColumnIndex = self.getBoundColumnIndexFromViewColumnIndex(\n viewColumnIndex,\n );\n\n if (!expandToRow && schema[boundColumnIndex].hidden) {\n continue;\n }\n\n if (self.viewData[viewRowIndex]) {\n const header = schema[boundColumnIndex];\n const value = self.viewData[viewRowIndex][header.name];\n const boundRowIndex = self.getBoundRowIndexFromViewRowIndex(\n viewRowIndex,\n );\n\n const cell = {\n value,\n header,\n boundRowIndex,\n boundColumnIndex,\n viewRowIndex,\n viewColumnIndex,\n };\n\n selectedCells.push(cell);\n }\n }\n }\n\n return selectedCells;\n };\n self.copySelectedCellsToClipboard = function (clipboardData) {\n const selectedData = [];\n const schema = self.getSchema();\n let firstRowAsString;\n let isNeat = true; // Selected like [[0, 1], [0, 1]] of [[0, 3]] is neat; Selected like [[0, 1], [1, 2]] is untidy\n\n for (const [rowIndex, row] of self.selections.entries()) {\n // If no cells are selected for a particular rowIndex the selections array will contain an empty element for that rowIndex.\n if (!row) continue;\n\n // Convert to string for easy comparison to the first row.\n const rowAsString = row.join(',').toString();\n const rowDict = {};\n\n if (!firstRowAsString) firstRowAsString = row.join(',').toString();\n if (isNeat && rowAsString !== firstRowAsString) isNeat = false;\n\n const boundRowIndex = self.getBoundRowIndexFromViewRowIndex(rowIndex);\n\n for (let columnIndex of row) {\n // If the whole row is selected the columnIndex for the rowHeader is -1.\n if (columnIndex < 0) continue;\n\n const boundColumnIndex = self.getBoundColumnIndexFromViewColumnIndex(\n columnIndex,\n );\n const columnName = schema[boundColumnIndex].name;\n\n const value = self.originalData[boundRowIndex][columnName];\n\n rowDict[columnName] = value;\n }\n selectedData.push(rowDict);\n }\n\n if (selectedData.length > 0) {\n const textString = createTextString(selectedData, isNeat);\n const htmlString = createHTMLString(selectedData, isNeat);\n\n const copiedData = {\n 'text/plain': textString,\n 'text/html': htmlString,\n 'text/csv': textString,\n 'application/json': JSON.stringify(selectedData),\n };\n\n for (const [mimeType, data] of Object.entries(copiedData)) {\n clipboardData.setData(mimeType, data);\n }\n }\n };\n self.clearSelectedCells = function () {\n const schema = self.getSchema();\n const affectedCells = [];\n\n for (const [rowIndex, row] of self.selections.entries()) {\n // If no cells are selected for a particular rowIndex the selections array will contain an empty element for that rowIndex.\n if (!row) continue;\n\n const boundRowIndex = self.getBoundRowIndexFromViewRowIndex(rowIndex);\n\n for (let columnIndex of row) {\n // If the whole row is selected the columnIndex for the rowHeader is -1.\n if (columnIndex < 0) continue;\n\n const boundColumnIndex = self.getBoundColumnIndexFromViewColumnIndex(\n columnIndex,\n );\n const columnName = schema[boundColumnIndex].name;\n\n self.viewData[boundRowIndex][columnName] = '';\n\n affectedCells.push([\n rowIndex,\n columnIndex,\n boundRowIndex,\n boundColumnIndex,\n ]);\n }\n }\n\n return affectedCells;\n };\n self.getBoundRowIndexFromViewRowIndex = function (viewRowIndex) {\n if (self.boundRowIndexMap && self.boundRowIndexMap.has(viewRowIndex)) {\n return self.boundRowIndexMap.get(viewRowIndex);\n }\n\n return undefined;\n };\n self.getBoundColumnIndexFromViewColumnIndex = function (viewColumnIndex) {\n return self.orders.columns[viewColumnIndex];\n };\n /**\n * Get the height of the area about column groups for rendering and handling events.\n */\n self.getColumnGroupAreaHeight = function () {\n if (!self.attributes.allowGroupingColumns) {\n return 0;\n }\n const groups = self.groupedColumns.length;\n const base = self.style.columnGroupRowHeight * self.scale;\n return base * groups;\n };\n /**\n * Get the width of the area about row groups for rendering and handling events.\n */\n self.getRowGroupAreaWidth = function () {\n if (!self.attributes.allowGroupingRows) {\n return 0;\n }\n const groups = self.groupedRows.length;\n const base = self.style.rowGroupColumnWidth * self.scale;\n return base * groups;\n };\n self.getCollapsedColumnGroups = function () {\n const result = [];\n for (let rowIndex = 0; rowIndex < self.groupedColumns.length; rowIndex++) {\n const groups = self.groupedColumns[rowIndex];\n for (let groupIndex = 0; groupIndex < groups.length; groupIndex++) {\n const group = groups[groupIndex];\n if (group.collapsed) result.push(group);\n }\n }\n return result;\n };\n self.getCollapsedRowGroups = function () {\n const result = [];\n for (let rowIndex = 0; rowIndex < self.groupedRows.length; rowIndex++) {\n const groups = self.groupedRows[rowIndex];\n for (let groupIndex = 0; groupIndex < groups.length; groupIndex++) {\n const group = groups[groupIndex];\n if (group.collapsed) result.push(group);\n }\n }\n return result;\n };\n /**\n * Toggle the collapse status of a group (expanded/collapsed)\n * @param {{type:string,from:number,to:number}} group\n */\n self.toggleGroup = function (group) {\n if (group.type === 'c') {\n const { from, to } = group;\n /** @type {{from:number,to:number,collapsed:boolean}} */\n let matchedGroup;\n /** @type {Array<Array<{from:number,to:number,collapsed:boolean}>>} */\n const allGroups = self.groupedColumns;\n for (let i = 0; i < allGroups.length; i++) {\n const groups = allGroups[i];\n for (let gi = 0; gi < groups.length; gi++) {\n const group = groups[gi];\n if (group.from === from && group.to === to) {\n matchedGroup = group;\n break;\n }\n }\n if (matchedGroup) break;\n }\n if (!matchedGroup) return;\n const nextCollapsed = !matchedGroup.collapsed;\n matchedGroup.collapsed = nextCollapsed;\n return true;\n }\n if (group.type === 'r') {\n const { from, to } = group;\n /** @type {{from:number,to:number,collapsed:boolean}} */\n let matchedGroup;\n /** @type {Array<Array<{from:number,to:number,collapsed:boolean}>>} */\n const allGroups = self.groupedRows;\n for (let i = 0; i < allGroups.length; i++) {\n const groups = allGroups[i];\n for (let gi = 0; gi < groups.length; gi++) {\n const group = groups[gi];\n if (group.from === from && group.to === to) {\n matchedGroup = group;\n break;\n }\n }\n if (matchedGroup) break;\n }\n if (!matchedGroup) return;\n const nextCollapsed = !matchedGroup.collapsed;\n matchedGroup.collapsed = nextCollapsed;\n return true;\n }\n return false;\n };\n self.isNewGroupRangeValid = function (groupsArray, from, to) {\n for (let i = 0; i < groupsArray.length; i++) {\n const groups = groupsArray[i];\n for (let gIndex = 0; gIndex < groups.length; gIndex++) {\n const group = groups[gIndex];\n if (from === group.to + 1) return false;\n if (from > group.to) continue;\n\n if (from === group.from) {\n if (to === group.to) return false;\n if (to > group.to) return true;\n break; // check smaller range\n }\n if (from > group.from) {\n if (to > group.to) return false;\n break; // check smaller range\n }\n if (to < group.to) return false;\n return true;\n }\n }\n return true;\n };\n self.getColumnHeaderCellHeight = function () {\n if (!self.attributes.showColumnHeaders) {\n return 0;\n }\n return (\n (self.sizes.rows[-1] || self.style.columnHeaderCellHeight) * self.scale\n );\n };\n self.getRowHeaderCellWidth = function () {\n if (!self.attributes.showRowHeaders) {\n return 0;\n }\n return (\n (self.sizes.columns[-1] || self.style.rowHeaderCellWidth) * self.scale\n );\n };\n self.setStorageData = function () {\n if (!self.attributes.saveAppearance || !self.attributes.name) {\n return;\n }\n var visibility = {};\n self.getSchema().forEach(function (column) {\n visibility[column.name] = !column.hidden;\n });\n localStorage.setItem(\n self.storageName + '-' + self.attributes.name,\n JSON.stringify({\n sizes: {\n rows: self.sizes.rows,\n columns: self.sizes.columns,\n },\n orders: {\n rows: self.orders.rows,\n columns: self.orders.columns,\n },\n orderBy: self.orderBy,\n orderDirection: self.orderDirection,\n visibility: visibility,\n }),\n );\n };\n self.getSchema = function () {\n return self.schema || self.tempSchema || [];\n };\n function fillArray(low, high) {\n var i = [],\n x;\n for (x = low; x <= high; x += 1) {\n i[x] = x;\n }\n return i;\n }\n self.createColumnOrders = function () {\n var s = self.getSchema();\n self.orders.columns = fillArray(0, s.length - 1);\n };\n self.createRowOrders = function () {\n self.orders.rows = fillArray(0, self.originalData.length - 1);\n };\n self.fitSelectedColumns = function (width) {\n const selectedColumns = self.selections[0];\n const schema = self.getSchema();\n\n for (const selectedColumn of selectedColumns) {\n // Make sure the column is not the row header and that the whole column has in fact been selected.\n if (selectedColumn >= 0 && self.isColumnSelected(selectedColumn)) {\n if (isNaN(width)) {\n const column = schema[self.orders.columns[selectedColumn]];\n self.fitColumnToValues(column.name);\n } else {\n self.sizes.columns[selectedColumn] = width;\n self.dispatchEvent('resizecolumn', {\n x: width,\n y: self.resizingStartingHeight,\n draggingItem: self.currentCell,\n });\n }\n }\n }\n };\n self.getVisibleSchema = function () {\n return self.getSchema().filter(function (col) {\n return !col.hidden;\n });\n };\n self.applyDefaultValue = function (row, header, rowIndex) {\n var d = header.defaultValue || '';\n if (typeof d === 'function') {\n d = d.apply(self.intf, [header, rowIndex]);\n }\n row[header.name] = d;\n };\n self.createNewRowData = function () {\n self.newRow = {};\n\n // The third argument of applyDefaultValue is the row index\n // of the row for which to apply the default value. In this\n // case, we're creating a new row but not yet appending it\n // to self.originalData, so no row index exists\n const newRowIndex = undefined;\n\n self.getSchema().forEach(function forEachHeader(header) {\n self.applyDefaultValue(self.newRow, header, newRowIndex);\n });\n };\n self.getSchemaNameHash = function (key) {\n var n = 0;\n while (self.schemaHashes[key]) {\n n += 1;\n key = key + n;\n }\n return key;\n };\n self.filter = function (type) {\n var f = self.filters[type];\n if (!f && type !== undefined) {\n console.warn(\n 'Cannot find filter for type %s, falling back to substring match.',\n type,\n );\n f = self.filters.string;\n }\n return f;\n };\n self.hasActiveFilters = function () {\n return self.columnFilters && Object.keys(self.columnFilters).length > 0;\n };\n self.hasCollapsedRowGroup = function () {\n for (let i = 0; i < self.groupedRows.length; i++) {\n const groups = self.groupedRows[i];\n for (let j = 0; j < groups.length; j++) {\n const g = groups[j];\n if (g.collapsed) return true;\n }\n }\n return false;\n };\n self.getFilteredAndSortedViewData = function (originalData) {\n // We make a copy of originalData here in order be able to\n // filter and sort rows without modifying the original array.\n // Each row is turned into a (row, rowIndex) tuple\n // so that when we apply filters, we can refer back to the\n // row's original row number in originalData. This becomes\n // useful when emitting cell events.\n let newViewData = originalData.map((row, originalRowIndex) => [\n row,\n originalRowIndex,\n ]);\n\n // Remove hidden rows here. So we can keep the bound indexes correct\n if (self.hiddenRowRanges.length > 0) {\n const ranges = self.hiddenRowRanges.sort((a, b) => b[1] - a[1]);\n for (let i = 0; i < ranges.length; i++) {\n const [beginRowIndex, endRowIndex] = ranges[i];\n const countOfRows = endRowIndex - beginRowIndex + 1;\n newViewData.splice(beginRowIndex, countOfRows);\n }\n }\n\n // Apply filtering\n for (const [headerName, filterText] of Object.entries(self.columnFilters)) {\n const header = self.getHeaderByName(headerName);\n\n if (!header) {\n continue;\n }\n\n const currentFilterFunction =\n header.filter || self.filter(header.type || 'string');\n\n newViewData = newViewData.filter(function ([row, originalRowIndex]) {\n if (\n self.attributes.allowFreezingRows &&\n !self.attributes.filterFrozenRows &&\n originalRowIndex < self.frozenRow\n )\n return true;\n\n return currentFilterFunction(row[headerName], filterText);\n });\n }\n\n //#region Hide rows from collapsed group\n /** @type {number[][]} */\n let collapsedGroups = [];\n for (let i = 0; i < self.groupedRows.length; i++) {\n const rows = self.groupedRows[i];\n for (let j = 0; j < rows.length; j++) {\n const r = rows[j];\n if (!r.collapsed) continue;\n collapsedGroups.push([r.from, r.to]);\n }\n }\n if (collapsedGroups.length > 0) {\n //#region merge groups\n collapsedGroups.sort((a, b) => a[0] - b[0]);\n let newLen = 0;\n const len = collapsedGroups.length;\n for (let i = 0; i < len; i++) {\n const r = collapsedGroups[i];\n if (i === len - 1) {\n collapsedGroups[newLen++] = r;\n break;\n }\n const to = r[1];\n const [from2, to2] = collapsedGroups[i + 1];\n if (from2 > to + 1) {\n collapsedGroups[newLen++] = r;\n continue;\n }\n collapsedGroups[i + 1] = r;\n if (to2 > to) collapsedGroups[i + 1][1] = to2;\n }\n collapsedGroups = collapsedGroups.slice(0, newLen);\n //#endregion merge groups\n\n //#region omit rows by groups\n let g = collapsedGroups.shift();\n for (let start = 0; start < newViewData.length; start++) {\n const it = newViewData[start][1];\n if (it < g[0]) continue;\n let end = start + 1;\n for (; end < newViewData.length; end++) {\n const it2 = newViewData[end][1];\n if (it2 > g[1]) break;\n }\n newViewData.splice(start, end - start);\n g = collapsedGroups.shift();\n if (!g) break;\n start--;\n }\n //#endregion omit rows by groups\n }\n //#endregion Hide rows from collapsed group\n\n // Apply sorting\n for (const column of self.orderings.columns) {\n const sortFn = column.sortFunction(column.orderBy, column.orderDirection);\n\n newViewData.sort(([rowA], [rowB, rowIndexB]) => {\n if (\n self.attributes.allowFreezingRows &&\n !self.attributes.sortFrozenRows &&\n rowIndexB < self.frozenRow\n )\n return 0;\n return sortFn(rowA, rowB);\n });\n }\n\n return {\n viewData: newViewData.map(([row]) => row),\n boundRowIndexMap: new Map(\n newViewData.map(([_row, originalRowIndex], viewRowIndex) => [\n viewRowIndex,\n originalRowIndex,\n ]),\n ),\n };\n };\n self.refresh = function () {\n const { viewData, boundRowIndexMap } = self.getFilteredAndSortedViewData(\n self.originalData,\n );\n\n self.viewData = viewData;\n self.boundRowIndexMap = boundRowIndexMap;\n\n self.resize();\n self.draw(true);\n };\n self.getBestGuessDataType = function (columnName, data) {\n var t,\n x,\n l = data.length;\n for (x = 0; x < l; x += 1) {\n if (\n data[x] !== undefined &&\n data[x] !== null &&\n [null, undefined].indexOf(data[x][columnName]) !== -1\n ) {\n t = typeof data[x];\n return t === 'object' ? 'string' : t;\n }\n }\n return 'string';\n };\n self.drawChildGrids = function () {\n Object.keys(self.childGrids).forEach(function (gridKey) {\n self.childGrids[gridKey].draw();\n });\n };\n self.resizeChildGrids = function () {\n Object.keys(self.childGrids).forEach(function (gridKey) {\n self.childGrids[gridKey].resize();\n });\n };\n self.autoScrollZone = function (e, x, y, ctrl) {\n var setTimer,\n rowHeaderCellWidth = self.getRowHeaderCellWidth(),\n columnHeaderCellHeight = self.getColumnHeaderCellHeight();\n if (x !== -1) {\n if (x > self.width - self.attributes.selectionScrollZone) {\n self.scrollBox.scrollLeft += self.attributes.selectionScrollIncrement;\n setTimer = true;\n }\n if (x - self.attributes.selectionScrollZone - rowHeaderCellWidth < 0) {\n self.scrollBox.scrollLeft -= self.attributes.selectionScrollIncrement;\n setTimer = true;\n }\n }\n if (y !== -1) {\n if (y > self.height - self.attributes.selectionScrollZone) {\n self.scrollBox.scrollTop += self.attributes.selectionScrollIncrement;\n setTimer = true;\n }\n if (\n y - self.attributes.selectionScrollZone - columnHeaderCellHeight <\n 0\n ) {\n self.scrollBox.scrollTop -= self.attributes.selectionScrollIncrement;\n setTimer = true;\n }\n }\n if (\n setTimer &&\n !ctrl &&\n self.currentCell &&\n self.currentCell.columnIndex !== -1\n ) {\n self.scrollTimer = setTimeout(\n self.mousemove,\n self.attributes.scrollRepeatRate,\n e,\n );\n }\n };\n self.validateColumn = function (c, s) {\n if (!c.name) {\n throw new Error('A column must contain at least a name.');\n }\n if (\n s.filter(function (i) {\n return i.name === c.name;\n }).length > 0\n ) {\n throw new Error(\n 'A column with the name ' +\n c.name +\n ' already exists and cannot be added again.',\n );\n }\n return true;\n };\n self.setDefaults = function (obj1, obj2, key, def) {\n obj1[key] = obj2[key] === undefined ? def : obj2[key];\n };\n self.setAttributes = function () {\n self.defaults.attributes.forEach(function eachAttribute(i) {\n self.setDefaults(self.attributes, self.args, i[0], i[1]);\n });\n };\n self.setStyle = function () {\n self.defaults.styles.forEach(function eachStyle(i) {\n self.setDefaults(self.style, self.args.style || {}, i[0], i[1]);\n });\n };\n self.autosize = function (colName) {\n self.getVisibleSchema().forEach(function (col, colIndex) {\n if (col.name === colName || colName === undefined) {\n self.sizes.columns[colIndex] = Math.max(\n self.findColumnMaxTextLength(col.name),\n self.style.minColumnWidth,\n );\n }\n });\n self.sizes.columns[-1] = self.findColumnMaxTextLength('cornerCell');\n };\n self.dispose = function () {\n if (!self.isChildGrid && self.canvas && self.canvas.parentNode) {\n self.canvas.parentNode.removeChild(self.canvas);\n }\n if (!self.isChildGrid) {\n document.body.removeChild(self.controlInput);\n }\n self.eventParent.removeEventListener('mousedown', self.mousedown, false);\n self.eventParent.removeEventListener('dblclick', self.dblclick, false);\n self.eventParent.removeEventListener('click', self.click, false);\n self.eventParent.removeEventListener('mousemove', self.mousemove);\n self.eventParent.removeEventListener('wheel', self.scrollWheel, false);\n self.canvas.removeEventListener('contextmenu', self.contextmenu, false);\n self.canvas.removeEventListener('copy', self.copy);\n self.controlInput.removeEventListener('copy', self.copy);\n self.controlInput.removeEventListener('cut', self.cut);\n self.controlInput.removeEventListener('paste', self.paste);\n self.controlInput.removeEventListener('keypress', self.keypress, false);\n self.controlInput.removeEventListener('keyup', self.keyup, false);\n self.controlInput.removeEventListener('keydown', self.keydown, false);\n window.removeEventListener('mouseup', self.mouseup, false);\n window.removeEventListener('mousemove', self.mousemove);\n window.removeEventListener('resize', self.resize);\n if (self.observer && self.observer.disconnect) {\n self.observer.disconnect();\n }\n };\n self.tryLoadStoredSettings = function () {\n var s;\n self.reloadStoredValues();\n if (\n self.storedSettings &&\n typeof self.storedSettings.orders === 'object' &&\n self.storedSettings.orders !== null\n ) {\n if (\n self.storedSettings.orders.rows.length >= (self.viewData || []).length\n ) {\n self.orders.rows = self.storedSettings.orders.rows;\n }\n s = self.getSchema();\n if (self.storedSettings.orders.columns.length === s.length) {\n self.orders.columns = self.storedSettings.orders.columns;\n }\n self.orderBy =\n self.storedSettings.orderBy === undefined\n ? s[0].name\n : self.storedSettings.orderBy;\n self.orderDirection =\n self.storedSettings.orderDirection === undefined\n ? 'asc'\n : self.storedSettings.orderDirection;\n if (\n self.storedSettings.orderBy !== undefined &&\n self.getHeaderByName(self.orderBy) &&\n self.orderDirection\n ) {\n self.order(self.orderBy, self.orderDirection);\n }\n }\n };\n self.toggleCollapseTree = function (rowIndex, columnIndex, type) {\n let tempData = [];\n let collapsedCount = 0;\n if (\n columnIndex == self.cellTree.rowTreeColIndex &&\n (rowIndex > 0 || (rowIndex == 0 && self.cellTree.rows[0].icon))\n ) {\n let ctr = self.cellTree.rows;\n switch (type) {\n case 'Expand':\n ctr[rowIndex].expand = true;\n self.cellTree.origin.rows[ctr[rowIndex].index].expand = true;\n break;\n\n case 'Collapse':\n ctr[rowIndex].expand = false;\n self.cellTree.origin.rows[ctr[rowIndex].index].expand = false;\n break;\n\n default:\n ctr[rowIndex].expand = !ctr[rowIndex].expand;\n self.cellTree.origin.rows[ctr[rowIndex].index].expand =\n ctr[rowIndex].expand;\n }\n for (\n let ri = ctr[rowIndex].index + 1;\n ri <= ctr[rowIndex].lastchild;\n ri++\n ) {\n let orTree = self.cellTree.origin.rows[ri];\n if (ctr[rowIndex].expand) {\n orTree.hide = false;\n if (orTree.icon && !orTree.expand) ri = orTree.lastchild;\n } else {\n orTree.hide = true;\n }\n }\n } else if (self.cellTree.columns[rowIndex]) {\n let ctc = self.cellTree.columns[rowIndex];\n\n switch (type) {\n case 'Expand':\n ctc[columnIndex].expand = true;\n break;\n\n case 'Collapse':\n ctc[columnIndex].expand = false;\n break;\n\n default:\n ctc[columnIndex].expand = !ctc[columnIndex].expand;\n }\n for (\n let ci = ctc[columnIndex].index + 1;\n ci <= ctc[columnIndex].lastchild;\n ci++\n ) {\n if (ctc[columnIndex].expand)\n self.cellTree.tempSchema[ci].hidden = false;\n else self.cellTree.tempSchema[ci].hidden = true;\n }\n let rc = 0,\n _ri;\n\n if (ctc[columnIndex].expand) {\n while (rc < ctc[columnIndex].child) {\n _ri = rowIndex + rc + 1;\n\n for (\n let _ci = ctc[columnIndex].index;\n _ci <= ctc[columnIndex].lastchild;\n _ci++\n ) {\n if (\n self.cellTree.origin.columns[_ri] &&\n self.cellTree.origin.columns[_ri][_ci].icon &&\n !self.cellTree.origin.columns[_ri][_ci].expand\n ) {\n for (\n let si = _ci + 1;\n si <= self.cellTree.origin.columns[_ri][_ci].lastchild;\n si++\n ) {\n self.cellTree.tempSchema[si].hidden = true;\n }\n }\n }\n\n rc++;\n }\n }\n }\n let otherData = {};\n let collapsed = [];\n self.cellTree.rows = [];\n self.cellTree.columns = {};\n for (let k in self.cellTree.origin.rows) {\n let tempRow = [];\n let tree = self.cellTree.origin.rows[k];\n if (!tree.hide) {\n let colTrees = [];\n let collapsedColCount = 0;\n if (k < self.cellTree.columnTreeRowStartIndex) {\n tempData.push(self.originalData[k]);\n } else {\n if (k > self.cellTree.columnTreeRowEndIndex) {\n otherData[k] = self.viewData[k];\n collapsedCount++;\n } else {\n for (let l = 0; l < self.originalData[k].length; l++) {\n if (!self.cellTree.tempSchema[l].hidden) {\n if (l < self.cellTree.rowTreeColIndex) {\n if (!Object.prototype.hasOwnProperty.call(otherData, k))\n otherData[k] = [];\n otherData[k].push(self.viewData[k][l]);\n }\n tempRow.push(self.originalData[k][l]);\n if (\n Object.prototype.hasOwnProperty.call(\n self.cellTree.origin.columns,\n k,\n )\n )\n colTrees.push(self.cellTree.origin.columns[k][l]);\n } else collapsedColCount++;\n }\n tempRow.push(\n ...Array(collapsedColCount)\n .fill()\n .map(function () {\n return '';\n }),\n );\n if (colTrees.length) {\n colTrees.push(\n ...Array(collapsedColCount)\n .fill()\n .map(() => {\n return {};\n }),\n );\n self.cellTree.columns[k] = colTrees;\n }\n tempData.push(tempRow);\n }\n }\n self.cellTree.rows.push(tree);\n } else {\n for (let l = 0; l < self.cellTree.rowTreeColIndex; l++) {\n tempRow.push(self.viewData[k][l]);\n }\n otherData[k] = tempRow;\n collapsed.push(\n Array(self.viewData[0].length)\n .fill()\n .map(function () {\n return '';\n }),\n );\n collapsedCount++;\n }\n }\n if (collapsedCount) {\n self.cellTree.rows.push(\n ...Array(collapsedCount)\n .fill()\n .map((u, index) => {\n return { index: self.cellTree.rows.length + index };\n }),\n );\n tempData.push(...collapsed);\n }\n for (let k in otherData) {\n if (k > self.cellTree.columnTreeRowEndIndex) tempData[k] = otherData[k];\n else\n for (let l in otherData[k]) {\n tempData[k][l] = otherData[k][l];\n }\n }\n self.viewData = tempData;\n };\n self.cellTreeExpandCollapse = function (rowIndex, columnIndex, type) {\n if (\n columnIndex == self.cellTree.rowTreeColIndex &&\n (rowIndex > 0 || (rowIndex == 0 && self.cellTree.rows[0].icon))\n ) {\n const ctr = self.cellTree.rows;\n switch (type) {\n case 'Expand':\n ctr[rowIndex].expand = true;\n break;\n case 'Collapse':\n ctr[rowIndex].expand = false;\n break;\n default:\n ctr[rowIndex].expand = !ctr[rowIndex].expand;\n }\n for (let ri = rowIndex + 1; ri <= ctr[rowIndex].lastchild; ri++) {\n if (ctr[rowIndex].expand) {\n ctr[ri].hide = false;\n if (ctr[ri].icon && !ctr[ri].expand) ri = ctr[ri].lastchild;\n } else {\n ctr[ri].hide = true;\n }\n }\n } else if (self.cellTree.columns[rowIndex]) {\n const ctc = self.cellTree.columns[rowIndex];\n switch (type) {\n case 'Expand':\n ctc[columnIndex].expand = true;\n break;\n case 'Collapse':\n ctc[columnIndex].expand = false;\n break;\n default:\n ctc[columnIndex].expand = !ctc[columnIndex].expand;\n }\n\n for (let ci = columnIndex + 1; ci <= ctc[columnIndex].lastchild; ci++) {\n if (ctc[columnIndex].expand) self.tempSchema[ci].hidden = false;\n else self.tempSchema[ci].hidden = true;\n }\n\n let rc = 0,\n ri;\n if (ctc[columnIndex].expand) {\n while (rc < ctc[columnIndex].child) {\n ri = rowIndex + rc + 1;\n for (let ci = columnIndex; ci <= ctc[columnIndex].lastchild; ci++) {\n if (\n self.cellTree.columns[ri] &&\n self.cellTree.columns[ri][ci].icon &&\n !self.cellTree.columns[ri][ci].expand\n ) {\n for (\n let si = ci + 1;\n si <= self.cellTree.columns[ri][ci].lastchild;\n si++\n )\n self.tempSchema[si].hidden = true;\n }\n }\n rc++;\n }\n }\n }\n };\n\n self.initCellTreeSettings = function () {\n if (self.viewData === undefined) return;\n if (self.attributes.rowTree.length > 0 && self.viewData.length > 0) {\n self.cellTree.rows = Array(self.viewData.length)\n .fill()\n .map((u, index) => ({ index: index }));\n self.cellTree.rowTreeColIndex = self.attributes.rowTreeColIndex;\n let invalidRowTree = false;\n for (let rt of self.attributes.rowTree) {\n if (self.cellTree.rows.length <= rt.end) {\n invalidRowTree = true;\n break;\n }\n\n for (let ri = rt.begin; ri <= rt.end; ri++) {\n if (ri == rt.begin) {\n self.cellTree.rows[ri].icon = true;\n self.cellTree.rows[ri].lastchild = rt.end;\n self.cellTree.rows[ri].expand = true;\n if (!self.cellTree.rows[ri].parentCount)\n self.cellTree.rows[ri].parentCount = 0;\n } else {\n self.cellTree.rows[ri].hide = false;\n self.cellTree.rows[ri].parentIndex = rt.begin;\n if (self.cellTree.rows[ri] && self.cellTree.rows[ri].parentCount)\n self.cellTree.rows[ri].parentCount += 1;\n else self.cellTree.rows[ri].parentCount = 1;\n }\n }\n }\n if (invalidRowTree) self.cellTree.rows = {};\n }\n if (self.attributes.columnTree.length > 0 && self.viewData.length > 0) {\n self.cellTree.columnTreeRowStartIndex =\n self.attributes.columnTreeRowStartIndex;\n self.cellTree.columnTreeRowEndIndex =\n self.attributes.columnTreeRowEndIndex;\n let dataColumnLength = Object.keys(self.viewData[0]).length;\n let invalidColumnTree = false;\n for (let ct of self.attributes.columnTree) {\n if (dataColumnLength <= ct.end) {\n invalidColumnTree = true;\n break;\n }\n\n if (!self.cellTree.columns[ct.row])\n self.cellTree.columns[ct.row] = Array(dataColumnLength)\n .fill()\n .map((u, index) => ({ index: index }));\n\n for (let i = ct.begin; i <= ct.end; i++) {\n const ctc = self.cellTree.columns[ct.row][i];\n if (i == ct.begin) {\n ctc.icon = true;\n ctc.lastchild = ct.end;\n ctc.length = ct.end - ct.begin;\n ctc.expand = true;\n if (ct.child) ctc.child = ct.child;\n else ctc.child = 0;\n }\n }\n }\n self.cellTree.tempSchema = Array(dataColumnLength)\n .fill()\n .map(function () {\n return { hidden: false };\n });\n if (invalidColumnTree) self.cellTree.columns = {};\n }\n self.cellTree.origin = {\n rows: self.cellTree.rows,\n columns: self.cellTree.columns,\n };\n };\n\n self.getDomRoot = function () {\n return self.shadowRoot ? self.shadowRoot.host : self.parentNode;\n };\n self.getFontName = function (fontStyle) {\n return fontStyle.replace(/\\d+\\.?\\d*px/, '');\n };\n self.getFontHeight = function (fontStyle) {\n return parseFloat(fontStyle, 10);\n };\n self.parseStyleValue = function (key) {\n if (/Font/.test(key)) {\n self.style[key + 'Height'] = self.getFontHeight(self.style[key]);\n self.style[key + 'Name'] = self.getFontName(self.style[key]);\n return;\n }\n // when inheriting styles from already instantiated grids, don't parse already parsed values.\n if (\n key === 'moveOverlayBorderSegments' &&\n typeof self.style[key] === 'string'\n ) {\n self.style[key] = self.style[key].split(',').map(function (i) {\n return parseInt(i, 10);\n });\n }\n };\n self.initProp = function (propName) {\n if (!self.args[propName]) {\n return;\n }\n Object.keys(self.args[propName]).forEach(function (key) {\n self[propName][key] = self.args[propName][key];\n });\n };\n self.getStyleProperty = function (key) {\n if (self.styleKeys.indexOf(key) === -1) {\n return self.parentNodeStyle[key];\n }\n return self.style[key];\n };\n self.setStyleProperty = function (key, value, supressDrawAndEvent) {\n var isDim =\n [\n 'height',\n 'width',\n 'minHeight',\n 'minWidth',\n 'maxHeight',\n 'maxWidth',\n ].indexOf(key) !== -1;\n if (self.styleKeys.indexOf(key) === -1) {\n self.parentNodeStyle[key] = value;\n } else {\n if (/-/.test(key)) {\n key = self.dehyphenateProperty(key);\n }\n self.style[key] = value;\n self.parseStyleValue(key);\n }\n if (isDim) {\n self.resize();\n }\n if (!supressDrawAndEvent) {\n self.draw(true);\n self.dispatchEvent('stylechanged', { name: 'style', value: value });\n }\n };\n self.reloadStoredValues = function () {\n if (self.attributes.name && self.attributes.saveAppearance) {\n try {\n self.storedSettings = localStorage.getItem(\n self.storageName + '-' + self.attributes.name,\n );\n } catch (e) {\n console.warn('Error loading stored values. ' + e.message);\n self.storedSettings = undefined;\n }\n if (self.storedSettings) {\n try {\n self.storedSettings = JSON.parse(self.storedSettings);\n } catch (e) {\n console.warn('could not read settings from localStore', e);\n self.storedSettings = undefined;\n }\n }\n if (self.storedSettings) {\n if (\n typeof self.storedSettings.sizes === 'object' &&\n self.storedSettings.sizes !== null\n ) {\n self.sizes.rows = self.storedSettings.sizes.rows;\n self.sizes.columns = self.storedSettings.sizes.columns;\n ['trees', 'columns', 'rows'].forEach(function (i) {\n if (!self.sizes[i]) {\n self.sizes[i] = {};\n }\n });\n }\n if (typeof self.storedSettings.visibility === 'object') {\n self.getSchema().forEach(function (column) {\n if (\n self.storedSettings.visibility &&\n self.storedSettings.visibility[column.name] !== undefined\n ) {\n column.hidden = !self.storedSettings.visibility[column.name];\n }\n });\n }\n }\n }\n };\n self.init = function () {\n if (self.initialized) {\n return;\n }\n function addStyleKeyIfNoneExists(key) {\n if (self.styleKeys.indexOf(key) === -1) {\n self.styleKeys.push(key);\n }\n }\n var publicStyleKeyIntf = {};\n self.setAttributes();\n self.setStyle();\n self.initScrollBox();\n self.setDom();\n self.nodeType = 'canvas-datagrid';\n self.ie = /Trident/.test(window.navigator.userAgent);\n self.edge = /Edge/.test(window.navigator.userAgent);\n self.webKit = /WebKit/.test(window.navigator.userAgent);\n self.moz = /Gecko/.test(window.navigator.userAgent);\n self.mobile = /Mobile/i.test(window.navigator.userAgent);\n self.blankValues = [undefined, null, ''];\n self.cursorGrab = 'grab';\n self.cursorGrabing = 'grabbing';\n self.cursorGrab = self.webKit ? '-webkit-grab' : self.cursorGrab;\n self.cursorGrabing = self.moz ? '-webkit-grabbing' : self.cursorGrabbing;\n self.pointerLockPosition = { x: 0, y: 0 };\n Object.keys(self.style).forEach(self.parseStyleValue);\n self.intf.moveSelection = self.moveSelection;\n self.intf.deleteSelectedData = self.deleteSelectedData;\n self.intf.moveTo = self.moveTo;\n self.intf.addEventListener = self.addEventListener;\n self.intf.removeEventListener = self.removeEventListener;\n self.intf.dispatchEvent = self.dispatchEvent;\n /**\n * Releases grid resources and removes grid elements.\n * @memberof canvasDatagrid\n * @name dispose\n * @method\n */\n self.intf.dispose = self.dispose;\n /**\n * Appends the grid to another element later. Not implemented.\n * @memberof canvasDatagrid\n * @name appendTo\n * @method\n * @param {number} el The element to append the grid to.\n */\n self.intf.appendTo = self.appendTo;\n self.intf.getVisibleCellByIndex = self.getVisibleCellByIndex;\n self.intf.filters = self.filters;\n self.intf.sorters = self.sorters;\n self.intf.autosize = self.autosize;\n self.intf.beginEditAt = self.beginEditAt;\n self.intf.endEdit = self.endEdit;\n self.intf.setActiveCell = self.setActiveCell;\n self.intf.forEachSelectedCell = self.forEachSelectedCell;\n self.intf.scrollIntoView = self.scrollIntoView;\n self.intf.clearChangeLog = self.clearChangeLog;\n self.intf.gotoCell = self.gotoCell;\n self.intf.gotoRow = self.gotoRow;\n self.intf.addButton = self.addButton;\n self.intf.toggleCellCollapseTree = self.toggleCellCollapseTree;\n self.intf.expandCollapseCellTree = self.expandCollapseCellTree;\n self.intf.getHeaderByName = self.getHeaderByName;\n self.intf.findColumnScrollLeft = self.findColumnScrollLeft;\n self.intf.findRowScrollTop = self.findRowScrollTop;\n self.intf.fitColumnToValues = self.fitColumnToValues;\n self.intf.findColumnMaxTextLength = self.findColumnMaxTextLength;\n self.intf.disposeContextMenu = self.disposeContextMenu;\n self.intf.getCellAt = self.getCellAt;\n self.intf.groupColumns = self.groupColumns;\n self.intf.groupRows = self.groupRows;\n self.intf.removeGroupColumns = self.removeGroupColumns;\n self.intf.removeGroupRows = self.removeGroupRows;\n self.intf.toggleGroupColumns = self.toggleGroupColumns;\n self.intf.toggleGroupRows = self.toggleGroupRows;\n self.intf.getGroupsColumnBelongsTo = self.getGroupsColumnBelongsTo;\n self.intf.getGroupsRowBelongsTo = self.getGroupsRowBelongsTo;\n self.intf.isCellVisible = self.isCellVisible;\n self.intf.isRowVisible = self.isRowVisible;\n self.intf.isColumnVisible = self.isColumnVisible;\n self.intf.order = self.order;\n self.intf.draw = self.draw;\n self.intf.refresh = self.refresh;\n self.intf.isComponent = self.isComponent;\n self.intf.selectArea = self.selectArea;\n self.intf.clipElement = self.clipElement;\n self.intf.getSchemaFromData = self.getSchemaFromData;\n self.intf.setFilter = self.setFilter;\n self.intf.selectRow = self.selectRow;\n self.intf.parentGrid = self.parentGrid;\n self.intf.toggleTree = self.toggleTree;\n self.intf.expandTree = self.expandTree;\n self.intf.collapseTree = self.collapseTree;\n self.intf.canvas = self.canvas;\n self.intf.context = self.ctx;\n self.intf.insertRow = self.insertRow;\n self.intf.deleteRow = self.deleteRow;\n self.intf.addRow = self.addRow;\n self.intf.insertColumn = self.insertColumn;\n self.intf.deleteColumn = self.deleteColumn;\n self.intf.addColumn = self.addColumn;\n self.intf.getClippingRect = self.getClippingRect;\n self.intf.setRowHeight = self.setRowHeight;\n self.intf.setColumnWidth = self.setColumnWidth;\n self.intf.resetColumnWidths = self.resetColumnWidths;\n self.intf.resetRowHeights = self.resetRowHeights;\n self.intf.resize = self.resize;\n self.intf.selectColumn = self.selectColumn;\n self.intf.selectRow = self.selectRow;\n self.intf.selectAll = self.selectAll;\n self.intf.selectNone = self.selectNone;\n self.intf.drawChildGrids = self.drawChildGrids;\n self.intf.assertPxColor = self.assertPxColor;\n self.intf.clearPxColorAssertions = self.clearPxColorAssertions;\n self.intf.integerToAlpha = self.integerToAlpha;\n self.intf.copy = self.copy;\n self.intf.cut = self.cut;\n self.intf.paste = self.paste;\n self.intf.setStyleProperty = self.setStyleProperty;\n self.intf.hideColumns = self.hideColumns;\n self.intf.unhideColumns = self.unhideColumns;\n self.intf.hideRows = self.hideRows;\n self.intf.unhideRows = self.unhideRows;\n Object.defineProperty(self.intf, 'defaults', {\n get: function () {\n return {\n styles: self.defaults.styles.reduce(function (a, i) {\n a[i[0]] = i[1];\n return a;\n }, {}),\n attributes: self.defaults.attributes.reduce(function (a, i) {\n a[i[0]] = i[1];\n return a;\n }, {}),\n };\n },\n });\n self.styleKeys = Object.keys(self.intf.defaults.styles);\n self.styleKeys\n .map(function (i) {\n return self.hyphenateProperty(i, false);\n })\n .forEach(addStyleKeyIfNoneExists);\n self.styleKeys\n .map(function (i) {\n return self.hyphenateProperty(i, true);\n })\n .forEach(addStyleKeyIfNoneExists);\n self.DOMStyles = window.getComputedStyle(document.body, null);\n self.styleKeys.concat(Object.keys(self.DOMStyles)).forEach(function (key) {\n // unless this line is here, Object.keys() will not work on <instance>.style\n publicStyleKeyIntf[key] = undefined;\n Object.defineProperty(publicStyleKeyIntf, key, {\n get: function () {\n return self.getStyleProperty(key);\n },\n set: function (value) {\n if (self.initialized) {\n self.appliedInlineStyles[key] = value;\n }\n self.setStyleProperty(key, value);\n },\n });\n });\n Object.defineProperty(self.intf, 'shadowRoot', {\n get: function () {\n return self.shadowRoot;\n },\n });\n Object.defineProperty(self.intf, 'activeCell', {\n get: function () {\n return self.activeCell;\n },\n });\n Object.defineProperty(self.intf, 'hasFocus', {\n get: function () {\n return self.hasFocus;\n },\n });\n Object.defineProperty(self.intf, 'hasActiveFilters', {\n get: function () {\n return self.hasActiveFilters();\n },\n });\n Object.defineProperty(self.intf, 'style', {\n get: function () {\n return publicStyleKeyIntf;\n },\n set: function (valueObject) {\n Object.keys(valueObject).forEach(function (key) {\n self.setStyleProperty(key, valueObject[key], true);\n });\n self.draw(true);\n self.dispatchEvent('stylechanged', {\n name: 'style',\n value: valueObject,\n });\n },\n });\n Object.defineProperty(self.intf, 'attributes', { value: {} });\n Object.keys(self.attributes).forEach(function (key) {\n Object.defineProperty(self.intf.attributes, key, {\n get: function () {\n return self.attributes[key];\n },\n set: function (value) {\n self.attributes[key] = value;\n if (key === 'name') {\n self.tryLoadStoredSettings();\n }\n if (\n key === 'rowTree' ||\n key === 'columnTree' ||\n key === 'columnTreeRowEndIndex'\n ) {\n self.initCellTreeSettings();\n }\n self.draw(true);\n self.dispatchEvent('attributechanged', {\n name: key,\n value: value[key],\n });\n },\n });\n });\n self.filters.string = function (value, filterFor) {\n if (filterFor === self.attributes.blanksText) {\n return self.blankValues.includes(\n value == null ? value : String(value).trim(),\n );\n }\n\n value = String(value);\n var filterRegExp,\n regEnd = /\\/(i|g|m)*$/,\n pattern = regEnd.exec(filterFor),\n flags = pattern ? pattern[0].substring(1) : '',\n flagLength = flags.length;\n self.invalidFilterRegEx = undefined;\n if (filterFor.substring(0, 1) === '/' && pattern) {\n try {\n filterRegExp = new RegExp(\n filterFor.substring(1, filterFor.length - (flagLength + 1)),\n flags,\n );\n } catch (e) {\n self.invalidFilterRegEx = e;\n return;\n }\n return filterRegExp.test(value);\n }\n return value.toString\n ? value\n .toString()\n .toLocaleUpperCase()\n .indexOf(filterFor.toLocaleUpperCase()) !== -1\n : false;\n };\n self.filters.number = function (value, filterFor) {\n if (filterFor === self.attributes.blanksText) {\n return self.blankValues.includes(\n value == null ? value : String(value).trim(),\n );\n }\n\n if (!filterFor) {\n return true;\n }\n return value === filterFor;\n };\n ['formatters', 'filters', 'sorters'].forEach(self.initProp);\n self.applyComponentStyle(false, self.intf);\n self.reloadStoredValues();\n if (self.args.data) {\n self.intf.data = self.args.data;\n }\n if (self.intf.innerText || self.intf.textContent) {\n if (self.intf.dataType === 'application/x-canvas-datagrid') {\n self.intf.dataType = 'application/json+x-canvas-datagrid';\n }\n self.intf.data = self.intf.innerText || self.intf.textContent;\n }\n if (self.args.schema) {\n self.intf.schema = self.args.schema;\n }\n if (self.isChildGrid || !self.isComponent) {\n requestAnimationFrame(function () {\n self.resize(true);\n });\n } else {\n self.resize(true);\n }\n self.initialized = true;\n return self;\n };\n /**\n * Removes focus from the grid.\n * @memberof canvasDatagrid\n * @name blur\n * @method\n */\n self.intf.blur = function (e) {\n self.hasFocus = false;\n };\n /**\n * Focuses on the grid.\n * @memberof canvasDatagrid\n * @name focus\n * @method\n */\n self.intf.focus = function () {\n self.hasFocus = true;\n self.controlInput.focus();\n };\n if (self.shadowRoot || self.isChildGrid) {\n Object.defineProperty(self.intf, 'height', {\n get: function () {\n if (self.shadowRoot) {\n return self.shadowRoot.height;\n }\n return self.parentNode.height;\n },\n set: function (value) {\n if (self.shadowRoot) {\n self.shadowRoot.height = value;\n } else {\n self.parentNode.height = value;\n }\n self.resize(true);\n },\n });\n Object.defineProperty(self.intf, 'width', {\n get: function () {\n if (self.shadowRoot) {\n return self.shadowRoot.width;\n }\n return self.parentNode.width;\n },\n set: function (value) {\n if (self.shadowRoot) {\n self.shadowRoot.width = value;\n } else {\n self.parentNode.width = value;\n }\n self.resize(true);\n },\n });\n Object.defineProperty(self.intf, 'parentNode', {\n get: function () {\n return self.parentNode;\n },\n set: function (value) {\n if (!self.isChildGrid) {\n throw new TypeError(\n 'Cannot set property parentNode which has only a getter',\n );\n }\n self.parentNode = value;\n },\n });\n }\n Object.defineProperty(self.intf, 'visibleRowHeights', {\n get: function () {\n return self.visibleRowHeights;\n },\n });\n Object.defineProperty(self.intf, 'openChildren', {\n get: function () {\n return self.openChildren;\n },\n });\n Object.defineProperty(self.intf, 'childGrids', {\n get: function () {\n return Object.keys(self.childGrids).map(function (gridId) {\n return self.childGrids[gridId];\n });\n },\n });\n Object.defineProperty(self.intf, 'isChildGrid', {\n get: function () {\n return self.isChildGrid;\n },\n });\n Object.defineProperty(self, 'cursor', {\n get: function () {\n return self.parentNodeStyle.cursor;\n },\n set: function (value) {\n if (value === 'cell') {\n value = 'default';\n }\n if (self.currentCursor !== value) {\n self.parentNodeStyle.cursor = value;\n self.currentCursor = value;\n }\n },\n });\n Object.defineProperty(self.intf, 'orderDirection', {\n get: function () {\n return self.orderDirection;\n },\n set: function (value) {\n if (value !== 'desc') {\n value = 'asc';\n }\n self.orderDirection = value;\n self.order(self.orderBy, self.orderDirection);\n },\n });\n Object.defineProperty(self.intf, 'orderBy', {\n get: function () {\n return self.orderBy;\n },\n set: function (value) {\n if (\n self.getSchema().find(function (col) {\n return col.name === value;\n }) === undefined\n ) {\n throw new Error('Cannot sort by unknown column name.');\n }\n self.orderBy = value;\n self.order(self.orderBy, self.orderDirection);\n },\n });\n if (self.isComponent) {\n Object.defineProperty(self.intf, 'offsetHeight', {\n get: function () {\n return self.canvas.offsetHeight;\n },\n });\n Object.defineProperty(self.intf, 'offsetWidth', {\n get: function () {\n return self.canvas.offsetWidth;\n },\n });\n }\n Object.defineProperty(self.intf, 'scrollHeight', {\n get: function () {\n return self.scrollBox.scrollHeight;\n },\n });\n Object.defineProperty(self.intf, 'scrollWidth', {\n get: function () {\n return self.scrollBox.scrollWidth;\n },\n });\n Object.defineProperty(self.intf, 'scrollTop', {\n get: function () {\n return self.scrollBox.scrollTop;\n },\n set: function (value) {\n self.scrollBox.scrollTop = value;\n },\n });\n Object.defineProperty(self.intf, 'scrollLeft', {\n get: function () {\n return self.scrollBox.scrollLeft;\n },\n set: function (value) {\n self.scrollBox.scrollLeft = value;\n },\n });\n Object.defineProperty(self.intf, 'sizes', {\n get: function () {\n return self.sizes;\n },\n });\n Object.defineProperty(self.intf, 'parentDOMNode', {\n get: function () {\n return self.parentDOMNode;\n },\n });\n Object.defineProperty(self.intf, 'input', {\n get: function () {\n return self.input;\n },\n });\n Object.defineProperty(self.intf, 'controlInput', {\n get: function () {\n return self.controlInput;\n },\n });\n Object.defineProperty(self.intf, 'currentCell', {\n get: function () {\n return self.currentCell;\n },\n });\n Object.defineProperty(self.intf, 'visibleCells', {\n get: function () {\n return self.visibleCells;\n },\n });\n Object.defineProperty(self.intf, 'visibleRows', {\n get: function () {\n return self.visibleRows;\n },\n });\n Object.defineProperty(self.intf, 'selections', {\n get: function () {\n return self.selections;\n },\n });\n Object.defineProperty(self.intf, 'dragMode', {\n get: function () {\n return self.dragMode;\n },\n });\n Object.defineProperty(self.intf, 'changes', {\n get: function () {\n return self.changes;\n },\n });\n self.intf.formatters = self.formatters;\n Object.defineProperty(self.intf, 'dataType', {\n get: function () {\n return self.dataType;\n },\n set: function (value) {\n if (!self.parsers[value]) {\n throw new Error('No parser for MIME type ' + value);\n }\n self.dataType = value;\n },\n });\n self.eventNames.forEach(function (eventName) {\n Object.defineProperty(self.intf, 'on' + eventName, {\n get: function () {\n return self.componentL1Events[eventName];\n },\n set: function (value) {\n self.events[eventName] = [];\n self.componentL1Events[eventName] = value;\n if (!value) {\n return;\n }\n self.addEventListener(eventName, value);\n },\n });\n });\n Object.defineProperty(self.intf, 'frozenRow', {\n get: function () {\n return self.frozenRow;\n },\n set: function (val) {\n if (isNaN(val)) {\n throw new TypeError('Expected value for frozenRow to be a number.');\n }\n if (self.visibleRows.length < val) {\n throw new RangeError(\n 'Cannot set a value larger than the number of visible rows.',\n );\n }\n self.frozenRow = val;\n },\n });\n Object.defineProperty(self.intf, 'frozenColumn', {\n get: function () {\n return self.frozenColumn;\n },\n set: function (val) {\n if (isNaN(val)) {\n throw new TypeError('Expected value for frozenRow to be a number.');\n }\n if (self.getVisibleSchema().length < val) {\n throw new RangeError(\n 'Cannot set a value larger than the number of visible columns.',\n );\n }\n self.frozenColumn = val;\n },\n });\n Object.defineProperty(self.intf, 'scrollIndexRect', {\n get: function () {\n return {\n top: self.scrollIndexTop,\n right: self.scrollIndexRight,\n bottom: self.scrollIndexBottom,\n left: self.scrollIndexLeft,\n };\n },\n });\n Object.defineProperty(self.intf, 'scrollPixelRect', {\n get: function () {\n return {\n top: self.scrollPixelTop,\n right: self.scrollPixelRight,\n bottom: self.scrollPixelBottom,\n left: self.scrollPixelLeft,\n };\n },\n });\n Object.defineProperty(self.intf, 'rowOrder', {\n get: function () {\n return self.orders.rows;\n },\n set: function (val) {\n if (!Array.isArray(val)) {\n throw new TypeError('Value must be an array.');\n }\n if (!self.originalData || val.length < self.originalData.length) {\n throw new RangeError(\n 'Array length must be equal to or greater than number of rows.',\n );\n }\n self.orders.rows = val;\n },\n });\n Object.defineProperty(self.intf, 'columnOrder', {\n get: function () {\n return self.orders.columns;\n },\n set: function (val) {\n if (!Array.isArray(val)) {\n throw new TypeError('Value must be an array.');\n }\n if (val.length < self.getSchema().length) {\n throw new RangeError(\n 'Array length must be equal to or greater than number of columns.',\n );\n }\n self.orders.columns = val;\n },\n });\n Object.defineProperty(self.intf, 'selectionBounds', {\n get: function () {\n return self.getSelectionBounds();\n },\n });\n Object.defineProperty(self.intf, 'selectedRows', {\n get: function () {\n return self.getSelectedData(true);\n },\n });\n Object.defineProperty(self.intf, 'selectedCells', {\n get: function () {\n return self.getSelectedData();\n },\n });\n Object.defineProperty(self.intf, 'visibleSchema', {\n get: function () {\n return self.getVisibleSchema().map(function eachDataRow(col) {\n return col;\n });\n },\n });\n Object.defineProperty(self.intf, 'treeGridAttributes', {\n get: function () {\n return self.treeGridAttributes;\n },\n set: function setTreeGridAttributes(value) {\n self.treeGridAttributes = value;\n },\n });\n Object.defineProperty(self.intf, 'cellGridAttributes', {\n get: function () {\n return self.cellGridAttributes;\n },\n set: function setCellGridAttributes(value) {\n self.cellGridAttributes = value;\n },\n });\n Object.defineProperty(self.intf, 'ctx', {\n get: function () {\n return self.ctx;\n },\n });\n Object.defineProperty(self.intf, 'schema', {\n get: function schemaGetter() {\n return self.getSchema();\n },\n set: function schemaSetter(value) {\n if (value === undefined) {\n // Issue #89 - allow schema to be set to initialized state\n self.schema = undefined;\n self.tempSchema = undefined;\n self.dispatchEvent('schemachanged', { schema: undefined });\n return;\n }\n if (!Array.isArray(value) || typeof value[0] !== 'object') {\n throw new Error('Schema must be an array of objects.');\n }\n if (value[0].name === undefined) {\n throw new Error(\n 'Expected schema to contain an object with at least a name property.',\n );\n }\n self.schema = value.map(function eachSchemaColumn(column, index) {\n column.width = column.width || self.style.cellWidth;\n column.filter = column.filter || self.filter(column.type);\n column.type = column.type || 'string';\n column.index = index;\n column.columnIndex = index;\n column.rowIndex = -1;\n return column;\n });\n self.tempSchema = undefined;\n self.createNewRowData();\n self.createColumnOrders();\n self.tryLoadStoredSettings();\n if (\n self.storedSettings &&\n typeof self.storedSettings.visibility === 'object'\n ) {\n self.schema.forEach(function hideEachSchemaColumn(column, index) {\n if (\n self.storedSettings &&\n self.storedSettings.visibility[column.name] !== undefined\n ) {\n column.hidden = !self.storedSettings.visibility[column.name];\n }\n });\n }\n self.resize(true);\n self.dispatchEvent('schemachanged', { schema: self.schema });\n },\n });\n /**\n * Gets an array of currently registered MIME types.\n * @memberof canvasDatagrid\n * @name getDataTypes\n * @method\n */\n self.intf.getTypes = function () {\n return Object.keys(self.parsers);\n };\n self.parseInnerHtml = function (data) {\n if (!data || /^ +$/.test(data)) {\n return [];\n }\n try {\n data = JSON.parse(data);\n } catch (e) {\n console.warn(\n Error(\n 'Cannot parse application/json+x-canvas-datagrid formated data. ' +\n e.message +\n ' \\nNote: canvas-datagrid.innerHTML is for string data only. ' +\n 'Use the canvas-datagrid.data property to set object data.',\n ),\n );\n }\n return data;\n };\n self.parsers['application/json+x-canvas-datagrid'] = function (\n data,\n callback,\n ) {\n self.parsers['application/x-canvas-datagrid'](\n self.parseInnerHtml(data),\n function (data, schema) {\n return callback(data, schema);\n },\n );\n };\n self.parsers['application/x-canvas-datagrid'] = function (data, callback) {\n return callback(data);\n };\n self.intf.parsers = self.parsers;\n // send to dataType ETL function to extract from input data\n // and transform into native [{}, {}] format\n self.etl = function (data, callback) {\n if (!self.intf.parsers[self.dataType]) {\n throw new Error('Unsupported data type.');\n }\n self.intf.parsers[self.dataType](data, function (data, schema) {\n // set the unfiltered/sorted data array\n self.originalData = data;\n self.viewData = Array.from(self.originalData);\n\n if (Array.isArray(schema)) {\n self.schema = schema;\n }\n // Issue #89 - allow schema to be auto-created every time data is set\n if (self.attributes.autoGenerateSchema) {\n self.schema = self.getSchemaFromData(data);\n }\n if (!self.schema) {\n self.tempSchema = self.getSchemaFromData(data);\n }\n if (self.getSchema()) {\n self.createColumnOrders();\n }\n // apply filter, sort, etc to incoming dataset, set viewData:\n self.refresh();\n // empty data was set\n if (!self.schema && (self.originalData || []).length === 0) {\n self.tempSchema = [{ name: '' }];\n }\n self.fitColumnToValues('cornerCell', true);\n if (\n (self.tempSchema && !self.schema) ||\n self.attributes.autoGenerateSchema\n ) {\n self.createColumnOrders();\n self.dispatchEvent('schemachanged', { schema: self.tempSchema });\n }\n callback();\n });\n };\n Object.defineProperty(self.intf, 'viewData', {\n get: function () {\n return self.viewData;\n },\n });\n Object.defineProperty(self.intf, 'boundData', {\n get: function () {\n return self.originalData;\n },\n });\n Object.defineProperty(self.intf, 'data', {\n get: function dataGetter() {\n return self.originalData;\n },\n set: function dataSetter(value) {\n self.etl(value, function () {\n self.changes = [];\n self.createNewRowData();\n if (\n self.attributes.autoResizeColumns &&\n self.originalData.length > 0 &&\n self.storedSettings === undefined\n ) {\n self.autosize();\n }\n // set the header column to fit the numbers in it\n self.fitColumnToValues('cornerCell', true);\n self.createRowOrders();\n self.tryLoadStoredSettings();\n self.dispatchEvent('datachanged', { data: self.originalData });\n self.initCellTreeSettings();\n self.resize(true);\n });\n },\n });\n self.initScrollBox = function () {\n var sHeight = 0,\n sWidth = 0,\n scrollTop = 0,\n scrollLeft = 0,\n scrollHeight = 0,\n scrollWidth = 0,\n scrollBoxHeight = 20,\n scrollBoxWidth = 20;\n function setScrollTop(value, preventScrollEvent) {\n if (isNaN(value)) {\n throw new Error('ScrollTop value must be a number');\n }\n if (value < 0) {\n value = 0;\n }\n if (value > scrollHeight) {\n value = scrollHeight;\n }\n if (scrollHeight < 0) {\n value = 0;\n }\n scrollTop = value;\n if (!preventScrollEvent) {\n self.scroll();\n }\n if (self.button) {\n self.moveButtonPos();\n }\n }\n function setScrollLeft(value, preventScrollEvent) {\n if (isNaN(value)) {\n throw new Error('ScrollLeft value must be a number');\n }\n if (value < 0) {\n value = 0;\n }\n if (value > scrollWidth) {\n value = scrollWidth;\n }\n if (scrollWidth < 0) {\n value = 0;\n }\n scrollLeft = value;\n if (!preventScrollEvent) {\n self.scroll();\n }\n if (self.button) {\n self.moveButtonPos();\n }\n }\n self.scrollBox.toString = function () {\n return (\n '{\"width\": ' +\n scrollWidth.toFixed(2) +\n ', \"height\": ' +\n scrollHeight.toFixed(2) +\n ', \"left\": ' +\n scrollLeft.toFixed(2) +\n ', \"top\": ' +\n scrollTop.toFixed(2) +\n ', \"widthRatio\": ' +\n self.scrollBox.widthBoxRatio.toFixed(5) +\n ', \"heightRatio\": ' +\n self.scrollBox.heightBoxRatio.toFixed(5) +\n '}'\n );\n };\n self.scrollBox.scrollTo = function (x, y, supressDrawEvent) {\n setScrollLeft(x, true);\n setScrollTop(y, supressDrawEvent);\n };\n Object.defineProperty(self.scrollBox, 'scrollBoxHeight', {\n get: function () {\n return scrollBoxHeight;\n },\n set: function (value) {\n scrollBoxHeight = value;\n },\n });\n Object.defineProperty(self.scrollBox, 'scrollBoxWidth', {\n get: function () {\n return scrollBoxWidth;\n },\n set: function (value) {\n scrollBoxWidth = value;\n },\n });\n Object.defineProperty(self.scrollBox, 'height', {\n get: function () {\n return sHeight;\n },\n set: function (value) {\n sHeight = value;\n },\n });\n Object.defineProperty(self.scrollBox, 'width', {\n get: function () {\n return sWidth;\n },\n set: function (value) {\n sWidth = value;\n },\n });\n Object.defineProperty(self.scrollBox, 'scrollTop', {\n get: function () {\n return scrollTop;\n },\n set: setScrollTop,\n });\n Object.defineProperty(self.scrollBox, 'scrollLeft', {\n get: function () {\n return scrollLeft;\n },\n set: setScrollLeft,\n });\n Object.defineProperty(self.scrollBox, 'scrollHeight', {\n get: function () {\n return scrollHeight;\n },\n set: function (value) {\n if (scrollTop > value) {\n scrollTop = Math.max(value, 0);\n }\n scrollHeight = value;\n },\n });\n Object.defineProperty(self.scrollBox, 'scrollWidth', {\n get: function () {\n return scrollWidth;\n },\n set: function (value) {\n if (scrollLeft > value) {\n scrollLeft = Math.max(value, 0);\n }\n scrollWidth = value;\n },\n });\n };\n return;\n}\n","/*jslint browser: true, unparam: true, todo: true, evil: true*/\n/*globals Reflect: false, HTMLElement: true, define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nimport component from './component';\nimport defaults from './defaults';\nimport draw from './draw';\nimport events from './events';\nimport touch from './touch';\nimport intf from './intf';\nimport contextMenu from './contextMenu';\nimport button from './button';\nimport dom from './dom';\nimport publicMethods from './publicMethods';\n\nvar webComponent = component();\n\nvar modules = [\n defaults,\n draw,\n events,\n touch,\n intf,\n contextMenu,\n button,\n dom,\n publicMethods,\n];\n\nfunction Grid(args) {\n args = args || {};\n var self = {};\n self.isComponent = args.component === undefined;\n self.isChildGrid =\n args.parentNode &&\n /canvas-datagrid-(cell|tree)/.test(args.parentNode.nodeType);\n if (self.isChildGrid) {\n self.intf = {};\n } else {\n self.intf = self.isComponent\n ? eval('Reflect.construct(HTMLElement, [], new.target)')\n : document.createElement('canvas');\n }\n self.args = args;\n self.intf.args = args;\n self.applyComponentStyle = webComponent.applyComponentStyle;\n self.hyphenateProperty = webComponent.hyphenateProperty;\n self.dehyphenateProperty = webComponent.dehyphenateProperty;\n self.createGrid = function grid(args) {\n args.component = false;\n return new Grid(args);\n };\n\n modules.forEach(function (module) {\n module(self);\n });\n\n if (self.isChildGrid) {\n self.shadowRoot = args.parentNode.shadowRoot;\n self.parentNode = args.parentNode;\n } else {\n self.shadowRoot = self.intf.attachShadow({ mode: 'open' });\n self.parentNode = self.shadowRoot;\n }\n self.init();\n return self.intf;\n}\nif (window.HTMLElement) {\n Grid.prototype = Object.create(window.HTMLElement.prototype);\n}\n// export web component\nif (window.customElements) {\n Grid.observedAttributes = webComponent.getObservableAttributes();\n Grid.prototype.disconnectedCallback = webComponent.disconnectedCallback;\n Grid.prototype.attributeChangedCallback =\n webComponent.attributeChangedCallback;\n Grid.prototype.connectedCallback = webComponent.connectedCallback;\n Grid.prototype.adoptedCallback = webComponent.adoptedCallback;\n window.customElements.define('canvas-datagrid', Grid);\n}\n\n// export global\nif (\n window &&\n !window.canvasDatagrid &&\n !window.require &&\n // Present to exclude global declarations from ES Module bundles\n !window.EXCLUDE_GLOBAL\n) {\n window.canvasDatagrid = function (args) {\n return new Grid(args);\n };\n}\n\n// export amd loader\nexport default function canvasDatagrid(args) {\n args = args || {};\n var i,\n tKeys = [\n 'style',\n 'formatters',\n 'sorters',\n 'filters',\n 'treeGridAttributes',\n 'cellGridAttributes',\n 'data',\n 'schema',\n ];\n if (window.customElements) {\n i = document.createElement('canvas-datagrid');\n Object.keys(args).forEach(function (argKey) {\n // set data and parentNode after everything else\n if (argKey === 'data') {\n return;\n }\n if (argKey === 'parentNode') {\n return;\n }\n // top level keys in args\n if (tKeys.indexOf(argKey) !== -1) {\n tKeys.forEach(function (tKey) {\n if (args[tKey] === undefined || tKey !== argKey) {\n return;\n }\n if (['formatters', 'sorters', 'filters'].indexOf(argKey) !== -1) {\n if (typeof args[tKey] === 'object' && args[tKey] !== null) {\n Object.keys(args[tKey]).forEach(function (sKey) {\n i[tKey][sKey] = args[tKey][sKey];\n });\n }\n } else {\n i[tKey] = args[tKey];\n }\n });\n return;\n }\n // all others are attribute level keys\n i.attributes[argKey] = args[argKey];\n });\n if (args.data) {\n i.data = args.data;\n }\n // add to the dom very last to avoid redraws\n if (args.parentNode) {\n args.parentNode.appendChild(i);\n }\n return i;\n }\n args.component = false;\n i = new Grid(args);\n if (args.parentNode && args.parentNode.appendChild) {\n args.parentNode.appendChild(i);\n }\n return i;\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nimport { mergeHiddenRowRanges } from './groups/util';\n\nexport default function (self) {\n /**\n * Converts a integer into a letter A - ZZZZZ...\n * @memberof canvasDatagrid\n * @name integerToAlpha\n * @method\n * @param {column} n The number to convert.\n */\n self.integerToAlpha = function (n) {\n var ordA = 'a'.charCodeAt(0),\n ordZ = 'z'.charCodeAt(0),\n len = ordZ - ordA + 1,\n s = '';\n while (n >= 0) {\n s = String.fromCharCode((n % len) + ordA) + s;\n n = Math.floor(n / len) - 1;\n }\n return s;\n };\n /**\n * Inserts a new column before the specified index into the schema.\n * @tutorial schema\n * @memberof canvasDatagrid\n * @name insertColumn\n * @method\n * @param {column} c The column to insert into the schema.\n * @param {number} index The index of the column to insert before.\n */\n self.insertColumn = function (c, index) {\n var s = self.getSchema();\n if (s.length < index) {\n throw new Error('Index is beyond the length of the schema.');\n }\n self.validateColumn(c, s);\n s.splice(index, 0, c);\n\n self.originalData.forEach(function (row, rowIndex) {\n self.applyDefaultValue(row, c, rowIndex);\n });\n self.intf.schema = s;\n\n self.refresh();\n };\n /**\n * Deletes a column from the schema at the specified index.\n * @memberof canvasDatagrid\n * @name deleteColumn\n * @tutorial schema\n * @method\n * @param {number} index The index of the column to delete.\n */\n self.deleteColumn = function (index) {\n var schema = self.getSchema();\n\n // remove data matching this column name from data\n self.originalData.forEach(function (row) {\n delete row[schema[index].name];\n });\n\n schema.splice(index, 1);\n self.intf.schema = schema;\n\n self.refresh();\n };\n /**\n * Adds a new column into the schema.\n * @tutorial schema\n * @memberof canvasDatagrid\n * @name addColumn\n * @method\n * @param {column} c The column to add to the schema.\n */\n self.addColumn = function (c) {\n var s = self.getSchema();\n self.validateColumn(c, s);\n s.push(c);\n self.originalData.forEach(function (row, rowIndex) {\n self.applyDefaultValue(row, c, rowIndex);\n });\n self.intf.schema = s;\n\n self.refresh();\n };\n /**\n * Deletes a row from the dataset at the specified index.\n * @memberof canvasDatagrid\n * @name deleteRow\n * @method\n * @param {number} index The index of the row to delete.\n */\n self.deleteRow = function (index) {\n self.originalData.splice(index, 1);\n self.setFilter();\n self.resize(true);\n };\n /**\n * Inserts a new row into the dataset before the specified index.\n * @memberof canvasDatagrid\n * @name insertRow\n * @method\n * @param {object} d data.\n * @param {number} index The index of the row to insert before.\n */\n self.insertRow = function (d, index) {\n if (self.originalData.length < index) {\n throw new Error('Index is beyond the length of the dataset.');\n }\n self.originalData.splice(index, 0, d);\n self.getSchema().forEach(function (c) {\n if (d[c.name] === undefined) {\n self.applyDefaultValue(self.originalData[index], c, index);\n }\n });\n\n // setFilter calls .refresh(), so we need not call it again:\n self.setFilter();\n\n self.resize(true);\n };\n /**\n * Adds a new row into the dataset.\n * @memberof canvasDatagrid\n * @name addRow\n * @method\n * @param {object} d data.\n */\n self.addRow = function (d) {\n self.originalData.push(d);\n self.getSchema().forEach(function (c) {\n if (d[c.name] === undefined) {\n self.applyDefaultValue(\n self.originalData[self.originalData.length - 1],\n c,\n self.originalData.length - 1,\n );\n }\n });\n\n // setFilter calls .refresh(), so we need not call it again:\n self.setFilter();\n\n self.resize(true);\n };\n /**\n * Sets the height of a given row by index number.\n * @memberof canvasDatagrid\n * @name setRowHeight\n * @method\n * @param {number} rowIndex The index of the row to set.\n * @param {number} height Height to set the row to.\n */\n self.setRowHeight = function (rowIndex, height) {\n self.sizes.rows[rowIndex] = height;\n self.draw(true);\n };\n /**\n * Sets the width of a given column by index number.\n * @memberof canvasDatagrid\n * @name setColumnWidth\n * @method\n * @param {number} colIndex The index of the column to set.\n * @param {number} width Width to set the column to.\n */\n self.setColumnWidth = function (colIndex, width) {\n self.sizes.columns[colIndex] = width;\n self.draw(true);\n };\n /**\n * Removes any changes to the width of the columns due to user or api interaction, setting them back to the schema or style default.\n * @memberof canvasDatagrid\n * @name resetColumnWidths\n * @tutorial schema\n * @method\n */\n self.resetColumnWidths = function () {\n self.sizes.columns = {};\n self.draw(true);\n };\n /**\n * Removes any changes to the height of the rows due to user or api interaction, setting them back to the schema or style default.\n * @memberof canvasDatagrid\n * @name resetRowHeights\n * @tutorial schema\n * @method\n */\n self.resetRowHeights = function () {\n self.sizes.rows = {};\n self.draw(true);\n };\n /**\n * Sets the value of the filter.\n * @memberof canvasDatagrid\n * @name setFilter\n * @method\n * @param {string} column Name of the column to filter.\n * @param {string} value The value to filter for.\n */\n self.setFilter = function (column, value) {\n if (column === undefined && value === undefined) {\n self.columnFilters = {};\n } else if (column && (value === '' || value === undefined)) {\n delete self.columnFilters[column];\n } else {\n self.columnFilters[column] = value;\n if (self.attributes.showFilterInCell) {\n self.filterable.rows.push(0);\n self.orders.columns.forEach(function (value, index) {\n self.filterable.columns.push(index);\n });\n }\n }\n if (!Object.keys(self.columnFilters).length) {\n self.filterable = {\n rows: [],\n columns: [],\n };\n }\n self.refresh();\n };\n /**\n * Returns the number of pixels to scroll down to line up with row rowIndex.\n * @memberof canvasDatagrid\n * @name findRowScrollTop\n * @method\n * @param {number} rowIndex The row index of the row to scroll find.\n */\n self.findRowScrollTop = function (rowIndex) {\n if (self.scrollCache.y[rowIndex] === undefined) {\n throw new RangeError(\n `Row index ${rowIndex} out of range: ${self.scrollCache.y.length}.`,\n );\n }\n return self.scrollCache.y[rowIndex];\n };\n /**\n * Returns the number of pixels to scroll to the left to line up with column columnIndex.\n * @memberof canvasDatagrid\n * @name findColumnScrollLeft\n * @method\n * @param {number} columnIndex The column index of the column to find.\n */\n self.findColumnScrollLeft = function (columnIndex) {\n var i = Math.max(columnIndex - 1, 0);\n if (self.scrollCache.x[i] === undefined) {\n throw new Error('Column index out of range.');\n }\n return (\n self.scrollCache.x[i] -\n self.getColumnWidth(self.orders.columns[columnIndex])\n );\n };\n /**\n * Scrolls to the cell at columnIndex x, and rowIndex y. If you define both rowIndex and columnIndex additional calculations can be made to center the cell using the target cell's height and width. Defining only one rowIndex or only columnIndex will result in simpler calculations.\n * @memberof canvasDatagrid\n * @name gotoCell\n * @method\n * @param {number} x The column index of the cell to scroll to.\n * @param {number} y The row index of the cell to scroll to.\n * @param {number} [offsetX=0] Percentage offset the cell should be from the left edge (not including headers). The default is 0, meaning the cell will appear at the left edge. Valid values are 0 through 1. 1 = Left, 0 = Right, 0.5 = Center.\n * @param {number} [offsetY=0] Percentage offset the cell should be from the top edge (not including headers). The default is 0, meaning the cell will appear at the top edge. Valid values are 0 through 1. 1 = Bottom, 0 = Top, 0.5 = Center.\n */\n self.gotoCell = function (x, y, offsetX, offsetY) {\n var targetX = x === undefined ? undefined : self.findColumnScrollLeft(x),\n targetY = y === undefined ? undefined : self.findRowScrollTop(y),\n cell,\n sbw =\n self.scrollBox.width -\n (self.scrollBox.verticalBarVisible ? self.style.scrollBarWidth : 0),\n sbh =\n self.scrollBox.height -\n (self.scrollBox.horizontalBarVisible ? self.style.scrollBarWidth : 0);\n offsetX = offsetX === undefined ? 0 : offsetX;\n offsetY = offsetY === undefined ? 0 : offsetY;\n targetX -= sbw * offsetX;\n targetY -= sbh * offsetY;\n if (x !== undefined && y !== undefined) {\n self.scrollBox.scrollTo(targetX, targetY);\n requestAnimationFrame(function () {\n cell = self.getVisibleCellByIndex(x, y);\n // HACK: just don't offset if the target cell cannot be seen\n // TODO: offset does not work on very small grids, not sure why\n if (!cell) {\n return;\n }\n targetX += cell.width * offsetX;\n targetY += cell.height * offsetY;\n self.scrollBox.scrollTo(targetX, targetY);\n });\n } else if (x !== undefined) {\n self.scrollBox.scrollLeft = targetX;\n } else if (y !== undefined) {\n self.scrollBox.scrollTop = targetY;\n }\n };\n /**\n * Scrolls the row y.\n * @memberof canvasDatagrid\n * @name gotoRow\n * @method\n * @param {number} y The row index of the cell to scroll to.\n */\n self.gotoRow = function (y) {\n self.gotoCell(0, y);\n };\n /**\n * Add a button into the cell.\n * @memberof canvasDatagrid\n * @name addButton\n * @method\n * @param {number} columnIndex The column index of the cell to to add a button.\n * @param {number} rowIndex The row index of the cell to to add a button.\n * @param {object} offset Offset how far go away from cell.\n * @param {object} items a list of items to add into button menu.\n * @param {string} imgSrc icon path to add into button.\n */\n self.addButton = function (columnIndex, rowIndex, offset, items, imgSrc) {\n var cells = self.visibleCells.filter(function (c) {\n return c.sortColumnIndex === columnIndex && c.sortRowIndex === rowIndex;\n });\n\n self.attachButton(\n {\n top: cells[0].y + cells[0].height + offset.y,\n left: cells[0].x + cells[0].width + offset.x,\n },\n items,\n imgSrc,\n );\n };\n\n /**\n * Expand/Collapse CellTree.\n * @memberof canvasDatagrid\n * @name toggleCellCollapseTree\n * @method\n * @param {array} treeData The array of cellTree to expand or collapse.\n */\n\n self.toggleCellCollapseTree = function (treeData) {\n for (let type in treeData) {\n for (let t of treeData[type])\n if (t.length > 0) self.toggleCollapseTree(t[0], t[1], type);\n }\n self.draw();\n };\n\n /**\n * Expand/Collapse CellTree.\n * @memberof canvasDatagrid\n * @name expandCollapseCellTree\n * @method\n * @param {array} treeData The array of cellTree to expand or collapse.\n */\n\n self.expandCollapseCellTree = function (treeData) {\n for (let type in treeData) {\n for (let t of treeData[type])\n if (t.length > 0) self.cellTreeExpandCollapse(t[0], t[1], type);\n }\n self.draw();\n };\n\n /**\n * Scrolls the cell at cell x, row y into view if it is not already.\n * @memberof canvasDatagrid\n * @name scrollIntoView\n * @method\n * @param {number} x The column index of the cell to scroll into view.\n * @param {number} y The row index of the cell to scroll into view.\n * @param {number} [offsetX=0] Percentage offset the cell should be from the left edge (not including headers). The default is 0, meaning the cell will appear at the left edge. Valid values are 0 through 1. 1 = Left, 0 = Right, 0.5 = Center.\n * @param {number} [offsetY=0] Percentage offset the cell should be from the top edge (not including headers). The default is 0, meaning the cell will appear at the top edge. Valid values are 0 through 1. 1 = Bottom, 0 = Top, 0.5 = Center.\n */\n self.scrollIntoView = function (x, y, offsetX, offsetY) {\n const matched = self.visibleCells.filter(function (cell) {\n return (\n (cell.rowIndex === y || y === undefined) &&\n (cell.columnIndex === x || x === undefined) &&\n cell.x > 0 &&\n cell.y > 0 &&\n cell.x + cell.width < self.width &&\n cell.y + cell.height < self.height\n );\n });\n if (matched.length === 1 && x !== undefined && y !== undefined) {\n // goto specific cell and its part be hidden by header\n if (\n matched[0].x < self.getRowHeaderCellWidth() ||\n matched[0].y < self.getColumnHeaderCellHeight()\n )\n matched.length = 0;\n }\n if (matched.length === 0) {\n self.gotoCell(x, y, offsetX, offsetY);\n }\n };\n /**\n * Sets the active cell. Requires redrawing.\n * @memberof canvasDatagrid\n * @name setActiveCell\n * @method\n * @param {number} x The column index of the cell to set active.\n * @param {number} y The row index of the cell to set active.\n */\n self.setActiveCell = function (x, y) {\n if (typeof x === 'undefined') return;\n if (x < 0) {\n x = 0;\n }\n if (y < 0) {\n y = 0;\n }\n self.activeCell = {\n rowIndex: y,\n columnIndex: x,\n };\n };\n /**\n * Removes the selection.\n * @memberof canvasDatagrid\n * @name selectNone\n * @param {boolean} dontDraw Suppress the draw method after the selection change.\n * @method\n */\n self.selectNone = function (dontDraw) {\n self.selections = [];\n self.selectedRows = [];\n self.selectedColumns = [];\n self.dispatchEvent('selectionchanged', {\n selectedData: self.getSelectedData(),\n selections: self.selections,\n selectionBounds: self.selectionBounds,\n selectedCells: self.getSelectedCells(),\n });\n if (dontDraw) {\n return;\n }\n self.draw();\n };\n /**\n * Selects every visible cell.\n * @memberof canvasDatagrid\n * @name selectAll\n * @param {boolean} dontDraw Suppress the draw method after the selection change.\n * @method\n */\n self.selectAll = function (dontDraw) {\n self.selectArea({\n top: 0,\n left: -1,\n right: self.getSchema().length - 1,\n bottom: self.viewData.length - 1,\n });\n if (dontDraw) {\n return;\n }\n self.draw();\n };\n /**\n * Returns true if the selected columnIndex is selected on every row.\n * @memberof canvasDatagrid\n * @name isColumnSelected\n * @method\n * @param {number} columnIndex The column index to check.\n */\n self.isColumnSelected = function (columnIndex) {\n var colIsSelected = true;\n self.viewData.forEach(function (row, rowIndex) {\n if (\n !self.selections[rowIndex] ||\n self.selections[rowIndex].indexOf(columnIndex) === -1\n ) {\n colIsSelected = false;\n }\n });\n return colIsSelected;\n };\n /**\n * Returns true if the selected rowIndex is selected on every column.\n * @memberof canvasDatagrid\n * @name isRowSelected\n * @method\n * @param {number} rowIndex The row index to check.\n */\n\n self.isRowSelected = function (rowIndex) {\n if (!self.selections[rowIndex]) return false;\n var rowIsSelected = true;\n var schema = self.getVisibleSchema();\n schema.forEach(function (col, index) {\n if (\n !self.selections[rowIndex] ||\n self.selections[rowIndex].indexOf(index) === -1\n ) {\n rowIsSelected = false;\n }\n });\n return rowIsSelected;\n };\n\n /**\n * Runs the defined method on each selected cell.\n * @memberof canvasDatagrid\n * @name forEachSelectedCell\n * @method\n * @param {number} fn The function to execute. The signature of the function is: (data, rowIndex, columnName).\n * @param {number} expandToRow When true the data in the array is expanded to the entire row.\n */\n self.forEachSelectedCell = function (fn, expandToRow) {\n var d = [],\n s = expandToRow ? self.getSchema() : self.getVisibleSchema(),\n l = self.viewData.length;\n self.selections.forEach(function (row, index) {\n if (index === l) {\n return;\n }\n if (row.length === 0) {\n d[index] = null;\n return;\n }\n d[index] = {};\n row.forEach(function (col) {\n if (col === -1 || !s[col]) {\n return;\n }\n fn(self.viewData, index, s[col].name);\n });\n });\n };\n /**\n * Selects a column.\n * @memberof canvasDatagrid\n * @name selectColumn\n * @method\n * @param {number} columnIndex The column index to select.\n * @param {boolean} toggleSelectMode When true, behaves as if you were holding control/command when you clicked the column.\n * @param {boolean} shift When true, behaves as if you were holding shift when you clicked the column.\n * @param {boolean} supressSelectionchangedEvent When true, prevents the selectionchanged event from firing.\n */\n self.selectColumn = function (columnIndex, ctrl, shift, supressEvent) {\n var s, e, x;\n self.isMultiRowsSelected = false;\n self.isMultiColumnsSelected = false;\n function addCol(i) {\n self.viewData.forEach(function (row, rowIndex) {\n self.selections[rowIndex] = self.selections[rowIndex] || [];\n if (self.selections[rowIndex].indexOf(i) === -1) {\n self.selections[rowIndex].push(i);\n }\n });\n }\n function removeCol(i) {\n self.viewData.forEach(function (row, rowIndex) {\n self.selections[rowIndex] = self.selections[rowIndex] || [];\n if (self.selections[rowIndex].indexOf(i) !== -1) {\n self.selections[rowIndex].splice(\n self.selections[rowIndex].indexOf(i),\n 1,\n );\n }\n });\n }\n if (shift) {\n if (!self.activeCell) {\n return;\n }\n s = Math.min(self.activeCell.columnIndex, columnIndex);\n e = Math.max(self.activeCell.columnIndex, columnIndex);\n for (x = s; e > x; x += 1) {\n addCol(x);\n if (self.selectedColumns.indexOf(x) === -1)\n self.selectedColumns.push(x);\n }\n if (s != e) self.isMultiColumnsSelected = true;\n }\n if (!ctrl && !shift) {\n self.selections = [];\n self.selectedColumns = [];\n self.activeCell.columnIndex = columnIndex;\n self.activeCell.rowIndex = self.scrollIndexTop;\n }\n if (ctrl && self.isColumnSelected(columnIndex)) {\n removeCol(columnIndex);\n self.selectedColumns.splice(columnIndex, 1);\n } else {\n addCol(columnIndex);\n self.selectedColumns.push(columnIndex);\n }\n if (supressEvent) {\n return;\n }\n self.dispatchEvent('selectionchanged', {\n selectedData: self.getSelectedData(),\n selections: self.selections,\n selectionBounds: self.getSelectionBounds(),\n selectedCells: self.getSelectedCells(),\n });\n };\n /**\n * Selects a row.\n * @memberof canvasDatagrid\n * @name selectRow\n * @method\n * @param {number} rowIndex The row index to select.\n * @param {boolean} ctrl When true, behaves as if you were holding control/command when you clicked the row.\n * @param {boolean} shift When true, behaves as if you were holding shift when you clicked the row.\n * @param {boolean} supressSelectionchangedEvent When true, prevents the selectionchanged event from firing.\n */\n self.selectRow = function (rowIndex, ctrl, shift, supressEvent) {\n var x,\n st,\n en,\n s = self.getVisibleSchema();\n self.isMultiRowsSelected = false;\n function de() {\n if (supressEvent) {\n return;\n }\n self.dispatchEvent('selectionchanged', {\n selectedData: self.getSelectedData(),\n selections: self.selections,\n selectionBounds: self.selectionBounds,\n selectedCells: self.getSelectedCells(),\n });\n }\n function addRow(ri) {\n self.selections[ri] = [];\n self.selections[ri].push(-1);\n s.forEach(function (col, index) {\n self.selections[ri].push(self.orders.columns.indexOf(col.index));\n if (\n col.index !== -1 &&\n self.selectedColumns.indexOf(\n self.orders.columns.indexOf(col.index),\n ) === -1\n )\n self.selectedColumns.push(self.orders.columns.indexOf(col.index));\n });\n }\n if (self.dragAddToSelection === false || self.dragObject === undefined) {\n if (\n self.selections[rowIndex] &&\n self.selections[rowIndex].length - 1 === s.length\n ) {\n if (ctrl) {\n self.selections[rowIndex] = [];\n de();\n return;\n }\n }\n }\n if (self.dragAddToSelection === true || self.dragObject === undefined) {\n if (shift && self.dragObject === undefined) {\n if (!self.activeCell) {\n return;\n }\n st = Math.min(self.activeCell.rowIndex, rowIndex);\n en = Math.max(self.activeCell.rowIndex, rowIndex);\n for (x = st; en >= x; x += 1) {\n addRow(x);\n self.selectedRows.push(x);\n }\n } else {\n addRow(rowIndex);\n self.selectedRows = [];\n self.selectedRows.push(rowIndex);\n }\n }\n de();\n };\n /**\n * Collapse a tree grid by row index.\n * @memberof canvasDatagrid\n * @name collapseTree\n * @method\n * @param {number} index The index of the row to collapse.\n */\n self.collapseTree = function (rowIndex) {\n self.dispatchEvent('collapsetree', {\n childGrid: self.childGrids[rowIndex],\n data: self.viewData[rowIndex],\n rowIndex: rowIndex,\n });\n self.openChildren[rowIndex].blur();\n self.openChildren[rowIndex].dispose();\n delete self.openChildren[rowIndex];\n delete self.sizes.trees[rowIndex];\n delete self.childGrids[rowIndex];\n self.dispatchEvent('resizerow', {\n cellHeight: self.style.cellHeight,\n });\n self.resize(true);\n self.draw(true);\n };\n /**\n * Expands a tree grid by row index.\n * @memberof canvasDatagrid\n * @name expandTree\n * @method\n * @param {number} index The index of the row to expand.\n */\n self.expandTree = function (rowIndex) {\n var trArgs = self.args.treeGridAttributes || {},\n columnHeaderCellHeight = self.getColumnHeaderCellHeight(),\n rowHeaderCellWidth =\n self.sizes.columns.cornerCell || self.style.rowHeaderCellWidth,\n h = self.sizes.trees[rowIndex] || self.style.treeGridHeight,\n treeGrid;\n if (!self.childGrids[rowIndex]) {\n trArgs.debug = self.attributes.debug;\n trArgs.name = self.attributes.saveAppearance\n ? self.attributes.name + 'tree' + rowIndex\n : undefined;\n trArgs.style = trArgs.style || self.style;\n trArgs.parentNode = {\n parentGrid: self.intf,\n nodeType: 'canvas-datagrid-tree',\n offsetHeight: h,\n offsetWidth: self.width - rowHeaderCellWidth,\n header: { width: self.width - rowHeaderCellWidth },\n offsetLeft: rowHeaderCellWidth,\n offsetTop: columnHeaderCellHeight,\n offsetParent: self.intf.parentNode,\n parentNode: self.intf.parentNode,\n style: 'tree',\n data: self.viewData[rowIndex],\n };\n treeGrid = self.createGrid(trArgs);\n self.childGrids[rowIndex] = treeGrid;\n }\n treeGrid = self.childGrids[rowIndex];\n treeGrid.visible = true;\n self.dispatchEvent('expandtree', {\n treeGrid: treeGrid,\n data: self.viewData[rowIndex],\n rowIndex: rowIndex,\n });\n self.openChildren[rowIndex] = treeGrid;\n self.sizes.trees[rowIndex] = h;\n self.dispatchEvent('resizerow', { height: self.style.cellHeight });\n self.resize(true);\n };\n /**\n * Toggles tree grid open and close by row index.\n * @memberof canvasDatagrid\n * @name toggleTree\n * @method\n * @param {number} index The index of the row to toggle.\n */\n self.toggleTree = function (rowIndex) {\n var i = self.openChildren[rowIndex];\n if (i) {\n return self.collapseTree(rowIndex);\n }\n self.expandTree(rowIndex);\n };\n /**\n * Returns a header from the schema by name.\n * @memberof canvasDatagrid\n * @name getHeaderByName\n * @tutorial schema\n * @method\n * @returns {header} header with the selected name, or undefined.\n * @param {string} name The name of the column to resize.\n */\n self.getHeaderByName = function (name) {\n var x,\n i = self.getSchema();\n for (x = 0; x < i.length; x += 1) {\n if (i[x].name === name) {\n return i[x];\n }\n }\n };\n /**\n * Hide column/columns\n * @memberof canvasDatagrid\n * @name hideColumns\n * @method\n * @param {number} beginColumnOrderIndex\n * @param {number} [endColumnOrderIndex]\n */\n self.hideColumns = function (beginColumnOrderIndex, endColumnOrderIndex) {\n const schema = self.getSchema();\n const orders = self.orders.columns;\n const hiddenColumns = [];\n if (typeof endColumnOrderIndex !== 'number')\n endColumnOrderIndex = beginColumnOrderIndex;\n for (\n let orderIndex = beginColumnOrderIndex;\n orderIndex <= endColumnOrderIndex;\n orderIndex++\n ) {\n const columnIndex = orders[orderIndex];\n if (columnIndex >= 0 && !schema[columnIndex].hidden) {\n hiddenColumns.push(columnIndex);\n schema[columnIndex].hidden = true;\n\n self.dispatchEvent('columnhide', {\n columnIndex,\n });\n }\n }\n\n if (hiddenColumns.length > 0) {\n self.setStorageData();\n setTimeout(function () {\n self.resize(true);\n }, 10);\n }\n\n self.dispatchEvent('hidecolumns', {\n hiddenColumns,\n });\n };\n /**\n * Unihde column/columns\n * @memberof canvasDatagrid\n * @name unhideColumns\n * @method\n * @param {number} beginColumnOrderIndex\n * @param {number} [endColumnOrderIndex]\n */\n self.unhideColumns = function (beginColumnOrderIndex, endColumnOrderIndex) {\n const orders = self.orders.columns;\n const schema = self.getSchema();\n\n for (let i = beginColumnOrderIndex; i <= endColumnOrderIndex; i++) {\n const columnIndex = orders[i];\n const s = schema[columnIndex];\n\n if (s && s.hidden) {\n s.hidden = false;\n\n self.dispatchEvent('columnunhide', {\n columnIndex,\n });\n }\n }\n self.refresh();\n };\n /**\n * Hide rows\n * @memberof canvasDatagrid\n * @name hideRows\n * @method\n * @param {number} beginRowIndex\n * @param {number} endRowIndex\n */\n self.hideRows = function (beginRowIndex, endRowIndex) {\n if (\n mergeHiddenRowRanges(self.hiddenRowRanges, [beginRowIndex, endRowIndex])\n )\n self.refresh();\n };\n /**\n * Unhide rows\n * @memberof canvasDatagrid\n * @name unhideRows\n * @method\n * @param {number} beginRowIndex\n * @param {number} endRowIndex\n */\n self.unhideRows = function (beginRowIndex, endRowIndex) {\n self.hiddenRowRanges = self.hiddenRowRanges.filter(\n (range) => range[0] !== beginRowIndex || range[1] !== endRowIndex,\n );\n self.refresh();\n };\n /**\n * Resizes a column to fit the longest value in the column. Call without a value to resize all columns.\n * Warning, can be slow on very large record sets (1m records ~3-5 seconds on an i7).\n * @memberof canvasDatagrid\n * @name fitColumnToValues\n * @method\n * @param {string} name The name of the column to resize.\n */\n self.fitColumnToValues = function (name, internal) {\n if (!self.canvas) {\n return;\n }\n\n const columnIndex =\n name === 'cornerCell' ? -1 : self.getHeaderByName(name).index;\n\n const newSize = Math.max(\n self.findColumnMaxTextLength(name),\n self.style.minColumnWidth,\n );\n\n self.sizes.columns[columnIndex] = newSize;\n\n self.dispatchEvent('resizecolumn', {\n x: newSize,\n y: self.resizingStartingHeight,\n draggingItem: self.currentCell,\n });\n\n if (!internal) {\n self.resize();\n self.draw(true);\n }\n };\n /**\n * Checks if a cell is currently visible.\n * @memberof canvasDatagrid\n * @name isCellVisible\n * @overload\n * @method\n * @returns {boolean} when true, the cell is visible, when false the cell is not currently drawn.\n * @param {number} columnIndex The column index of the cell to check.\n * @param {number} rowIndex The row index of the cell to check.\n */\n self.isCellVisible = function (cell, rowIndex) {\n // overload\n if (rowIndex !== undefined) {\n return (\n self.visibleCells.filter(function (c) {\n return c.columnIndex === cell && c.rowIndex === rowIndex;\n }).length > 0\n );\n }\n var x,\n l = self.visibleCells.length;\n for (x = 0; x < l; x += 1) {\n if (\n cell.x === self.visibleCells[x].x &&\n cell.y === self.visibleCells[x].y\n ) {\n return true;\n }\n }\n return false;\n };\n /**\n * Sets the order of the data.\n * @memberof canvasDatagrid\n * @name order\n * @method\n * @param {number} columnName Name of the column to be sorted.\n * @param {string} direction `asc` for ascending or `desc` for descending.\n * @param {function} [sortFunction] When defined, override the default sorting method defined in the column's schema and use this one.\n * @param {bool} [dontSetStorageData] Don't store this setting for future use.\n */\n self.order = function (\n columnName,\n direction,\n sortFunction,\n dontSetStorageData,\n ) {\n var f,\n c = self.getSchema().filter(function (col) {\n return col.name === columnName;\n });\n if (\n self.dispatchEvent('beforesortcolumn', {\n name: columnName,\n direction: direction,\n })\n ) {\n return;\n }\n self.orderBy = columnName;\n self.orderDirection = direction;\n if (!self.viewData || self.viewData.length === 0) {\n return;\n }\n if (c.length === 0) {\n throw new Error('Cannot sort. No such column name');\n }\n f = sortFunction || c[0].sorter || self.sorters[c[0].type];\n if (!f && c[0].type !== undefined) {\n console.warn(\n 'Cannot sort type \"%s\" falling back to string sort.',\n c[0].type,\n );\n }\n self.orderings.add(\n columnName,\n direction,\n typeof f === 'function' ? f : self.sorters.string,\n );\n self.refresh();\n self.dispatchEvent('sortcolumn', {\n name: columnName,\n direction: direction,\n });\n\n if (dontSetStorageData) {\n return;\n }\n self.setStorageData();\n };\n\n /**\n * Add grouping\n * @param {'columns'|'rows'} groupFor\n * @method\n * @param {number} from\n * @param {number} to\n */\n function addGroup(groupFor, from, to) {\n let newRow = false;\n const allGroups =\n groupFor === 'rows' ? self.groupedRows : self.groupedColumns;\n for (let i = allGroups.length - 1; i >= 0; i--) {\n const groups = allGroups[i];\n const min = groups[0].from,\n max = groups[groups.length - 1].to;\n if (from <= min && to >= max) {\n if (from === min && to === max && groups.length === 1) return; // nothings happened\n // new group wrap this row\n continue;\n }\n for (let gi = 0; gi < groups.length; gi++) {\n const g = groups[gi];\n if (from > g.to) continue;\n if (from >= g.from) {\n if (to > g.to) {\n if (from === g.from) {\n allGroups.splice(i, 0, [{ from, to, collapsed: false }]);\n self.refresh();\n return;\n }\n throw new Error(`Can't group these ${groupFor}`);\n }\n if (to === g.to) {\n if (from === g.from) return; // nothings happened\n }\n newRow = true;\n break;\n }\n if (to >= g.from) {\n if (to < g.to) throw new Error(`Can't group these ${groupFor}`);\n allGroups.splice(i, 0, [{ from, to, collapsed: false }]);\n } else {\n groups.splice(gi, 0, { from, to, collapsed: false });\n }\n self.refresh();\n return;\n }\n if (newRow) continue;\n groups.push({ from, to, collapsed: false });\n self.refresh();\n return;\n }\n if (newRow) allGroups.push([{ from, to, collapsed: false }]);\n else allGroups.unshift([{ from, to, collapsed: false }]);\n self.refresh();\n }\n /**\n * Remove grouping\n * @param {Array<Array<{from:number,to:number,collapsed:boolean}>>} allGroups\n * @method\n * @param {number} from\n * @param {number} to\n */\n function removeGroup(allGroups, from, to) {\n for (let i = 0; i < allGroups.length; i++) {\n const groups = allGroups[i];\n for (let gi = 0; gi < groups.length; gi++) {\n const group = groups[gi];\n if (group.from === from && group.to === to) {\n if (groups.length <= 1) allGroups.splice(i, 1);\n else groups.splice(gi, 1);\n self.refresh();\n return;\n }\n }\n }\n }\n /**\n * Grouping columns\n * @memberof canvasDatagrid\n * @name groupColumns\n * @method\n * @param {number|string} firstColumnName Name of the first column to be grouped.\n * @param {number|string} lastColumnName Name of the last column to be grouped.\n */\n self.groupColumns = function (firstColumnName, lastColumnName) {\n /** @type {Array<{name: string,columnIndex:number}>} */\n const schema = self.getSchema();\n let firstOne, lastOne;\n for (let i = 0; i < schema.length; i++) {\n const it = schema[i];\n if (firstOne && lastOne) break;\n if (it.name === firstColumnName) {\n firstOne = it;\n continue;\n }\n if (it.name === lastColumnName) {\n lastOne = it;\n continue;\n }\n }\n if (!firstOne) throw new Error(`No such column name for first column`);\n if (!lastOne) throw new Error(`No such column name for last column`);\n if (lastOne.columnIndex > firstOne.columnIndex !== true)\n throw new Error(`Can't group these columns`);\n\n const from = firstOne.columnIndex;\n const to = lastOne.columnIndex;\n const ev = { group: { type: 'columns', from, to } };\n try {\n addGroup('columns', from, to);\n } catch (error) {\n ev.error = error;\n }\n self.dispatchEvent('aftercreategroup', ev);\n };\n /**\n * Grouping columns\n * @memberof canvasDatagrid\n * @name groupRows\n * @method\n * @param {number} rowIndexFrom The row index which is the beginning of the group\n * @param {number} rowIndexTo The row index which is the end of the group\n */\n self.groupRows = function (rowIndexFrom, rowIndexTo) {\n if (!Number.isInteger(rowIndexFrom) || rowIndexFrom < 0)\n throw new Error(`No such row for the beginning of the group`);\n\n const dataLength = self.viewData.length;\n if (\n !Number.isInteger(rowIndexFrom) ||\n rowIndexTo <= rowIndexFrom ||\n rowIndexTo >= dataLength\n )\n throw new Error(`No such row for the end of the group`);\n const ev = {\n group: {\n type: 'rows',\n from: rowIndexFrom,\n to: rowIndexTo,\n },\n };\n try {\n addGroup('rows', rowIndexFrom, rowIndexTo);\n } catch (error) {\n ev.error = error;\n }\n self.dispatchEvent('aftercreategroup', ev);\n };\n /**\n * Remove grouping columns\n * @memberof canvasDatagrid\n * @name removeGroupColumns\n * @method\n * @param {number|string} firstColumnName Name of the first column to be grouped.\n * @param {number|string} lastColumnName Name of the last column to be grouped.\n */\n self.removeGroupColumns = function (firstColumnName, lastColumnName) {\n /** @type {Array<{name:string,columnIndex:number}>} */\n const schema = self.getSchema();\n let firstOne, lastOne;\n for (let i = 0; i < schema.length; i++) {\n const it = schema[i];\n if (firstOne && lastOne) break;\n if (it.name === firstColumnName) {\n firstOne = it;\n continue;\n }\n if (it.name === lastColumnName) {\n lastOne = it;\n continue;\n }\n }\n if (!firstOne) throw new Error(`No such column name for first column`);\n if (!lastOne) throw new Error(`No such column name for last column`);\n const from = firstOne.columnIndex;\n const to = lastOne.columnIndex;\n removeGroup(self.groupedColumns, from, to);\n };\n /**\n * Remove grouping columns\n * @memberof canvasDatagrid\n * @name removeGroupRows\n * @method\n * @param {number} rowIndexFrom The row index which is the beginning of the group\n * @param {number} rowIndexTo The row index which is the end of the group\n */\n self.removeGroupRows = function (rowIndexFrom, rowIndexTo) {\n removeGroup(self.groupedRows, rowIndexFrom, rowIndexTo);\n };\n /**\n * Toggle(expand/collapsed) grouping columns\n * @memberof canvasDatagrid\n * @name toggleGroupColumns\n * @method\n * @param {number|string} firstColumnName Name of the first column to be grouped.\n * @param {number|string} lastColumnName Name of the last column to be grouped.\n */\n self.toggleGroupColumns = function (firstColumnName, lastColumnName) {\n /** @type {Array<{name:string,columnIndex:number}>} */\n const schema = self.getSchema();\n let firstOne, lastOne;\n for (let i = 0; i < schema.length; i++) {\n const it = schema[i];\n if (firstOne && lastOne) break;\n if (it.name === firstColumnName) {\n firstOne = it;\n continue;\n }\n if (it.name === lastColumnName) {\n lastOne = it;\n continue;\n }\n }\n if (!firstOne || !lastOne) return;\n const from = firstOne.columnIndex;\n const to = lastOne.columnIndex;\n if (self.toggleGroup({ type: 'c', from, to })) {\n self.disposeContextMenu();\n self.setStorageData();\n self.refresh();\n }\n };\n /**\n * Toggle(expand/collapsed) grouping rows\n * @memberof canvasDatagrid\n * @name toggleGroupRows\n * @method\n * @param {number} rowIndexFrom The row index which is the beginning of the group\n * @param {number} rowIndexTo The row index which is the end of the group\n */\n self.toggleGroupRows = function (rowIndexFrom, rowIndexTo) {\n if (self.toggleGroup({ type: 'r', from: rowIndexFrom, to: rowIndexTo })) {\n self.disposeContextMenu();\n self.setStorageData();\n self.refresh();\n }\n };\n\n self.isInGrid = function (e) {\n if (e.x < 0 || e.x > self.width || e.y < 0 || e.y > self.height) {\n return false;\n }\n return true;\n };\n /**\n * Moves the current selection relative to the its current position. Note: this method does not move the selected data, just the selection itself.\n * @memberof canvasDatagrid\n * @name moveSelection\n * @method\n * @param {number} offsetX The number of columns to offset the selection.\n * @param {number} offsetY The number of rows to offset the selection.\n */\n self.moveSelection = function (offsetX, offsetY) {\n var sel = [];\n self.selectedRows = [];\n self.selectedColumns = [];\n self.selections.forEach(function (row, rowIndex) {\n sel[rowIndex + offsetY] = [];\n self.selectedRows.push(rowIndex + offsetY);\n row.forEach(function (colIndex) {\n sel[rowIndex + offsetY].push(colIndex + offsetX);\n if (self.selectedColumns.indexOf(colIndex + offsetX) === -1)\n self.selectedColumns.push(colIndex + offsetX);\n });\n });\n self.selections = sel;\n };\n /**\n * Deletes currently selected data.\n * @memberof canvasDatagrid\n * @name deleteSelectedData\n * @method\n * @param {boolean} dontDraw Suppress the draw method after the selection change.\n */\n self.deleteSelectedData = function (dontDraw) {\n const affectedCells = self.clearSelectedCells();\n\n self.dispatchEvent('afterdelete', {\n cells: affectedCells,\n });\n\n if (dontDraw) {\n return;\n }\n\n requestAnimationFrame(() => self.draw());\n };\n /**\n * Moves data in the provided selection to another position in the grid. Moving data off the edge of the schema (columns/x) will truncate data.\n * @memberof canvasDatagrid\n * @name moveTo\n * @method\n * @param {array} sel 2D array representing selected rows and columns. `canvasDatagrid.selections` is in this format and can be used here.\n * @param {number} x The column index to start inserting the selection at.\n * @param {number} y The row index to start inserting the selection at.\n */\n self.moveTo = function (sel, x, y) {\n var selectedData = self.getSelectedData(),\n visibleSchema = self.getVisibleSchema(),\n selectionLength = sel.length,\n xi,\n maxRowLength = -Infinity,\n minXi = Infinity,\n yi = y - 1;\n\n sel.forEach(function (row, rowIndex) {\n if (rowIndex === selectionLength) {\n return;\n }\n if (row.length === 0) {\n return;\n }\n minXi = Math.min(self.getVisibleColumnIndexOf(x), minXi);\n maxRowLength = Math.max(maxRowLength, row.length);\n row.forEach(function (colIndex) {\n // intentional redef of colIndex\n colIndex = self.getVisibleColumnIndexOf(colIndex);\n if (!visibleSchema[colIndex]) {\n return;\n }\n // TODO:\n if (!self.data) {\n self.data = {};\n }\n if (!self.data[rowIndex]) {\n self.data[rowIndex] = {};\n }\n // TODO:\n self.data[rowIndex][visibleSchema[colIndex].name] = null;\n });\n });\n\n sel.forEach(function (row, index) {\n var lastSourceIndex;\n yi += 1;\n xi = self.getVisibleColumnIndexOf(x);\n row.forEach(function (colIndex, cidx) {\n colIndex = self.getVisibleColumnIndexOf(colIndex);\n if (cidx > 0) {\n // this confusing bit of nonsense figures out\n // if the selection has skipped cells\n xi += colIndex - lastSourceIndex;\n }\n lastSourceIndex = colIndex;\n if (\n colIndex === -1 ||\n !visibleSchema[xi] ||\n !visibleSchema[colIndex] ||\n // TODO:\n self.data.length - 1 < yi ||\n yi < 0\n ) {\n return;\n }\n // TODO:\n if (!self.data[yi]) {\n self.data[yi] = {};\n }\n // TODO:\n self.data[yi][visibleSchema[xi].name] =\n selectedData[index][visibleSchema[colIndex].name];\n });\n });\n };\n /**\n * Get the column group info given column belongs to\n * @memberof canvasDatagrid\n * @name getGroupsColumnBelongsTo\n * @method\n * @param {number} columnIndex Column index.\n * @returns {Array<{from:number,to:number,collapsed:boolean}>}\n */\n self.getGroupsColumnBelongsTo = function (columnIndex) {\n if (!self.attributes.allowGroupingColumns) return [];\n const result = [];\n for (let i = 0; i < self.groupedColumns.length; i++) {\n const groups = self.groupedColumns[i];\n for (let j = 0; j < groups.length; j++) {\n const group = groups[j];\n if (columnIndex >= group.from && columnIndex <= group.to) {\n result.push(group);\n break;\n }\n }\n }\n return result;\n };\n /**\n * Get the row group info given row belongs to\n * @memberof canvasDatagrid\n * @name getGroupsRowBelongsTo\n * @method\n * @param {number} rowIndex Row index.\n * @returns {Array<{from:number,to:number,collapsed:boolean}>}\n */\n self.getGroupsRowBelongsTo = function (rowIndex) {\n if (!self.attributes.allowGroupingRows) return [];\n const result = [];\n for (let i = 0; i < self.groupedRows.length; i++) {\n const groups = self.groupedRows[i];\n for (let j = 0; j < groups.length; j++) {\n const group = groups[j];\n if (rowIndex >= group.from && rowIndex <= group.to) {\n result.push(group);\n break;\n }\n }\n }\n return result;\n };\n\n /**\n * Checks if a given column is visible.\n * @memberof canvasDatagrid\n * @name isColumnVisible\n * @method\n * @returns {boolean} When true, the column is visible.\n * @param {number} columnIndex Column index.\n */\n self.isColumnVisible = function (columnIndex) {\n return (\n self.visibleCells.filter(function (c) {\n return c.columnIndex === columnIndex;\n }).length > 0\n );\n };\n /**\n * Checks if a given row is visible.\n * @memberof canvasDatagrid\n * @name isRowVisible\n * @method\n * @returns {boolean} When true, the row is visible.\n * @param {number} rowIndex Row index.\n */\n self.isRowVisible = function (rowIndex) {\n return (\n self.visibleCells.filter(function (c) {\n return c.rowIndex === rowIndex;\n }).length > 0\n );\n };\n /**\n * Gets the cell at columnIndex and rowIndex.\n * @memberof canvasDatagrid\n * @name getVisibleCellByIndex\n * @method\n * @returns {cell} cell at the selected location.\n * @param {number} x Column index.\n * @param {number} y Row index.\n */\n self.getVisibleCellByIndex = function (x, y) {\n return self.visibleCells.filter(function (c) {\n return c.columnIndex === x && c.rowIndex === y;\n })[0];\n };\n /**\n * Get an unhide indicator at grid pixel coordinate x and y.\n * @memberof canvasDatagrid\n * @name getUnhideIndicator\n * @method\n * @param {number} x Number of pixels from the left.\n * @param {number} y Number of pixels from the top.\n */\n self.getUnhideIndicator = function (x, y) {\n const indicators = self.visibleUnhideIndicators;\n if (indicators.length <= 0) return;\n for (let i = 0; i < indicators.length; i++) {\n const indicator = indicators[i];\n if (\n x >= indicator.x &&\n y >= indicator.y &&\n x <= indicator.x2 &&\n y <= indicator.y2\n )\n return indicator;\n }\n };\n /**\n * Get a column group at grid pixel coordinate x and y.\n * @memberof canvasDatagrid\n * @name getColumnGroupAt\n * @method\n * @param {number} x Number of pixels from the left.\n * @param {number} y Number of pixels from the top.\n */\n self.getColumnGroupAt = function (x, y) {\n const groups = self.groupedColumns.length;\n if (groups <= 0) return;\n const yZero = self.getColumnGroupAreaHeight();\n if (y >= yZero) return;\n for (let i = 0; i < self.visibleGroups.length; i++) {\n const g = self.visibleGroups[i];\n if (g.type !== 'c') continue;\n if (x >= g.x && y >= g.y && x <= g.x2 && y <= g.y2) return g;\n }\n };\n /**\n * Get a row group at grid pixel coordinate x and y.\n * @memberof canvasDatagrid\n * @name getRowGroupAt\n * @method\n * @param {number} x Number of pixels from the left.\n * @param {number} y Number of pixels from the top.\n */\n self.getRowGroupAt = function (x, y) {\n const groups = self.groupedRows.length;\n if (groups <= 0) return;\n const xZero = self.getRowGroupAreaWidth();\n if (x >= xZero) return;\n for (let i = 0; i < self.visibleGroups.length; i++) {\n const g = self.visibleGroups[i];\n if (g.type !== 'r') continue;\n if (x >= g.x && y >= g.y && x <= g.x2 && y <= g.y2) return g;\n }\n };\n /**\n * Gets the cell at grid pixel coordinate x and y. Author's note. This function ties drawing and events together. This is a very complex function and is core to the component.\n * @memberof canvasDatagrid\n * @name getCellAt\n * @method\n * @returns {cell} cell at the selected location.\n * @param {number} x Number of pixels from the left.\n * @param {number} y Number of pixels from the top.\n */\n self.getCellAt = function (x, y, useTouchScrollZones) {\n function getBorder(entitiy) {\n if (\n entitiy.x + entitiy.width - self.attributes.borderResizeZone * 0.4 <\n x &&\n entitiy.x + entitiy.width + self.attributes.borderResizeZone * 0.6 > x\n ) {\n return 'r';\n }\n if (\n entitiy.x - self.attributes.borderResizeZone * 0.4 < x &&\n entitiy.x + self.attributes.borderResizeZone * 0.6 > x\n ) {\n return 'l';\n }\n if (\n entitiy.y + entitiy.height - self.attributes.borderResizeZone * 0.4 <\n y &&\n entitiy.y + entitiy.height + self.attributes.borderResizeZone * 0.6 > y\n ) {\n return 'b';\n }\n if (\n entitiy.y - self.attributes.borderResizeZone * 0.4 < y &&\n entitiy.y + self.attributes.borderResizeZone * 0.6 > y\n ) {\n return 't';\n }\n }\n if (!self.visibleCells) {\n return;\n }\n x -= self.getRowGroupAreaWidth();\n y -= self.getColumnGroupAreaHeight();\n\n if (self.dragStartObject !== undefined) {\n if (x <= 0) x = 1;\n if (x >= self.width) x = self.width - 1;\n if (y <= 0) y = 1;\n if (y >= self.height) y = self.height - 1;\n }\n\n var border,\n tsz = useTouchScrollZones ? self.attributes.touchScrollZone : 0,\n moveMode = self.attributes.borderDragBehavior === 'move',\n i,\n l = self.visibleCells.length,\n moveBorder,\n xBorderBehavior = moveMode ? self.cursorGrab : 'ew-resize',\n yBorderBehavior = moveMode ? self.cursorGrab : 'ns-resize',\n cell,\n entitiy;\n if (!self.visibleCells || !self.visibleCells.length) {\n return;\n }\n self.hasFocus = true;\n if (!(y < self.height && y > 0 && x < self.width && x > 0)) {\n self.hasFocus = false;\n return {\n dragContext: 'inherit',\n context: 'inherit',\n };\n }\n for (i = 0; i < l; i += 1) {\n cell = self.visibleCells[i];\n // interactive dimensions of the cell. used for touch \"over size\" zones\n entitiy = {\n x: cell.x,\n y: cell.y,\n height: cell.height,\n width: cell.width,\n };\n if (\n useTouchScrollZones &&\n /(vertical|horizontal)-scroll-/.test(cell.style)\n ) {\n entitiy.x -= tsz;\n entitiy.y -= tsz;\n entitiy.height += tsz;\n entitiy.width += tsz;\n }\n if (\n entitiy.x - self.style.cellBorderWidth < x &&\n entitiy.x + entitiy.width + self.style.cellBorderWidth > x &&\n entitiy.y - self.style.cellBorderWidth < y &&\n entitiy.y + entitiy.height + self.style.cellBorderWidth > y\n ) {\n if (/frozen-row-marker/.test(cell.style)) {\n if (self.dragMode === 'frozen-column-marker') continue;\n cell.dragContext = cell.style;\n cell.context = 'grab';\n return cell;\n }\n if (/frozen-column-marker/.test(cell.style)) {\n if (self.dragMode === 'frozen-row-marker') continue;\n cell.dragContext = cell.style;\n cell.context = 'grab';\n return cell;\n }\n if (/selection-handle-/.test(cell.style)) {\n cell.dragContext = cell.style;\n cell.context = 'crosshair';\n return cell;\n }\n if (/vertical-scroll-(bar|box)/.test(cell.style)) {\n cell.dragContext = 'vertical-scroll-box';\n cell.context = 'vertical-scroll-box';\n cell.isScrollBar = true;\n cell.isVerticalScrollBar = true;\n if (y > self.scrollBox.box.v.y + self.scrollBox.scrollBoxHeight) {\n cell.dragContext = 'vertical-scroll-bottom';\n cell.context = 'vertical-scroll-bottom';\n } else if (y < self.scrollBox.box.v.y) {\n cell.dragContext = 'vertical-scroll-top';\n cell.context = 'vertical-scroll-top';\n }\n self.cursor = 'default';\n return cell;\n }\n if (/horizontal-scroll-(bar|box)/.test(cell.style)) {\n cell.dragContext = 'horizontal-scroll-box';\n cell.context = 'horizontal-scroll-box';\n cell.isScrollBar = true;\n cell.isHorizontalScrollBar = true;\n if (x > self.scrollBox.box.h.x + self.scrollBox.scrollBoxWidth) {\n cell.dragContext = 'horizontal-scroll-right';\n cell.context = 'horizontal-scroll-right';\n } else if (x < self.scrollBox.box.h.x) {\n cell.dragContext = 'horizontal-scroll-left';\n cell.context = 'horizontal-scroll-left';\n }\n self.cursor = 'default';\n return cell;\n }\n border = getBorder(entitiy);\n // check if the border of this cell is the border of the selection and if so show move cursor in move mode\n moveBorder =\n moveMode &&\n cell.selectionBorder &&\n cell.selectionBorder.indexOf(border) !== -1;\n if (\n ['l', 'r'].indexOf(border) !== -1 &&\n (self.attributes.allowColumnResize || moveBorder) &&\n ((self.attributes.allowColumnResizeFromCell && cell.isNormal) ||\n !cell.isNormal ||\n moveBorder) &&\n ((self.attributes.allowRowHeaderResize &&\n (cell.isRowHeader || cell.isCorner)) ||\n !(cell.isRowHeader && cell.isCorner))\n ) {\n if (\n (cell.isColumnHeader ||\n cell.isCorner ||\n (self.attributes.allowColumnResizeFromCell && cell.isNormal)) &&\n border === 'r'\n ) {\n cell.context = 'ew-resize';\n cell.dragContext = 'ew-resize';\n return cell;\n }\n if (!(cell.isColumnHeader || cell.isCorner) && moveBorder) {\n cell.context = xBorderBehavior;\n cell.dragContext = border + '-move';\n return cell;\n }\n }\n if (\n ['t', 'b'].indexOf(border) !== -1 &&\n cell.rowIndex > -1 &&\n (self.attributes.allowRowResize || moveBorder) &&\n ((self.attributes.allowRowResizeFromCell && cell.isNormal) ||\n !cell.isNormal ||\n moveBorder) &&\n !cell.isColumnHeader\n ) {\n if (\n (cell.isRowHeader ||\n cell.isCorner ||\n (self.attributes.allowRowResizeFromCell && cell.isNormal)) &&\n border === 'b'\n ) {\n cell.context = 'ns-resize';\n cell.dragContext = 'ns-resize';\n return cell;\n }\n if (!(cell.isRowHeader || cell.isCorner) && moveBorder) {\n cell.context = yBorderBehavior;\n cell.dragContext = border + '-move';\n return cell;\n }\n }\n if (cell.style === 'columnHeaderCell') {\n if (\n (!self.isColumnSelected(cell.columnIndex) &&\n cell.x +\n cell.width -\n self.attributes.columnGrabZoneSize -\n self.style.cellBorderWidth >\n x) ||\n !self.attributes.allowRowReordering\n ) {\n cell.dragContext = 'cell';\n cell.context = 'cell';\n } else {\n cell.context = self.cursorGrab;\n cell.dragContext = 'column-reorder';\n }\n return cell;\n }\n if (cell.style === 'rowHeaderCell') {\n if (\n (!self.isRowSelected(cell.rowIndex) &&\n self.attributes.rowGrabZoneSize +\n (cell.y - self.style.cellBorderWidth) <\n y) ||\n !self.attributes.allowRowReordering\n ) {\n cell.dragContext = 'cell';\n cell.context = 'cell';\n } else {\n cell.context = self.cursorGrab;\n cell.dragContext = 'row-reorder';\n }\n return cell;\n }\n if (cell.isGrid) {\n self.hasFocus = false;\n cell.dragContext = 'cell-grid';\n cell.context = 'cell-grid';\n return cell;\n }\n if (cell.style === 'tree-grid') {\n self.hasFocus = false;\n cell.dragContext = 'tree';\n cell.context = 'tree';\n return cell;\n }\n cell.dragContext = 'cell';\n cell.context = 'cell';\n return cell;\n }\n }\n self.hasFocus = true;\n self.cursor = 'default';\n return {\n dragContext: 'background',\n context: 'background',\n style: 'background',\n isBackground: true,\n };\n };\n /**\n * Gets the bounds of current selection.\n * @returns {rect} selection.\n * @memberof canvasDatagrid\n * @name getSelectionBounds\n * @method\n */\n self.getSelectionBounds = function () {\n var low = { x: Infinity, y: Infinity },\n high = { x: -Infinity, y: -Infinity };\n self.selections.forEach(function (row, rowIndex) {\n var maxCol, minCol;\n low.y = rowIndex < low.y ? rowIndex : low.y;\n high.y = rowIndex > high.y ? rowIndex : high.y;\n maxCol = Math.max.apply(null, row);\n minCol = Math.min.apply(null, row);\n low.x = minCol < low.x ? minCol : low.x;\n high.x = maxCol > high.x ? maxCol : high.x;\n });\n return {\n top: low.y,\n left: low.x,\n bottom: high.y,\n right: high.x,\n };\n };\n /**\n * Returns an auto generated schema based on data structure.\n * @memberof canvasDatagrid\n * @name getSchemaFromData\n * @method\n * @tutorial schema\n * @returns {schema} schema A schema based on the first item in the data array.\n */\n self.getSchemaFromData = function (d) {\n d = d || self.originalData;\n return Object.keys(d[0] || { ' ': '' }).map(function mapEachSchemaColumn(\n key,\n index,\n ) {\n var type = self.getBestGuessDataType(key, d),\n i = {\n name: key,\n title: isNaN(parseInt(key, 10))\n ? key\n : self.integerToAlpha(key).toUpperCase(),\n index: index,\n columnIndex: index,\n type: type,\n filter: self.filter(type),\n };\n if (\n self.storedSettings &&\n self.storedSettings.visibility &&\n self.storedSettings.visibility[i.name] !== undefined\n ) {\n i.hidden = !self.storedSettings.visibility[i.name];\n }\n return i;\n });\n };\n /**\n * Clears the change log grid.changes that keeps track of changes to the data set.\n * This does not undo changes or alter data it is simply a convince array to keep\n * track of changes made to the data since last this method was called.\n * @memberof canvasDatagrid\n * @name clearChangeLog\n * @method\n */\n self.clearChangeLog = function () {\n self.changes = [];\n };\n /**\n * Selects an area of the grid.\n * @memberof canvasDatagrid\n * @name selectArea\n * @method\n * @param {rect} bounds A rect object representing the selected values.\n */\n self.selectArea = function (bounds, ctrl) {\n self.selectionBounds = bounds || self.selectionBounds;\n var ev,\n x,\n y,\n s = self.getSchema();\n if (!ctrl) {\n self.selections = [];\n self.selectedRows = [];\n self.selectedColumns = [];\n }\n if (\n self.selectionBounds.top < -1 ||\n self.selectionBounds.bottom > self.viewData.length ||\n self.selectionBounds.left < -1 ||\n self.selectionBounds.right > s.length\n ) {\n throw new Error('Impossible selection area');\n }\n for (\n x = self.selectionBounds.top;\n x <= self.selectionBounds.bottom;\n x += 1\n ) {\n self.selections[x] = [];\n self.selectedRows.push(x);\n for (\n y = self.selectionBounds.left;\n y <= self.selectionBounds.right;\n y += 1\n ) {\n if (self.selections[x].indexOf(y) === -1) {\n self.selections[x].push(y);\n }\n if (y !== -1 && self.selectedColumns.indexOf(y) === -1) {\n self.selectedColumns.push(y);\n }\n }\n }\n ev = {\n selections: self.selections,\n selectionBounds: self.selectionBounds,\n selectedCells: self.getSelectedCells(),\n };\n Object.defineProperty(ev, 'selectedData', {\n get: function () {\n return self.getSelectedData();\n },\n });\n self.dispatchEvent('selectionchanged', ev);\n };\n /**\n * Returns the maximum text width for a given column by column name.\n * @memberof canvasDatagrid\n * @name findColumnMaxTextLength\n * @method\n * @returns {number} The number of pixels wide the maximum width value in the selected column.\n * @param {string} name The name of the column to calculate the value's width of.\n */\n self.findColumnMaxTextLength = function (name) {\n var m = -Infinity;\n if (name === 'cornerCell') {\n self.ctx.font = self.style.rowHeaderCellFont;\n return (\n self.ctx.measureText(\n (\n self.viewData.length + (self.attributes.showNewRow ? 1 : 0)\n ).toString(),\n ).width +\n self.style.autosizePadding +\n self.style.autosizeHeaderCellPadding +\n self.style.rowHeaderCellPaddingRight +\n self.style.rowHeaderCellPaddingLeft +\n (self.attributes.tree\n ? self.style.treeArrowWidth +\n self.style.treeArrowMarginLeft +\n self.style.treeArrowMarginRight\n : 0)\n );\n }\n var formatter = null;\n self.getSchema().forEach(function (col) {\n if (col.name !== name) {\n return;\n }\n self.ctx.font = self.style.columnHeaderCellFont;\n var t =\n self.ctx.measureText(col.title || col.name).width +\n self.style.columnHeaderCellPaddingRight +\n self.style.columnHeaderCellPaddingLeft +\n self.style.cellAutoResizePadding;\n m = t > m ? t : m;\n formatter = self.formatters[col.type];\n });\n self.viewData.forEach(function (row) {\n var text = row[name];\n if (formatter) {\n text = formatter({ cell: { value: text } });\n }\n self.ctx.font = self.style.cellFont;\n var t =\n self.ctx.measureText(text).width +\n self.style.cellPaddingRight +\n self.style.cellPaddingLeft +\n self.style.cellAutoResizePadding;\n m = t > m ? t : m;\n });\n return m;\n };\n /**\n * Gets the total width of all header columns.\n * @memberof canvasDatagrid\n * @name getHeaderWidth\n * @method\n */\n self.getHeaderWidth = function () {\n return self.getVisibleSchema().reduce(function (total, header) {\n return total + parseInt(header.width || self.style.cellWidth, 10);\n }, 0);\n };\n /**\n * Gets the height of a row by index.\n * @memberof canvasDatagrid\n * @name getRowHeight\n * @method\n * @param {number} rowIndex The row index to lookup.\n */\n self.getRowHeight = function (rowIndex) {\n return (self.sizes.rows[rowIndex] || self.style.cellHeight) * self.scale;\n };\n /**\n * Gets the width of a column by index.\n * @memberof canvasDatagrid\n * @name getColumnWidth\n * @method\n * @param {number} columnIndex The column index to lookup.\n */\n self.getColumnWidth = function (columnIndex) {\n return (\n (self.sizes.columns[columnIndex] ||\n self.getSchema()[columnIndex].width ||\n self.style.cellWidth) * self.scale\n );\n };\n self.formatters.string = function cellFormatterString(e) {\n return e.cell.value !== undefined ? e.cell.value : '';\n };\n self.formatters.rowHeaderCell = self.formatters.string;\n self.formatters.headerCell = self.formatters.string;\n self.formatters.number = self.formatters.string;\n self.formatters.int = self.formatters.string;\n self.formatters.html = self.formatters.string;\n self.sorters.string = function (columnName, direction) {\n var asc = direction === 'asc';\n return function (a, b) {\n const aValue = a[columnName] || '';\n const bValue = b[columnName] || '';\n if (asc) {\n if (!aValue.localeCompare) {\n return 1;\n }\n return aValue.localeCompare(bValue);\n }\n if (!bValue.localeCompare) {\n return 1;\n }\n return bValue.localeCompare(aValue);\n };\n };\n self.sorters.number = function (columnName, direction) {\n var asc = direction === 'asc';\n return function (a, b) {\n if (asc) {\n return a[columnName] - b[columnName];\n }\n return b[columnName] - a[columnName];\n };\n };\n self.sorters.date = function (columnName, direction) {\n var asc = direction === 'asc';\n return function (a, b) {\n if (asc) {\n return (\n new Date(a[columnName]).getTime() - new Date(b[columnName]).getTime()\n );\n }\n return (\n new Date(b[columnName]).getTime() - new Date(a[columnName]).getTime()\n );\n };\n };\n}\n","/*jslint browser: true, unparam: true, todo: true, plusplus: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nexport default function (self) {\n var touchTimerMs = 50,\n debounceTouchMove,\n touchMoving,\n touchScrollTimeout;\n self.scrollAnimation = {};\n self.touchDelta = {};\n self.touchAnimateTo = {};\n self.animationFrames = 0;\n self.getTouchPos = function (e, touchIndex) {\n var t = touchIndex ? e.touches[touchIndex] : e.touches[0],\n rect = self.canvas.getBoundingClientRect(),\n pos;\n if (!t) {\n return;\n }\n pos = {\n x: t.clientX - rect.left,\n y: t.clientY - rect.top,\n };\n if (self.isChildGrid) {\n pos.x -= self.canvasOffsetLeft;\n pos.y -= self.canvasOffsetTop;\n }\n return {\n x: pos.x,\n y: pos.y,\n rect: rect,\n };\n };\n // shamelessly stolen from from https://gist.github.com/gre/1650294\n self.easingFunctions = {\n linear: function (t) {\n return t;\n },\n easeInQuad: function (t) {\n return t * t;\n },\n easeOutQuad: function (t) {\n return t * (2 - t);\n },\n easeInOutQuad: function (t) {\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n },\n easeInCubic: function (t) {\n return t * t * t;\n },\n easeOutCubic: function (t) {\n return --t * t * t + 1;\n },\n easeInOutCubic: function (t) {\n return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n },\n easeInQuart: function (t) {\n return t * t * t * t;\n },\n easeOutQuart: function (t) {\n return 1 - --t * t * t * t;\n },\n easeInOutQuart: function (t) {\n return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;\n },\n easeInQuint: function (t) {\n return t * t * t * t * t;\n },\n easeOutQuint: function (t) {\n return 1 + --t * t * t * t * t;\n },\n easeInOutQuint: function (t) {\n return t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t;\n },\n };\n self.easing = function (t, b, c, d) {\n return (\n c * self.easingFunctions[self.attributes.touchEasingMethod](t / d) + b\n );\n };\n self.calculatePPSTimed = function () {\n self.xPPST = -(\n (self.touchDelta.x - self.touchSigmaTimed.x) /\n (self.touchDelta.t - self.touchSigmaTimed.t)\n );\n self.yPPST = -(\n (self.touchDelta.y - self.touchSigmaTimed.y) /\n (self.touchDelta.t - self.touchSigmaTimed.t)\n );\n self.touchSigmaTimed = {\n x: self.touchDelta.x,\n y: self.touchDelta.y,\n t: performance.now(),\n };\n };\n self.calculatePPS = function () {\n self.xPPS = -(\n (self.touchDelta.x - self.touchSigma.x) /\n (self.touchDelta.t - self.touchSigma.t)\n );\n self.yPPS = -(\n (self.touchDelta.y - self.touchSigma.y) /\n (self.touchDelta.t - self.touchSigma.t)\n );\n self.touchSigma = {\n x: self.touchDelta.x,\n y: self.touchDelta.y,\n t: performance.now(),\n };\n };\n self.touchEndAnimation = function () {\n if (!self.canvas || !self.scrollBox.scrollTo) {\n return requestAnimationFrame(self.touchEndAnimation);\n }\n var n = performance.now(),\n d = self.attributes.touchReleaseAnimationDurationMs,\n t;\n t = n - self.touchDelta.t;\n self.animationFrames += 1;\n self.scrollAnimation.x = self.easing(\n t,\n self.touchDelta.scrollLeft,\n self.touchAnimateTo.x,\n d,\n );\n self.scrollAnimation.y = self.easing(\n t,\n self.touchDelta.scrollTop,\n self.touchAnimateTo.y,\n d,\n );\n if (\n t > d ||\n (self.scrollAnimation.y === self.scrollBox.scrollTop &&\n self.scrollAnimation.x === self.scrollBox.scrollLeft) ||\n self.stopAnimation\n ) {\n return;\n }\n self.scrollBox.scrollTo(self.scrollAnimation.x, self.scrollAnimation.y);\n requestAnimationFrame(self.touchEndAnimation);\n };\n self.touchEditCell = function (cell) {\n self.beginEditAt(cell.columnIndex, cell.rowIndex);\n };\n self.touchstart = function (e) {\n if (e.changedTouches[0]) {\n self.touchStart = self.getTouchPos(e);\n self.startingCell = self.getCellAt(\n self.touchStart.x,\n self.touchStart.y,\n true,\n );\n }\n if (\n self.dispatchEvent('touchstart', {\n NativeEvent: e,\n cell: self.startingCell,\n })\n ) {\n return;\n }\n self.disposeContextMenu();\n clearInterval(self.calculatePPSTimer);\n clearTimeout(self.touchContextTimeout);\n self.touchStartEvent = e;\n self.stopAnimation = true;\n self.animationFrames = 0;\n self.stopPropagation(e);\n if (e.touches.length === 1 && e.changedTouches[0] && !self.zoomAltered) {\n self.touchLength = 1;\n self.touchStart = self.touchStart || self.touchStart1;\n self.touchScrollStart = {\n x: self.scrollBox.scrollLeft,\n y: self.scrollBox.scrollTop,\n t: performance.now(),\n };\n self.touchDelta = {\n x: 0,\n y: 0,\n scrollLeft: self.scrollBox.scrollLeft,\n scrollTop: self.scrollBox.scrollTop,\n t: self.touchScrollStart.t,\n };\n self.touchSigma = {\n x: self.touchDelta.x,\n y: self.touchDelta.y,\n t: self.touchDelta.t,\n };\n self.touchSigmaTimed = {\n x: self.touchDelta.x,\n y: self.touchDelta.y,\n t: self.touchDelta.t,\n };\n self.touchContextTimeout = setTimeout(function () {\n self.contextmenuEvent(e, self.touchStart);\n }, self.attributes.touchContextMenuTimeMs);\n self.calculatePPSTimer = setInterval(\n self.calculatePPSTimed,\n touchTimerMs,\n );\n if (\n self.startingCell &&\n (self.startingCell.isGrid ||\n ['tree', 'inherit'].indexOf(self.startingCell.context) !== -1)\n ) {\n self.hasFocus = false;\n return;\n }\n self.hasFocus = true;\n if (self.startingCell.isHeader) {\n if (self.startingCell.isRowHeader) {\n self.selectArea({\n top: self.startingCell.rowIndex,\n bottom: self.startingCell.rowIndex,\n left: 0,\n right: self.getVisibleSchema().length - 1,\n });\n self.draw(true);\n } else if (self.startingCell.isColumnHeader) {\n if (self.attributes.columnHeaderClickBehavior === 'sort') {\n if (self.orderBy === self.startingCell.header.name) {\n self.orderDirection =\n self.orderDirection === 'asc' ? 'desc' : 'asc';\n } else {\n self.orderDirection = 'asc';\n }\n self.order(self.startingCell.header.name, self.orderDirection);\n }\n if (self.attributes.columnHeaderClickBehavior === 'select') {\n self.selectArea({\n top: 0,\n bottom: self.viewData.length - 1,\n left: self.startingCell.columnIndex,\n right: self.startingCell.columnIndex,\n });\n self.draw(true);\n }\n }\n self.touchEndEvents(e);\n return;\n }\n }\n if (self.zoomAltered) {\n return;\n }\n document.body.addEventListener('touchmove', self.touchmove, {\n passive: false,\n });\n document.body.addEventListener('touchend', self.touchend, false);\n document.body.addEventListener('touchcancel', self.touchcancel, false);\n self.draw(true);\n };\n self.touchSelect = function (cell, handleType) {\n if (cell.rowIndex === undefined || cell.columnIndex === undefined) {\n return;\n }\n self.touchSelecting = true;\n var bounds = self.getSelectionBounds();\n if (\n handleType === 'selection-handle-bl' &&\n cell.rowIndex >= bounds.top &&\n cell.columnIndex <= bounds.right\n ) {\n bounds.bottom = cell.rowIndex;\n bounds.left = cell.columnIndex;\n } else if (\n handleType === 'selection-handle-tl' &&\n cell.rowIndex <= bounds.bottom &&\n cell.columnIndex <= bounds.right\n ) {\n bounds.top = cell.rowIndex;\n bounds.left = cell.columnIndex;\n } else if (\n handleType === 'selection-handle-tr' &&\n cell.rowIndex <= bounds.bottom &&\n cell.columnIndex >= bounds.left\n ) {\n bounds.top = cell.rowIndex;\n bounds.right = cell.columnIndex;\n } else if (\n handleType === 'selection-handle-br' &&\n cell.rowIndex >= bounds.top &&\n cell.columnIndex >= bounds.left\n ) {\n bounds.bottom = cell.rowIndex;\n bounds.right = cell.columnIndex;\n }\n if (self.attributes.selectionMode === 'row' || cell.rowIndex === -1) {\n bounds.left = 0;\n bounds.right = self.getSchema().length - 1;\n } else {\n bounds.left = Math.max(0, bounds.left);\n }\n self.selectArea(bounds);\n self.draw(true);\n };\n function touchMove(e) {\n var ch, rw, rScrollZone, lScrollZone, bScrollZone, tScrollZone, sbw, t1, t2;\n if (self.dispatchEvent('beforetouchmove', { NativeEvent: e })) {\n return;\n }\n clearTimeout(touchScrollTimeout);\n if (e.changedTouches[0]) {\n self.touchPosition = self.getTouchPos(e);\n }\n if (e.changedTouches[1]) {\n self.touchPosition1 = self.getTouchPos(e, 1);\n }\n if (\n Math.abs(self.touchDelta.x) + Math.abs(self.touchDelta.y) >\n self.attributes.touchDeadZone\n ) {\n clearTimeout(self.touchContextTimeout);\n }\n if (e.touches.length === 2 && self.touchPosition && self.touchPosition1) {\n t1 = self.touchPosition.y;\n t2 = self.touchPosition1.y;\n if (!self.zoomDeltaStart) {\n self.zoomDeltaStart = Math.abs(t1 - t2);\n self.startScale = self.scale;\n }\n self.touchLength = 2;\n self.scaleDelta = self.zoomDeltaStart - Math.abs(t1 - t2);\n self.scale =\n self.startScale -\n self.scaleDelta * self.attributes.touchZoomSensitivity;\n self.scale = Math.min(\n Math.max(self.scale, self.attributes.touchZoomMin),\n self.attributes.touchZoomMax,\n );\n self.zoomAltered = true;\n self.resize(true);\n self.resizeChildGrids();\n return;\n }\n if (self.zoomAltered) {\n return;\n }\n self.touchLength = 1;\n self.touchPosition = self.touchPosition || self.touchPosition1;\n ch = self.getColumnHeaderCellHeight();\n rw = self.getRowHeaderCellWidth();\n rScrollZone =\n self.width - self.style.scrollBarWidth - self.touchPosition.x <\n self.attributes.selectionScrollZone;\n lScrollZone =\n self.touchPosition.x - rw < self.attributes.selectionScrollZone;\n bScrollZone =\n self.height - self.style.scrollBarWidth - self.touchPosition.y <\n self.attributes.selectionScrollZone;\n tScrollZone =\n self.touchPosition.y - ch < self.attributes.selectionScrollZone;\n sbw = self.style.scrollBarWidth;\n function touchScroll() {\n var x = self.scrollBox.scrollLeft,\n y = self.scrollBox.scrollTop;\n x += rScrollZone ? self.attributes.selectionScrollIncrement : 0;\n y += bScrollZone ? self.attributes.selectionScrollIncrement : 0;\n y -= tScrollZone ? self.attributes.selectionScrollIncrement : 0;\n x -= lScrollZone ? self.attributes.selectionScrollIncrement : 0;\n self.scrollBox.scrollTo(x, y);\n touchScrollTimeout = setTimeout(\n touchScroll,\n self.attributes.scrollRepeatRate,\n );\n }\n e.stopPropagation();\n self.touchDelta = {\n x: self.touchPosition.x - self.touchStart.x,\n y: self.touchPosition.y - self.touchStart.y,\n scrollLeft: self.scrollBox.scrollLeft,\n scrollTop: self.scrollBox.scrollTop,\n t: performance.now(),\n };\n self.currentCell = self.getCellAt(\n self.touchPosition.x,\n self.touchPosition.y,\n );\n self.dispatchEvent('touchmove', { NativeEvent: e, cell: self.currentCell });\n self.calculatePPS();\n self.touchDuration = performance.now() - self.touchScrollStart.t;\n self.stopAnimation = true;\n self.animationFrames = 0;\n if (\n self.touchSelecting &&\n (rScrollZone || lScrollZone || tScrollZone || bScrollZone)\n ) {\n touchScroll();\n }\n if (/vertical-scroll-/.test(self.startingCell.style)) {\n self.scrollBox.scrollTop =\n self.scrollBox.scrollHeight *\n ((self.touchPosition.y - ch - sbw) /\n (self.scrollBox.height - sbw - ch));\n return;\n }\n if (/horizontal-scroll-/.test(self.startingCell.style)) {\n self.scrollBox.scrollLeft =\n self.scrollBox.scrollWidth *\n ((self.touchPosition.x - rw - sbw) / (self.scrollBox.width - sbw - rw));\n return;\n }\n if (/selection-handle-/.test(self.startingCell.style)) {\n self.touchSelect(self.currentCell, self.startingCell.style);\n return;\n }\n self.scrollBox.scrollTo(\n self.touchScrollStart.x - self.touchDelta.x,\n self.touchScrollStart.y - self.touchDelta.y,\n );\n }\n self.touchmove = function (e) {\n if (touchMoving) {\n return;\n }\n requestAnimationFrame(function () {\n touchMoving = true;\n touchMove(e);\n touchMoving = false;\n });\n };\n self.touchEndEvents = function (e) {\n self.zoomDeltaStart = undefined;\n self.touchSelecting = false;\n clearInterval(self.touchScrollTimeout);\n clearInterval(self.touchContextTimeout);\n clearInterval(self.calculatePPSTimer);\n e.stopPropagation();\n document.body.removeEventListener('touchmove', self.touchmove, {\n passive: false,\n });\n document.body.removeEventListener('touchend', self.touchend, false);\n document.body.removeEventListener('touchcancel', self.touchcancel, false);\n };\n self.touchend = function (e) {\n if (\n self.dispatchEvent('touchend', { NativeEvent: e, cell: self.currentCell })\n ) {\n return;\n }\n self.zoomDeltaStart = undefined;\n if (e.changedTouches[0]) {\n self.touchPosition = undefined;\n }\n if (e.changedTouches[1]) {\n self.touchPosition1 = undefined;\n }\n if (self.zoomAltered) {\n if (e.touches.length === 0) {\n self.zoomAltered = false;\n }\n return;\n }\n var dz =\n Math.abs(self.touchDelta.x) + Math.abs(self.touchDelta.y) <\n self.attributes.touchDeadZone;\n if (isNaN(self.xPPS)) {\n self.xPPS = 0;\n }\n if (isNaN(self.yPPS)) {\n self.yPPS = 0;\n }\n if (isNaN(self.xPPST)) {\n self.xPPST = 0;\n }\n if (isNaN(self.yPPST)) {\n self.yPPST = 0;\n }\n self.touchAnimateTo.x =\n self.xPPS * self.attributes.touchReleaseAcceleration;\n self.touchAnimateTo.y =\n self.yPPS * self.attributes.touchReleaseAcceleration;\n self.calculatePPSTimed();\n if (\n !dz &&\n self.animationFrames === 0 &&\n (Math.abs(self.xPPST) > self.attributes.scrollAnimationPPSThreshold ||\n Math.abs(self.yPPST) > self.attributes.scrollAnimationPPSThreshold) &&\n !/-scroll-/.test(self.startingCell.style) &&\n !dz\n ) {\n self.stopAnimation = false;\n self.touchEndAnimation();\n }\n self.touchEndEvents(e);\n };\n self.touchcancel = function (e) {\n if (\n self.dispatchEvent('touchcancel', {\n NativeEvent: e,\n cell: self.currentCell,\n })\n ) {\n return;\n }\n self.touchEndEvents(e);\n };\n}\n","module.exports=function(e){var o={};function a(t){if(o[t])return o[t].exports;var r=o[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,a),r.l=!0,r.exports}return a.m=e,a.c=o,a.d=function(e,o,t){a.o(e,o)||Object.defineProperty(e,o,{enumerable:!0,get:t})},a.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},a.t=function(e,o){if(1&o&&(e=a(e)),8&o)return e;if(4&o&&\"object\"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(a.r(t),Object.defineProperty(t,\"default\",{enumerable:!0,value:e}),2&o&&\"string\"!=typeof e)for(var r in e)a.d(t,r,function(o){return e[o]}.bind(null,r));return t},a.n=function(e){var o=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(o,\"a\",o),o},a.o=function(e,o){return Object.prototype.hasOwnProperty.call(e,o)},a.p=\"\",a(a.s=0)}([function(e,o,a){\"use strict\";Object.defineProperty(o,\"__esModule\",{value:!0});var t=a(1),r=Object.keys(t.default).reduce((function(e,o){return e.concat(t.default[o])}),[]);o.default=function(e){return-1===r.indexOf(e.key)}},function(e,o,a){\"use strict\";Object.defineProperty(o,\"__esModule\",{value:!0});o.default={modifier:[\"Alt\",\"AltGraph\",\"CapsLock\",\"Control\",\"Fn\",\"FnLock\",\"Meta\",\"NumLock\",\"ScrollLock\",\"Shift\",\"Symbol\",\"SymbolLock\"],legacyModifier:[\"Hyper\",\"Super\"],whiteSpace:[\"Enter\",\"Tab\"],navigation:[\"ArrowDown\",\"ArrowLeft\",\"ArrowRight\",\"ArrowUp\",\"End\",\"Home\",\"PageDown\",\"PageUp\"],editing:[\"Backspace\",\"Clear\",\"Copy\",\"CrSel\",\"Cut\",\"Delete\",\"EraseEof\",\"ExSel\",\"Insert\",\"Paste\",\"Redo\",\"Undo\"],ui:[\"Accept\",\"Again\",\"Attn\",\"Cancel\",\"ContextMenu\",\"Escape\",\"Execute\",\"Find\",\"Help\",\"Pause\",\"Play\",\"Props\",\"Select\",\"ZoomIn\",\"ZoomOut\"],device:[\"BrightnessDown\",\"BrightnessUp\",\"Eject\",\"LogOff\",\"Power\",\"PowerOff\",\"PrintScreen\",\"Hibernate\",\"Standby\",\"WakeUp\"],imeCompositionKeys:[\"AllCandidates\",\"Alphanumeric\",\"CodeInput\",\"Compose\",\"Convert\",\"Dead\",\"FinalMode\",\"GroupFirst\",\"GroupLast\",\"GroupNext\",\"GroupPrevious\",\"ModeChange\",\"NextCandidate\",\"NonConvert\",\"PreviousCandidate\",\"Process\",\"SingleCandidate\"],koreanSpecific:[\"HangulMode\",\"HanjaMode\",\"JunjaMode\"],japaneseSpecific:[\"Eisu\",\"Hankaku\",\"Hiragana\",\"HiraganaKatakana\",\"KanaMode\",\"KanjiMode\",\"Katakana\",\"Romaji\",\"Zenkaku\",\"ZenkakuHankaku\"],commonFunction:[\"F1\",\"F2\",\"F3\",\"F4\",\"F5\",\"F6\",\"F7\",\"F8\",\"F9\",\"F10\",\"F11\",\"F12\",\"Soft1\",\"Soft2\",\"Soft3\",\"Soft4\"],multimedia:[\"ChannelDown\",\"ChannelUp\",\"Close\",\"MailForward\",\"MailReply\",\"MailSend\",\"MediaClose\",\"MediaFastForward\",\"MediaPause\",\"MediaPlay\",\"MediaPlayPause\",\"MediaRecord\",\"MediaRewind\",\"MediaStop\",\"MediaTrackNext\",\"MediaTrackPrevious\",\"New\",\"Open\",\"Print\",\"Save\",\"SpellCheck\"],multimediaNumpad:[\"Key11\",\"Key12\"],audio:[\"AudioBalanceLeft\",\"AudioBalanceRight\",\"AudioBassBoostDown\",\"AudioBassBoostToggle\",\"AudioBassBoostUp\",\"AudioFaderFront\",\"AudioFaderRear\",\"AudioSurroundModeNext\",\"AudioTrebleDown\",\"AudioTrebleUp\",\"AudioVolumeDown\",\"AudioVolumeUp\",\"AudioVolumeMute\",\"MicrophoneToggle\",\"MicrophoneVolumeDown\",\"MicrophoneVolumeUp\",\"MicrophoneVolumeMute\"],speech:[\"SpeechCorrectionList\",\"SpeechInputToggle\"],application:[\"LaunchApplication1\",\"LaunchApplication2\",\"LaunchCalendar\",\"LaunchContacts\",\"LaunchMail\",\"LaunchMediaPlayer\",\"LaunchMusicPlayer\",\"LaunchPhone\",\"LaunchScreenSaver\",\"LaunchSpreadsheet\",\"LaunchWebBrowser\",\"LaunchWebCam\",\"LaunchWordProcessor\"],browser:[\"BrowserBack\",\"BrowserFavorites\",\"BrowserForward\",\"BrowserHome\",\"BrowserRefresh\",\"BrowserSearch\",\"BrowserStop\"],mobilePhone:[\"AppSwitch\",\"Call\",\"Camera\",\"CameraFocus\",\"EndCall\",\"GoBack\",\"GoHome\",\"HeadsetHook\",\"LastNumberRedial\",\"Notification\",\"MannerMode\",\"VoiceDial\"],tv:[\"TV\",\"TV3DMode\",\"TVAntennaCable\",\"TVAudioDescription\",\"TVAudioDescriptionMixDown\",\"TVAudioDescriptionMixUp\",\"TVContentsMenu\",\"TVDataService\",\"TVInput\",\"TVInputComponent1\",\"TVInputComponent2\",\"TVInputComposite1\",\"TVInputComposite2\",\"TVInputHDMI1\",\"TVInputHDMI2\",\"TVInputHDMI3\",\"TVInputHDMI4\",\"TVInputVGA1\",\"TVMediaContext\",\"TVNetwork\",\"TVNumberEntry\",\"TVPower\",\"TVRadioService\",\"TVSatellite\",\"TVSatelliteBS\",\"TVSatelliteCS\",\"TVSatelliteToggle\",\"TVTerrestrialAnalog\",\"TVTerrestrialDigital\",\"TVTimer\"],mediaControls:[\"AVRInput\",\"AVRPower\",\"ColorF0Red\",\"ColorF1Green\",\"ColorF2Yellow\",\"ColorF3Blue\",\"ColorF4Grey\",\"ColorF5Brown\",\"ClosedCaptionToggle\",\"Dimmer\",\"DisplaySwap\",\"DVR\",\"Exit\",\"FavoriteClear0\",\"FavoriteClear1\",\"FavoriteClear2\",\"FavoriteClear3\",\"FavoriteRecall0\",\"FavoriteRecall1\",\"FavoriteRecall2\",\"FavoriteRecall3\",\"FavoriteStore0\",\"FavoriteStore1\",\"FavoriteStore2\",\"FavoriteStore3\",\"Guide\",\"GuideNextDay\",\"GuidePreviousDay\",\"Info\",\"InstantReplay\",\"Link\",\"ListProgram\",\"LiveContent\",\"Lock\",\"MediaApps\",\"MediaAudioTrack\",\"MediaLast\",\"MediaSkipBackward\",\"MediaSkipForward\",\"MediaStepBackward\",\"MediaStepForward\",\"MediaTopMenu\",\"NavigateIn\",\"NavigateNext\",\"NavigateOut\",\"NavigatePrevious\",\"NextFavoriteChannel\",\"NextUserProfile\",\"OnDemand\",\"Pairing\",\"PinPDown\",\"PinPMove\",\"PinPToggle\",\"PinPUp\",\"PlaySpeedDown\",\"PlaySpeedReset\",\"PlaySpeedUp\",\"RandomToggle\",\"RcLowBattery\",\"RecordSpeedNext\",\"RfBypass\",\"ScanChannelsToggle\",\"ScreenModeNext\",\"Settings\",\"SplitScreenToggle\",\"STBInput\",\"STBPower\",\"Subtitle\",\"Teletext\",\"VideoModeNext\",\"Wink\",\"ZoomToggle\"]}}]).default;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(\"./lib/main.js\");\n"],"sourceRoot":""}
|