{"version":3,"file":"angular-gridster2.mjs","sources":["../../../projects/angular-gridster2/src/lib/gridsterConfig.interface.ts","../../../projects/angular-gridster2/src/lib/gridsterCompact.service.ts","../../../projects/angular-gridster2/src/lib/gridsterConfig.constant.ts","../../../projects/angular-gridster2/src/lib/gridsterUtils.service.ts","../../../projects/angular-gridster2/src/lib/gridsterEmptyCell.service.ts","../../../projects/angular-gridster2/src/lib/gridsterRenderer.service.ts","../../../projects/angular-gridster2/src/lib/gridsterPreview.component.ts","../../../projects/angular-gridster2/src/lib/gridster.component.ts","../../../projects/angular-gridster2/src/lib/gridster.html","../../../projects/angular-gridster2/src/lib/gridsterPush.service.ts","../../../projects/angular-gridster2/src/lib/gridsterScroll.service.ts","../../../projects/angular-gridster2/src/lib/gridsterSwap.service.ts","../../../projects/angular-gridster2/src/lib/gridsterDraggable.service.ts","../../../projects/angular-gridster2/src/lib/gridsterPushResize.service.ts","../../../projects/angular-gridster2/src/lib/gridsterResizable.service.ts","../../../projects/angular-gridster2/src/lib/gridsterItem.component.ts","../../../projects/angular-gridster2/src/lib/gridsterItem.html","../../../projects/angular-gridster2/src/lib/gridsterItem.interface.ts","../../../projects/angular-gridster2/src/lib/gridster.interface.ts","../../../projects/angular-gridster2/src/lib/gridster.module.ts","../../../projects/angular-gridster2/src/public_api.ts","../../../projects/angular-gridster2/src/angular-gridster2.ts"],"sourcesContent":["import { GridsterComponentInterface } from './gridster.interface';\nimport {\n  GridsterItem,\n  GridsterItemComponentInterface\n} from './gridsterItem.interface';\n\nexport type gridTypes =\n  | 'fit'\n  | 'scrollVertical'\n  | 'scrollHorizontal'\n  | 'fixed'\n  | 'verticalFixed'\n  | 'horizontalFixed';\nexport type displayGrids = 'always' | 'onDrag&Resize' | 'none';\nexport type compactTypes =\n  | 'none'\n  | 'compactUp'\n  | 'compactLeft'\n  | 'compactUp&Left'\n  | 'compactLeft&Up'\n  | 'compactRight'\n  | 'compactUp&Right'\n  | 'compactRight&Up'\n  | 'compactDown'\n  | 'compactDown&Left'\n  | 'compactLeft&Down'\n  | 'compactDown&Right'\n  | 'compactRight&Down';\n\nexport enum GridType {\n  Fit = 'fit',\n  ScrollVertical = 'scrollVertical',\n  ScrollHorizontal = 'scrollHorizontal',\n  Fixed = 'fixed',\n  VerticalFixed = 'verticalFixed',\n  HorizontalFixed = 'horizontalFixed'\n}\n\nexport enum DisplayGrid {\n  Always = 'always',\n  OnDragAndResize = 'onDrag&Resize',\n  None = 'none'\n}\n\nexport enum CompactType {\n  None = 'none',\n  CompactUp = 'compactUp',\n  CompactLeft = 'compactLeft',\n  CompactUpAndLeft = 'compactUp&Left',\n  CompactLeftAndUp = 'compactLeft&Up',\n  CompactRight = 'compactRight',\n  CompactUpAndRight = 'compactUp&Right',\n  CompactRightAndUp = 'compactRight&Up',\n  CompactDown = 'compactDown',\n  CompactDownAndLeft = 'compactDown&Left',\n  CompactLeftAndDown = 'compactLeft&Down',\n  CompactDownAndRight = 'compactDown&Right',\n  CompactRightAndDown = 'compactRight&Down'\n}\n\nexport enum DirTypes {\n  LTR = 'ltr',\n  RTL = 'rtl'\n}\n\nexport type dirTypes = 'ltr' | 'rtl';\n\nexport interface GridsterConfig {\n  gridType?: gridTypes;\n  scale?: number;\n  fixedColWidth?: number;\n  fixedRowHeight?: number;\n  keepFixedHeightInMobile?: boolean;\n  keepFixedWidthInMobile?: boolean;\n  setGridSize?: boolean;\n  compactType?: compactTypes;\n  mobileBreakpoint?: number;\n  allowMultiLayer?: boolean;\n  defaultLayerIndex?: number;\n  maxLayerIndex?: number;\n  baseLayerIndex?: number;\n  minCols?: number;\n  maxCols?: number;\n  minRows?: number;\n  maxRows?: number;\n  defaultItemCols?: number;\n  defaultItemRows?: number;\n  maxItemCols?: number;\n  maxItemRows?: number;\n  minItemCols?: number;\n  minItemRows?: number;\n  minItemArea?: number;\n  maxItemArea?: number;\n  addEmptyRowsCount?: number;\n  rowHeightRatio?: number;\n  margin?: number;\n  outerMargin?: boolean;\n  outerMarginTop?: number | null;\n  outerMarginRight?: number | null;\n  outerMarginBottom?: number | null;\n  outerMarginLeft?: number | null;\n  useTransformPositioning?: boolean;\n  scrollSensitivity?: number | null;\n  scrollSpeed?: number;\n  initCallback?: (gridster: GridsterComponentInterface) => void;\n  destroyCallback?: (gridster: GridsterComponentInterface) => void;\n  gridSizeChangedCallback?: (gridster: GridsterComponentInterface) => void;\n  itemChangeCallback?: (\n    item: GridsterItem,\n    itemComponent: GridsterItemComponentInterface\n  ) => void;\n  itemResizeCallback?: (\n    item: GridsterItem,\n    itemComponent: GridsterItemComponentInterface\n  ) => void;\n  itemInitCallback?: (\n    item: GridsterItem,\n    itemComponent: GridsterItemComponentInterface\n  ) => void;\n  itemRemovedCallback?: (\n    item: GridsterItem,\n    itemComponent: GridsterItemComponentInterface\n  ) => void;\n  itemValidateCallback?: (item: GridsterItem) => boolean;\n  draggable?: Draggable;\n  resizable?: Resizable;\n  swap?: boolean;\n  swapWhileDragging?: boolean;\n  pushItems?: boolean;\n  disablePushOnDrag?: boolean;\n  disablePushOnResize?: boolean;\n  disableAutoPositionOnConflict?: boolean;\n  pushDirections?: PushDirections;\n  pushResizeItems?: boolean;\n  displayGrid?: displayGrids;\n  disableWindowResize?: boolean;\n  disableWarnings?: boolean;\n  scrollToNewItems?: boolean;\n  disableScrollHorizontal?: boolean;\n  disableScrollVertical?: boolean;\n  enableBoundaryControl?: boolean;\n  enableEmptyCellClick?: boolean;\n  enableEmptyCellContextMenu?: boolean;\n  enableEmptyCellDrop?: boolean;\n  enableEmptyCellDrag?: boolean;\n  enableOccupiedCellDrop?: boolean;\n  emptyCellClickCallback?: (event: MouseEvent, item: GridsterItem) => void;\n  emptyCellContextMenuCallback?: (\n    event: MouseEvent,\n    item: GridsterItem\n  ) => void;\n  emptyCellDropCallback?: (event: DragEvent, item: GridsterItem) => void;\n  emptyCellDragCallback?: (event: MouseEvent, item: GridsterItem) => void;\n  emptyCellDragMaxCols?: number;\n  emptyCellDragMaxRows?: number;\n  ignoreMarginInRow?: boolean;\n  dirType?: dirTypes;\n  api?: {\n    resize?: () => void;\n    optionsChanged?: () => void;\n    getNextPossiblePosition?: (newItem: GridsterItem) => boolean;\n    getFirstPossiblePosition?: (item: GridsterItem) => GridsterItem;\n    getLastPossiblePosition?: (item: GridsterItem) => GridsterItem;\n    getItemComponent?: (\n      item: GridsterItem\n    ) => GridsterItemComponentInterface | undefined;\n  };\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  [propName: string]: any;\n}\n\nexport interface DragBase {\n  enabled?: boolean;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  stop?: (\n    item: GridsterItem,\n    itemComponent: GridsterItemComponentInterface,\n    event: MouseEvent\n  ) => Promise<any> | void;\n  start?: (\n    item: GridsterItem,\n    itemComponent: GridsterItemComponentInterface,\n    event: MouseEvent\n  ) => void;\n  delayStart?: number;\n}\n\nexport interface Draggable extends DragBase {\n  ignoreContentClass?: string;\n  ignoreContent?: boolean;\n  dragHandleClass?: string;\n  dropOverItems?: boolean;\n  dropOverItemsCallback?: (\n    source: GridsterItem,\n    target: GridsterItem,\n    grid?: GridsterComponentInterface\n  ) => void;\n}\n\nexport interface Resizable extends DragBase {\n  handles?: {\n    s: boolean;\n    e: boolean;\n    n: boolean;\n    w: boolean;\n    se: boolean;\n    ne: boolean;\n    sw: boolean;\n    nw: boolean;\n  };\n}\n\nexport interface PushDirections {\n  north: boolean;\n  east: boolean;\n  south: boolean;\n  west: boolean;\n}\n","import { GridsterComponentInterface } from './gridster.interface';\nimport {\n  GridsterItem,\n  GridsterItemComponentInterface\n} from './gridsterItem.interface';\nimport { CompactType } from './gridsterConfig.interface';\n\nexport class GridsterCompact {\n  constructor(private gridster: GridsterComponentInterface) {}\n\n  destroy(): void {\n    this.gridster = null!;\n  }\n\n  checkCompact(): void {\n    if (this.gridster.$options.compactType !== CompactType.None) {\n      if (this.gridster.$options.compactType === CompactType.CompactUp) {\n        this.checkCompactMovement('y', -1);\n      } else if (\n        this.gridster.$options.compactType === CompactType.CompactLeft\n      ) {\n        this.checkCompactMovement('x', -1);\n      } else if (\n        this.gridster.$options.compactType === CompactType.CompactUpAndLeft\n      ) {\n        this.checkCompactMovement('y', -1);\n        this.checkCompactMovement('x', -1);\n      } else if (\n        this.gridster.$options.compactType === CompactType.CompactLeftAndUp\n      ) {\n        this.checkCompactMovement('x', -1);\n        this.checkCompactMovement('y', -1);\n      } else if (\n        this.gridster.$options.compactType === CompactType.CompactRight\n      ) {\n        this.checkCompactMovement('x', 1);\n      } else if (\n        this.gridster.$options.compactType === CompactType.CompactUpAndRight\n      ) {\n        this.checkCompactMovement('y', -1);\n        this.checkCompactMovement('x', 1);\n      } else if (\n        this.gridster.$options.compactType === CompactType.CompactRightAndUp\n      ) {\n        this.checkCompactMovement('x', 1);\n        this.checkCompactMovement('y', -1);\n      } else if (\n        this.gridster.$options.compactType === CompactType.CompactDown\n      ) {\n        this.checkCompactMovement('y', 1);\n      } else if (\n        this.gridster.$options.compactType === CompactType.CompactDownAndLeft\n      ) {\n        this.checkCompactMovement('y', 1);\n        this.checkCompactMovement('x', -1);\n      } else if (\n        this.gridster.$options.compactType === CompactType.CompactDownAndRight\n      ) {\n        this.checkCompactMovement('y', 1);\n        this.checkCompactMovement('x', 1);\n      } else if (\n        this.gridster.$options.compactType === CompactType.CompactLeftAndDown\n      ) {\n        this.checkCompactMovement('x', -1);\n        this.checkCompactMovement('y', 1);\n      } else if (\n        this.gridster.$options.compactType === CompactType.CompactRightAndDown\n      ) {\n        this.checkCompactMovement('x', 1);\n        this.checkCompactMovement('y', 1);\n      }\n    }\n  }\n\n  checkCompactItem(item: GridsterItem): void {\n    if (this.gridster.$options.compactType !== CompactType.None) {\n      if (this.gridster.$options.compactType === CompactType.CompactUp) {\n        this.moveTillCollision(item, 'y', -1);\n      } else if (\n        this.gridster.$options.compactType === CompactType.CompactLeft\n      ) {\n        this.moveTillCollision(item, 'x', -1);\n      } else if (\n        this.gridster.$options.compactType === CompactType.CompactUpAndLeft\n      ) {\n        this.moveTillCollision(item, 'y', -1);\n        this.moveTillCollision(item, 'x', -1);\n      } else if (\n        this.gridster.$options.compactType === CompactType.CompactLeftAndUp\n      ) {\n        this.moveTillCollision(item, 'x', -1);\n        this.moveTillCollision(item, 'y', -1);\n      } else if (\n        this.gridster.$options.compactType === CompactType.CompactUpAndRight\n      ) {\n        this.moveTillCollision(item, 'y', -1);\n        this.moveTillCollision(item, 'x', 1);\n      } else if (\n        this.gridster.$options.compactType === CompactType.CompactDown\n      ) {\n        this.moveTillCollision(item, 'y', 1);\n      } else if (\n        this.gridster.$options.compactType === CompactType.CompactDownAndLeft\n      ) {\n        this.moveTillCollision(item, 'y', 1);\n        this.moveTillCollision(item, 'x', -1);\n      } else if (\n        this.gridster.$options.compactType === CompactType.CompactLeftAndDown\n      ) {\n        this.moveTillCollision(item, 'x', -1);\n        this.moveTillCollision(item, 'y', 1);\n      } else if (\n        this.gridster.$options.compactType === CompactType.CompactDownAndRight\n      ) {\n        this.moveTillCollision(item, 'y', 1);\n        this.moveTillCollision(item, 'x', 1);\n      } else if (\n        this.gridster.$options.compactType === CompactType.CompactRightAndDown\n      ) {\n        this.moveTillCollision(item, 'x', 1);\n        this.moveTillCollision(item, 'y', 1);\n      }\n    }\n  }\n\n  private checkCompactMovement(direction: 'x' | 'y', delta: number): void {\n    let widgetMoved = false;\n    this.gridster.grid.forEach((widget: GridsterItemComponentInterface) => {\n      if (widget.$item.compactEnabled !== false) {\n        const moved = this.moveTillCollision(widget.$item, direction, delta);\n        if (moved) {\n          widgetMoved = true;\n          widget.item[direction] = widget.$item[direction];\n          widget.itemChanged();\n        }\n      }\n    });\n    if (widgetMoved) {\n      this.checkCompact();\n    }\n  }\n\n  private moveTillCollision(\n    item: GridsterItem,\n    direction: 'x' | 'y',\n    delta: number\n  ): boolean {\n    item[direction] += delta;\n    if (this.gridster.checkCollision(item)) {\n      item[direction] -= delta;\n      return false;\n    } else {\n      this.moveTillCollision(item, direction, delta);\n      return true;\n    }\n  }\n}\n","import {\n  CompactType,\n  DirTypes,\n  DisplayGrid,\n  GridsterConfig,\n  GridType\n} from './gridsterConfig.interface';\n\nexport const GridsterConfigService: GridsterConfig = {\n  gridType: GridType.Fit, // 'fit' will fit the items in the container without scroll;\n  scale: 1, // scale param to zoom in/zoom out\n  // 'scrollVertical' will fit on width and height of the items will be the same as the width\n  // 'scrollHorizontal' will fit on height and width of the items will be the same as the height\n  // 'fixed' will set the rows and columns dimensions based on fixedColWidth and fixedRowHeight options\n  // 'verticalFixed' will set the rows to fixedRowHeight and columns width will fit the space available\n  // 'horizontalFixed' will set the columns to fixedColWidth and rows height will fit the space available\n  fixedColWidth: 250, // fixed col width for gridType: 'fixed'\n  fixedRowHeight: 250, // fixed row height for gridType: 'fixed'\n  keepFixedHeightInMobile: false, // keep the height from fixed gridType in mobile layout\n  keepFixedWidthInMobile: false, // keep the width from fixed gridType in mobile layout\n  setGridSize: false, // sets grid size depending on content\n  compactType: CompactType.None, // compact items: 'none' | 'compactUp' | 'compactLeft' | 'compactUp&Left' | 'compactLeft&Up'\n  mobileBreakpoint: 640, // if the screen is not wider that this, remove the grid layout and stack the items\n  useBodyForBreakpoint: false, // whether to use the body width to determine the mobile breakpoint. Uses the element width when false.\n  allowMultiLayer: false,\n  defaultLayerIndex: 0,\n  maxLayerIndex: 2,\n  baseLayerIndex: 1,\n  minCols: 1, // minimum amount of columns in the grid\n  maxCols: 100, // maximum amount of columns in the grid\n  minRows: 1, // minimum amount of rows in the grid\n  maxRows: 100, // maximum amount of rows in the grid\n  defaultItemCols: 1, // default width of an item in columns\n  defaultItemRows: 1, // default height of an item in rows\n  maxItemCols: 50, // max item number of cols\n  maxItemRows: 50, // max item number of rows\n  minItemCols: 1, // min item number of columns\n  minItemRows: 1, // min item number of rows\n  minItemArea: 1, // min item area: cols * rows\n  maxItemArea: 2500, // max item area: cols * rows\n  addEmptyRowsCount: 0, // add a number of extra empty rows at the end\n  rowHeightRatio: 1, // row height ratio from column width\n  margin: 10, // margin between grid items\n  outerMargin: true, // if margins will apply to the sides of the container\n  outerMarginTop: null, // override outer margin for grid\n  outerMarginRight: null, // override outer margin for grid\n  outerMarginBottom: null, // override outer margin for grid\n  outerMarginLeft: null, // override outer margin for grid\n  useTransformPositioning: true, // toggle between transform or top/left positioning of items\n  scrollSensitivity: 10, // margin of the dashboard where to start scrolling\n  scrollSpeed: 20, // how much to scroll each mouse move when in the scrollSensitivity zone\n  initCallback: undefined, // callback to call after grid has initialized. Arguments: gridsterComponent\n  destroyCallback: undefined, // callback to call after grid has destroyed. Arguments: gridsterComponent\n  gridSizeChangedCallback: undefined, // callback to call after grid has changed size. Arguments: gridsterComponent\n  itemChangeCallback: undefined, // callback to call for each item when is changes x, y, rows, cols.\n  // Arguments: gridsterItem, gridsterItemComponent\n  itemResizeCallback: undefined, // callback to call for each item when width/height changes.\n  // Arguments: gridsterItem, gridsterItemComponent\n  itemInitCallback: undefined, // callback to call for each item when is initialized.\n  // Arguments: gridsterItem, gridsterItemComponent\n  itemRemovedCallback: undefined, // callback to call for each item when is initialized.\n  // Arguments: gridsterItem, gridsterItemComponent\n  itemValidateCallback: undefined, // callback to call to validate item position/size. Return true if valid.\n  // Arguments: gridsterItem\n  enableEmptyCellClick: false, // enable empty cell click events\n  enableEmptyCellContextMenu: false, // enable empty cell context menu (right click) events\n  enableEmptyCellDrop: false, // enable empty cell drop events\n  enableEmptyCellDrag: false, // enable empty cell drag events\n  enableOccupiedCellDrop: false, // enable occupied cell drop events\n  emptyCellClickCallback: undefined, // empty cell click callback\n  emptyCellContextMenuCallback: undefined, // empty cell context menu (right click) callback\n  emptyCellDropCallback: undefined, // empty cell drag drop callback. HTML5 Drag & Drop\n  emptyCellDragCallback: undefined, // empty cell drag and create item like excel cell selection\n  emptyCellDragMaxCols: 50, // limit empty cell drag max cols\n  emptyCellDragMaxRows: 50, // limit empty cell drag max rows\n  // Arguments: event, gridsterItem{x, y, rows: defaultItemRows, cols: defaultItemCols}\n  ignoreMarginInRow: false, // ignore the gap between rows for items which span multiple rows (see #162, #224)\n  draggable: {\n    delayStart: 0, // milliseconds to delay the start of drag, useful for touch interaction\n    enabled: false, // enable/disable draggable items\n    ignoreContentClass: 'gridster-item-content', // default content class to ignore the drag event from\n    ignoreContent: false, // if true drag will start only from elements from `dragHandleClass`\n    dragHandleClass: 'drag-handler', // drag event only from this class. If `ignoreContent` is true.\n    stop: undefined, // callback when dragging an item stops.  Accepts Promise return to cancel/approve drag.\n    start: undefined, // callback when dragging an item starts.\n    // Arguments: item, gridsterItem, event\n    dropOverItems: false, // enable drop items on top other item\n    dropOverItemsCallback: undefined // callback on drop over another item\n    // Arguments: source, target, gridComponent\n  },\n  resizable: {\n    delayStart: 0, // milliseconds to delay the start of resize, useful for touch interaction\n    enabled: false, // enable/disable resizable items\n    handles: {\n      s: true,\n      e: true,\n      n: true,\n      w: true,\n      se: true,\n      ne: true,\n      sw: true,\n      nw: true\n    }, // resizable edges of an item\n    stop: undefined, // callback when resizing an item stops. Accepts Promise return to cancel/approve resize.\n    start: undefined // callback when resizing an item starts.\n    // Arguments: item, gridsterItem, event\n  },\n  swap: true, // allow items to switch position if drop on top of another\n  swapWhileDragging: false, // allow items to switch position while dragging\n  pushItems: false, // push items when resizing and dragging\n  disablePushOnDrag: false, // disable push on drag\n  disablePushOnResize: false, // disable push on resize\n  pushDirections: { north: true, east: true, south: true, west: true }, // control the directions items are pushed\n  pushResizeItems: false, // on resize of item will shrink adjacent items\n  displayGrid: DisplayGrid.OnDragAndResize, // display background grid of rows and columns\n  disableWindowResize: false, // disable the window on resize listener. This will stop grid to recalculate on window resize.\n  disableWarnings: false, // disable console log warnings about misplacement of grid items\n  scrollToNewItems: false, // scroll to new items placed in a scrollable view\n  disableScrollHorizontal: false, // disable horizontal scrolling\n  disableScrollVertical: false, // disable vertical scrolling\n  enableBoundaryControl: false, // enable boundary control while dragging items\n  disableAutoPositionOnConflict: false, // disable auto-position of items on conflict state,\n  dirType: DirTypes.LTR // page direction, rtl=right to left ltr= left to right, if you use rtl language set dirType to rtl\n};\n","import { GridsterComponentInterface } from './gridster.interface';\n\nexport class GridsterUtils {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  static merge(obj1: any, obj2: any, properties: any): any {\n    for (const p in obj2) {\n      if (obj2[p] !== void 0 && properties.hasOwnProperty(p)) {\n        if (typeof obj2[p] === 'object') {\n          // create an empty object for the property if obj1 does not already have one.\n          if (!(p in obj1)) {\n            obj1[p] = {};\n          }\n          obj1[p] = GridsterUtils.merge(obj1[p], obj2[p], properties[p]);\n        } else {\n          obj1[p] = obj2[p];\n        }\n      }\n    }\n\n    return obj1;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  static checkTouchEvent(e: any): void {\n    if (e.clientX === undefined && e.touches) {\n      if (e.touches && e.touches.length) {\n        e.clientX = e.touches[0].clientX;\n        e.clientY = e.touches[0].clientY;\n      } else if (e.changedTouches && e.changedTouches.length) {\n        e.clientX = e.changedTouches[0].clientX;\n        e.clientY = e.changedTouches[0].clientY;\n      }\n    }\n  }\n\n  static checkContentClassForEvent(\n    gridster: GridsterComponentInterface,\n    e: MouseEvent\n  ): boolean {\n    if (gridster.$options.draggable.ignoreContent) {\n      if (\n        !GridsterUtils.checkDragHandleClass(\n          e.target as HTMLElement,\n          e.currentTarget as HTMLElement,\n          gridster.$options.draggable.dragHandleClass,\n          gridster.$options.draggable.ignoreContentClass\n        )\n      ) {\n        return true;\n      }\n    } else {\n      if (\n        GridsterUtils.checkContentClass(\n          e.target as HTMLElement,\n          e.currentTarget as HTMLElement,\n          gridster.$options.draggable.ignoreContentClass\n        )\n      ) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  static checkContentClassForEmptyCellClickEvent(\n    gridster: GridsterComponentInterface,\n    e: MouseEvent\n  ): boolean {\n    return (\n      GridsterUtils.checkContentClass(\n        e.target as HTMLElement,\n        e.currentTarget as HTMLElement,\n        gridster.$options.draggable.ignoreContentClass\n      ) ||\n      GridsterUtils.checkContentClass(\n        e.target as HTMLElement,\n        e.currentTarget as HTMLElement,\n        gridster.$options.draggable.dragHandleClass\n      )\n    );\n  }\n\n  static checkDragHandleClass(\n    target: HTMLElement,\n    current: HTMLElement,\n    dragHandleClass: string,\n    ignoreContentClass\n  ): boolean {\n    if (!target || target === current) {\n      return false;\n    }\n    if (target.hasAttribute('class')) {\n      const classnames = target.getAttribute('class')!.split(' ');\n      if (classnames.indexOf(dragHandleClass) > -1) {\n        return true;\n      }\n      if (classnames.indexOf(ignoreContentClass) > -1) {\n        return false;\n      }\n    }\n    return GridsterUtils.checkDragHandleClass(\n      target.parentNode as HTMLElement,\n      current,\n      dragHandleClass,\n      ignoreContentClass\n    );\n  }\n\n  static checkContentClass(\n    target: HTMLElement,\n    current: HTMLElement,\n    contentClass: string\n  ): boolean {\n    if (!target || target === current) {\n      return false;\n    }\n    if (\n      target.hasAttribute('class') &&\n      target.getAttribute('class')!.split(' ').indexOf(contentClass) > -1\n    ) {\n      return true;\n    } else {\n      return GridsterUtils.checkContentClass(\n        target.parentNode as HTMLElement,\n        current,\n        contentClass\n      );\n    }\n  }\n\n  static compareItems(\n    a: { x: number; y: number },\n    b: { x: number; y: number }\n  ): number {\n    if (a.y > b.y) {\n      return -1;\n    } else if (a.y < b.y) {\n      return 1;\n    } else if (a.x > b.x) {\n      return -1;\n    } else {\n      return 1;\n    }\n  }\n}\n","import { GridsterUtils } from './gridsterUtils.service';\nimport { GridsterComponentInterface } from './gridster.interface';\nimport { GridsterItem } from './gridsterItem.interface';\n\nexport class GridsterEmptyCell {\n  initialItem: GridsterItem | null;\n  removeEmptyCellClickListenerFn: (() => void) | null;\n  removeEmptyCellTouchendListenerFn: (() => void) | null;\n  removeEmptyCellContextMenuListenerFn: (() => void) | null;\n  removeEmptyCellDropListenerFn: (() => void) | null;\n  removeEmptyCellMousedownListenerFn: (() => void) | null;\n  removeEmptyCellTouchstartListenerFn: (() => void) | null;\n  removeWindowMousemoveListenerFn: () => void;\n  removeWindowTouchmoveListenerFn: () => void;\n  removeWindowMouseupListenerFn: () => void;\n  removeWindowTouchendListenerFn: () => void;\n  removeEmptyCellDragoverListenerFn: (() => void) | null;\n  removeDocumentDragendListenerFn: (() => void) | null;\n\n  constructor(private gridster: GridsterComponentInterface) {}\n\n  destroy(): void {\n    if (this.gridster.previewStyle) {\n      this.gridster.previewStyle();\n    }\n    this.gridster.movingItem = null;\n    this.initialItem = this.gridster = null!;\n    if (this.removeDocumentDragendListenerFn) {\n      this.removeDocumentDragendListenerFn();\n      this.removeDocumentDragendListenerFn = null;\n    }\n  }\n\n  updateOptions(): void {\n    if (\n      this.gridster.$options.enableEmptyCellClick &&\n      !this.removeEmptyCellClickListenerFn &&\n      this.gridster.options.emptyCellClickCallback\n    ) {\n      this.removeEmptyCellClickListenerFn = this.gridster.renderer.listen(\n        this.gridster.el,\n        'click',\n        this.emptyCellClickCb\n      );\n      this.removeEmptyCellTouchendListenerFn = this.gridster.renderer.listen(\n        this.gridster.el,\n        'touchend',\n        this.emptyCellClickCb\n      );\n    } else if (\n      !this.gridster.$options.enableEmptyCellClick &&\n      this.removeEmptyCellClickListenerFn &&\n      this.removeEmptyCellTouchendListenerFn\n    ) {\n      this.removeEmptyCellClickListenerFn();\n      this.removeEmptyCellTouchendListenerFn();\n      this.removeEmptyCellClickListenerFn = null;\n      this.removeEmptyCellTouchendListenerFn = null;\n    }\n    if (\n      this.gridster.$options.enableEmptyCellContextMenu &&\n      !this.removeEmptyCellContextMenuListenerFn &&\n      this.gridster.options.emptyCellContextMenuCallback\n    ) {\n      this.removeEmptyCellContextMenuListenerFn = this.gridster.renderer.listen(\n        this.gridster.el,\n        'contextmenu',\n        this.emptyCellContextMenuCb\n      );\n    } else if (\n      !this.gridster.$options.enableEmptyCellContextMenu &&\n      this.removeEmptyCellContextMenuListenerFn\n    ) {\n      this.removeEmptyCellContextMenuListenerFn();\n      this.removeEmptyCellContextMenuListenerFn = null;\n    }\n    if (\n      this.gridster.$options.enableEmptyCellDrop &&\n      !this.removeEmptyCellDropListenerFn &&\n      this.gridster.options.emptyCellDropCallback\n    ) {\n      this.removeEmptyCellDropListenerFn = this.gridster.renderer.listen(\n        this.gridster.el,\n        'drop',\n        this.emptyCellDragDrop\n      );\n      this.gridster.zone.runOutsideAngular(() => {\n        this.removeEmptyCellDragoverListenerFn = this.gridster.renderer.listen(\n          this.gridster.el,\n          'dragover',\n          this.emptyCellDragOver\n        );\n      });\n      this.removeDocumentDragendListenerFn = this.gridster.renderer.listen(\n        'document',\n        'dragend',\n        () => {\n          this.gridster.movingItem = null;\n          this.gridster.previewStyle();\n        }\n      );\n    } else if (\n      !this.gridster.$options.enableEmptyCellDrop &&\n      this.removeEmptyCellDropListenerFn &&\n      this.removeEmptyCellDragoverListenerFn &&\n      this.removeDocumentDragendListenerFn\n    ) {\n      this.removeEmptyCellDropListenerFn();\n      this.removeEmptyCellDragoverListenerFn();\n      this.removeDocumentDragendListenerFn();\n      this.removeEmptyCellDragoverListenerFn = null;\n      this.removeEmptyCellDropListenerFn = null;\n      this.removeDocumentDragendListenerFn = null;\n    }\n    if (\n      this.gridster.$options.enableEmptyCellDrag &&\n      !this.removeEmptyCellMousedownListenerFn &&\n      this.gridster.options.emptyCellDragCallback\n    ) {\n      this.removeEmptyCellMousedownListenerFn = this.gridster.renderer.listen(\n        this.gridster.el,\n        'mousedown',\n        this.emptyCellMouseDown\n      );\n      this.removeEmptyCellTouchstartListenerFn = this.gridster.renderer.listen(\n        this.gridster.el,\n        'touchstart',\n        this.emptyCellMouseDown\n      );\n    } else if (\n      !this.gridster.$options.enableEmptyCellDrag &&\n      this.removeEmptyCellMousedownListenerFn &&\n      this.removeEmptyCellTouchstartListenerFn\n    ) {\n      this.removeEmptyCellMousedownListenerFn();\n      this.removeEmptyCellTouchstartListenerFn();\n      this.removeEmptyCellMousedownListenerFn = null;\n      this.removeEmptyCellTouchstartListenerFn = null;\n    }\n  }\n\n  emptyCellClickCb = (e: MouseEvent): void => {\n    if (\n      !this.gridster ||\n      this.gridster.movingItem ||\n      GridsterUtils.checkContentClassForEmptyCellClickEvent(this.gridster, e)\n    ) {\n      return;\n    }\n    const item = this.getValidItemFromEvent(e);\n    if (!item) {\n      return;\n    }\n    if (this.gridster.options.emptyCellClickCallback) {\n      this.gridster.options.emptyCellClickCallback(e, item);\n    }\n    this.gridster.cdRef.markForCheck();\n  };\n\n  emptyCellContextMenuCb = (e: MouseEvent): void => {\n    if (\n      this.gridster.movingItem ||\n      GridsterUtils.checkContentClassForEmptyCellClickEvent(this.gridster, e)\n    ) {\n      return;\n    }\n    e.preventDefault();\n    e.stopPropagation();\n    const item = this.getValidItemFromEvent(e);\n    if (!item) {\n      return;\n    }\n    if (this.gridster.options.emptyCellContextMenuCallback) {\n      this.gridster.options.emptyCellContextMenuCallback(e, item);\n    }\n    this.gridster.cdRef.markForCheck();\n  };\n\n  emptyCellDragDrop = (e: DragEvent): void => {\n    const item = this.getValidItemFromEvent(e);\n    if (!item) {\n      return;\n    }\n    if (this.gridster.options.emptyCellDropCallback) {\n      this.gridster.options.emptyCellDropCallback(e, item);\n    }\n    this.gridster.cdRef.markForCheck();\n  };\n\n  emptyCellDragOver = (e: DragEvent): void => {\n    e.preventDefault();\n    e.stopPropagation();\n    const item = this.getValidItemFromEvent(e);\n    if (item) {\n      if (e.dataTransfer) {\n        e.dataTransfer.dropEffect = 'move';\n      }\n      this.gridster.movingItem = item;\n    } else {\n      if (e.dataTransfer) {\n        e.dataTransfer.dropEffect = 'none';\n      }\n      this.gridster.movingItem = null;\n    }\n    this.gridster.previewStyle();\n  };\n\n  emptyCellMouseDown = (e: MouseEvent): void => {\n    if (\n      GridsterUtils.checkContentClassForEmptyCellClickEvent(this.gridster, e)\n    ) {\n      return;\n    }\n    e.preventDefault();\n    e.stopPropagation();\n    const item = this.getValidItemFromEvent(e);\n    const leftMouseButtonCode = 1;\n    if (\n      !item ||\n      (e.buttons !== leftMouseButtonCode && !(e instanceof TouchEvent))\n    ) {\n      return;\n    }\n    this.initialItem = item;\n    this.gridster.movingItem = item;\n    this.gridster.previewStyle();\n    this.gridster.zone.runOutsideAngular(() => {\n      this.removeWindowMousemoveListenerFn = this.gridster.renderer.listen(\n        'window',\n        'mousemove',\n        this.emptyCellMouseMove\n      );\n      this.removeWindowTouchmoveListenerFn = this.gridster.renderer.listen(\n        'window',\n        'touchmove',\n        this.emptyCellMouseMove\n      );\n    });\n    this.removeWindowMouseupListenerFn = this.gridster.renderer.listen(\n      'window',\n      'mouseup',\n      this.emptyCellMouseUp\n    );\n    this.removeWindowTouchendListenerFn = this.gridster.renderer.listen(\n      'window',\n      'touchend',\n      this.emptyCellMouseUp\n    );\n  };\n\n  emptyCellMouseMove = (e: MouseEvent): void => {\n    e.preventDefault();\n    e.stopPropagation();\n    const item = this.getValidItemFromEvent(e, this.initialItem);\n    if (!item) {\n      return;\n    }\n\n    this.gridster.movingItem = item;\n    this.gridster.previewStyle();\n  };\n\n  emptyCellMouseUp = (e: MouseEvent): void => {\n    this.removeWindowMousemoveListenerFn();\n    this.removeWindowTouchmoveListenerFn();\n    this.removeWindowMouseupListenerFn();\n    this.removeWindowTouchendListenerFn();\n    const item = this.getValidItemFromEvent(e, this.initialItem);\n    if (item) {\n      this.gridster.movingItem = item;\n    }\n    if (\n      this.gridster.options.emptyCellDragCallback &&\n      this.gridster.movingItem\n    ) {\n      this.gridster.options.emptyCellDragCallback(e, this.gridster.movingItem);\n    }\n    setTimeout(() => {\n      this.initialItem = null;\n      if (this.gridster) {\n        this.gridster.movingItem = null;\n        this.gridster.previewStyle();\n      }\n    });\n    this.gridster.cdRef.markForCheck();\n  };\n\n  getPixelsX(e: MouseEvent, rect: ClientRect): number {\n    const scale = this.gridster.options.scale;\n    if (scale) {\n      return (\n        (e.clientX - rect.left) / scale +\n        this.gridster.el.scrollLeft -\n        this.gridster.gridRenderer.getLeftMargin()\n      );\n    }\n    return (\n      e.clientX +\n      this.gridster.el.scrollLeft -\n      rect.left -\n      this.gridster.gridRenderer.getLeftMargin()\n    );\n  }\n\n  getPixelsY(e: MouseEvent, rect: ClientRect): number {\n    const scale = this.gridster.options.scale;\n    if (scale) {\n      return (\n        (e.clientY - rect.top) / scale +\n        this.gridster.el.scrollTop -\n        this.gridster.gridRenderer.getTopMargin()\n      );\n    }\n    return (\n      e.clientY +\n      this.gridster.el.scrollTop -\n      rect.top -\n      this.gridster.gridRenderer.getTopMargin()\n    );\n  }\n\n  getValidItemFromEvent(\n    e: MouseEvent,\n    oldItem?: GridsterItem | null\n  ): GridsterItem | undefined {\n    e.preventDefault();\n    e.stopPropagation();\n    GridsterUtils.checkTouchEvent(e);\n    const rect = this.gridster.el.getBoundingClientRect();\n    const x = this.getPixelsX(e, rect);\n    const y = this.getPixelsY(e, rect);\n    const item: GridsterItem = {\n      x: this.gridster.pixelsToPositionX(x, Math.floor, true),\n      y: this.gridster.pixelsToPositionY(y, Math.floor, true),\n      cols: this.gridster.$options.defaultItemCols,\n      rows: this.gridster.$options.defaultItemRows\n    };\n    if (oldItem) {\n      item.cols = Math.min(\n        Math.abs(oldItem.x - item.x) + 1,\n        this.gridster.$options.emptyCellDragMaxCols\n      );\n      item.rows = Math.min(\n        Math.abs(oldItem.y - item.y) + 1,\n        this.gridster.$options.emptyCellDragMaxRows\n      );\n      if (oldItem.x < item.x) {\n        item.x = oldItem.x;\n      } else if (\n        oldItem.x - item.x >\n        this.gridster.$options.emptyCellDragMaxCols - 1\n      ) {\n        item.x = this.gridster.movingItem ? this.gridster.movingItem.x : 0;\n      }\n      if (oldItem.y < item.y) {\n        item.y = oldItem.y;\n      } else if (\n        oldItem.y - item.y >\n        this.gridster.$options.emptyCellDragMaxRows - 1\n      ) {\n        item.y = this.gridster.movingItem ? this.gridster.movingItem.y : 0;\n      }\n    }\n    if (\n      !this.gridster.$options.enableOccupiedCellDrop &&\n      this.gridster.checkCollision(item)\n    ) {\n      return;\n    }\n    return item;\n  }\n}\n","import { Renderer2 } from '@angular/core';\n\nimport { GridsterComponentInterface } from './gridster.interface';\nimport { DirTypes, GridType } from './gridsterConfig.interface';\nimport { GridsterItem } from './gridsterItem.interface';\nimport {\n  CommonGridStyle,\n  GridColumnCachedStyle,\n  GridRowCachedStyle\n} from './gridsterRenderer.interface';\n\nexport class GridsterRenderer {\n  /**\n   * Caches the last grid column styles.\n   * This improves the grid responsiveness by caching and reusing the last style object instead of creating a new one.\n   */\n  private lastGridColumnStyles: Record<number, GridColumnCachedStyle> = {};\n\n  /**\n   * Caches the last grid column styles.\n   * This improves the grid responsiveness by caching and reusing the last style object instead of creating a new one.\n   */\n  private lastGridRowStyles: Record<number, GridRowCachedStyle> = {};\n\n  constructor(private gridster: GridsterComponentInterface) {}\n\n  destroy(): void {\n    this.gridster = null!;\n  }\n\n  updateItem(el: Element, item: GridsterItem, renderer: Renderer2): void {\n    if (this.gridster.mobile) {\n      this.clearCellPosition(renderer, el);\n      if (this.gridster.$options.keepFixedHeightInMobile) {\n        renderer.setStyle(\n          el,\n          'height',\n          (item.rows - 1) * this.gridster.$options.margin +\n            item.rows * this.gridster.$options.fixedRowHeight +\n            'px'\n        );\n      } else {\n        renderer.setStyle(\n          el,\n          'height',\n          (item.rows * this.gridster.curWidth) / item.cols + 'px'\n        );\n      }\n      if (this.gridster.$options.keepFixedWidthInMobile) {\n        renderer.setStyle(\n          el,\n          'width',\n          this.gridster.$options.fixedColWidth + 'px'\n        );\n      } else {\n        renderer.setStyle(el, 'width', '');\n      }\n\n      renderer.setStyle(\n        el,\n        'margin-bottom',\n        this.gridster.$options.margin + 'px'\n      );\n      renderer.setStyle(el, DirTypes.LTR ? 'margin-right' : 'margin-left', '');\n    } else {\n      const x = Math.round(this.gridster.curColWidth * item.x);\n      const y = Math.round(this.gridster.curRowHeight * item.y);\n      const width =\n        this.gridster.curColWidth * item.cols - this.gridster.$options.margin;\n      const height =\n        this.gridster.curRowHeight * item.rows - this.gridster.$options.margin;\n      // set the cell style\n      this.setCellPosition(renderer, el, x, y);\n      renderer.setStyle(el, 'width', width + 'px');\n      renderer.setStyle(el, 'height', height + 'px');\n      let marginBottom: string | null = null;\n      let marginRight: string | null = null;\n      if (this.gridster.$options.outerMargin) {\n        if (this.gridster.rows === item.rows + item.y) {\n          if (this.gridster.$options.outerMarginBottom !== null) {\n            marginBottom = this.gridster.$options.outerMarginBottom + 'px';\n          } else {\n            marginBottom = this.gridster.$options.margin + 'px';\n          }\n        }\n        if (this.gridster.columns === item.cols + item.x) {\n          if (this.gridster.$options.outerMarginBottom !== null) {\n            marginRight = this.gridster.$options.outerMarginRight + 'px';\n          } else {\n            marginRight = this.gridster.$options.margin + 'px';\n          }\n        }\n      }\n\n      renderer.setStyle(el, 'margin-bottom', marginBottom);\n      renderer.setStyle(\n        el,\n        DirTypes.LTR ? 'margin-right' : 'margin-left',\n        marginRight\n      );\n    }\n  }\n\n  updateGridster(): void {\n    let addClass = '';\n    let removeClass1 = '';\n    let removeClass2 = '';\n    let removeClass3 = '';\n    if (this.gridster.$options.gridType === GridType.Fit) {\n      addClass = GridType.Fit;\n      removeClass1 = GridType.ScrollVertical;\n      removeClass2 = GridType.ScrollHorizontal;\n      removeClass3 = GridType.Fixed;\n    } else if (this.gridster.$options.gridType === GridType.ScrollVertical) {\n      this.gridster.curRowHeight =\n        this.gridster.curColWidth * this.gridster.$options.rowHeightRatio;\n      addClass = GridType.ScrollVertical;\n      removeClass1 = GridType.Fit;\n      removeClass2 = GridType.ScrollHorizontal;\n      removeClass3 = GridType.Fixed;\n    } else if (this.gridster.$options.gridType === GridType.ScrollHorizontal) {\n      const widthRatio = this.gridster.$options.rowHeightRatio;\n      const calWidthRatio = widthRatio >= 1 ? widthRatio : widthRatio + 1;\n      this.gridster.curColWidth = this.gridster.curRowHeight * calWidthRatio;\n      addClass = GridType.ScrollHorizontal;\n      removeClass1 = GridType.Fit;\n      removeClass2 = GridType.ScrollVertical;\n      removeClass3 = GridType.Fixed;\n    } else if (this.gridster.$options.gridType === GridType.Fixed) {\n      this.gridster.curColWidth =\n        this.gridster.$options.fixedColWidth +\n        (this.gridster.$options.ignoreMarginInRow\n          ? 0\n          : this.gridster.$options.margin);\n      this.gridster.curRowHeight =\n        this.gridster.$options.fixedRowHeight +\n        (this.gridster.$options.ignoreMarginInRow\n          ? 0\n          : this.gridster.$options.margin);\n      addClass = GridType.Fixed;\n      removeClass1 = GridType.Fit;\n      removeClass2 = GridType.ScrollVertical;\n      removeClass3 = GridType.ScrollHorizontal;\n    } else if (this.gridster.$options.gridType === GridType.VerticalFixed) {\n      this.gridster.curRowHeight =\n        this.gridster.$options.fixedRowHeight +\n        (this.gridster.$options.ignoreMarginInRow\n          ? 0\n          : this.gridster.$options.margin);\n      addClass = GridType.ScrollVertical;\n      removeClass1 = GridType.Fit;\n      removeClass2 = GridType.ScrollHorizontal;\n      removeClass3 = GridType.Fixed;\n    } else if (this.gridster.$options.gridType === GridType.HorizontalFixed) {\n      this.gridster.curColWidth =\n        this.gridster.$options.fixedColWidth +\n        (this.gridster.$options.ignoreMarginInRow\n          ? 0\n          : this.gridster.$options.margin);\n      addClass = GridType.ScrollHorizontal;\n      removeClass1 = GridType.Fit;\n      removeClass2 = GridType.ScrollVertical;\n      removeClass3 = GridType.Fixed;\n    }\n\n    if (\n      this.gridster.mobile ||\n      (this.gridster.$options.setGridSize &&\n        this.gridster.$options.gridType !== GridType.Fit)\n    ) {\n      this.gridster.renderer.removeClass(this.gridster.el, addClass);\n    } else {\n      this.gridster.renderer.addClass(this.gridster.el, addClass);\n    }\n    this.gridster.renderer.removeClass(this.gridster.el, removeClass1);\n    this.gridster.renderer.removeClass(this.gridster.el, removeClass2);\n    this.gridster.renderer.removeClass(this.gridster.el, removeClass3);\n  }\n\n  getGridColumnStyle(i: number): CommonGridStyle {\n    // generates the new style\n    const newPos: GridColumnCachedStyle = {\n      left: this.gridster.curColWidth * i,\n      width: this.gridster.curColWidth - this.gridster.$options.margin,\n      height:\n        this.gridster.gridRows.length * this.gridster.curRowHeight -\n        this.gridster.$options.margin,\n      style: {}\n    };\n    newPos.style = {\n      ...this.getLeftPosition(newPos.left),\n      width: newPos.width + 'px',\n      height: newPos.height + 'px'\n    };\n\n    // use the last cached style if it has same values as the generated one\n    const last = this.lastGridColumnStyles[i];\n    if (\n      last &&\n      last.left === newPos.left &&\n      last.width === newPos.width &&\n      last.height === newPos.height\n    ) {\n      return last.style;\n    }\n\n    // cache and set new style\n    this.lastGridColumnStyles[i] = newPos;\n    return newPos.style;\n  }\n\n  getGridRowStyle(i: number): CommonGridStyle {\n    // generates the new style\n    const newPos: GridRowCachedStyle = {\n      top: this.gridster.curRowHeight * i,\n      width:\n        this.gridster.gridColumns.length * this.gridster.curColWidth +\n        this.gridster.$options.margin,\n      height: this.gridster.curRowHeight - this.gridster.$options.margin,\n      style: {}\n    };\n    newPos.style = {\n      ...this.getTopPosition(newPos.top),\n      width: newPos.width + 'px',\n      height: newPos.height + 'px'\n    };\n\n    // use the last cached style if it has same values as the generated one\n    const last = this.lastGridRowStyles[i];\n    if (\n      last &&\n      last.top === newPos.top &&\n      last.width === newPos.width &&\n      last.height === newPos.height\n    ) {\n      return last.style;\n    }\n\n    // cache and set new style\n    this.lastGridRowStyles[i] = newPos;\n    return newPos.style;\n  }\n\n  getLeftPosition(d: number): { left: string } | { transform: string } {\n    const dPosition = this.gridster.$options.dirType === DirTypes.RTL ? -d : d;\n    if (this.gridster.$options.useTransformPositioning) {\n      return {\n        transform: 'translateX(' + dPosition + 'px)'\n      };\n    } else {\n      return {\n        left: this.getLeftMargin() + dPosition + 'px'\n      };\n    }\n  }\n\n  getTopPosition(d: number): { top: string } | { transform: string } {\n    if (this.gridster.$options.useTransformPositioning) {\n      return {\n        transform: 'translateY(' + d + 'px)'\n      };\n    } else {\n      return {\n        top: this.getTopMargin() + d + 'px'\n      };\n    }\n  }\n\n  clearCellPosition(renderer: Renderer2, el: Element): void {\n    if (this.gridster.$options.useTransformPositioning) {\n      renderer.setStyle(el, 'transform', '');\n    } else {\n      renderer.setStyle(el, 'top', '');\n      renderer.setStyle(el, 'left', '');\n    }\n  }\n\n  setCellPosition(\n    renderer: Renderer2,\n    el: Element,\n    x: number,\n    y: number\n  ): void {\n    const xPosition = this.gridster.$options.dirType === DirTypes.RTL ? -x : x;\n    if (this.gridster.$options.useTransformPositioning) {\n      const transform = 'translate3d(' + xPosition + 'px, ' + y + 'px, 0)';\n      renderer.setStyle(el, 'transform', transform);\n    } else {\n      renderer.setStyle(el, 'left', this.getLeftMargin() + xPosition + 'px');\n      renderer.setStyle(el, 'top', this.getTopMargin() + y + 'px');\n    }\n  }\n\n  getLeftMargin(): number {\n    if (this.gridster.$options.outerMargin) {\n      if (this.gridster.$options.outerMarginLeft !== null) {\n        return this.gridster.$options.outerMarginLeft;\n      } else {\n        return this.gridster.$options.margin;\n      }\n    } else {\n      return 0;\n    }\n  }\n\n  getTopMargin(): number {\n    if (this.gridster.$options.outerMargin) {\n      if (this.gridster.$options.outerMarginTop !== null) {\n        return this.gridster.$options.outerMarginTop;\n      } else {\n        return this.gridster.$options.margin;\n      }\n    } else {\n      return 0;\n    }\n  }\n}\n","import {\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Renderer2,\n  ViewEncapsulation\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { GridsterItem } from './gridsterItem.interface';\nimport { GridsterRenderer } from './gridsterRenderer.service';\n\n@Component({\n  selector: 'gridster-preview',\n  template: '',\n  styleUrls: ['./gridsterPreview.css'],\n  encapsulation: ViewEncapsulation.None,\n  standalone: true\n})\nexport class GridsterPreviewComponent implements OnInit, OnDestroy {\n  @Input() previewStyle$: EventEmitter<GridsterItem | null>;\n  @Input() gridRenderer: GridsterRenderer;\n  private el: HTMLElement;\n  private sub: Subscription;\n\n  constructor(el: ElementRef, private renderer: Renderer2) {\n    this.el = el.nativeElement;\n  }\n\n  ngOnInit(): void {\n    this.sub = this.previewStyle$.subscribe(options =>\n      this.previewStyle(options)\n    );\n  }\n\n  ngOnDestroy(): void {\n    if(this.sub) {\n      this.sub.unsubscribe();\n    }\n  }\n\n  private previewStyle(item: GridsterItem | null): void {\n    if (item) {\n      this.renderer.setStyle(this.el, 'display', 'block');\n      this.gridRenderer.updateItem(this.el, item, this.renderer);\n    } else {\n      this.renderer.setStyle(this.el, 'display', '');\n    }\n  }\n}\n","import { NgForOf, NgStyle } from '@angular/common';\nimport {\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  Input,\n  NgZone,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Renderer2,\n  SimpleChanges,\n  ViewEncapsulation\n} from '@angular/core';\nimport { debounceTime, Subject, switchMap, takeUntil, timer } from 'rxjs';\nimport { GridsterComponentInterface } from './gridster.interface';\nimport { GridsterCompact } from './gridsterCompact.service';\n\nimport { GridsterConfigService } from './gridsterConfig.constant';\nimport { GridsterConfig, GridType } from './gridsterConfig.interface';\nimport { GridsterConfigS } from './gridsterConfigS.interface';\nimport { GridsterEmptyCell } from './gridsterEmptyCell.service';\nimport {\n  GridsterItem,\n  GridsterItemComponentInterface\n} from './gridsterItem.interface';\nimport { GridsterPreviewComponent } from './gridsterPreview.component';\nimport { GridsterRenderer } from './gridsterRenderer.service';\nimport { GridsterUtils } from './gridsterUtils.service';\n\n@Component({\n  // eslint-disable-next-line @angular-eslint/component-selector\n  selector: 'gridster',\n  templateUrl: './gridster.html',\n  styleUrls: ['./gridster.css'],\n  encapsulation: ViewEncapsulation.None,\n  standalone: true,\n  imports: [NgForOf, NgStyle, GridsterPreviewComponent]\n})\nexport class GridsterComponent\n  implements OnInit, OnChanges, OnDestroy, GridsterComponentInterface\n{\n  @Input() options: GridsterConfig;\n  movingItem: GridsterItem | null;\n  el: HTMLElement;\n  $options: GridsterConfigS;\n  mobile: boolean;\n  curWidth: number;\n  curHeight: number;\n  grid: GridsterItemComponentInterface[];\n  columns = 0;\n  rows = 0;\n  curColWidth: number;\n  curRowHeight: number;\n  gridColumns = [];\n  gridRows = [];\n  windowResize: (() => void) | null;\n  dragInProgress: boolean;\n  emptyCell: GridsterEmptyCell;\n  compact: GridsterCompact;\n  gridRenderer: GridsterRenderer;\n  previewStyle$: EventEmitter<GridsterItem | null> =\n    new EventEmitter<GridsterItem | null>();\n\n  calculateLayout$ = new Subject<void>();\n\n  private resize$ = new Subject<void>();\n  private destroy$ = new Subject<void>();\n\n  constructor(\n    @Inject(ElementRef) el: ElementRef,\n    @Inject(Renderer2) public renderer: Renderer2,\n    @Inject(ChangeDetectorRef) public cdRef: ChangeDetectorRef,\n    @Inject(NgZone) public zone: NgZone\n  ) {\n    this.el = el.nativeElement;\n    this.$options = JSON.parse(JSON.stringify(GridsterConfigService));\n    this.mobile = false;\n    this.curWidth = 0;\n    this.curHeight = 0;\n    this.grid = [];\n    this.curColWidth = 0;\n    this.curRowHeight = 0;\n    this.dragInProgress = false;\n    this.emptyCell = new GridsterEmptyCell(this);\n    this.compact = new GridsterCompact(this);\n    this.gridRenderer = new GridsterRenderer(this);\n  }\n\n  // ------ Function for swapWhileDragging option\n\n  // identical to checkCollision() except that here we add boundaries.\n  static checkCollisionTwoItemsForSwaping(\n    item: GridsterItem,\n    item2: GridsterItem\n  ): boolean {\n    // if the cols or rows of the items are 1 , doesnt make any sense to set a boundary. Only if the item is bigger we set a boundary\n    const horizontalBoundaryItem1 = item.cols === 1 ? 0 : 1;\n    const horizontalBoundaryItem2 = item2.cols === 1 ? 0 : 1;\n    const verticalBoundaryItem1 = item.rows === 1 ? 0 : 1;\n    const verticalBoundaryItem2 = item2.rows === 1 ? 0 : 1;\n    return (\n      item.x + horizontalBoundaryItem1 < item2.x + item2.cols &&\n      item.x + item.cols > item2.x + horizontalBoundaryItem2 &&\n      item.y + verticalBoundaryItem1 < item2.y + item2.rows &&\n      item.y + item.rows > item2.y + verticalBoundaryItem2\n    );\n  }\n\n  checkCollisionTwoItems(item: GridsterItem, item2: GridsterItem): boolean {\n    const collision =\n      item.x < item2.x + item2.cols &&\n      item.x + item.cols > item2.x &&\n      item.y < item2.y + item2.rows &&\n      item.y + item.rows > item2.y;\n    if (!collision) {\n      return false;\n    }\n    if (!this.$options.allowMultiLayer) {\n      return true;\n    }\n    const defaultLayerIndex = this.$options.defaultLayerIndex;\n    const layerIndex =\n      item.layerIndex === undefined ? defaultLayerIndex : item.layerIndex;\n    const layerIndex2 =\n      item2.layerIndex === undefined ? defaultLayerIndex : item2.layerIndex;\n    return layerIndex === layerIndex2;\n  }\n\n  ngOnInit(): void {\n    if (this.options.initCallback) {\n      this.options.initCallback(this);\n    }\n\n    this.calculateLayout$\n      .pipe(debounceTime(0), takeUntil(this.destroy$))\n      .subscribe(() => this.calculateLayout());\n\n    this.resize$\n      .pipe(\n        // Cancel previously scheduled DOM timer if `calculateLayout()` has been called\n        // within this time range.\n        switchMap(() => timer(100)),\n        takeUntil(this.destroy$)\n      )\n      .subscribe(() => this.resize());\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.options) {\n      this.setOptions();\n      this.options.api = {\n        optionsChanged: this.optionsChanged,\n        resize: this.onResize,\n        getNextPossiblePosition: this.getNextPossiblePosition,\n        getFirstPossiblePosition: this.getFirstPossiblePosition,\n        getLastPossiblePosition: this.getLastPossiblePosition,\n        getItemComponent: (item: GridsterItem) => this.getItemComponent(item)\n      };\n      this.columns = this.$options.minCols;\n      this.rows = this.$options.minRows + this.$options.addEmptyRowsCount;\n      this.setGridSize();\n      this.calculateLayout();\n    }\n  }\n\n  private resize(): void {\n    let height;\n    let width;\n    if (this.$options.gridType === 'fit' && !this.mobile) {\n      width = this.el.offsetWidth;\n      height = this.el.offsetHeight;\n    } else {\n      width = this.el.clientWidth;\n      height = this.el.clientHeight;\n    }\n    if (\n      (width !== this.curWidth || height !== this.curHeight) &&\n      this.checkIfToResize()\n    ) {\n      this.onResize();\n    }\n  }\n\n  setOptions(): void {\n    this.$options = GridsterUtils.merge(\n      this.$options,\n      this.options,\n      this.$options\n    );\n    if (!this.$options.disableWindowResize && !this.windowResize) {\n      this.windowResize = this.renderer.listen(\n        'window',\n        'resize',\n        this.onResize\n      );\n    } else if (this.$options.disableWindowResize && this.windowResize) {\n      this.windowResize();\n      this.windowResize = null;\n    }\n    this.emptyCell.updateOptions();\n  }\n\n  optionsChanged = (): void => {\n    this.setOptions();\n    let widgetsIndex: number = this.grid.length - 1;\n    let widget: GridsterItemComponentInterface;\n    for (; widgetsIndex >= 0; widgetsIndex--) {\n      widget = this.grid[widgetsIndex];\n      widget.updateOptions();\n    }\n    this.calculateLayout();\n  };\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.previewStyle$.complete();\n    if (this.windowResize) {\n      this.windowResize();\n    }\n    if (this.options && this.options.destroyCallback) {\n      this.options.destroyCallback(this);\n    }\n    if (this.options && this.options.api) {\n      this.options.api.resize = undefined;\n      this.options.api.optionsChanged = undefined;\n      this.options.api.getNextPossiblePosition = undefined;\n      this.options.api = undefined;\n    }\n    this.emptyCell.destroy();\n    this.emptyCell = null!;\n    this.compact.destroy();\n    this.compact = null!;\n  }\n\n  onResize = (): void => {\n    if (this.el.clientWidth) {\n      if (this.options.setGridSize) {\n        // reset width/height so the size is recalculated afterwards\n        this.renderer.setStyle(this.el, 'width', '');\n        this.renderer.setStyle(this.el, 'height', '');\n      }\n      this.setGridSize();\n      this.calculateLayout();\n    }\n  };\n\n  checkIfToResize(): boolean {\n    const clientWidth = this.el.clientWidth;\n    const offsetWidth = this.el.offsetWidth;\n    const scrollWidth = this.el.scrollWidth;\n    const clientHeight = this.el.clientHeight;\n    const offsetHeight = this.el.offsetHeight;\n    const scrollHeight = this.el.scrollHeight;\n    const verticalScrollPresent =\n      clientWidth < offsetWidth &&\n      scrollHeight > offsetHeight &&\n      scrollHeight - offsetHeight < offsetWidth - clientWidth;\n    const horizontalScrollPresent =\n      clientHeight < offsetHeight &&\n      scrollWidth > offsetWidth &&\n      scrollWidth - offsetWidth < offsetHeight - clientHeight;\n    if (verticalScrollPresent) {\n      return false;\n    }\n    return !horizontalScrollPresent;\n  }\n\n  checkIfMobile(): boolean {\n    if (this.$options.useBodyForBreakpoint) {\n      return this.$options.mobileBreakpoint > document.body.clientWidth;\n    } else {\n      return this.$options.mobileBreakpoint > this.curWidth;\n    }\n  }\n\n  setGridSize(): void {\n    const el = this.el;\n    let width;\n    let height;\n    if (\n      this.$options.setGridSize ||\n      (this.$options.gridType === GridType.Fit && !this.mobile)\n    ) {\n      width = el.offsetWidth;\n      height = el.offsetHeight;\n    } else {\n      width = el.clientWidth;\n      height = el.clientHeight;\n    }\n    this.curWidth = width;\n    this.curHeight = height;\n  }\n\n  setGridDimensions(): void {\n    this.setGridSize();\n    if (!this.mobile && this.checkIfMobile()) {\n      this.mobile = !this.mobile;\n      this.renderer.addClass(this.el, 'mobile');\n    } else if (this.mobile && !this.checkIfMobile()) {\n      this.mobile = !this.mobile;\n      this.renderer.removeClass(this.el, 'mobile');\n    }\n    let rows = this.$options.minRows;\n    let columns = this.$options.minCols;\n\n    let widgetsIndex = this.grid.length - 1;\n    let widget;\n    for (; widgetsIndex >= 0; widgetsIndex--) {\n      widget = this.grid[widgetsIndex];\n      if (!widget.notPlaced) {\n        rows = Math.max(rows, widget.$item.y + widget.$item.rows);\n        columns = Math.max(columns, widget.$item.x + widget.$item.cols);\n      }\n    }\n    rows += this.$options.addEmptyRowsCount;\n    if (this.columns !== columns || this.rows !== rows) {\n      this.columns = columns;\n      this.rows = rows;\n      if (this.options.gridSizeChangedCallback) {\n        this.options.gridSizeChangedCallback(this);\n      }\n    }\n  }\n\n  private calculateLayout(): void {\n    if (this.compact) {\n      this.compact.checkCompact();\n    }\n\n    this.setGridDimensions();\n    if (this.$options.outerMargin) {\n      let marginWidth = -this.$options.margin;\n      if (this.$options.outerMarginLeft !== null) {\n        marginWidth += this.$options.outerMarginLeft;\n        this.renderer.setStyle(\n          this.el,\n          'padding-left',\n          this.$options.outerMarginLeft + 'px'\n        );\n      } else {\n        marginWidth += this.$options.margin;\n        this.renderer.setStyle(\n          this.el,\n          'padding-left',\n          this.$options.margin + 'px'\n        );\n      }\n      if (this.$options.outerMarginRight !== null) {\n        marginWidth += this.$options.outerMarginRight;\n        this.renderer.setStyle(\n          this.el,\n          'padding-right',\n          this.$options.outerMarginRight + 'px'\n        );\n      } else {\n        marginWidth += this.$options.margin;\n        this.renderer.setStyle(\n          this.el,\n          'padding-right',\n          this.$options.margin + 'px'\n        );\n      }\n      this.curColWidth = (this.curWidth - marginWidth) / this.columns;\n      let marginHeight = -this.$options.margin;\n      if (this.$options.outerMarginTop !== null) {\n        marginHeight += this.$options.outerMarginTop;\n        this.renderer.setStyle(\n          this.el,\n          'padding-top',\n          this.$options.outerMarginTop + 'px'\n        );\n      } else {\n        marginHeight += this.$options.margin;\n        this.renderer.setStyle(\n          this.el,\n          'padding-top',\n          this.$options.margin + 'px'\n        );\n      }\n      if (this.$options.outerMarginBottom !== null) {\n        marginHeight += this.$options.outerMarginBottom;\n        this.renderer.setStyle(\n          this.el,\n          'padding-bottom',\n          this.$options.outerMarginBottom + 'px'\n        );\n      } else {\n        marginHeight += this.$options.margin;\n        this.renderer.setStyle(\n          this.el,\n          'padding-bottom',\n          this.$options.margin + 'px'\n        );\n      }\n      this.curRowHeight =\n        ((this.curHeight - marginHeight) / this.rows) *\n        this.$options.rowHeightRatio;\n    } else {\n      this.curColWidth = (this.curWidth + this.$options.margin) / this.columns;\n      this.curRowHeight =\n        ((this.curHeight + this.$options.margin) / this.rows) *\n        this.$options.rowHeightRatio;\n      this.renderer.setStyle(this.el, 'padding-left', 0 + 'px');\n      this.renderer.setStyle(this.el, 'padding-right', 0 + 'px');\n      this.renderer.setStyle(this.el, 'padding-top', 0 + 'px');\n      this.renderer.setStyle(this.el, 'padding-bottom', 0 + 'px');\n    }\n    this.gridRenderer.updateGridster();\n\n    if (this.$options.setGridSize) {\n      this.renderer.addClass(this.el, 'gridSize');\n      if (!this.mobile) {\n        this.renderer.setStyle(\n          this.el,\n          'width',\n          this.columns * this.curColWidth + this.$options.margin + 'px'\n        );\n        this.renderer.setStyle(\n          this.el,\n          'height',\n          this.rows * this.curRowHeight + this.$options.margin + 'px'\n        );\n      }\n    } else {\n      this.renderer.removeClass(this.el, 'gridSize');\n      this.renderer.setStyle(this.el, 'width', '');\n      this.renderer.setStyle(this.el, 'height', '');\n    }\n    this.updateGrid();\n\n    let widgetsIndex: number = this.grid.length - 1;\n    let widget: GridsterItemComponentInterface;\n    for (; widgetsIndex >= 0; widgetsIndex--) {\n      widget = this.grid[widgetsIndex];\n      widget.setSize();\n      widget.drag.toggle();\n      widget.resize.toggle();\n    }\n\n    this.resize$.next();\n  }\n\n  updateGrid(): void {\n    if (this.$options.displayGrid === 'always' && !this.mobile) {\n      this.renderer.addClass(this.el, 'display-grid');\n    } else if (\n      this.$options.displayGrid === 'onDrag&Resize' &&\n      this.dragInProgress\n    ) {\n      this.renderer.addClass(this.el, 'display-grid');\n    } else if (\n      this.$options.displayGrid === 'none' ||\n      !this.dragInProgress ||\n      this.mobile\n    ) {\n      this.renderer.removeClass(this.el, 'display-grid');\n    }\n    this.setGridDimensions();\n    this.gridColumns.length = GridsterComponent.getNewArrayLength(\n      this.columns,\n      this.curWidth,\n      this.curColWidth\n    );\n    this.gridRows.length = GridsterComponent.getNewArrayLength(\n      this.rows,\n      this.curHeight,\n      this.curRowHeight\n    );\n    this.cdRef.markForCheck();\n  }\n\n  addItem(itemComponent: GridsterItemComponentInterface): void {\n    if (itemComponent.$item.cols === undefined) {\n      itemComponent.$item.cols = this.$options.defaultItemCols;\n      itemComponent.item.cols = itemComponent.$item.cols;\n      itemComponent.itemChanged();\n    }\n    if (itemComponent.$item.rows === undefined) {\n      itemComponent.$item.rows = this.$options.defaultItemRows;\n      itemComponent.item.rows = itemComponent.$item.rows;\n      itemComponent.itemChanged();\n    }\n    if (itemComponent.$item.x === -1 || itemComponent.$item.y === -1) {\n      this.autoPositionItem(itemComponent);\n    } else if (this.checkCollision(itemComponent.$item)) {\n      if (!this.$options.disableWarnings) {\n        itemComponent.notPlaced = true;\n        console.warn(\n          \"Can't be placed in the bounds of the dashboard, trying to auto position!/n\" +\n            JSON.stringify(itemComponent.item, ['cols', 'rows', 'x', 'y'])\n        );\n      }\n      if (!this.$options.disableAutoPositionOnConflict) {\n        this.autoPositionItem(itemComponent);\n      } else {\n        itemComponent.notPlaced = true;\n      }\n    }\n    this.grid.push(itemComponent);\n    this.calculateLayout$.next();\n  }\n\n  removeItem(itemComponent: GridsterItemComponentInterface): void {\n    this.grid.splice(this.grid.indexOf(itemComponent), 1);\n    this.calculateLayout$.next();\n    if (this.options.itemRemovedCallback) {\n      this.options.itemRemovedCallback(itemComponent.item, itemComponent);\n    }\n  }\n\n  checkCollision(item: GridsterItem): GridsterItemComponentInterface | boolean {\n    let collision: GridsterItemComponentInterface | boolean = false;\n    if (this.options.itemValidateCallback) {\n      collision = !this.options.itemValidateCallback(item);\n    }\n    if (!collision && this.checkGridCollision(item)) {\n      collision = true;\n    }\n    if (!collision) {\n      const c = this.findItemWithItem(item);\n      if (c) {\n        collision = c;\n      }\n    }\n    return collision;\n  }\n\n  checkGridCollision(item: GridsterItem): boolean {\n    const noNegativePosition = item.y > -1 && item.x > -1;\n    const maxGridCols = item.cols + item.x <= this.$options.maxCols;\n    const maxGridRows = item.rows + item.y <= this.$options.maxRows;\n    const maxItemCols =\n      item.maxItemCols === undefined\n        ? this.$options.maxItemCols\n        : item.maxItemCols;\n    const minItemCols =\n      item.minItemCols === undefined\n        ? this.$options.minItemCols\n        : item.minItemCols;\n    const maxItemRows =\n      item.maxItemRows === undefined\n        ? this.$options.maxItemRows\n        : item.maxItemRows;\n    const minItemRows =\n      item.minItemRows === undefined\n        ? this.$options.minItemRows\n        : item.minItemRows;\n    const inColsLimits = item.cols <= maxItemCols && item.cols >= minItemCols;\n    const inRowsLimits = item.rows <= maxItemRows && item.rows >= minItemRows;\n    const minAreaLimit =\n      item.minItemArea === undefined\n        ? this.$options.minItemArea\n        : item.minItemArea;\n    const maxAreaLimit =\n      item.maxItemArea === undefined\n        ? this.$options.maxItemArea\n        : item.maxItemArea;\n    const area = item.cols * item.rows;\n    const inMinArea = minAreaLimit <= area;\n    const inMaxArea = maxAreaLimit >= area;\n    return !(\n      noNegativePosition &&\n      maxGridCols &&\n      maxGridRows &&\n      inColsLimits &&\n      inRowsLimits &&\n      inMinArea &&\n      inMaxArea\n    );\n  }\n\n  findItemWithItem(\n    item: GridsterItem\n  ): GridsterItemComponentInterface | boolean {\n    let widgetsIndex = 0;\n    let widget: GridsterItemComponentInterface;\n    for (; widgetsIndex < this.grid.length; widgetsIndex++) {\n      widget = this.grid[widgetsIndex];\n      if (\n        widget.$item !== item &&\n        this.checkCollisionTwoItems(widget.$item, item)\n      ) {\n        return widget;\n      }\n    }\n    return false;\n  }\n\n  findItemsWithItem(item: GridsterItem): Array<GridsterItemComponentInterface> {\n    const a: Array<GridsterItemComponentInterface> = [];\n    let widgetsIndex = 0;\n    let widget: GridsterItemComponentInterface;\n    for (; widgetsIndex < this.grid.length; widgetsIndex++) {\n      widget = this.grid[widgetsIndex];\n      if (\n        widget.$item !== item &&\n        this.checkCollisionTwoItems(widget.$item, item)\n      ) {\n        a.push(widget);\n      }\n    }\n    return a;\n  }\n\n  autoPositionItem(itemComponent: GridsterItemComponentInterface): void {\n    if (this.getNextPossiblePosition(itemComponent.$item)) {\n      itemComponent.notPlaced = false;\n      itemComponent.item.x = itemComponent.$item.x;\n      itemComponent.item.y = itemComponent.$item.y;\n      itemComponent.itemChanged();\n    } else {\n      itemComponent.notPlaced = true;\n      if (!this.$options.disableWarnings) {\n        console.warn(\n          \"Can't be placed in the bounds of the dashboard!/n\" +\n            JSON.stringify(itemComponent.item, ['cols', 'rows', 'x', 'y'])\n        );\n      }\n    }\n  }\n\n  getNextPossiblePosition = (\n    newItem: GridsterItem,\n    startingFrom: { y?: number; x?: number } = {}\n  ): boolean => {\n    if (newItem.cols === -1) {\n      newItem.cols = this.$options.defaultItemCols;\n    }\n    if (newItem.rows === -1) {\n      newItem.rows = this.$options.defaultItemRows;\n    }\n    this.setGridDimensions();\n    let rowsIndex = startingFrom.y || 0;\n    let colsIndex;\n    for (; rowsIndex < this.rows; rowsIndex++) {\n      newItem.y = rowsIndex;\n      colsIndex = startingFrom.x || 0;\n      for (; colsIndex < this.columns; colsIndex++) {\n        newItem.x = colsIndex;\n        if (!this.checkCollision(newItem)) {\n          return true;\n        }\n      }\n    }\n    const canAddToRows = this.$options.maxRows >= this.rows + newItem.rows;\n    const canAddToColumns =\n      this.$options.maxCols >= this.columns + newItem.cols;\n    const addToRows = this.rows <= this.columns && canAddToRows;\n    if (!addToRows && canAddToColumns) {\n      newItem.x = this.columns;\n      newItem.y = 0;\n      return true;\n    } else if (canAddToRows) {\n      newItem.y = this.rows;\n      newItem.x = 0;\n      return true;\n    }\n    return false;\n  };\n\n  getFirstPossiblePosition = (item: GridsterItem): GridsterItem => {\n    const tmpItem = Object.assign({}, item);\n    this.getNextPossiblePosition(tmpItem);\n    return tmpItem;\n  };\n\n  getLastPossiblePosition = (item: GridsterItem): GridsterItem => {\n    let farthestItem: { y: number; x: number } = { y: 0, x: 0 };\n    farthestItem = this.grid.reduce(\n      (\n        prev: { y: number; x: number },\n        curr: GridsterItemComponentInterface\n      ) => {\n        const currCoords = {\n          y: curr.$item.y + curr.$item.rows - 1,\n          x: curr.$item.x + curr.$item.cols - 1\n        };\n        if (GridsterUtils.compareItems(prev, currCoords) === 1) {\n          return currCoords;\n        } else {\n          return prev;\n        }\n      },\n      farthestItem\n    );\n\n    const tmpItem = Object.assign({}, item);\n    this.getNextPossiblePosition(tmpItem, farthestItem);\n    return tmpItem;\n  };\n\n  pixelsToPositionX(\n    x: number,\n    roundingMethod: (x: number) => number,\n    noLimit?: boolean\n  ): number {\n    const position = roundingMethod(x / this.curColWidth);\n    if (noLimit) {\n      return position;\n    } else {\n      return Math.max(position, 0);\n    }\n  }\n\n  pixelsToPositionY(\n    y: number,\n    roundingMethod: (x: number) => number,\n    noLimit?: boolean\n  ): number {\n    const position = roundingMethod(y / this.curRowHeight);\n    if (noLimit) {\n      return position;\n    } else {\n      return Math.max(position, 0);\n    }\n  }\n\n  positionXToPixels(x: number): number {\n    return x * this.curColWidth;\n  }\n\n  positionYToPixels(y: number): number {\n    return y * this.curRowHeight;\n  }\n\n  getItemComponent(\n    item: GridsterItem\n  ): GridsterItemComponentInterface | undefined {\n    return this.grid.find(c => c.item === item);\n  }\n\n  // ------ Functions for swapWhileDragging option\n\n  // identical to checkCollision() except that this function calls findItemWithItemForSwaping() instead of findItemWithItem()\n  checkCollisionForSwaping(\n    item: GridsterItem\n  ): GridsterItemComponentInterface | boolean {\n    let collision: GridsterItemComponentInterface | boolean = false;\n    if (this.options.itemValidateCallback) {\n      collision = !this.options.itemValidateCallback(item);\n    }\n    if (!collision && this.checkGridCollision(item)) {\n      collision = true;\n    }\n    if (!collision) {\n      const c = this.findItemWithItemForSwapping(item);\n      if (c) {\n        collision = c;\n      }\n    }\n    return collision;\n  }\n\n  // identical to findItemWithItem() except that this function calls checkCollisionTwoItemsForSwaping() instead of checkCollisionTwoItems()\n  findItemWithItemForSwapping(\n    item: GridsterItem\n  ): GridsterItemComponentInterface | boolean {\n    let widgetsIndex: number = this.grid.length - 1;\n    let widget: GridsterItemComponentInterface;\n    for (; widgetsIndex > -1; widgetsIndex--) {\n      widget = this.grid[widgetsIndex];\n      if (\n        widget.$item !== item &&\n        GridsterComponent.checkCollisionTwoItemsForSwaping(widget.$item, item)\n      ) {\n        return widget;\n      }\n    }\n    return false;\n  }\n\n  previewStyle(drag = false): void {\n    if (this.movingItem) {\n      if (this.compact && drag) {\n        this.compact.checkCompactItem(this.movingItem);\n      }\n      this.previewStyle$.next(this.movingItem);\n    } else {\n      this.previewStyle$.next(null);\n    }\n  }\n\n  // ------ End of functions for swapWhileDragging option\n\n  // eslint-disable-next-line @typescript-eslint/member-ordering\n  private static getNewArrayLength(\n    length: number,\n    overallSize: number,\n    size: number\n  ): number {\n    const newLength = Math.max(length, Math.floor(overallSize / size));\n\n    if (newLength < 0) {\n      return 0;\n    }\n\n    if (Number.isFinite(newLength)) {\n      return Math.floor(newLength);\n    }\n\n    return 0;\n  }\n}\n","<div\n  class=\"gridster-column\"\n  *ngFor=\"let column of gridColumns; let i = index;\"\n  [ngStyle]=\"gridRenderer.getGridColumnStyle(i)\"\n></div>\n<div\n  class=\"gridster-row\"\n  *ngFor=\"let row of gridRows; let i = index;\"\n  [ngStyle]=\"gridRenderer.getGridRowStyle(i)\"\n></div>\n<ng-content></ng-content>\n<gridster-preview\n  [gridRenderer]=\"gridRenderer\"\n  [previewStyle$]=\"previewStyle$\"\n  class=\"gridster-preview\"\n></gridster-preview>\n","import { GridsterItemComponentInterface } from './gridsterItem.interface';\nimport { GridsterComponentInterface } from './gridster.interface';\n\nexport class GridsterPush {\n  public fromSouth: string;\n  public fromNorth: string;\n  public fromEast: string;\n  public fromWest: string;\n  private pushedItems: GridsterItemComponentInterface[];\n  private pushedItemsTemp: GridsterItemComponentInterface[];\n  private pushedItemsTempPath: { x: number; y: number }[][];\n  private pushedItemsPath: { x: number; y: number }[][];\n  private gridsterItem: GridsterItemComponentInterface;\n  private gridster: GridsterComponentInterface;\n  private pushedItemsOrder: GridsterItemComponentInterface[];\n  private tryPattern: {\n    fromEast: ((\n      gridsterItemCollide: GridsterItemComponentInterface,\n      gridsterItem: GridsterItemComponentInterface\n    ) => boolean)[];\n    fromWest: ((\n      gridsterItemCollide: GridsterItemComponentInterface,\n      gridsterItem: GridsterItemComponentInterface\n    ) => boolean)[];\n    fromNorth: ((\n      gridsterItemCollide: GridsterItemComponentInterface,\n      gridsterItem: GridsterItemComponentInterface\n    ) => boolean)[];\n    fromSouth: ((\n      gridsterItemCollide: GridsterItemComponentInterface,\n      gridsterItem: GridsterItemComponentInterface\n    ) => boolean)[];\n  };\n  private iteration = 0;\n\n  constructor(gridsterItem: GridsterItemComponentInterface) {\n    this.pushedItems = [];\n    this.pushedItemsTemp = [];\n    this.pushedItemsTempPath = [];\n    this.pushedItemsPath = [];\n    this.gridsterItem = gridsterItem;\n    this.gridster = gridsterItem.gridster;\n    this.tryPattern = {\n      fromEast: [this.tryWest, this.trySouth, this.tryNorth, this.tryEast],\n      fromWest: [this.tryEast, this.trySouth, this.tryNorth, this.tryWest],\n      fromNorth: [this.trySouth, this.tryEast, this.tryWest, this.tryNorth],\n      fromSouth: [this.tryNorth, this.tryEast, this.tryWest, this.trySouth]\n    };\n    this.fromSouth = 'fromSouth';\n    this.fromNorth = 'fromNorth';\n    this.fromEast = 'fromEast';\n    this.fromWest = 'fromWest';\n  }\n\n  destroy(): void {\n    this.gridster = this.gridsterItem = null!;\n  }\n\n  pushItems(direction: string, disable?: boolean): boolean {\n    if (this.gridster.$options.pushItems && !disable) {\n      this.pushedItemsOrder = [];\n      this.iteration = 0;\n      const pushed = this.push(this.gridsterItem, direction);\n      if (!pushed) {\n        this.restoreTempItems();\n      }\n      this.pushedItemsOrder = [];\n      this.pushedItemsTemp = [];\n      this.pushedItemsTempPath = [];\n      return pushed;\n    } else {\n      return false;\n    }\n  }\n\n  restoreTempItems(): void {\n    let i = this.pushedItemsTemp.length - 1;\n    for (; i > -1; i--) {\n      this.removeFromTempPushed(this.pushedItemsTemp[i]);\n    }\n  }\n\n  restoreItems(): void {\n    let i = 0;\n    const l: number = this.pushedItems.length;\n    let pushedItem: GridsterItemComponentInterface;\n    for (; i < l; i++) {\n      pushedItem = this.pushedItems[i];\n      pushedItem.$item.x = pushedItem.item.x || 0;\n      pushedItem.$item.y = pushedItem.item.y || 0;\n      pushedItem.setSize();\n    }\n    this.pushedItems = [];\n    this.pushedItemsPath = [];\n  }\n\n  setPushedItems(): void {\n    let i = 0;\n    const l: number = this.pushedItems.length;\n    let pushedItem: GridsterItemComponentInterface;\n    for (; i < l; i++) {\n      pushedItem = this.pushedItems[i];\n      pushedItem.checkItemChanges(pushedItem.$item, pushedItem.item);\n    }\n    this.pushedItems = [];\n    this.pushedItemsPath = [];\n  }\n\n  checkPushBack(): void {\n    let i: number = this.pushedItems.length - 1;\n    let change = false;\n    for (; i > -1; i--) {\n      if (this.checkPushedItem(this.pushedItems[i], i)) {\n        change = true;\n      }\n    }\n    if (change) {\n      this.checkPushBack();\n    }\n  }\n\n  private push(\n    gridsterItem: GridsterItemComponentInterface,\n    direction: string\n  ): boolean {\n    if (this.iteration > 100) {\n      console.warn('max iteration reached');\n      return false;\n    }\n    if (this.gridster.checkGridCollision(gridsterItem.$item)) {\n      return false;\n    }\n    if (direction === '') {\n      return false;\n    }\n    const conflicts: GridsterItemComponentInterface[] =\n      this.gridster.findItemsWithItem(gridsterItem.$item);\n    const invert = direction === this.fromNorth || direction === this.fromWest;\n    // sort the list of conflicts in order of [y,x]. Invert when the push is from north and west\n    // this is done so they don't conflict witch each other and revert positions, keeping the previous order\n    conflicts.sort((a, b) => {\n      if (invert) {\n        return b.$item.y - a.$item.y || b.$item.x - a.$item.x;\n      } else {\n        return a.$item.y - b.$item.y || a.$item.x - b.$item.x;\n      }\n    });\n    let i = 0;\n    let itemCollision: GridsterItemComponentInterface;\n    let makePush = true;\n    const pushedItems: GridsterItemComponentInterface[] = [];\n    for (; i < conflicts.length; i++) {\n      itemCollision = conflicts[i];\n      if (itemCollision === this.gridsterItem) {\n        continue;\n      }\n      if (!itemCollision.canBeDragged()) {\n        makePush = false;\n        break;\n      }\n      const p = this.pushedItemsTemp.indexOf(itemCollision);\n      if (p > -1 && this.pushedItemsTempPath[p].length > 10) {\n        // stop if item is pushed more than 10 times to break infinite loops\n        makePush = false;\n        break;\n      }\n      if (\n        this.tryPattern[direction][0].call(this, itemCollision, gridsterItem)\n      ) {\n        this.pushedItemsOrder.push(itemCollision);\n        pushedItems.push(itemCollision);\n      } else if (\n        this.tryPattern[direction][1].call(this, itemCollision, gridsterItem)\n      ) {\n        this.pushedItemsOrder.push(itemCollision);\n        pushedItems.push(itemCollision);\n      } else if (\n        this.tryPattern[direction][2].call(this, itemCollision, gridsterItem)\n      ) {\n        this.pushedItemsOrder.push(itemCollision);\n        pushedItems.push(itemCollision);\n      } else if (\n        this.tryPattern[direction][3].call(this, itemCollision, gridsterItem)\n      ) {\n        this.pushedItemsOrder.push(itemCollision);\n        pushedItems.push(itemCollision);\n      } else {\n        makePush = false;\n        break;\n      }\n    }\n    if (!makePush) {\n      i = this.pushedItemsOrder.lastIndexOf(pushedItems[0]);\n      if (i > -1) {\n        let j = this.pushedItemsOrder.length - 1;\n        for (; j >= i; j--) {\n          itemCollision = this.pushedItemsOrder[j];\n          this.pushedItemsOrder.pop();\n          this.removeFromTempPushed(itemCollision);\n          this.removeFromPushedItem(itemCollision);\n        }\n      }\n    }\n    this.iteration++;\n    return makePush;\n  }\n\n  private trySouth(\n    gridsterItemCollide: GridsterItemComponentInterface,\n    gridsterItem: GridsterItemComponentInterface\n  ): boolean {\n    if (!this.gridster.$options.pushDirections.south) {\n      return false;\n    }\n    this.addToTempPushed(gridsterItemCollide);\n    gridsterItemCollide.$item.y =\n      gridsterItem.$item.y + gridsterItem.$item.rows;\n    if (this.push(gridsterItemCollide, this.fromNorth)) {\n      gridsterItemCollide.setSize();\n      this.addToPushed(gridsterItemCollide);\n      return true;\n    } else {\n      this.removeFromTempPushed(gridsterItemCollide);\n    }\n    return false;\n  }\n\n  private tryNorth(\n    gridsterItemCollide: GridsterItemComponentInterface,\n    gridsterItem: GridsterItemComponentInterface\n  ): boolean {\n    if (!this.gridster.$options.pushDirections.north) {\n      return false;\n    }\n    this.addToTempPushed(gridsterItemCollide);\n    gridsterItemCollide.$item.y =\n      gridsterItem.$item.y - gridsterItemCollide.$item.rows;\n    if (this.push(gridsterItemCollide, this.fromSouth)) {\n      gridsterItemCollide.setSize();\n      this.addToPushed(gridsterItemCollide);\n      return true;\n    } else {\n      this.removeFromTempPushed(gridsterItemCollide);\n    }\n    return false;\n  }\n\n  private tryEast(\n    gridsterItemCollide: GridsterItemComponentInterface,\n    gridsterItem: GridsterItemComponentInterface\n  ): boolean {\n    if (!this.gridster.$options.pushDirections.east) {\n      return false;\n    }\n    this.addToTempPushed(gridsterItemCollide);\n    gridsterItemCollide.$item.x =\n      gridsterItem.$item.x + gridsterItem.$item.cols;\n    if (this.push(gridsterItemCollide, this.fromWest)) {\n      gridsterItemCollide.setSize();\n      this.addToPushed(gridsterItemCollide);\n      return true;\n    } else {\n      this.removeFromTempPushed(gridsterItemCollide);\n    }\n    return false;\n  }\n\n  private tryWest(\n    gridsterItemCollide: GridsterItemComponentInterface,\n    gridsterItem: GridsterItemComponentInterface\n  ): boolean {\n    if (!this.gridster.$options.pushDirections.west) {\n      return false;\n    }\n    this.addToTempPushed(gridsterItemCollide);\n    gridsterItemCollide.$item.x =\n      gridsterItem.$item.x - gridsterItemCollide.$item.cols;\n    if (this.push(gridsterItemCollide, this.fromEast)) {\n      gridsterItemCollide.setSize();\n      this.addToPushed(gridsterItemCollide);\n      return true;\n    } else {\n      this.removeFromTempPushed(gridsterItemCollide);\n    }\n    return false;\n  }\n\n  private addToTempPushed(gridsterItem: GridsterItemComponentInterface): void {\n    let i = this.pushedItemsTemp.indexOf(gridsterItem);\n    if (i === -1) {\n      i = this.pushedItemsTemp.push(gridsterItem) - 1;\n      this.pushedItemsTempPath[i] = [];\n    }\n    this.pushedItemsTempPath[i].push({\n      x: gridsterItem.$item.x,\n      y: gridsterItem.$item.y\n    });\n  }\n\n  private removeFromTempPushed(\n    gridsterItem: GridsterItemComponentInterface\n  ): void {\n    const i = this.pushedItemsTemp.indexOf(gridsterItem);\n    const tempPosition = this.pushedItemsTempPath[i].pop();\n    if (!tempPosition) {\n      return;\n    }\n    gridsterItem.$item.x = tempPosition.x;\n    gridsterItem.$item.y = tempPosition.y;\n    gridsterItem.setSize();\n    if (!this.pushedItemsTempPath[i].length) {\n      this.pushedItemsTemp.splice(i, 1);\n      this.pushedItemsTempPath.splice(i, 1);\n    }\n  }\n\n  private addToPushed(gridsterItem: GridsterItemComponentInterface): void {\n    if (this.pushedItems.indexOf(gridsterItem) < 0) {\n      this.pushedItems.push(gridsterItem);\n      this.pushedItemsPath.push([\n        { x: gridsterItem.item.x || 0, y: gridsterItem.item.y || 0 },\n        { x: gridsterItem.$item.x, y: gridsterItem.$item.y }\n      ]);\n    } else {\n      const i = this.pushedItems.indexOf(gridsterItem);\n      this.pushedItemsPath[i].push({\n        x: gridsterItem.$item.x,\n        y: gridsterItem.$item.y\n      });\n    }\n  }\n\n  private removeFromPushed(i: number): void {\n    if (i > -1) {\n      this.pushedItems.splice(i, 1);\n      this.pushedItemsPath.splice(i, 1);\n    }\n  }\n\n  private removeFromPushedItem(\n    gridsterItem: GridsterItemComponentInterface\n  ): void {\n    const i = this.pushedItems.indexOf(gridsterItem);\n    if (i > -1) {\n      this.pushedItemsPath[i].pop();\n      if (!this.pushedItemsPath.length) {\n        this.pushedItems.splice(i, 1);\n        this.pushedItemsPath.splice(i, 1);\n      }\n    }\n  }\n\n  private checkPushedItem(\n    pushedItem: GridsterItemComponentInterface,\n    i: number\n  ): boolean {\n    const path = this.pushedItemsPath[i];\n    let j = path.length - 2;\n    let lastPosition;\n    let x;\n    let y;\n    let change = false;\n    for (; j > -1; j--) {\n      lastPosition = path[j];\n      x = pushedItem.$item.x;\n      y = pushedItem.$item.y;\n      pushedItem.$item.x = lastPosition.x;\n      pushedItem.$item.y = lastPosition.y;\n      if (!this.gridster.findItemWithItem(pushedItem.$item)) {\n        pushedItem.setSize();\n        path.splice(j + 1, path.length - j - 1);\n        change = true;\n      } else {\n        pushedItem.$item.x = x;\n        pushedItem.$item.y = y;\n      }\n    }\n    if (path.length < 2) {\n      this.removeFromPushed(i);\n    }\n    return change;\n  }\n}\n","import { GridsterResizeEventType } from './gridsterResizeEventType.interface';\nimport { GridsterComponentInterface } from './gridster.interface';\n\nlet scrollSensitivity: number;\nlet scrollSpeed: number;\nconst intervalDuration = 50;\nlet gridsterElement: HTMLElement | null;\nlet resizeEvent: boolean | undefined;\nlet resizeEventType: GridsterResizeEventType | undefined;\nlet intervalE: number;\nlet intervalW: number;\nlet intervalN: number;\nlet intervalS: number;\n\ntype Position = Pick<MouseEvent, 'clientX' | 'clientY'>;\n\ntype CalculatePosition = (position: Position) => void;\n\nexport function scroll(\n  gridster: GridsterComponentInterface,\n  left: number,\n  top: number,\n  width: number,\n  height: number,\n  event: MouseEvent,\n  lastMouse: Position,\n  calculateItemPosition: CalculatePosition,\n  resize?: boolean,\n  resizeEventScrollType?: GridsterResizeEventType\n): void {\n  scrollSensitivity = gridster.$options.scrollSensitivity;\n  scrollSpeed = gridster.$options.scrollSpeed;\n  gridsterElement = gridster.el;\n  resizeEvent = resize;\n  resizeEventType = resizeEventScrollType;\n\n  const offsetWidth = gridsterElement.offsetWidth;\n  const offsetHeight = gridsterElement.offsetHeight;\n  const offsetLeft = gridsterElement.scrollLeft;\n  const offsetTop = gridsterElement.scrollTop;\n  const elemTopOffset = top - offsetTop;\n  const elemBottomOffset = offsetHeight + offsetTop - top - height;\n\n  const { clientX, clientY } = event;\n\n  if (!gridster.$options.disableScrollVertical) {\n    if (lastMouse.clientY < clientY && elemBottomOffset < scrollSensitivity) {\n      cancelN();\n      if (\n        (resizeEvent && resizeEventType && !resizeEventType.south) ||\n        intervalS\n      ) {\n        return;\n      }\n      intervalS = startVertical(1, calculateItemPosition, lastMouse);\n    } else if (\n      lastMouse.clientY > clientY &&\n      offsetTop > 0 &&\n      elemTopOffset < scrollSensitivity\n    ) {\n      cancelS();\n      if (\n        (resizeEvent && resizeEventType && !resizeEventType.north) ||\n        intervalN\n      ) {\n        return;\n      }\n      intervalN = startVertical(-1, calculateItemPosition, lastMouse);\n    } else if (lastMouse.clientY !== clientY) {\n      cancelVertical();\n    }\n  }\n\n  const elemRightOffset = offsetLeft + offsetWidth - left - width;\n  const elemLeftOffset = left - offsetLeft;\n\n  if (!gridster.$options.disableScrollHorizontal) {\n    if (lastMouse.clientX < clientX && elemRightOffset <= scrollSensitivity) {\n      cancelW();\n      if (\n        (resizeEvent && resizeEventType && !resizeEventType.east) ||\n        intervalE\n      ) {\n        return;\n      }\n      intervalE = startHorizontal(1, calculateItemPosition, lastMouse);\n    } else if (\n      lastMouse.clientX > clientX &&\n      offsetLeft > 0 &&\n      elemLeftOffset < scrollSensitivity\n    ) {\n      cancelE();\n      if (\n        (resizeEvent && resizeEventType && !resizeEventType.west) ||\n        intervalW\n      ) {\n        return;\n      }\n      intervalW = startHorizontal(-1, calculateItemPosition, lastMouse);\n    } else if (lastMouse.clientX !== clientX) {\n      cancelHorizontal();\n    }\n  }\n}\n\nfunction startVertical(\n  sign: number,\n  calculateItemPosition: CalculatePosition,\n  lastMouse: Position\n): number {\n  let clientY = lastMouse.clientY;\n  return window.setInterval(() => {\n    if (\n      !gridsterElement ||\n      (sign === -1 && gridsterElement.scrollTop - scrollSpeed < 0)\n    ) {\n      cancelVertical();\n    }\n    gridsterElement!.scrollTop += sign * scrollSpeed;\n    clientY += sign * scrollSpeed;\n    calculateItemPosition({ clientX: lastMouse.clientX, clientY });\n  }, intervalDuration);\n}\n\nfunction startHorizontal(\n  sign: number,\n  calculateItemPosition: CalculatePosition,\n  lastMouse: Position\n): number {\n  let clientX = lastMouse.clientX;\n  return window.setInterval(() => {\n    if (\n      !gridsterElement ||\n      (sign === -1 && gridsterElement.scrollLeft - scrollSpeed < 0)\n    ) {\n      cancelHorizontal();\n    }\n    gridsterElement!.scrollLeft += sign * scrollSpeed;\n    clientX += sign * scrollSpeed;\n    calculateItemPosition({ clientX, clientY: lastMouse.clientY });\n  }, intervalDuration);\n}\n\nexport function cancelScroll(): void {\n  cancelHorizontal();\n  cancelVertical();\n  gridsterElement = null;\n}\n\nfunction cancelHorizontal(): void {\n  cancelE();\n  cancelW();\n}\n\nfunction cancelVertical(): void {\n  cancelN();\n  cancelS();\n}\n\nfunction cancelE(): void {\n  if (intervalE) {\n    clearInterval(intervalE);\n    intervalE = 0;\n  }\n}\n\nfunction cancelW(): void {\n  if (intervalW) {\n    clearInterval(intervalW);\n    intervalW = 0;\n  }\n}\n\nfunction cancelS(): void {\n  if (intervalS) {\n    clearInterval(intervalS);\n    intervalS = 0;\n  }\n}\n\nfunction cancelN(): void {\n  if (intervalN) {\n    clearInterval(intervalN);\n    intervalN = 0;\n  }\n}\n","import { GridsterItemComponentInterface } from './gridsterItem.interface';\nimport { GridsterComponentInterface } from './gridster.interface';\n\nexport class GridsterSwap {\n  private swapedItem: GridsterItemComponentInterface | undefined;\n  private gridsterItem: GridsterItemComponentInterface;\n  private gridster: GridsterComponentInterface;\n\n  constructor(gridsterItem: GridsterItemComponentInterface) {\n    this.gridsterItem = gridsterItem;\n    this.gridster = gridsterItem.gridster;\n  }\n\n  destroy(): void {\n    this.gridster = this.gridsterItem = this.swapedItem = null!;\n  }\n\n  swapItems(): void {\n    if (this.gridster.$options.swap) {\n      this.checkSwapBack();\n      this.checkSwap(this.gridsterItem);\n    }\n  }\n\n  checkSwapBack(): void {\n    if (this.swapedItem) {\n      const x: number = this.swapedItem.$item.x;\n      const y: number = this.swapedItem.$item.y;\n      this.swapedItem.$item.x = this.swapedItem.item.x || 0;\n      this.swapedItem.$item.y = this.swapedItem.item.y || 0;\n      if (this.gridster.checkCollision(this.swapedItem.$item)) {\n        this.swapedItem.$item.x = x;\n        this.swapedItem.$item.y = y;\n      } else {\n        this.swapedItem.setSize();\n        this.gridsterItem.$item.x = this.gridsterItem.item.x || 0;\n        this.gridsterItem.$item.y = this.gridsterItem.item.y || 0;\n        this.swapedItem = undefined;\n      }\n    }\n  }\n\n  restoreSwapItem(): void {\n    if (this.swapedItem) {\n      this.swapedItem.$item.x = this.swapedItem.item.x || 0;\n      this.swapedItem.$item.y = this.swapedItem.item.y || 0;\n      this.swapedItem.setSize();\n      this.swapedItem = undefined;\n    }\n  }\n\n  setSwapItem(): void {\n    if (this.swapedItem) {\n      this.swapedItem.checkItemChanges(\n        this.swapedItem.$item,\n        this.swapedItem.item\n      );\n      this.swapedItem = undefined;\n    }\n  }\n\n  checkSwap(pushedBy: GridsterItemComponentInterface): void {\n    let gridsterItemCollision;\n    if (this.gridster.$options.swapWhileDragging) {\n      gridsterItemCollision = this.gridster.checkCollisionForSwaping(\n        pushedBy.$item\n      );\n    } else {\n      gridsterItemCollision = this.gridster.checkCollision(pushedBy.$item);\n    }\n    if (\n      gridsterItemCollision &&\n      gridsterItemCollision !== true &&\n      gridsterItemCollision.canBeDragged()\n    ) {\n      const gridsterItemCollide: GridsterItemComponentInterface =\n        gridsterItemCollision;\n      const copyCollisionX = gridsterItemCollide.$item.x;\n      const copyCollisionY = gridsterItemCollide.$item.y;\n      const copyX = pushedBy.$item.x;\n      const copyY = pushedBy.$item.y;\n      const diffX = copyX - copyCollisionX;\n      const diffY = copyY - copyCollisionY;\n      gridsterItemCollide.$item.x = pushedBy.item.x - diffX;\n      gridsterItemCollide.$item.y = pushedBy.item.y - diffY;\n      pushedBy.$item.x = gridsterItemCollide.item.x + diffX;\n      pushedBy.$item.y = gridsterItemCollide.item.y + diffY;\n      if (\n        this.gridster.checkCollision(gridsterItemCollide.$item) ||\n        this.gridster.checkCollision(pushedBy.$item)\n      ) {\n        pushedBy.$item.x = copyX;\n        pushedBy.$item.y = copyY;\n        gridsterItemCollide.$item.x = copyCollisionX;\n        gridsterItemCollide.$item.y = copyCollisionY;\n      } else {\n        gridsterItemCollide.setSize();\n        this.swapedItem = gridsterItemCollide;\n        if (this.gridster.$options.swapWhileDragging) {\n          this.gridsterItem.checkItemChanges(\n            this.gridsterItem.$item,\n            this.gridsterItem.item\n          );\n          this.setSwapItem();\n        }\n      }\n    }\n  }\n}\n","import { NgZone } from '@angular/core';\nimport { GridsterComponentInterface } from './gridster.interface';\nimport { DirTypes } from './gridsterConfig.interface';\nimport { GridsterItemComponentInterface } from './gridsterItem.interface';\nimport { GridsterPush } from './gridsterPush.service';\nimport { cancelScroll, scroll } from './gridsterScroll.service';\n\nimport { GridsterSwap } from './gridsterSwap.service';\nimport { GridsterUtils } from './gridsterUtils.service';\n\nconst GRIDSTER_ITEM_RESIZABLE_HANDLER_CLASS = 'gridster-item-resizable-handler';\n\nenum Direction {\n  UP = 'UP',\n  DOWN = 'DOWN',\n  LEFT = 'LEFT',\n  RIGHT = 'RIGHT'\n}\n\nexport class GridsterDraggable {\n  gridsterItem: GridsterItemComponentInterface;\n  gridster: GridsterComponentInterface;\n  lastMouse: {\n    clientX: number;\n    clientY: number;\n  };\n  offsetLeft: number;\n  offsetTop: number;\n  margin: number;\n  outerMarginTop: number | null;\n  outerMarginRight: number | null;\n  outerMarginBottom: number | null;\n  outerMarginLeft: number | null;\n  diffTop: number;\n  diffLeft: number;\n  originalClientX: number;\n  originalClientY: number;\n  top: number;\n  left: number;\n  height: number;\n  width: number;\n  positionX: number;\n  positionY: number;\n  positionXBackup: number;\n  positionYBackup: number;\n  enabled: boolean;\n  mousemove: () => void;\n  mouseup: () => void;\n  mouseleave: () => void;\n  cancelOnBlur: () => void;\n  touchmove: () => void;\n  touchend: () => void;\n  touchcancel: () => void;\n  mousedown: () => void;\n  touchstart: () => void;\n  push: GridsterPush;\n  swap: GridsterSwap;\n  path: Array<{ x: number; y: number }>;\n  collision: GridsterItemComponentInterface | boolean = false;\n\n  constructor(\n    gridsterItem: GridsterItemComponentInterface,\n    gridster: GridsterComponentInterface,\n    private zone: NgZone\n  ) {\n    this.gridsterItem = gridsterItem;\n    this.gridster = gridster;\n    this.lastMouse = {\n      clientX: 0,\n      clientY: 0\n    };\n    this.path = [];\n  }\n\n  destroy(): void {\n    if (this.gridster.previewStyle) {\n      this.gridster.previewStyle(true);\n    }\n    this.gridsterItem = this.gridster = this.collision = null!;\n    if (this.mousedown) {\n      this.mousedown();\n      this.touchstart();\n    }\n  }\n\n  dragStart(e: MouseEvent): void {\n    if (e.which && e.which !== 1) {\n      return;\n    }\n\n    if (\n      this.gridster.options.draggable &&\n      this.gridster.options.draggable.start\n    ) {\n      this.gridster.options.draggable.start(\n        this.gridsterItem.item,\n        this.gridsterItem,\n        e\n      );\n    }\n\n    e.stopPropagation();\n    e.preventDefault();\n\n    this.zone.runOutsideAngular(() => {\n      this.mousemove = this.gridsterItem.renderer.listen(\n        'document',\n        'mousemove',\n        this.dragMove\n      );\n      this.touchmove = this.gridster.renderer.listen(\n        this.gridster.el,\n        'touchmove',\n        this.dragMove\n      );\n    });\n    this.mouseup = this.gridsterItem.renderer.listen(\n      'document',\n      'mouseup',\n      this.dragStop\n    );\n    this.mouseleave = this.gridsterItem.renderer.listen(\n      'document',\n      'mouseleave',\n      this.dragStop\n    );\n    this.cancelOnBlur = this.gridsterItem.renderer.listen(\n      'window',\n      'blur',\n      this.dragStop\n    );\n    this.touchend = this.gridsterItem.renderer.listen(\n      'document',\n      'touchend',\n      this.dragStop\n    );\n    this.touchcancel = this.gridsterItem.renderer.listen(\n      'document',\n      'touchcancel',\n      this.dragStop\n    );\n    this.gridsterItem.renderer.addClass(\n      this.gridsterItem.el,\n      'gridster-item-moving'\n    );\n    this.margin = this.gridster.$options.margin;\n    this.outerMarginTop = this.gridster.$options.outerMarginTop;\n    this.outerMarginRight = this.gridster.$options.outerMarginRight;\n    this.outerMarginBottom = this.gridster.$options.outerMarginBottom;\n    this.outerMarginLeft = this.gridster.$options.outerMarginLeft;\n    this.offsetLeft = this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;\n    this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;\n    this.left = this.gridsterItem.left - this.margin;\n    this.top = this.gridsterItem.top - this.margin;\n    this.originalClientX = e.clientX;\n    this.originalClientY = e.clientY;\n    this.width = this.gridsterItem.width;\n    this.height = this.gridsterItem.height;\n    if (this.gridster.$options.dirType === DirTypes.RTL) {\n      this.diffLeft =\n        e.clientX - this.gridster.el.scrollWidth + this.gridsterItem.left;\n    } else {\n      this.diffLeft = e.clientX + this.offsetLeft - this.margin - this.left;\n    }\n    this.diffTop = e.clientY + this.offsetTop - this.margin - this.top;\n    this.gridster.movingItem = this.gridsterItem.$item;\n    this.gridster.previewStyle(true);\n    this.push = new GridsterPush(this.gridsterItem);\n    this.swap = new GridsterSwap(this.gridsterItem);\n    this.gridster.dragInProgress = true;\n    this.gridster.updateGrid();\n    this.path.push({\n      x: this.gridsterItem.item.x || 0,\n      y: this.gridsterItem.item.y || 0\n    });\n  }\n\n  dragMove = (e: MouseEvent): void => {\n    e.stopPropagation();\n    e.preventDefault();\n    GridsterUtils.checkTouchEvent(e);\n\n    // get the directions of the mouse event\n    let directions = this.getDirections(e);\n\n    if (this.gridster.options.enableBoundaryControl) {\n      // prevent moving up at the top of gridster\n      if (\n        directions.includes(Direction.UP) &&\n        this.gridsterItem.el.getBoundingClientRect().top <\n          this.gridster.el.getBoundingClientRect().top +\n            (this.outerMarginTop ?? this.margin)\n      ) {\n        directions = directions.filter(direction => direction != Direction.UP);\n        e = new MouseEvent(e.type, {\n          clientX: e.clientX,\n          clientY: this.lastMouse.clientY\n        });\n      }\n      // prevent moving left at the leftmost column of gridster\n      if (\n        directions.includes(Direction.LEFT) &&\n        this.gridsterItem.el.getBoundingClientRect().left <\n          this.gridster.el.getBoundingClientRect().left +\n            (this.outerMarginLeft ?? this.margin)\n      ) {\n        directions = directions.filter(\n          direction => direction != Direction.LEFT\n        );\n        e = new MouseEvent(e.type, {\n          clientX: this.lastMouse.clientX,\n          clientY: e.clientY\n        });\n      }\n      // prevent moving right at the rightmost column of gridster\n      if (\n        directions.includes(Direction.RIGHT) &&\n        this.gridsterItem.el.getBoundingClientRect().right >\n          this.gridster.el.getBoundingClientRect().right -\n            (this.outerMarginRight ?? this.margin)\n      ) {\n        directions = directions.filter(\n          direction => direction != Direction.RIGHT\n        );\n        e = new MouseEvent(e.type, {\n          clientX: this.lastMouse.clientX,\n          clientY: e.clientY\n        });\n      }\n      // prevent moving down at the bottom of gridster\n      if (\n        directions.includes(Direction.DOWN) &&\n        this.gridsterItem.el.getBoundingClientRect().bottom >\n          this.gridster.el.getBoundingClientRect().bottom - \n            (this.outerMarginBottom ?? this.margin)\n      ) {\n        directions = directions.filter(\n          direction => direction != Direction.DOWN\n        );\n        e = new MouseEvent(e.type, {\n          clientX: e.clientX,\n          clientY: this.lastMouse.clientY\n        });\n      }\n    }\n\n    // do not change item location when there is no direction to go\n    if (directions.length) {\n      this.offsetLeft =\n        this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;\n      this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;\n      scroll(\n        this.gridster,\n        this.left,\n        this.top,\n        this.width,\n        this.height,\n        e,\n        this.lastMouse,\n        this.calculateItemPositionFromMousePosition\n      );\n\n      this.calculateItemPositionFromMousePosition(e);\n    }\n  };\n\n  calculateItemPositionFromMousePosition = (e: MouseEvent): void => {\n    if (this.gridster.options.scale) {\n      this.calculateItemPositionWithScale(e, this.gridster.options.scale);\n    } else {\n      this.calculateItemPositionWithoutScale(e);\n    }\n    this.calculateItemPosition();\n    this.lastMouse.clientX = e.clientX;\n    this.lastMouse.clientY = e.clientY;\n    this.zone.run(() => {\n      this.gridster.updateGrid();\n    });\n  };\n\n  calculateItemPositionWithScale(e: MouseEvent, scale: number): void {\n    if (this.gridster.$options.dirType === DirTypes.RTL) {\n      this.left =\n        this.gridster.el.scrollWidth -\n        this.originalClientX +\n        (e.clientX - this.originalClientX) / scale +\n        this.diffLeft;\n    } else {\n      this.left =\n        this.originalClientX +\n        (e.clientX - this.originalClientX) / scale +\n        this.offsetLeft -\n        this.diffLeft;\n    }\n    this.top =\n      this.originalClientY +\n      (e.clientY - this.originalClientY) / scale +\n      this.offsetTop -\n      this.diffTop;\n  }\n\n  calculateItemPositionWithoutScale(e: MouseEvent): void {\n    if (this.gridster.$options.dirType === DirTypes.RTL) {\n      this.left = this.gridster.el.scrollWidth - e.clientX + this.diffLeft;\n    } else {\n      this.left = e.clientX + this.offsetLeft - this.diffLeft;\n    }\n\n    this.top = e.clientY + this.offsetTop - this.diffTop;\n  }\n\n  dragStop = (e: MouseEvent): void => {\n    e.stopPropagation();\n    e.preventDefault();\n\n    cancelScroll();\n    this.cancelOnBlur();\n    this.mousemove();\n    this.mouseup();\n    this.mouseleave();\n    this.touchmove();\n    this.touchend();\n    this.touchcancel();\n    this.gridsterItem.renderer.removeClass(\n      this.gridsterItem.el,\n      'gridster-item-moving'\n    );\n    this.gridster.dragInProgress = false;\n    this.gridster.updateGrid();\n    this.path = [];\n    if (\n      this.gridster.options.draggable &&\n      this.gridster.options.draggable.stop\n    ) {\n      Promise.resolve(\n        this.gridster.options.draggable.stop(\n          this.gridsterItem.item,\n          this.gridsterItem,\n          e\n        )\n      ).then(this.makeDrag, this.cancelDrag);\n    } else {\n      this.makeDrag();\n    }\n    setTimeout(() => {\n      if (this.gridster) {\n        this.gridster.movingItem = null;\n        this.gridster.previewStyle(true);\n      }\n    });\n  };\n\n  cancelDrag = (): void => {\n    this.gridsterItem.$item.x = this.gridsterItem.item.x || 0;\n    this.gridsterItem.$item.y = this.gridsterItem.item.y || 0;\n    this.gridsterItem.setSize();\n    if (this.push) {\n      this.push.restoreItems();\n    }\n    if (this.swap) {\n      this.swap.restoreSwapItem();\n    }\n    if (this.push) {\n      this.push.destroy();\n      this.push = null!;\n    }\n    if (this.swap) {\n      this.swap.destroy();\n      this.swap = null!;\n    }\n  };\n\n  makeDrag = (): void => {\n    if (\n      this.gridster.$options.draggable.dropOverItems &&\n      this.gridster.options.draggable &&\n      this.gridster.options.draggable.dropOverItemsCallback &&\n      this.collision &&\n      this.collision !== true &&\n      this.collision.$item\n    ) {\n      this.gridster.options.draggable.dropOverItemsCallback(\n        this.gridsterItem.item,\n        this.collision.item,\n        this.gridster\n      );\n    }\n    this.collision = false;\n    this.gridsterItem.setSize();\n    this.gridsterItem.checkItemChanges(\n      this.gridsterItem.$item,\n      this.gridsterItem.item\n    );\n    if (this.push) {\n      this.push.setPushedItems();\n    }\n    if (this.swap) {\n      this.swap.setSwapItem();\n    }\n    if (this.push) {\n      this.push.destroy();\n      this.push = null!;\n    }\n    if (this.swap) {\n      this.swap.destroy();\n      this.swap = null!;\n    }\n  };\n\n  calculateItemPosition(): void {\n    this.gridster.movingItem = this.gridsterItem.$item;\n    this.positionX = this.gridster.pixelsToPositionX(this.left, Math.round);\n    this.positionY = this.gridster.pixelsToPositionY(this.top, Math.round);\n    this.positionXBackup = this.gridsterItem.$item.x;\n    this.positionYBackup = this.gridsterItem.$item.y;\n    this.gridsterItem.$item.x = this.positionX;\n    if (this.gridster.checkGridCollision(this.gridsterItem.$item)) {\n      this.gridsterItem.$item.x = this.positionXBackup;\n    }\n    this.gridsterItem.$item.y = this.positionY;\n    if (this.gridster.checkGridCollision(this.gridsterItem.$item)) {\n      this.gridsterItem.$item.y = this.positionYBackup;\n    }\n    this.gridster.gridRenderer.setCellPosition(\n      this.gridsterItem.renderer,\n      this.gridsterItem.el,\n      this.left,\n      this.top\n    );\n\n    if (\n      this.positionXBackup !== this.gridsterItem.$item.x ||\n      this.positionYBackup !== this.gridsterItem.$item.y\n    ) {\n      const lastPosition = this.path[this.path.length - 1];\n      let direction = '';\n      if (lastPosition.x < this.gridsterItem.$item.x) {\n        direction = this.push.fromWest;\n      } else if (lastPosition.x > this.gridsterItem.$item.x) {\n        direction = this.push.fromEast;\n      } else if (lastPosition.y < this.gridsterItem.$item.y) {\n        direction = this.push.fromNorth;\n      } else if (lastPosition.y > this.gridsterItem.$item.y) {\n        direction = this.push.fromSouth;\n      }\n      this.push.pushItems(direction, this.gridster.$options.disablePushOnDrag);\n      this.swap.swapItems();\n      this.collision = this.gridster.checkCollision(this.gridsterItem.$item);\n      if (this.collision) {\n        this.gridsterItem.$item.x = this.positionXBackup;\n        this.gridsterItem.$item.y = this.positionYBackup;\n        if (\n          this.gridster.$options.draggable.dropOverItems &&\n          this.collision !== true &&\n          this.collision.$item\n        ) {\n          this.gridster.movingItem = null;\n        }\n      } else {\n        this.path.push({\n          x: this.gridsterItem.$item.x,\n          y: this.gridsterItem.$item.y\n        });\n      }\n      this.push.checkPushBack();\n    } else {\n      // reset the collision when you drag and drop on an adjacent cell that is not empty\n      // and go back to the cell you were in from the beginning,\n      // this is to prevent `dropOverItemsCallback'\n      this.collision = false;\n    }\n    this.gridster.previewStyle(true);\n  }\n\n  toggle(): void {\n    const enableDrag = this.gridsterItem.canBeDragged();\n    if (!this.enabled && enableDrag) {\n      this.enabled = !this.enabled;\n      this.mousedown = this.gridsterItem.renderer.listen(\n        this.gridsterItem.el,\n        'mousedown',\n        this.dragStartDelay\n      );\n      this.touchstart = this.gridsterItem.renderer.listen(\n        this.gridsterItem.el,\n        'touchstart',\n        this.dragStartDelay\n      );\n    } else if (this.enabled && !enableDrag) {\n      this.enabled = !this.enabled;\n      this.mousedown();\n      this.touchstart();\n    }\n  }\n\n  dragStartDelay = (e: MouseEvent): void => {\n    const target = e.target as HTMLElement;\n    if (target.classList.contains(GRIDSTER_ITEM_RESIZABLE_HANDLER_CLASS)) {\n      return;\n    }\n    if (GridsterUtils.checkContentClassForEvent(this.gridster, e)) {\n      return;\n    }\n    GridsterUtils.checkTouchEvent(e);\n    if (!this.gridster.$options.draggable.delayStart) {\n      this.dragStart(e);\n      return;\n    }\n    const timeout = setTimeout(() => {\n      this.dragStart(e);\n      cancelDrag();\n    }, this.gridster.$options.draggable.delayStart);\n    const cancelMouse = this.gridsterItem.renderer.listen(\n      'document',\n      'mouseup',\n      cancelDrag\n    );\n    const cancelMouseLeave = this.gridsterItem.renderer.listen(\n      'document',\n      'mouseleave',\n      cancelDrag\n    );\n    const cancelOnBlur = this.gridsterItem.renderer.listen(\n      'window',\n      'blur',\n      cancelDrag\n    );\n    const cancelTouchMove = this.gridsterItem.renderer.listen(\n      'document',\n      'touchmove',\n      cancelMove\n    );\n    const cancelTouchEnd = this.gridsterItem.renderer.listen(\n      'document',\n      'touchend',\n      cancelDrag\n    );\n    const cancelTouchCancel = this.gridsterItem.renderer.listen(\n      'document',\n      'touchcancel',\n      cancelDrag\n    );\n\n    function cancelMove(eventMove: MouseEvent): void {\n      GridsterUtils.checkTouchEvent(eventMove);\n      if (\n        Math.abs(eventMove.clientX - e.clientX) > 9 ||\n        Math.abs(eventMove.clientY - e.clientY) > 9\n      ) {\n        cancelDrag();\n      }\n    }\n\n    function cancelDrag(): void {\n      clearTimeout(timeout);\n      cancelOnBlur();\n      cancelMouse();\n      cancelMouseLeave();\n      cancelTouchMove();\n      cancelTouchEnd();\n      cancelTouchCancel();\n    }\n  };\n\n  /**\n   * Returns the list of directions for given mouse event\n   * @param e Mouse event\n   * */\n  private getDirections(e: MouseEvent) {\n    const directions: string[] = [];\n    if (this.lastMouse.clientX === 0 && this.lastMouse.clientY === 0) {\n      this.lastMouse.clientY = e.clientY;\n      this.lastMouse.clientX = e.clientX;\n    }\n    if (this.lastMouse.clientY > e.clientY) {\n      directions.push(Direction.UP);\n    }\n    if (this.lastMouse.clientY < e.clientY) {\n      directions.push(Direction.DOWN);\n    }\n    if (this.lastMouse.clientX < e.clientX) {\n      directions.push(Direction.RIGHT);\n    }\n    if (this.lastMouse.clientX > e.clientX) {\n      directions.push(Direction.LEFT);\n    }\n    return directions;\n  }\n}\n","import {\n  GridsterItem,\n  GridsterItemComponentInterface\n} from './gridsterItem.interface';\nimport { GridsterComponentInterface } from './gridster.interface';\n\nexport class GridsterPushResize {\n  public fromSouth: string;\n  public fromNorth: string;\n  public fromEast: string;\n  public fromWest: string;\n  private pushedItems: Array<GridsterItemComponentInterface>;\n  private pushedItemsPath: Array<Array<GridsterItem>>;\n  private gridsterItem: GridsterItemComponentInterface;\n  private gridster: GridsterComponentInterface;\n  private tryPattern: {\n    fromEast: (\n      gridsterItemCollide: GridsterItemComponentInterface,\n      gridsterItem: GridsterItemComponentInterface,\n      direction: string\n    ) => boolean;\n    fromWest: (\n      gridsterItemCollide: GridsterItemComponentInterface,\n      gridsterItem: GridsterItemComponentInterface,\n      direction: string\n    ) => boolean;\n    fromNorth: (\n      gridsterItemCollide: GridsterItemComponentInterface,\n      gridsterItem: GridsterItemComponentInterface,\n      direction: string\n    ) => boolean;\n    fromSouth: (\n      gridsterItemCollide: GridsterItemComponentInterface,\n      gridsterItem: GridsterItemComponentInterface,\n      direction: string\n    ) => boolean;\n  };\n\n  constructor(gridsterItem: GridsterItemComponentInterface) {\n    this.pushedItems = [];\n    this.pushedItemsPath = [];\n    this.gridsterItem = gridsterItem;\n    this.gridster = gridsterItem.gridster;\n    this.tryPattern = {\n      fromEast: this.tryWest,\n      fromWest: this.tryEast,\n      fromNorth: this.trySouth,\n      fromSouth: this.tryNorth\n    };\n    this.fromSouth = 'fromSouth';\n    this.fromNorth = 'fromNorth';\n    this.fromEast = 'fromEast';\n    this.fromWest = 'fromWest';\n  }\n\n  destroy(): void {\n    this.gridster = this.gridsterItem = null!;\n  }\n\n  pushItems(direction: string): boolean {\n    if (this.gridster.$options.pushResizeItems) {\n      return this.push(this.gridsterItem, direction);\n    } else {\n      return false;\n    }\n  }\n\n  restoreItems(): void {\n    let i = 0;\n    const l: number = this.pushedItems.length;\n    let pushedItem: GridsterItemComponentInterface;\n    for (; i < l; i++) {\n      pushedItem = this.pushedItems[i];\n      pushedItem.$item.x = pushedItem.item.x || 0;\n      pushedItem.$item.y = pushedItem.item.y || 0;\n      pushedItem.$item.cols = pushedItem.item.cols || 1;\n      pushedItem.$item.row = pushedItem.item.row || 1;\n      pushedItem.setSize();\n    }\n    this.pushedItems = [];\n    this.pushedItemsPath = [];\n  }\n\n  setPushedItems(): void {\n    let i = 0;\n    const l: number = this.pushedItems.length;\n    let pushedItem: GridsterItemComponentInterface;\n    for (; i < l; i++) {\n      pushedItem = this.pushedItems[i];\n      pushedItem.checkItemChanges(pushedItem.$item, pushedItem.item);\n    }\n    this.pushedItems = [];\n    this.pushedItemsPath = [];\n  }\n\n  checkPushBack(): void {\n    let i: number = this.pushedItems.length - 1;\n    let change = false;\n    for (; i > -1; i--) {\n      if (this.checkPushedItem(this.pushedItems[i], i)) {\n        change = true;\n      }\n    }\n    if (change) {\n      this.checkPushBack();\n    }\n  }\n\n  private push(\n    gridsterItem: GridsterItemComponentInterface,\n    direction: string\n  ): boolean {\n    const gridsterItemCollision: GridsterItemComponentInterface | boolean =\n      this.gridster.checkCollision(gridsterItem.$item);\n    if (\n      gridsterItemCollision &&\n      gridsterItemCollision !== true &&\n      gridsterItemCollision !== this.gridsterItem &&\n      gridsterItemCollision.canBeResized()\n    ) {\n      if (\n        this.tryPattern[direction].call(\n          this,\n          gridsterItemCollision,\n          gridsterItem,\n          direction\n        )\n      ) {\n        return true;\n      }\n    } else if (gridsterItemCollision === false) {\n      return true;\n    }\n    return false;\n  }\n\n  private trySouth(\n    gridsterItemCollide: GridsterItemComponentInterface,\n    gridsterItem: GridsterItemComponentInterface,\n    direction: string\n  ): boolean {\n    const backUpY = gridsterItemCollide.$item.y;\n    const backUpRows = gridsterItemCollide.$item.rows;\n    gridsterItemCollide.$item.y =\n      gridsterItem.$item.y + gridsterItem.$item.rows;\n    gridsterItemCollide.$item.rows =\n      backUpRows + backUpY - gridsterItemCollide.$item.y;\n    if (\n      !this.gridster.checkCollisionTwoItems(\n        gridsterItemCollide.$item,\n        gridsterItem.$item\n      ) &&\n      !this.gridster.checkGridCollision(gridsterItemCollide.$item)\n    ) {\n      gridsterItemCollide.setSize();\n      this.addToPushed(gridsterItemCollide);\n      this.push(gridsterItem, direction);\n      return true;\n    } else {\n      gridsterItemCollide.$item.y = backUpY;\n      gridsterItemCollide.$item.rows = backUpRows;\n    }\n    return false;\n  }\n\n  private tryNorth(\n    gridsterItemCollide: GridsterItemComponentInterface,\n    gridsterItem: GridsterItemComponentInterface,\n    direction: string\n  ): boolean {\n    const backUpRows = gridsterItemCollide.$item.rows;\n    gridsterItemCollide.$item.rows =\n      gridsterItem.$item.y - gridsterItemCollide.$item.y;\n    if (\n      !this.gridster.checkCollisionTwoItems(\n        gridsterItemCollide.$item,\n        gridsterItem.$item\n      ) &&\n      !this.gridster.checkGridCollision(gridsterItemCollide.$item)\n    ) {\n      gridsterItemCollide.setSize();\n      this.addToPushed(gridsterItemCollide);\n      this.push(gridsterItem, direction);\n      return true;\n    } else {\n      gridsterItemCollide.$item.rows = backUpRows;\n    }\n    return false;\n  }\n\n  private tryEast(\n    gridsterItemCollide: GridsterItemComponentInterface,\n    gridsterItem: GridsterItemComponentInterface,\n    direction: string\n  ): boolean {\n    const backUpX = gridsterItemCollide.$item.x;\n    const backUpCols = gridsterItemCollide.$item.cols;\n    gridsterItemCollide.$item.x =\n      gridsterItem.$item.x + gridsterItem.$item.cols;\n    gridsterItemCollide.$item.cols =\n      backUpCols + backUpX - gridsterItemCollide.$item.x;\n    if (\n      !this.gridster.checkCollisionTwoItems(\n        gridsterItemCollide.$item,\n        gridsterItem.$item\n      ) &&\n      !this.gridster.checkGridCollision(gridsterItemCollide.$item)\n    ) {\n      gridsterItemCollide.setSize();\n      this.addToPushed(gridsterItemCollide);\n      this.push(gridsterItem, direction);\n      return true;\n    } else {\n      gridsterItemCollide.$item.x = backUpX;\n      gridsterItemCollide.$item.cols = backUpCols;\n    }\n    return false;\n  }\n\n  private tryWest(\n    gridsterItemCollide: GridsterItemComponentInterface,\n    gridsterItem: GridsterItemComponentInterface,\n    direction: string\n  ): boolean {\n    const backUpCols = gridsterItemCollide.$item.cols;\n    gridsterItemCollide.$item.cols =\n      gridsterItem.$item.x - gridsterItemCollide.$item.x;\n    if (\n      !this.gridster.checkCollisionTwoItems(\n        gridsterItemCollide.$item,\n        gridsterItem.$item\n      ) &&\n      !this.gridster.checkGridCollision(gridsterItemCollide.$item)\n    ) {\n      gridsterItemCollide.setSize();\n      this.addToPushed(gridsterItemCollide);\n      this.push(gridsterItem, direction);\n      return true;\n    } else {\n      gridsterItemCollide.$item.cols = backUpCols;\n    }\n    return false;\n  }\n\n  private addToPushed(gridsterItem: GridsterItemComponentInterface): void {\n    if (this.pushedItems.indexOf(gridsterItem) < 0) {\n      this.pushedItems.push(gridsterItem);\n      this.pushedItemsPath.push([\n        {\n          x: gridsterItem.item.x || 0,\n          y: gridsterItem.item.y || 0,\n          cols: gridsterItem.item.cols || 0,\n          rows: gridsterItem.item.rows || 0\n        },\n        {\n          x: gridsterItem.$item.x,\n          y: gridsterItem.$item.y,\n          cols: gridsterItem.$item.cols,\n          rows: gridsterItem.$item.rows\n        }\n      ]);\n    } else {\n      const i = this.pushedItems.indexOf(gridsterItem);\n      this.pushedItemsPath[i].push({\n        x: gridsterItem.$item.x,\n        y: gridsterItem.$item.y,\n        cols: gridsterItem.$item.cols,\n        rows: gridsterItem.$item.rows\n      });\n    }\n  }\n\n  private removeFromPushed(i: number): void {\n    if (i > -1) {\n      this.pushedItems.splice(i, 1);\n      this.pushedItemsPath.splice(i, 1);\n    }\n  }\n\n  private checkPushedItem(\n    pushedItem: GridsterItemComponentInterface,\n    i: number\n  ): boolean {\n    const path = this.pushedItemsPath[i];\n    let j = path.length - 2;\n    let lastPosition: { x: number; y: number; cols: number; rows: number };\n    let x;\n    let y;\n    let cols;\n    let rows;\n    for (; j > -1; j--) {\n      lastPosition = path[j];\n      x = pushedItem.$item.x;\n      y = pushedItem.$item.y;\n      cols = pushedItem.$item.cols;\n      rows = pushedItem.$item.rows;\n      pushedItem.$item.x = lastPosition.x;\n      pushedItem.$item.y = lastPosition.y;\n      pushedItem.$item.cols = lastPosition.cols;\n      pushedItem.$item.rows = lastPosition.rows;\n      if (!this.gridster.findItemWithItem(pushedItem.$item)) {\n        pushedItem.setSize();\n        path.splice(j + 1, path.length - 1 - j);\n      } else {\n        pushedItem.$item.x = x;\n        pushedItem.$item.y = y;\n        pushedItem.$item.cols = cols;\n        pushedItem.$item.rows = rows;\n      }\n    }\n    if (path.length < 2) {\n      this.removeFromPushed(i);\n      return true;\n    }\n    return false;\n  }\n}\n","import { NgZone } from '@angular/core';\nimport { GridsterComponentInterface } from './gridster.interface';\nimport { DirTypes } from './gridsterConfig.interface';\nimport { GridsterItemComponentInterface } from './gridsterItem.interface';\nimport { GridsterPush } from './gridsterPush.service';\nimport { GridsterPushResize } from './gridsterPushResize.service';\nimport { GridsterResizeEventType } from './gridsterResizeEventType.interface';\n\nimport { cancelScroll, scroll } from './gridsterScroll.service';\nimport { GridsterUtils } from './gridsterUtils.service';\n\nexport class GridsterResizable {\n  gridsterItem: GridsterItemComponentInterface;\n  gridster: GridsterComponentInterface;\n  lastMouse: {\n    clientX: number;\n    clientY: number;\n  };\n  itemBackup: number[];\n  resizeEventScrollType: GridsterResizeEventType;\n\n  /**\n   * The direction function may reference any of the `GridsterResizable` class methods, that are\n   * responsible for gridster resize when the `dragmove` event is being handled. E.g. it may reference\n   * the `handleNorth` method when the north handle is pressed and moved by a mouse.\n   */\n  private directionFunction:\n    | ((event: Pick<MouseEvent, 'clientX' | 'clientY'>) => void)\n    | null = null;\n\n  resizeEnabled: boolean;\n  resizableHandles: {\n    s: boolean;\n    e: boolean;\n    n: boolean;\n    w: boolean;\n    se: boolean;\n    ne: boolean;\n    sw: boolean;\n    nw: boolean;\n  };\n  mousemove: () => void;\n  mouseup: () => void;\n  mouseleave: () => void;\n  cancelOnBlur: () => void;\n  touchmove: () => void;\n  touchend: () => void;\n  touchcancel: () => void;\n  push: GridsterPush;\n  pushResize: GridsterPushResize;\n  minHeight: number;\n  minWidth: number;\n  offsetTop: number;\n  offsetLeft: number;\n  diffTop: number;\n  diffLeft: number;\n  diffRight: number;\n  diffBottom: number;\n  margin: number;\n  outerMarginTop: number | null;\n  outerMarginRight: number | null;\n  outerMarginBottom: number | null;\n  outerMarginLeft: number | null;\n  originalClientX: number;\n  originalClientY: number;\n  top: number;\n  left: number;\n  bottom: number;\n  right: number;\n  width: number;\n  height: number;\n  newPosition: number;\n\n  constructor(\n    gridsterItem: GridsterItemComponentInterface,\n    gridster: GridsterComponentInterface,\n    private zone: NgZone\n  ) {\n    this.gridsterItem = gridsterItem;\n    this.gridster = gridster;\n    this.lastMouse = {\n      clientX: 0,\n      clientY: 0\n    };\n    this.itemBackup = [0, 0, 0, 0];\n    this.resizeEventScrollType = {\n      west: false,\n      east: false,\n      north: false,\n      south: false\n    };\n  }\n\n  destroy(): void {\n    this.gridster?.previewStyle();\n    this.gridster = this.gridsterItem = null!;\n  }\n\n  dragStart(e: MouseEvent): void {\n    if (e.which && e.which !== 1) {\n      return;\n    }\n    if (\n      this.gridster.options.resizable &&\n      this.gridster.options.resizable.start\n    ) {\n      this.gridster.options.resizable.start(\n        this.gridsterItem.item,\n        this.gridsterItem,\n        e\n      );\n    }\n    e.stopPropagation();\n    e.preventDefault();\n\n    this.zone.runOutsideAngular(() => {\n      this.mousemove = this.gridsterItem.renderer.listen(\n        'document',\n        'mousemove',\n        this.dragMove\n      );\n      this.touchmove = this.gridster.renderer.listen(\n        this.gridster.el,\n        'touchmove',\n        this.dragMove\n      );\n    });\n    this.mouseup = this.gridsterItem.renderer.listen(\n      'document',\n      'mouseup',\n      this.dragStop\n    );\n    this.mouseleave = this.gridsterItem.renderer.listen(\n      'document',\n      'mouseleave',\n      this.dragStop\n    );\n    this.cancelOnBlur = this.gridsterItem.renderer.listen(\n      'window',\n      'blur',\n      this.dragStop\n    );\n    this.touchend = this.gridsterItem.renderer.listen(\n      'document',\n      'touchend',\n      this.dragStop\n    );\n    this.touchcancel = this.gridsterItem.renderer.listen(\n      'document',\n      'touchcancel',\n      this.dragStop\n    );\n\n    this.gridsterItem.renderer.addClass(\n      this.gridsterItem.el,\n      'gridster-item-resizing'\n    );\n    this.lastMouse.clientX = e.clientX;\n    this.lastMouse.clientY = e.clientY;\n    this.left = this.gridsterItem.left;\n    this.top = this.gridsterItem.top;\n    this.originalClientX = e.clientX;\n    this.originalClientY = e.clientY;\n    this.width = this.gridsterItem.width;\n    this.height = this.gridsterItem.height;\n    this.bottom = this.gridsterItem.top + this.gridsterItem.height;\n    this.right = this.gridsterItem.left + this.gridsterItem.width;\n    this.margin = this.gridster.$options.margin;\n    this.outerMarginTop = this.gridster.$options.outerMarginTop;\n    this.outerMarginRight = this.gridster.$options.outerMarginRight;\n    this.outerMarginBottom = this.gridster.$options.outerMarginBottom;\n    this.outerMarginLeft = this.gridster.$options.outerMarginLeft;\n    this.offsetLeft = this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;\n    this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;\n    this.diffLeft = e.clientX + this.offsetLeft - this.left;\n    this.diffRight = e.clientX + this.offsetLeft - this.right;\n    this.diffTop = e.clientY + this.offsetTop - this.top;\n    this.diffBottom = e.clientY + this.offsetTop - this.bottom;\n    this.minHeight =\n      this.gridster.positionYToPixels(\n        this.gridsterItem.$item.minItemRows ||\n          this.gridster.$options.minItemRows\n      ) - this.margin;\n    this.minWidth =\n      this.gridster.positionXToPixels(\n        this.gridsterItem.$item.minItemCols ||\n          this.gridster.$options.minItemCols\n      ) - this.margin;\n    this.gridster.movingItem = this.gridsterItem.$item;\n    this.gridster.previewStyle();\n    this.push = new GridsterPush(this.gridsterItem);\n    this.pushResize = new GridsterPushResize(this.gridsterItem);\n    this.gridster.dragInProgress = true;\n    this.gridster.updateGrid();\n\n    const { classList } = e.target as HTMLElement;\n\n    if (classList.contains('handle-n')) {\n      this.resizeEventScrollType.north = true;\n      this.directionFunction = this.handleNorth;\n    } else if (classList.contains('handle-w')) {\n      if (this.gridster.$options.dirType === DirTypes.RTL) {\n        this.resizeEventScrollType.east = true;\n        this.directionFunction = this.handleEast;\n      } else {\n        this.resizeEventScrollType.west = true;\n        this.directionFunction = this.handleWest;\n      }\n    } else if (classList.contains('handle-s')) {\n      this.resizeEventScrollType.south = true;\n      this.directionFunction = this.handleSouth;\n    } else if (classList.contains('handle-e')) {\n      if (this.gridster.$options.dirType === DirTypes.RTL) {\n        this.resizeEventScrollType.west = true;\n        this.directionFunction = this.handleWest;\n      } else {\n        this.resizeEventScrollType.east = true;\n        this.directionFunction = this.handleEast;\n      }\n    } else if (classList.contains('handle-nw')) {\n      if (this.gridster.$options.dirType === DirTypes.RTL) {\n        this.resizeEventScrollType.north = true;\n        this.resizeEventScrollType.east = true;\n        this.directionFunction = this.handleNorthEast;\n      } else {\n        this.resizeEventScrollType.north = true;\n        this.resizeEventScrollType.west = true;\n        this.directionFunction = this.handleNorthWest;\n      }\n    } else if (classList.contains('handle-ne')) {\n      if (this.gridster.$options.dirType === DirTypes.RTL) {\n        this.resizeEventScrollType.north = true;\n        this.resizeEventScrollType.west = true;\n        this.directionFunction = this.handleNorthWest;\n      } else {\n        this.resizeEventScrollType.north = true;\n        this.resizeEventScrollType.east = true;\n        this.directionFunction = this.handleNorthEast;\n      }\n    } else if (classList.contains('handle-sw')) {\n      if (this.gridster.$options.dirType === DirTypes.RTL) {\n        this.resizeEventScrollType.south = true;\n        this.resizeEventScrollType.east = true;\n        this.directionFunction = this.handleSouthEast;\n      } else {\n        this.resizeEventScrollType.south = true;\n        this.resizeEventScrollType.west = true;\n        this.directionFunction = this.handleSouthWest;\n      }\n    } else if (classList.contains('handle-se')) {\n      if (this.gridster.$options.dirType === DirTypes.RTL) {\n        this.resizeEventScrollType.south = true;\n        this.resizeEventScrollType.west = true;\n        this.directionFunction = this.handleSouthWest;\n      } else {\n        this.resizeEventScrollType.south = true;\n        this.resizeEventScrollType.east = true;\n        this.directionFunction = this.handleSouthEast;\n      }\n    }\n  }\n\n  dragMove = (e: MouseEvent): void => {\n    if (this.directionFunction === null) {\n      throw new Error(\n        'The `directionFunction` has not been set before calling `dragMove`.'\n      );\n    }\n\n    e.stopPropagation();\n    e.preventDefault();\n    GridsterUtils.checkTouchEvent(e);\n    this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;\n    this.offsetLeft = this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;\n    scroll(\n      this.gridster,\n      this.left,\n      this.top,\n      this.width,\n      this.height,\n      e,\n      this.lastMouse,\n      this.directionFunction,\n      true,\n      this.resizeEventScrollType\n    );\n\n    const scale = this.gridster.options.scale || 1;\n    this.directionFunction({\n      clientX:\n        this.originalClientX + (e.clientX - this.originalClientX) / scale,\n      clientY: this.originalClientY + (e.clientY - this.originalClientY) / scale\n    });\n\n    this.lastMouse.clientX = e.clientX;\n    this.lastMouse.clientY = e.clientY;\n    this.zone.run(() => {\n      this.gridster.updateGrid();\n    });\n  };\n\n  dragStop = (e: MouseEvent): void => {\n    e.stopPropagation();\n    e.preventDefault();\n    cancelScroll();\n    this.mousemove();\n    this.mouseup();\n    this.mouseleave();\n    this.cancelOnBlur();\n    this.touchmove();\n    this.touchend();\n    this.touchcancel();\n    this.gridster.dragInProgress = false;\n    this.gridster.updateGrid();\n    if (\n      this.gridster.options.resizable &&\n      this.gridster.options.resizable.stop\n    ) {\n      Promise.resolve(\n        this.gridster.options.resizable.stop(\n          this.gridsterItem.item,\n          this.gridsterItem,\n          e\n        )\n      ).then(this.makeResize, this.cancelResize);\n    } else {\n      this.makeResize();\n    }\n    setTimeout(() => {\n      this.gridsterItem.renderer.removeClass(\n        this.gridsterItem.el,\n        'gridster-item-resizing'\n      );\n      if (this.gridster) {\n        this.gridster.movingItem = null;\n        this.gridster.previewStyle();\n      }\n    });\n  };\n\n  cancelResize = (): void => {\n    this.gridsterItem.$item.cols = this.gridsterItem.item.cols || 1;\n    this.gridsterItem.$item.rows = this.gridsterItem.item.rows || 1;\n    this.gridsterItem.$item.x = this.gridsterItem.item.x || 0;\n    this.gridsterItem.$item.y = this.gridsterItem.item.y || 0;\n    this.gridsterItem.setSize();\n    this.push.restoreItems();\n    this.pushResize.restoreItems();\n    this.push.destroy();\n    this.push = null!;\n    this.pushResize.destroy();\n    this.pushResize = null!;\n  };\n\n  makeResize = (): void => {\n    this.gridsterItem.setSize();\n    this.gridsterItem.checkItemChanges(\n      this.gridsterItem.$item,\n      this.gridsterItem.item\n    );\n    this.push.setPushedItems();\n    this.pushResize.setPushedItems();\n    this.push.destroy();\n    this.push = null!;\n    this.pushResize.destroy();\n    this.pushResize = null!;\n  };\n\n  private handleNorth = (e: MouseEvent): void => {\n    this.top = e.clientY + this.offsetTop - this.diffTop;\n    this.height = this.bottom - this.top;\n    if (this.minHeight > this.height) {\n      this.height = this.minHeight;\n      this.top = this.bottom - this.minHeight;\n    } else if (this.gridster.options.enableBoundaryControl) {\n      this.top = Math.max(0, this.top);\n      this.height = this.bottom - this.top;\n    }\n    const marginTop = this.gridster.options.pushItems ? this.margin : 0;\n    this.newPosition = this.gridster.pixelsToPositionY(\n      this.top + marginTop,\n      Math.floor\n    );\n    if (this.gridsterItem.$item.y !== this.newPosition) {\n      this.itemBackup[1] = this.gridsterItem.$item.y;\n      this.itemBackup[3] = this.gridsterItem.$item.rows;\n      this.gridsterItem.$item.rows +=\n        this.gridsterItem.$item.y - this.newPosition;\n      this.gridsterItem.$item.y = this.newPosition;\n      this.pushResize.pushItems(this.pushResize.fromSouth);\n      this.push.pushItems(\n        this.push.fromSouth,\n        this.gridster.$options.disablePushOnResize\n      );\n      if (this.gridster.checkCollision(this.gridsterItem.$item)) {\n        this.gridsterItem.$item.y = this.itemBackup[1];\n        this.gridsterItem.$item.rows = this.itemBackup[3];\n        this.top = this.gridster.positionYToPixels(this.gridsterItem.$item.y);\n        this.setItemTop(\n          this.gridster.positionYToPixels(this.gridsterItem.$item.y)\n        );\n        this.setItemHeight(\n          this.gridster.positionYToPixels(this.gridsterItem.$item.rows) -\n            this.margin\n        );\n        return;\n      } else {\n        this.gridster.previewStyle();\n      }\n      this.pushResize.checkPushBack();\n      this.push.checkPushBack();\n    }\n    this.setItemTop(this.top);\n    this.setItemHeight(this.height);\n  };\n\n  private handleWest = (e: MouseEvent): void => {\n    const clientX =\n      this.gridster.$options.dirType === DirTypes.RTL\n        ? this.originalClientX + (this.originalClientX - e.clientX)\n        : e.clientX;\n    this.left = clientX + this.offsetLeft - this.diffLeft;\n\n    this.width = this.right - this.left;\n    if (this.minWidth > this.width) {\n      this.width = this.minWidth;\n      this.left = this.right - this.minWidth;\n    } else if (this.gridster.options.enableBoundaryControl) {\n      this.left = Math.max(0, this.left);\n      this.width = this.right - this.left;\n    }\n    const marginLeft = this.gridster.options.pushItems ? this.margin : 0;\n    this.newPosition = this.gridster.pixelsToPositionX(\n      this.left + marginLeft,\n      Math.floor\n    );\n    if (this.gridsterItem.$item.x !== this.newPosition) {\n      this.itemBackup[0] = this.gridsterItem.$item.x;\n      this.itemBackup[2] = this.gridsterItem.$item.cols;\n      this.gridsterItem.$item.cols +=\n        this.gridsterItem.$item.x - this.newPosition;\n      this.gridsterItem.$item.x = this.newPosition;\n      this.pushResize.pushItems(this.pushResize.fromEast);\n      this.push.pushItems(\n        this.push.fromEast,\n        this.gridster.$options.disablePushOnResize\n      );\n      if (this.gridster.checkCollision(this.gridsterItem.$item)) {\n        this.gridsterItem.$item.x = this.itemBackup[0];\n        this.gridsterItem.$item.cols = this.itemBackup[2];\n        this.left = this.gridster.positionXToPixels(this.gridsterItem.$item.x);\n        this.setItemLeft(\n          this.gridster.positionXToPixels(this.gridsterItem.$item.x)\n        );\n        this.setItemWidth(\n          this.gridster.positionXToPixels(this.gridsterItem.$item.cols) -\n            this.margin\n        );\n        return;\n      } else {\n        this.gridster.previewStyle();\n      }\n      this.pushResize.checkPushBack();\n      this.push.checkPushBack();\n    }\n    this.setItemLeft(this.left);\n    this.setItemWidth(this.width);\n  };\n\n  private handleSouth = (e: MouseEvent): void => {\n    this.height = e.clientY + this.offsetTop - this.diffBottom - this.top;\n    if (this.minHeight > this.height) {\n      this.height = this.minHeight;\n    }\n    this.bottom = this.top + this.height;\n    if (this.gridster.options.enableBoundaryControl) {\n      const margin = this.outerMarginBottom ?? this.margin;\n      const box = this.gridster.el.getBoundingClientRect();\n      this.bottom = Math.min(\n        this.bottom,\n        box.bottom - box.top - 2 * margin\n      );\n      this.height = this.bottom - this.top;\n    }\n    const marginBottom = this.gridster.options.pushItems ? 0 : this.margin;\n    this.newPosition = this.gridster.pixelsToPositionY(\n      this.bottom + marginBottom,\n      Math.ceil\n    );\n    if (\n      this.gridsterItem.$item.y + this.gridsterItem.$item.rows !==\n      this.newPosition\n    ) {\n      this.itemBackup[3] = this.gridsterItem.$item.rows;\n      this.gridsterItem.$item.rows =\n        this.newPosition - this.gridsterItem.$item.y;\n      this.pushResize.pushItems(this.pushResize.fromNorth);\n      this.push.pushItems(\n        this.push.fromNorth,\n        this.gridster.$options.disablePushOnResize\n      );\n      if (this.gridster.checkCollision(this.gridsterItem.$item)) {\n        this.gridsterItem.$item.rows = this.itemBackup[3];\n        this.setItemHeight(\n          this.gridster.positionYToPixels(this.gridsterItem.$item.rows) -\n            this.margin\n        );\n        return;\n      } else {\n        this.gridster.previewStyle();\n      }\n      this.pushResize.checkPushBack();\n      this.push.checkPushBack();\n    }\n    this.setItemHeight(this.height);\n  };\n\n  private handleEast = (e: MouseEvent): void => {\n    const clientX =\n      this.gridster.$options.dirType === DirTypes.RTL\n        ? this.originalClientX + (this.originalClientX - e.clientX)\n        : e.clientX;\n    this.width = clientX + this.offsetLeft - this.diffRight - this.left;\n\n    if (this.minWidth > this.width) {\n      this.width = this.minWidth;\n    }\n    this.right = this.left + this.width;\n    if (this.gridster.options.enableBoundaryControl) {\n      const margin = this.outerMarginRight ?? this.margin;\n      const box = this.gridster.el.getBoundingClientRect();\n      this.right = Math.min(this.right, box.right - box.left - 2 * margin);\n      this.width = this.right - this.left;\n    }\n    const marginRight = this.gridster.options.pushItems ? 0 : this.margin;\n    this.newPosition = this.gridster.pixelsToPositionX(\n      this.right + marginRight,\n      Math.ceil\n    );\n    if (\n      this.gridsterItem.$item.x + this.gridsterItem.$item.cols !==\n      this.newPosition\n    ) {\n      this.itemBackup[2] = this.gridsterItem.$item.cols;\n      this.gridsterItem.$item.cols =\n        this.newPosition - this.gridsterItem.$item.x;\n      this.pushResize.pushItems(this.pushResize.fromWest);\n      this.push.pushItems(\n        this.push.fromWest,\n        this.gridster.$options.disablePushOnResize\n      );\n      if (this.gridster.checkCollision(this.gridsterItem.$item)) {\n        this.gridsterItem.$item.cols = this.itemBackup[2];\n        this.setItemWidth(\n          this.gridster.positionXToPixels(this.gridsterItem.$item.cols) -\n            this.margin\n        );\n        return;\n      } else {\n        this.gridster.previewStyle();\n      }\n      this.pushResize.checkPushBack();\n      this.push.checkPushBack();\n    }\n    this.setItemWidth(this.width);\n  };\n\n  private handleNorthWest = (e: MouseEvent): void => {\n    this.handleNorth(e);\n    this.handleWest(e);\n  };\n\n  private handleNorthEast = (e: MouseEvent): void => {\n    this.handleNorth(e);\n    this.handleEast(e);\n  };\n\n  private handleSouthWest = (e: MouseEvent): void => {\n    this.handleSouth(e);\n    this.handleWest(e);\n  };\n\n  private handleSouthEast = (e: MouseEvent): void => {\n    this.handleSouth(e);\n    this.handleEast(e);\n  };\n\n  toggle(): void {\n    this.resizeEnabled = this.gridsterItem.canBeResized();\n    this.resizableHandles = this.gridsterItem.getResizableHandles();\n  }\n\n  dragStartDelay(e: MouseEvent | TouchEvent): void {\n    GridsterUtils.checkTouchEvent(e);\n\n    if (!this.gridster.$options.resizable.delayStart) {\n      this.dragStart(e as MouseEvent);\n      return;\n    }\n\n    const timeout = setTimeout(() => {\n      this.dragStart(e as MouseEvent);\n      cancelDrag();\n    }, this.gridster.$options.resizable.delayStart);\n\n    const {\n      cancelMouse,\n      cancelMouseLeave,\n      cancelOnBlur,\n      cancelTouchMove,\n      cancelTouchEnd,\n      cancelTouchCancel\n    } = this.zone.runOutsideAngular(() => {\n      // Note: all of these events are being added within the `<root>` zone since they all\n      // don't do any view updates and don't require Angular running change detection.\n      // All event listeners call `cancelDrag` once the event is dispatched, the `cancelDrag`\n      // is responsible only for removing event listeners.\n\n      const cancelMouse = this.gridsterItem.renderer.listen(\n        'document',\n        'mouseup',\n        cancelDrag\n      );\n      const cancelMouseLeave = this.gridsterItem.renderer.listen(\n        'document',\n        'mouseleave',\n        cancelDrag\n      );\n      const cancelOnBlur = this.gridsterItem.renderer.listen(\n        'window',\n        'blur',\n        cancelDrag\n      );\n      const cancelTouchMove = this.gridsterItem.renderer.listen(\n        'document',\n        'touchmove',\n        cancelMove\n      );\n      const cancelTouchEnd = this.gridsterItem.renderer.listen(\n        'document',\n        'touchend',\n        cancelDrag\n      );\n      const cancelTouchCancel = this.gridsterItem.renderer.listen(\n        'document',\n        'touchcancel',\n        cancelDrag\n      );\n      return {\n        cancelMouse,\n        cancelMouseLeave,\n        cancelOnBlur,\n        cancelTouchMove,\n        cancelTouchEnd,\n        cancelTouchCancel\n      };\n    });\n\n    function cancelMove(eventMove: MouseEvent): void {\n      GridsterUtils.checkTouchEvent(eventMove);\n      if (\n        Math.abs(eventMove.clientX - (e as MouseEvent).clientX) > 9 ||\n        Math.abs(eventMove.clientY - (e as MouseEvent).clientY) > 9\n      ) {\n        cancelDrag();\n      }\n    }\n\n    function cancelDrag(): void {\n      clearTimeout(timeout);\n      cancelOnBlur();\n      cancelMouse();\n      cancelMouseLeave();\n      cancelTouchMove();\n      cancelTouchEnd();\n      cancelTouchCancel();\n    }\n  }\n\n  setItemTop(top: number): void {\n    this.gridster.gridRenderer.setCellPosition(\n      this.gridsterItem.renderer,\n      this.gridsterItem.el,\n      this.left,\n      top\n    );\n  }\n\n  setItemLeft(left: number): void {\n    this.gridster.gridRenderer.setCellPosition(\n      this.gridsterItem.renderer,\n      this.gridsterItem.el,\n      left,\n      this.top\n    );\n  }\n\n  setItemHeight(height: number): void {\n    this.gridsterItem.renderer.setStyle(\n      this.gridsterItem.el,\n      'height',\n      height + 'px'\n    );\n  }\n\n  setItemWidth(width: number): void {\n    this.gridsterItem.renderer.setStyle(\n      this.gridsterItem.el,\n      'width',\n      width + 'px'\n    );\n  }\n}\n","import { NgIf } from '@angular/common';\nimport {\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  Inject,\n  Input,\n  NgZone,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  Renderer2,\n  SimpleChanges,\n  ViewEncapsulation\n} from '@angular/core';\nimport { GridsterComponent } from './gridster.component';\n\nimport { GridsterDraggable } from './gridsterDraggable.service';\nimport {\n  GridsterItem,\n  GridsterItemComponentInterface\n} from './gridsterItem.interface';\nimport { GridsterResizable } from './gridsterResizable.service';\nimport { GridsterUtils } from './gridsterUtils.service';\n\n@Component({\n  selector: 'gridster-item',\n  templateUrl: './gridsterItem.html',\n  styleUrls: ['./gridsterItem.css'],\n  encapsulation: ViewEncapsulation.None,\n  standalone: true,\n  imports: [NgIf]\n})\nexport class GridsterItemComponent\n  implements OnInit, OnDestroy, OnChanges, GridsterItemComponentInterface\n{\n  @Input() item: GridsterItem;\n  @Output() itemInit = new EventEmitter<{\n    item: GridsterItem;\n    itemComponent: GridsterItemComponentInterface;\n  }>();\n  @Output() itemChange = new EventEmitter<{\n    item: GridsterItem;\n    itemComponent: GridsterItemComponentInterface;\n  }>();\n  @Output() itemResize = new EventEmitter<{\n    item: GridsterItem;\n    itemComponent: GridsterItemComponentInterface;\n  }>();\n  $item: GridsterItem;\n  el: HTMLElement;\n  gridster: GridsterComponent;\n  top: number;\n  left: number;\n  width: number;\n  height: number;\n  drag: GridsterDraggable;\n  resize: GridsterResizable;\n  notPlaced: boolean;\n  init: boolean;\n\n  @HostBinding('style.z-index')\n  get zIndex(): number {\n    return this.getLayerIndex() + this.gridster.$options.baseLayerIndex;\n  }\n\n  constructor(\n    @Inject(ElementRef) el: ElementRef,\n    gridster: GridsterComponent,\n    @Inject(Renderer2) public renderer: Renderer2,\n    @Inject(NgZone) private zone: NgZone\n  ) {\n    this.el = el.nativeElement;\n    this.$item = {\n      cols: -1,\n      rows: -1,\n      x: -1,\n      y: -1\n    };\n    this.gridster = gridster;\n    this.drag = new GridsterDraggable(this, gridster, this.zone);\n    this.resize = new GridsterResizable(this, gridster, this.zone);\n  }\n\n  ngOnInit(): void {\n    this.gridster.addItem(this);\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.item) {\n      this.updateOptions();\n\n      if (!this.init) {\n        this.gridster.calculateLayout$.next();\n      }\n    }\n    if (changes.item && changes.item.previousValue) {\n      this.setSize();\n    }\n  }\n\n  updateOptions(): void {\n    this.$item = GridsterUtils.merge(this.$item, this.item, {\n      cols: undefined,\n      rows: undefined,\n      x: undefined,\n      y: undefined,\n      layerIndex: undefined,\n      dragEnabled: undefined,\n      resizeEnabled: undefined,\n      compactEnabled: undefined,\n      maxItemRows: undefined,\n      minItemRows: undefined,\n      maxItemCols: undefined,\n      minItemCols: undefined,\n      maxItemArea: undefined,\n      minItemArea: undefined,\n      resizableHandles: {\n        s: undefined,\n        e: undefined,\n        n: undefined,\n        w: undefined,\n        se: undefined,\n        ne: undefined,\n        sw: undefined,\n        nw: undefined\n      }\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.gridster.removeItem(this);\n    this.drag.destroy();\n    this.resize.destroy();\n    this.gridster = this.drag = this.resize = null!;\n  }\n\n  setSize(): void {\n    this.renderer.setStyle(this.el, 'display', this.notPlaced ? '' : 'block');\n    this.gridster.gridRenderer.updateItem(this.el, this.$item, this.renderer);\n    this.updateItemSize();\n  }\n\n  updateItemSize(): void {\n    const top = this.$item.y * this.gridster.curRowHeight;\n    const left = this.$item.x * this.gridster.curColWidth;\n    const width =\n      this.$item.cols * this.gridster.curColWidth -\n      this.gridster.$options.margin;\n    const height =\n      this.$item.rows * this.gridster.curRowHeight -\n      this.gridster.$options.margin;\n\n    this.top = top;\n    this.left = left;\n\n    if (!this.init && width > 0 && height > 0) {\n      this.init = true;\n      if (this.item.initCallback) {\n        this.item.initCallback(this.item, this);\n      }\n      if (this.gridster.options.itemInitCallback) {\n        this.gridster.options.itemInitCallback(this.item, this);\n      }\n      this.itemInit.next({ item: this.item, itemComponent: this });\n      if (this.gridster.$options.scrollToNewItems) {\n        this.el.scrollIntoView(false);\n      }\n    }\n    if (width !== this.width || height !== this.height) {\n      this.width = width;\n      this.height = height;\n      if (this.gridster.options.itemResizeCallback) {\n        this.gridster.options.itemResizeCallback(this.item, this);\n      }\n      this.itemResize.next({ item: this.item, itemComponent: this });\n    }\n  }\n\n  itemChanged(): void {\n    if (this.gridster.options.itemChangeCallback) {\n      this.gridster.options.itemChangeCallback(this.item, this);\n    }\n    this.itemChange.next({ item: this.item, itemComponent: this });\n  }\n\n  checkItemChanges(newValue: GridsterItem, oldValue: GridsterItem): void {\n    if (\n      newValue.rows === oldValue.rows &&\n      newValue.cols === oldValue.cols &&\n      newValue.x === oldValue.x &&\n      newValue.y === oldValue.y\n    ) {\n      return;\n    }\n    if (this.gridster.checkCollision(this.$item)) {\n      this.$item.x = oldValue.x || 0;\n      this.$item.y = oldValue.y || 0;\n      this.$item.cols = oldValue.cols || 1;\n      this.$item.rows = oldValue.rows || 1;\n      this.setSize();\n    } else {\n      this.item.cols = this.$item.cols;\n      this.item.rows = this.$item.rows;\n      this.item.x = this.$item.x;\n      this.item.y = this.$item.y;\n      this.gridster.calculateLayout$.next();\n      this.itemChanged();\n    }\n  }\n\n  canBeDragged(): boolean {\n    const gridDragEnabled = this.gridster.$options.draggable.enabled;\n    const itemDragEnabled =\n      this.$item.dragEnabled === undefined\n        ? gridDragEnabled\n        : this.$item.dragEnabled;\n    return !this.gridster.mobile && gridDragEnabled && itemDragEnabled;\n  }\n\n  canBeResized(): boolean {\n    const gridResizable = this.gridster.$options.resizable.enabled;\n    const itemResizable =\n      this.$item.resizeEnabled === undefined\n        ? gridResizable\n        : this.$item.resizeEnabled;\n    return !this.gridster.mobile && gridResizable && itemResizable;\n  }\n\n  getResizableHandles() {\n    const gridResizableHandles = this.gridster.$options.resizable.handles;\n    const itemResizableHandles = this.$item.resizableHandles;\n    // use grid settings if no settings are provided for the item.\n    if (itemResizableHandles === undefined) {\n      return gridResizableHandles;\n    }\n    // else merge the settings\n    return {\n      ...gridResizableHandles,\n      ...itemResizableHandles\n    };\n  }\n\n  bringToFront(offset: number): void {\n    if (offset && offset <= 0) {\n      return;\n    }\n    const layerIndex = this.getLayerIndex();\n    const topIndex = this.gridster.$options.maxLayerIndex;\n    if (layerIndex < topIndex) {\n      const targetIndex = offset ? layerIndex + offset : topIndex;\n      this.item.layerIndex = this.$item.layerIndex =\n        targetIndex > topIndex ? topIndex : targetIndex;\n    }\n  }\n\n  sendToBack(offset: number): void {\n    if (offset && offset <= 0) {\n      return;\n    }\n    const layerIndex = this.getLayerIndex();\n    if (layerIndex > 0) {\n      const targetIndex = offset ? layerIndex - offset : 0;\n      this.item.layerIndex = this.$item.layerIndex =\n        targetIndex < 0 ? 0 : targetIndex;\n    }\n  }\n\n  private getLayerIndex(): number {\n    if (this.item.layerIndex !== undefined) {\n      return this.item.layerIndex;\n    }\n    if (this.gridster.$options.defaultLayerIndex !== undefined) {\n      return this.gridster.$options.defaultLayerIndex;\n    }\n    return 0;\n  }\n}\n","<ng-content></ng-content>\n<div\n  (mousedown)=\"resize.dragStartDelay($event)\"\n  (touchstart)=\"resize.dragStartDelay($event)\"\n  *ngIf=\"resize.resizableHandles?.s && resize.resizeEnabled\"\n  class=\"gridster-item-resizable-handler handle-s\"\n></div>\n<div\n  (mousedown)=\"resize.dragStartDelay($event)\"\n  (touchstart)=\"resize.dragStartDelay($event)\"\n  *ngIf=\"resize.resizableHandles?.e && resize.resizeEnabled\"\n  class=\"gridster-item-resizable-handler handle-e\"\n></div>\n<div\n  (mousedown)=\"resize.dragStartDelay($event)\"\n  (touchstart)=\"resize.dragStartDelay($event)\"\n  *ngIf=\"resize.resizableHandles?.n && resize.resizeEnabled\"\n  class=\"gridster-item-resizable-handler handle-n\"\n></div>\n<div\n  (mousedown)=\"resize.dragStartDelay($event)\"\n  (touchstart)=\"resize.dragStartDelay($event)\"\n  *ngIf=\"resize.resizableHandles?.w && resize.resizeEnabled\"\n  class=\"gridster-item-resizable-handler handle-w\"\n></div>\n<div\n  (mousedown)=\"resize.dragStartDelay($event)\"\n  (touchstart)=\"resize.dragStartDelay($event)\"\n  *ngIf=\"resize.resizableHandles?.se && resize.resizeEnabled\"\n  class=\"gridster-item-resizable-handler handle-se\"\n></div>\n<div\n  (mousedown)=\"resize.dragStartDelay($event)\"\n  (touchstart)=\"resize.dragStartDelay($event)\"\n  *ngIf=\"resize.resizableHandles?.ne && resize.resizeEnabled\"\n  class=\"gridster-item-resizable-handler handle-ne\"\n></div>\n<div\n  (mousedown)=\"resize.dragStartDelay($event)\"\n  (touchstart)=\"resize.dragStartDelay($event)\"\n  *ngIf=\"resize.resizableHandles?.sw && resize.resizeEnabled\"\n  class=\"gridster-item-resizable-handler handle-sw\"\n></div>\n<div\n  (mousedown)=\"resize.dragStartDelay($event)\"\n  (touchstart)=\"resize.dragStartDelay($event)\"\n  *ngIf=\"resize.resizableHandles?.nw && resize.resizeEnabled\"\n  class=\"gridster-item-resizable-handler handle-nw\"\n></div>\n","import { GridsterDraggable } from './gridsterDraggable.service';\nimport { Renderer2 } from '@angular/core';\nimport { GridsterResizable } from './gridsterResizable.service';\nimport { GridsterComponentInterface } from './gridster.interface';\n\nexport abstract class GridsterItemComponentInterface {\n  item: GridsterItem;\n  $item: GridsterItem;\n  top: number;\n  left: number;\n  width: number;\n  height: number;\n  drag: GridsterDraggable;\n  resize: GridsterResizable;\n  notPlaced: boolean;\n  updateOptions: () => void;\n  itemChanged: () => void;\n  setSize: () => void;\n  checkItemChanges: (newValue: GridsterItem, oldValue: GridsterItem) => void;\n  canBeDragged: () => boolean;\n  canBeResized: () => boolean;\n  getResizableHandles: () => {\n    s: boolean;\n    e: boolean;\n    n: boolean;\n    w: boolean;\n    se: boolean;\n    ne: boolean;\n    sw: boolean;\n    nw: boolean;\n  };\n  bringToFront: (offset: number) => void;\n  sendToBack: (v: number) => void;\n  el: HTMLElement;\n  gridster: GridsterComponentInterface;\n  renderer: Renderer2;\n}\n\nexport interface GridsterItem {\n  x: number;\n  y: number;\n  rows: number;\n  cols: number;\n  layerIndex?: number;\n  initCallback?: (\n    item: GridsterItem,\n    itemComponent: GridsterItemComponentInterface\n  ) => void;\n  dragEnabled?: boolean;\n  resizeEnabled?: boolean;\n  resizableHandles?: {\n    s?: boolean;\n    e?: boolean;\n    n?: boolean;\n    w?: boolean;\n    se?: boolean;\n    ne?: boolean;\n    sw?: boolean;\n    nw?: boolean;\n  };\n  compactEnabled?: boolean;\n  maxItemRows?: number;\n  minItemRows?: number;\n  maxItemCols?: number;\n  minItemCols?: number;\n  minItemArea?: number;\n  maxItemArea?: number;\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  [propName: string]: any;\n}\n","import { GridsterConfigS } from './gridsterConfigS.interface';\nimport { ChangeDetectorRef, NgZone, Renderer2 } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { GridsterEmptyCell } from './gridsterEmptyCell.service';\nimport { GridsterCompact } from './gridsterCompact.service';\nimport { GridsterConfig } from './gridsterConfig.interface';\nimport {\n  GridsterItem,\n  GridsterItemComponentInterface\n} from './gridsterItem.interface';\nimport { GridsterRenderer } from './gridsterRenderer.service';\n\nexport abstract class GridsterComponentInterface {\n  $options: GridsterConfigS;\n  grid: GridsterItemComponentInterface[];\n  checkCollision: (\n    item: GridsterItem\n  ) => GridsterItemComponentInterface | boolean;\n  checkCollisionForSwaping: (\n    item: GridsterItem\n  ) => GridsterItemComponentInterface | boolean;\n  positionXToPixels: (x: number) => number;\n  pixelsToPositionX: (\n    x: number,\n    roundingMethod: (x: number) => number,\n    noLimit?: boolean\n  ) => number;\n  positionYToPixels: (y: number) => number;\n  pixelsToPositionY: (\n    y: number,\n    roundingMethod: (x: number) => number,\n    noLimit?: boolean\n  ) => number;\n  findItemWithItem: (\n    item: GridsterItem\n  ) => GridsterItemComponentInterface | boolean;\n  findItemsWithItem: (item: GridsterItem) => GridsterItemComponentInterface[];\n  checkGridCollision: (item: GridsterItem) => boolean;\n  checkCollisionTwoItems: (item: GridsterItem, item2: GridsterItem) => boolean;\n  getItemComponent: (\n    item: GridsterItem\n  ) => GridsterItemComponentInterface | undefined;\n  el: HTMLElement;\n  renderer: Renderer2;\n  gridRenderer: GridsterRenderer;\n  cdRef: ChangeDetectorRef;\n  options: GridsterConfig;\n  calculateLayout$: Subject<void>;\n  updateGrid: () => void;\n  movingItem: GridsterItem | null;\n  addItem: (item: GridsterItemComponentInterface) => void;\n  removeItem: (item: GridsterItemComponentInterface) => void;\n  previewStyle: (drag?: boolean) => void;\n  mobile: boolean;\n  curWidth: number;\n  curHeight: number;\n  columns: number;\n  rows: number;\n  curColWidth: number;\n  curRowHeight: number;\n  windowResize: (() => void) | null;\n  setGridDimensions: () => void;\n  dragInProgress: boolean;\n  emptyCell: GridsterEmptyCell;\n  compact: GridsterCompact;\n  zone: NgZone;\n  gridRows: Array<number>;\n  gridColumns: Array<number>;\n}\n","import { NgModule } from '@angular/core';\n\nimport { GridsterComponent } from './gridster.component';\nimport { GridsterItemComponent } from './gridsterItem.component';\n\n@NgModule({\n  imports: [GridsterComponent, GridsterItemComponent],\n  exports: [GridsterComponent, GridsterItemComponent]\n})\nexport class GridsterModule {}\n","/*\n * Public API Surface of gridster\n */\n\nexport { GridsterComponent } from './lib/gridster.component';\nexport { GridsterItemComponent } from './lib/gridsterItem.component';\nexport {\n  GridsterItemComponentInterface,\n  GridsterItem\n} from './lib/gridsterItem.interface';\nexport { GridsterComponentInterface } from './lib/gridster.interface';\nexport {\n  GridsterConfig,\n  GridType,\n  DisplayGrid,\n  CompactType,\n  Draggable,\n  Resizable,\n  PushDirections,\n  DirTypes\n} from './lib/gridsterConfig.interface';\nexport { GridsterConfigService } from './lib/gridsterConfig.constant';\nexport { GridsterModule } from './lib/gridster.module';\nexport { GridsterPush } from './lib/gridsterPush.service';\nexport { GridsterPushResize } from './lib/gridsterPushResize.service';\nexport { GridsterSwap } from './lib/gridsterSwap.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.GridsterComponent"],"mappings":";;;;;IA6BY,SAOX;AAPD,CAAA,UAAY,QAAQ,EAAA;AAClB,IAAA,QAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,QAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC,CAAA;AACjC,IAAA,QAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC,CAAA;AACrC,IAAA,QAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,QAAA,CAAA,eAAA,CAAA,GAAA,eAA+B,CAAA;AAC/B,IAAA,QAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC,CAAA;AACrC,CAAC,EAPW,QAAQ,KAAR,QAAQ,GAOnB,EAAA,CAAA,CAAA,CAAA;IAEW,YAIX;AAJD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,WAAA,CAAA,iBAAA,CAAA,GAAA,eAAiC,CAAA;AACjC,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACf,CAAC,EAJW,WAAW,KAAX,WAAW,GAItB,EAAA,CAAA,CAAA,CAAA;IAEW,YAcX;AAdD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACvB,IAAA,WAAA,CAAA,aAAA,CAAA,GAAA,aAA2B,CAAA;AAC3B,IAAA,WAAA,CAAA,kBAAA,CAAA,GAAA,gBAAmC,CAAA;AACnC,IAAA,WAAA,CAAA,kBAAA,CAAA,GAAA,gBAAmC,CAAA;AACnC,IAAA,WAAA,CAAA,cAAA,CAAA,GAAA,cAA6B,CAAA;AAC7B,IAAA,WAAA,CAAA,mBAAA,CAAA,GAAA,iBAAqC,CAAA;AACrC,IAAA,WAAA,CAAA,mBAAA,CAAA,GAAA,iBAAqC,CAAA;AACrC,IAAA,WAAA,CAAA,aAAA,CAAA,GAAA,aAA2B,CAAA;AAC3B,IAAA,WAAA,CAAA,oBAAA,CAAA,GAAA,kBAAuC,CAAA;AACvC,IAAA,WAAA,CAAA,oBAAA,CAAA,GAAA,kBAAuC,CAAA;AACvC,IAAA,WAAA,CAAA,qBAAA,CAAA,GAAA,mBAAyC,CAAA;AACzC,IAAA,WAAA,CAAA,qBAAA,CAAA,GAAA,mBAAyC,CAAA;AAC3C,CAAC,EAdW,WAAW,KAAX,WAAW,GActB,EAAA,CAAA,CAAA,CAAA;IAEW,SAGX;AAHD,CAAA,UAAY,QAAQ,EAAA;AAClB,IAAA,QAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,QAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACb,CAAC,EAHW,QAAQ,KAAR,QAAQ,GAGnB,EAAA,CAAA,CAAA;;MCxDY,eAAe,CAAA;AAC1B,IAAA,WAAA,CAAoB,QAAoC,EAAA;QAApC,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAA4B;KAAI;IAE5D,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAK,CAAC;KACvB;IAED,YAAY,GAAA;QACV,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,IAAI,EAAE;YAC3D,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,SAAS,EAAE;gBAChE,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACpC,aAAA;iBAAM,IACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,WAAW,EAC9D;gBACA,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACpC,aAAA;iBAAM,IACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,gBAAgB,EACnE;gBACA,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACpC,aAAA;iBAAM,IACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,gBAAgB,EACnE;gBACA,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACpC,aAAA;iBAAM,IACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,YAAY,EAC/D;AACA,gBAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACnC,aAAA;iBAAM,IACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,iBAAiB,EACpE;gBACA,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACnC,gBAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACnC,aAAA;iBAAM,IACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,iBAAiB,EACpE;AACA,gBAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAClC,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACpC,aAAA;iBAAM,IACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,WAAW,EAC9D;AACA,gBAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACnC,aAAA;iBAAM,IACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,kBAAkB,EACrE;AACA,gBAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAClC,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACpC,aAAA;iBAAM,IACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,mBAAmB,EACtE;AACA,gBAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAClC,gBAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACnC,aAAA;iBAAM,IACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,kBAAkB,EACrE;gBACA,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACnC,gBAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACnC,aAAA;iBAAM,IACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,mBAAmB,EACtE;AACA,gBAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAClC,gBAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACnC,aAAA;AACF,SAAA;KACF;AAED,IAAA,gBAAgB,CAAC,IAAkB,EAAA;QACjC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,IAAI,EAAE;YAC3D,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,SAAS,EAAE;gBAChE,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACvC,aAAA;iBAAM,IACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,WAAW,EAC9D;gBACA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACvC,aAAA;iBAAM,IACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,gBAAgB,EACnE;gBACA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACvC,aAAA;iBAAM,IACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,gBAAgB,EACnE;gBACA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACvC,aAAA;iBAAM,IACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,iBAAiB,EACpE;gBACA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AACtC,aAAA;iBAAM,IACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,WAAW,EAC9D;gBACA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AACtC,aAAA;iBAAM,IACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,kBAAkB,EACrE;gBACA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;gBACrC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACvC,aAAA;iBAAM,IACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,kBAAkB,EACrE;gBACA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AACtC,aAAA;iBAAM,IACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,mBAAmB,EACtE;gBACA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;gBACrC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AACtC,aAAA;iBAAM,IACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW,CAAC,mBAAmB,EACtE;gBACA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;gBACrC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AACtC,aAAA;AACF,SAAA;KACF;IAEO,oBAAoB,CAAC,SAAoB,EAAE,KAAa,EAAA;QAC9D,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAsC,KAAI;AACpE,YAAA,IAAI,MAAM,CAAC,KAAK,CAAC,cAAc,KAAK,KAAK,EAAE;AACzC,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AACrE,gBAAA,IAAI,KAAK,EAAE;oBACT,WAAW,GAAG,IAAI,CAAC;AACnB,oBAAA,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;oBACjD,MAAM,CAAC,WAAW,EAAE,CAAC;AACtB,iBAAA;AACF,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,WAAW,EAAE;YACf,IAAI,CAAC,YAAY,EAAE,CAAC;AACrB,SAAA;KACF;AAEO,IAAA,iBAAiB,CACvB,IAAkB,EAClB,SAAoB,EACpB,KAAa,EAAA;AAEb,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC;QACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;AACtC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC;AACzB,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AAC/C,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;KACF;AACF;;ACpJY,MAAA,qBAAqB,GAAmB;IACnD,QAAQ,EAAE,QAAQ,CAAC,GAAG;AACtB,IAAA,KAAK,EAAE,CAAC;;;;;;AAMR,IAAA,aAAa,EAAE,GAAG;AAClB,IAAA,cAAc,EAAE,GAAG;AACnB,IAAA,uBAAuB,EAAE,KAAK;AAC9B,IAAA,sBAAsB,EAAE,KAAK;AAC7B,IAAA,WAAW,EAAE,KAAK;IAClB,WAAW,EAAE,WAAW,CAAC,IAAI;AAC7B,IAAA,gBAAgB,EAAE,GAAG;AACrB,IAAA,oBAAoB,EAAE,KAAK;AAC3B,IAAA,eAAe,EAAE,KAAK;AACtB,IAAA,iBAAiB,EAAE,CAAC;AACpB,IAAA,aAAa,EAAE,CAAC;AAChB,IAAA,cAAc,EAAE,CAAC;AACjB,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,OAAO,EAAE,GAAG;AACZ,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,OAAO,EAAE,GAAG;AACZ,IAAA,eAAe,EAAE,CAAC;AAClB,IAAA,eAAe,EAAE,CAAC;AAClB,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,iBAAiB,EAAE,CAAC;AACpB,IAAA,cAAc,EAAE,CAAC;AACjB,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,cAAc,EAAE,IAAI;AACpB,IAAA,gBAAgB,EAAE,IAAI;AACtB,IAAA,iBAAiB,EAAE,IAAI;AACvB,IAAA,eAAe,EAAE,IAAI;AACrB,IAAA,uBAAuB,EAAE,IAAI;AAC7B,IAAA,iBAAiB,EAAE,EAAE;AACrB,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,YAAY,EAAE,SAAS;AACvB,IAAA,eAAe,EAAE,SAAS;AAC1B,IAAA,uBAAuB,EAAE,SAAS;AAClC,IAAA,kBAAkB,EAAE,SAAS;;AAE7B,IAAA,kBAAkB,EAAE,SAAS;;AAE7B,IAAA,gBAAgB,EAAE,SAAS;;AAE3B,IAAA,mBAAmB,EAAE,SAAS;;AAE9B,IAAA,oBAAoB,EAAE,SAAS;;AAE/B,IAAA,oBAAoB,EAAE,KAAK;AAC3B,IAAA,0BAA0B,EAAE,KAAK;AACjC,IAAA,mBAAmB,EAAE,KAAK;AAC1B,IAAA,mBAAmB,EAAE,KAAK;AAC1B,IAAA,sBAAsB,EAAE,KAAK;AAC7B,IAAA,sBAAsB,EAAE,SAAS;AACjC,IAAA,4BAA4B,EAAE,SAAS;AACvC,IAAA,qBAAqB,EAAE,SAAS;AAChC,IAAA,qBAAqB,EAAE,SAAS;AAChC,IAAA,oBAAoB,EAAE,EAAE;AACxB,IAAA,oBAAoB,EAAE,EAAE;;AAExB,IAAA,iBAAiB,EAAE,KAAK;AACxB,IAAA,SAAS,EAAE;AACT,QAAA,UAAU,EAAE,CAAC;AACb,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,kBAAkB,EAAE,uBAAuB;AAC3C,QAAA,aAAa,EAAE,KAAK;AACpB,QAAA,eAAe,EAAE,cAAc;AAC/B,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,KAAK,EAAE,SAAS;;AAEhB,QAAA,aAAa,EAAE,KAAK;QACpB,qBAAqB,EAAE,SAAS;;AAEjC,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,UAAU,EAAE,CAAC;AACb,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,OAAO,EAAE;AACP,YAAA,CAAC,EAAE,IAAI;AACP,YAAA,CAAC,EAAE,IAAI;AACP,YAAA,CAAC,EAAE,IAAI;AACP,YAAA,CAAC,EAAE,IAAI;AACP,YAAA,EAAE,EAAE,IAAI;AACR,YAAA,EAAE,EAAE,IAAI;AACR,YAAA,EAAE,EAAE,IAAI;AACR,YAAA,EAAE,EAAE,IAAI;AACT,SAAA;AACD,QAAA,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;;AAEjB,KAAA;AACD,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,iBAAiB,EAAE,KAAK;AACxB,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,iBAAiB,EAAE,KAAK;AACxB,IAAA,mBAAmB,EAAE,KAAK;AAC1B,IAAA,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AACpE,IAAA,eAAe,EAAE,KAAK;IACtB,WAAW,EAAE,WAAW,CAAC,eAAe;AACxC,IAAA,mBAAmB,EAAE,KAAK;AAC1B,IAAA,eAAe,EAAE,KAAK;AACtB,IAAA,gBAAgB,EAAE,KAAK;AACvB,IAAA,uBAAuB,EAAE,KAAK;AAC9B,IAAA,qBAAqB,EAAE,KAAK;AAC5B,IAAA,qBAAqB,EAAE,KAAK;AAC5B,IAAA,6BAA6B,EAAE,KAAK;AACpC,IAAA,OAAO,EAAE,QAAQ,CAAC,GAAG;;;MCxHV,aAAa,CAAA;;AAExB,IAAA,OAAO,KAAK,CAAC,IAAS,EAAE,IAAS,EAAE,UAAe,EAAA;AAChD,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;AACpB,YAAA,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;AACtD,gBAAA,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;;AAE/B,oBAAA,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE;AAChB,wBAAA,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACd,qBAAA;oBACD,IAAI,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE,iBAAA;AAAM,qBAAA;oBACL,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACnB,iBAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;;IAGD,OAAO,eAAe,CAAC,CAAM,EAAA;QAC3B,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,EAAE;YACxC,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE;gBACjC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;gBACjC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAClC,aAAA;iBAAM,IAAI,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE;gBACtD,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;gBACxC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AACzC,aAAA;AACF,SAAA;KACF;AAED,IAAA,OAAO,yBAAyB,CAC9B,QAAoC,EACpC,CAAa,EAAA;AAEb,QAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE;AAC7C,YAAA,IACE,CAAC,aAAa,CAAC,oBAAoB,CACjC,CAAC,CAAC,MAAqB,EACvB,CAAC,CAAC,aAA4B,EAC9B,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,eAAe,EAC3C,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,kBAAkB,CAC/C,EACD;AACA,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACF,SAAA;AAAM,aAAA;YACL,IACE,aAAa,CAAC,iBAAiB,CAC7B,CAAC,CAAC,MAAqB,EACvB,CAAC,CAAC,aAA4B,EAC9B,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,kBAAkB,CAC/C,EACD;AACA,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACF,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,OAAO,uCAAuC,CAC5C,QAAoC,EACpC,CAAa,EAAA;QAEb,QACE,aAAa,CAAC,iBAAiB,CAC7B,CAAC,CAAC,MAAqB,EACvB,CAAC,CAAC,aAA4B,EAC9B,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,kBAAkB,CAC/C;YACD,aAAa,CAAC,iBAAiB,CAC7B,CAAC,CAAC,MAAqB,EACvB,CAAC,CAAC,aAA4B,EAC9B,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,eAAe,CAC5C,EACD;KACH;IAED,OAAO,oBAAoB,CACzB,MAAmB,EACnB,OAAoB,EACpB,eAAuB,EACvB,kBAAkB,EAAA;AAElB,QAAA,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,OAAO,EAAE;AACjC,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AACD,QAAA,IAAI,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;AAChC,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5D,IAAI,UAAU,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE;AAC5C,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;YACD,IAAI,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,EAAE;AAC/C,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;AACF,SAAA;AACD,QAAA,OAAO,aAAa,CAAC,oBAAoB,CACvC,MAAM,CAAC,UAAyB,EAChC,OAAO,EACP,eAAe,EACf,kBAAkB,CACnB,CAAC;KACH;AAED,IAAA,OAAO,iBAAiB,CACtB,MAAmB,EACnB,OAAoB,EACpB,YAAoB,EAAA;AAEpB,QAAA,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,OAAO,EAAE;AACjC,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AACD,QAAA,IACE,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC;AAC5B,YAAA,MAAM,CAAC,YAAY,CAAC,OAAO,CAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EACnE;AACA,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,aAAa,CAAC,iBAAiB,CACpC,MAAM,CAAC,UAAyB,EAChC,OAAO,EACP,YAAY,CACb,CAAC;AACH,SAAA;KACF;AAED,IAAA,OAAO,YAAY,CACjB,CAA2B,EAC3B,CAA2B,EAAA;AAE3B,QAAA,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACb,OAAO,CAAC,CAAC,CAAC;AACX,SAAA;AAAM,aAAA,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;AACpB,YAAA,OAAO,CAAC,CAAC;AACV,SAAA;AAAM,aAAA,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACpB,OAAO,CAAC,CAAC,CAAC;AACX,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,CAAC,CAAC;AACV,SAAA;KACF;AACF;;MC5IY,iBAAiB,CAAA;AAe5B,IAAA,WAAA,CAAoB,QAAoC,EAAA;QAApC,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAA4B;AA0HxD,QAAA,IAAA,CAAA,gBAAgB,GAAG,CAAC,CAAa,KAAU;YACzC,IACE,CAAC,IAAI,CAAC,QAAQ;gBACd,IAAI,CAAC,QAAQ,CAAC,UAAU;gBACxB,aAAa,CAAC,uCAAuC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EACvE;gBACA,OAAO;AACR,aAAA;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,IAAI,EAAE;gBACT,OAAO;AACR,aAAA;AACD,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,sBAAsB,EAAE;gBAChD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACvD,aAAA;AACD,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;AACrC,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,sBAAsB,GAAG,CAAC,CAAa,KAAU;AAC/C,YAAA,IACE,IAAI,CAAC,QAAQ,CAAC,UAAU;gBACxB,aAAa,CAAC,uCAAuC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EACvE;gBACA,OAAO;AACR,aAAA;YACD,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,IAAI,EAAE;gBACT,OAAO;AACR,aAAA;AACD,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,4BAA4B,EAAE;gBACtD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC7D,aAAA;AACD,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;AACrC,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAAC,CAAY,KAAU;YACzC,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,IAAI,EAAE;gBACT,OAAO;AACR,aAAA;AACD,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE;gBAC/C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACtD,aAAA;AACD,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;AACrC,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAAC,CAAY,KAAU;YACzC,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAC3C,YAAA,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,CAAC,YAAY,EAAE;AAClB,oBAAA,CAAC,CAAC,YAAY,CAAC,UAAU,GAAG,MAAM,CAAC;AACpC,iBAAA;AACD,gBAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;AACjC,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,CAAC,YAAY,EAAE;AAClB,oBAAA,CAAC,CAAC,YAAY,CAAC,UAAU,GAAG,MAAM,CAAC;AACpC,iBAAA;AACD,gBAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;AACjC,aAAA;AACD,YAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;AAC/B,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,kBAAkB,GAAG,CAAC,CAAa,KAAU;YAC3C,IACE,aAAa,CAAC,uCAAuC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EACvE;gBACA,OAAO;AACR,aAAA;YACD,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAC9B,YAAA,IACE,CAAC,IAAI;AACL,iBAAC,CAAC,CAAC,OAAO,KAAK,mBAAmB,IAAI,EAAE,CAAC,YAAY,UAAU,CAAC,CAAC,EACjE;gBACA,OAAO;AACR,aAAA;AACD,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,YAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;AAChC,YAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AACxC,gBAAA,IAAI,CAAC,+BAA+B,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAClE,QAAQ,EACR,WAAW,EACX,IAAI,CAAC,kBAAkB,CACxB,CAAC;AACF,gBAAA,IAAI,CAAC,+BAA+B,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAClE,QAAQ,EACR,WAAW,EACX,IAAI,CAAC,kBAAkB,CACxB,CAAC;AACJ,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAChE,QAAQ,EACR,SAAS,EACT,IAAI,CAAC,gBAAgB,CACtB,CAAC;AACF,YAAA,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CACjE,QAAQ,EACR,UAAU,EACV,IAAI,CAAC,gBAAgB,CACtB,CAAC;AACJ,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,kBAAkB,GAAG,CAAC,CAAa,KAAU;YAC3C,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,CAAC,CAAC,eAAe,EAAE,CAAC;AACpB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC7D,IAAI,CAAC,IAAI,EAAE;gBACT,OAAO;AACR,aAAA;AAED,YAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;AAChC,YAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;AAC/B,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,gBAAgB,GAAG,CAAC,CAAa,KAAU;YACzC,IAAI,CAAC,+BAA+B,EAAE,CAAC;YACvC,IAAI,CAAC,+BAA+B,EAAE,CAAC;YACvC,IAAI,CAAC,6BAA6B,EAAE,CAAC;YACrC,IAAI,CAAC,8BAA8B,EAAE,CAAC;AACtC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AAC7D,YAAA,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;AACjC,aAAA;AACD,YAAA,IACE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB;AAC3C,gBAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,EACxB;AACA,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAC1E,aAAA;YACD,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,oBAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;AAChC,oBAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;AAC9B,iBAAA;AACH,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;AACrC,SAAC,CAAC;KA1Q0D;IAE5D,OAAO,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;AAC9B,YAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;AAC9B,SAAA;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAK,CAAC;QACzC,IAAI,IAAI,CAAC,+BAA+B,EAAE;YACxC,IAAI,CAAC,+BAA+B,EAAE,CAAC;AACvC,YAAA,IAAI,CAAC,+BAA+B,GAAG,IAAI,CAAC;AAC7C,SAAA;KACF;IAED,aAAa,GAAA;AACX,QAAA,IACE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,oBAAoB;YAC3C,CAAC,IAAI,CAAC,8BAA8B;AACpC,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,sBAAsB,EAC5C;YACA,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CACjE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAChB,OAAO,EACP,IAAI,CAAC,gBAAgB,CACtB,CAAC;YACF,IAAI,CAAC,iCAAiC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CACpE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAChB,UAAU,EACV,IAAI,CAAC,gBAAgB,CACtB,CAAC;AACH,SAAA;AAAM,aAAA,IACL,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,oBAAoB;AAC5C,YAAA,IAAI,CAAC,8BAA8B;YACnC,IAAI,CAAC,iCAAiC,EACtC;YACA,IAAI,CAAC,8BAA8B,EAAE,CAAC;YACtC,IAAI,CAAC,iCAAiC,EAAE,CAAC;AACzC,YAAA,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC;AAC3C,YAAA,IAAI,CAAC,iCAAiC,GAAG,IAAI,CAAC;AAC/C,SAAA;AACD,QAAA,IACE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,0BAA0B;YACjD,CAAC,IAAI,CAAC,oCAAoC;AAC1C,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,4BAA4B,EAClD;YACA,IAAI,CAAC,oCAAoC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CACvE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAChB,aAAa,EACb,IAAI,CAAC,sBAAsB,CAC5B,CAAC;AACH,SAAA;AAAM,aAAA,IACL,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,0BAA0B;YAClD,IAAI,CAAC,oCAAoC,EACzC;YACA,IAAI,CAAC,oCAAoC,EAAE,CAAC;AAC5C,YAAA,IAAI,CAAC,oCAAoC,GAAG,IAAI,CAAC;AAClD,SAAA;AACD,QAAA,IACE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,mBAAmB;YAC1C,CAAC,IAAI,CAAC,6BAA6B;AACnC,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAC3C;YACA,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAChE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAChB,MAAM,EACN,IAAI,CAAC,iBAAiB,CACvB,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;gBACxC,IAAI,CAAC,iCAAiC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CACpE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAChB,UAAU,EACV,IAAI,CAAC,iBAAiB,CACvB,CAAC;AACJ,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,+BAA+B,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAClE,UAAU,EACV,SAAS,EACT,MAAK;AACH,gBAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;AAChC,gBAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;AAC/B,aAAC,CACF,CAAC;AACH,SAAA;AAAM,aAAA,IACL,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,mBAAmB;AAC3C,YAAA,IAAI,CAAC,6BAA6B;AAClC,YAAA,IAAI,CAAC,iCAAiC;YACtC,IAAI,CAAC,+BAA+B,EACpC;YACA,IAAI,CAAC,6BAA6B,EAAE,CAAC;YACrC,IAAI,CAAC,iCAAiC,EAAE,CAAC;YACzC,IAAI,CAAC,+BAA+B,EAAE,CAAC;AACvC,YAAA,IAAI,CAAC,iCAAiC,GAAG,IAAI,CAAC;AAC9C,YAAA,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC;AAC1C,YAAA,IAAI,CAAC,+BAA+B,GAAG,IAAI,CAAC;AAC7C,SAAA;AACD,QAAA,IACE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,mBAAmB;YAC1C,CAAC,IAAI,CAAC,kCAAkC;AACxC,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAC3C;YACA,IAAI,CAAC,kCAAkC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CACrE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAChB,WAAW,EACX,IAAI,CAAC,kBAAkB,CACxB,CAAC;YACF,IAAI,CAAC,mCAAmC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CACtE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAChB,YAAY,EACZ,IAAI,CAAC,kBAAkB,CACxB,CAAC;AACH,SAAA;AAAM,aAAA,IACL,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,mBAAmB;AAC3C,YAAA,IAAI,CAAC,kCAAkC;YACvC,IAAI,CAAC,mCAAmC,EACxC;YACA,IAAI,CAAC,kCAAkC,EAAE,CAAC;YAC1C,IAAI,CAAC,mCAAmC,EAAE,CAAC;AAC3C,YAAA,IAAI,CAAC,kCAAkC,GAAG,IAAI,CAAC;AAC/C,YAAA,IAAI,CAAC,mCAAmC,GAAG,IAAI,CAAC;AACjD,SAAA;KACF;IAoJD,UAAU,CAAC,CAAa,EAAE,IAAgB,EAAA;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;AAC1C,QAAA,IAAI,KAAK,EAAE;YACT,QACE,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK;AAC/B,gBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU;gBAC3B,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,EAC1C;AACH,SAAA;QACD,QACE,CAAC,CAAC,OAAO;AACT,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU;AAC3B,YAAA,IAAI,CAAC,IAAI;YACT,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,EAC1C;KACH;IAED,UAAU,CAAC,CAAa,EAAE,IAAgB,EAAA;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;AAC1C,QAAA,IAAI,KAAK,EAAE;YACT,QACE,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI,KAAK;AAC9B,gBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;gBAC1B,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,YAAY,EAAE,EACzC;AACH,SAAA;QACD,QACE,CAAC,CAAC,OAAO;AACT,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS;AAC1B,YAAA,IAAI,CAAC,GAAG;YACR,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,YAAY,EAAE,EACzC;KACH;IAED,qBAAqB,CACnB,CAAa,EACb,OAA6B,EAAA;QAE7B,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC,eAAe,EAAE,CAAC;AACpB,QAAA,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC;QACtD,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACnC,QAAA,MAAM,IAAI,GAAiB;AACzB,YAAA,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;AACvD,YAAA,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;AACvD,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe;AAC5C,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe;SAC7C,CAAC;AACF,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAClB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAChC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAC5C,CAAC;AACF,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAClB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAChC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAC5C,CAAC;AACF,YAAA,IAAI,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE;AACtB,gBAAA,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;AACpB,aAAA;AAAM,iBAAA,IACL,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBAClB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,GAAG,CAAC,EAC/C;gBACA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;AACpE,aAAA;AACD,YAAA,IAAI,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE;AACtB,gBAAA,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;AACpB,aAAA;AAAM,iBAAA,IACL,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBAClB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,GAAG,CAAC,EAC/C;gBACA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;AACpE,aAAA;AACF,SAAA;AACD,QAAA,IACE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,sBAAsB;AAC9C,YAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,EAClC;YACA,OAAO;AACR,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AACF;;MCxWY,gBAAgB,CAAA;AAa3B,IAAA,WAAA,CAAoB,QAAoC,EAAA;QAApC,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAA4B;AAZxD;;;AAGG;QACK,IAAoB,CAAA,oBAAA,GAA0C,EAAE,CAAC;AAEzE;;;AAGG;QACK,IAAiB,CAAA,iBAAA,GAAuC,EAAE,CAAC;KAEP;IAE5D,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAK,CAAC;KACvB;AAED,IAAA,UAAU,CAAC,EAAW,EAAE,IAAkB,EAAE,QAAmB,EAAA;AAC7D,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACrC,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,EAAE;gBAClD,QAAQ,CAAC,QAAQ,CACf,EAAE,EACF,QAAQ,EACR,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM;oBAC7C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc;AACjD,oBAAA,IAAI,CACP,CAAC;AACH,aAAA;AAAM,iBAAA;gBACL,QAAQ,CAAC,QAAQ,CACf,EAAE,EACF,QAAQ,EACR,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CACxD,CAAC;AACH,aAAA;AACD,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,EAAE;AACjD,gBAAA,QAAQ,CAAC,QAAQ,CACf,EAAE,EACF,OAAO,EACP,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,GAAG,IAAI,CAC5C,CAAC;AACH,aAAA;AAAM,iBAAA;gBACL,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;AACpC,aAAA;AAED,YAAA,QAAQ,CAAC,QAAQ,CACf,EAAE,EACF,eAAe,EACf,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CACrC,CAAC;AACF,YAAA,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,GAAG,GAAG,cAAc,GAAG,aAAa,EAAE,EAAE,CAAC,CAAC;AAC1E,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACzD,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1D,YAAA,MAAM,KAAK,GACT,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;AACxE,YAAA,MAAM,MAAM,GACV,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;;YAEzE,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;YAC7C,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;YAC/C,IAAI,YAAY,GAAkB,IAAI,CAAC;YACvC,IAAI,WAAW,GAAkB,IAAI,CAAC;AACtC,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE;AACtC,gBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,EAAE;oBAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,KAAK,IAAI,EAAE;wBACrD,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAChE,qBAAA;AAAM,yBAAA;wBACL,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;AACrD,qBAAA;AACF,iBAAA;AACD,gBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,KAAK,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,EAAE;oBAChD,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,KAAK,IAAI,EAAE;wBACrD,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC9D,qBAAA;AAAM,yBAAA;wBACL,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;AACpD,qBAAA;AACF,iBAAA;AACF,aAAA;YAED,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC;AACrD,YAAA,QAAQ,CAAC,QAAQ,CACf,EAAE,EACF,QAAQ,CAAC,GAAG,GAAG,cAAc,GAAG,aAAa,EAC7C,WAAW,CACZ,CAAC;AACH,SAAA;KACF;IAED,cAAc,GAAA;QACZ,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,YAAY,GAAG,EAAE,CAAC;QACtB,IAAI,YAAY,GAAG,EAAE,CAAC;QACtB,IAAI,YAAY,GAAG,EAAE,CAAC;QACtB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,GAAG,EAAE;AACpD,YAAA,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC;AACxB,YAAA,YAAY,GAAG,QAAQ,CAAC,cAAc,CAAC;AACvC,YAAA,YAAY,GAAG,QAAQ,CAAC,gBAAgB,CAAC;AACzC,YAAA,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC/B,SAAA;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,cAAc,EAAE;YACtE,IAAI,CAAC,QAAQ,CAAC,YAAY;AACxB,gBAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC;AACpE,YAAA,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC;AACnC,YAAA,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC;AAC5B,YAAA,YAAY,GAAG,QAAQ,CAAC,gBAAgB,CAAC;AACzC,YAAA,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC/B,SAAA;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,gBAAgB,EAAE;YACxE,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC;AACzD,YAAA,MAAM,aAAa,GAAG,UAAU,IAAI,CAAC,GAAG,UAAU,GAAG,UAAU,GAAG,CAAC,CAAC;AACpE,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,aAAa,CAAC;AACvE,YAAA,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC;AACrC,YAAA,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC;AAC5B,YAAA,YAAY,GAAG,QAAQ,CAAC,cAAc,CAAC;AACvC,YAAA,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC/B,SAAA;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,KAAK,EAAE;YAC7D,IAAI,CAAC,QAAQ,CAAC,WAAW;AACvB,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa;AACpC,qBAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB;AACvC,0BAAE,CAAC;0BACD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACrC,IAAI,CAAC,QAAQ,CAAC,YAAY;AACxB,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc;AACrC,qBAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB;AACvC,0BAAE,CAAC;0BACD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACrC,YAAA,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC1B,YAAA,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC;AAC5B,YAAA,YAAY,GAAG,QAAQ,CAAC,cAAc,CAAC;AACvC,YAAA,YAAY,GAAG,QAAQ,CAAC,gBAAgB,CAAC;AAC1C,SAAA;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,aAAa,EAAE;YACrE,IAAI,CAAC,QAAQ,CAAC,YAAY;AACxB,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc;AACrC,qBAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB;AACvC,0BAAE,CAAC;0BACD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACrC,YAAA,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC;AACnC,YAAA,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC;AAC5B,YAAA,YAAY,GAAG,QAAQ,CAAC,gBAAgB,CAAC;AACzC,YAAA,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC/B,SAAA;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,eAAe,EAAE;YACvE,IAAI,CAAC,QAAQ,CAAC,WAAW;AACvB,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa;AACpC,qBAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB;AACvC,0BAAE,CAAC;0BACD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACrC,YAAA,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC;AACrC,YAAA,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC;AAC5B,YAAA,YAAY,GAAG,QAAQ,CAAC,cAAc,CAAC;AACvC,YAAA,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC/B,SAAA;AAED,QAAA,IACE,IAAI,CAAC,QAAQ,CAAC,MAAM;AACpB,aAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW;gBACjC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,GAAG,CAAC,EACnD;AACA,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;AAChE,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC7D,SAAA;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;AACnE,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;AACnE,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;KACpE;AAED,IAAA,kBAAkB,CAAC,CAAS,EAAA;;AAE1B,QAAA,MAAM,MAAM,GAA0B;AACpC,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC;AACnC,YAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM;AAChE,YAAA,MAAM,EACJ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY;AAC1D,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM;AAC/B,YAAA,KAAK,EAAE,EAAE;SACV,CAAC;QACF,MAAM,CAAC,KAAK,GAAG;AACb,YAAA,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC;AACpC,YAAA,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,IAAI;AAC1B,YAAA,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI;SAC7B,CAAC;;QAGF,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;AAC1C,QAAA,IACE,IAAI;AACJ,YAAA,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;AACzB,YAAA,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK;AAC3B,YAAA,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAC7B;YACA,OAAO,IAAI,CAAC,KAAK,CAAC;AACnB,SAAA;;AAGD,QAAA,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;QACtC,OAAO,MAAM,CAAC,KAAK,CAAC;KACrB;AAED,IAAA,eAAe,CAAC,CAAS,EAAA;;AAEvB,QAAA,MAAM,MAAM,GAAuB;AACjC,YAAA,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,CAAC;AACnC,YAAA,KAAK,EACH,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW;AAC5D,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM;AAC/B,YAAA,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM;AAClE,YAAA,KAAK,EAAE,EAAE;SACV,CAAC;QACF,MAAM,CAAC,KAAK,GAAG;AACb,YAAA,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC;AAClC,YAAA,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,IAAI;AAC1B,YAAA,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI;SAC7B,CAAC;;QAGF,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;AACvC,QAAA,IACE,IAAI;AACJ,YAAA,IAAI,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG;AACvB,YAAA,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK;AAC3B,YAAA,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAC7B;YACA,OAAO,IAAI,CAAC,KAAK,CAAC;AACnB,SAAA;;AAGD,QAAA,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;QACnC,OAAO,MAAM,CAAC,KAAK,CAAC;KACrB;AAED,IAAA,eAAe,CAAC,CAAS,EAAA;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3E,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,EAAE;YAClD,OAAO;AACL,gBAAA,SAAS,EAAE,aAAa,GAAG,SAAS,GAAG,KAAK;aAC7C,CAAC;AACH,SAAA;AAAM,aAAA;YACL,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,GAAG,SAAS,GAAG,IAAI;aAC9C,CAAC;AACH,SAAA;KACF;AAED,IAAA,cAAc,CAAC,CAAS,EAAA;AACtB,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,EAAE;YAClD,OAAO;AACL,gBAAA,SAAS,EAAE,aAAa,GAAG,CAAC,GAAG,KAAK;aACrC,CAAC;AACH,SAAA;AAAM,aAAA;YACL,OAAO;gBACL,GAAG,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,GAAG,IAAI;aACpC,CAAC;AACH,SAAA;KACF;IAED,iBAAiB,CAAC,QAAmB,EAAE,EAAW,EAAA;AAChD,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,EAAE;YAClD,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;AACxC,SAAA;AAAM,aAAA;YACL,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;AACnC,SAAA;KACF;AAED,IAAA,eAAe,CACb,QAAmB,EACnB,EAAW,EACX,CAAS,EACT,CAAS,EAAA;QAET,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3E,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,EAAE;YAClD,MAAM,SAAS,GAAG,cAAc,GAAG,SAAS,GAAG,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC;YACrE,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;AAC/C,SAAA;AAAM,aAAA;AACL,YAAA,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;AACvE,YAAA,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AAC9D,SAAA;KACF;IAED,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE;YACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,KAAK,IAAI,EAAE;AACnD,gBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC;AAC/C,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;AACtC,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,CAAC,CAAC;AACV,SAAA;KACF;IAED,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE;YACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,KAAK,IAAI,EAAE;AAClD,gBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC;AAC9C,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;AACtC,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,CAAC,CAAC;AACV,SAAA;KACF;AACF;;AC9SD,MAOa,wBAAwB,CAAA;IAMnC,WAAY,CAAA,EAAc,EAAU,QAAmB,EAAA;QAAnB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAW;AACrD,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC;KAC5B;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,IAC7C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAC3B,CAAC;KACH;IAED,WAAW,GAAA;QACT,IAAG,IAAI,CAAC,GAAG,EAAE;AACX,YAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;AACxB,SAAA;KACF;AAEO,IAAA,YAAY,CAAC,IAAyB,EAAA;AAC5C,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACpD,YAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC5D,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;AAChD,SAAA;KACF;8GA7BU,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,sJALzB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FAKD,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,YAClB,EAAE,EAAA,aAAA,EAEG,iBAAiB,CAAC,IAAI,cACzB,IAAI,EAAA,MAAA,EAAA,CAAA,+EAAA,CAAA,EAAA,CAAA;yHAGP,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;;;ACSR,MASa,iBAAiB,CAAA;AA8B5B,IAAA,WAAA,CACsB,EAAc,EACR,QAAmB,EACX,KAAwB,EACnC,IAAY,EAAA;QAFT,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAW;QACX,IAAK,CAAA,KAAA,GAAL,KAAK,CAAmB;QACnC,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;QAvBrC,IAAO,CAAA,OAAA,GAAG,CAAC,CAAC;QACZ,IAAI,CAAA,IAAA,GAAG,CAAC,CAAC;QAGT,IAAW,CAAA,WAAA,GAAG,EAAE,CAAC;QACjB,IAAQ,CAAA,QAAA,GAAG,EAAE,CAAC;AAMd,QAAA,IAAA,CAAA,aAAa,GACX,IAAI,YAAY,EAAuB,CAAC;AAE1C,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,OAAO,EAAQ,CAAC;AAE/B,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,OAAO,EAAQ,CAAC;AAC9B,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;QAwIvC,IAAc,CAAA,cAAA,GAAG,MAAW;YAC1B,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,YAAY,GAAW,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAChD,YAAA,IAAI,MAAsC,CAAC;AAC3C,YAAA,OAAO,YAAY,IAAI,CAAC,EAAE,YAAY,EAAE,EAAE;AACxC,gBAAA,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACjC,MAAM,CAAC,aAAa,EAAE,CAAC;AACxB,aAAA;YACD,IAAI,CAAC,eAAe,EAAE,CAAC;AACzB,SAAC,CAAC;QAuBF,IAAQ,CAAA,QAAA,GAAG,MAAW;AACpB,YAAA,IAAI,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;AACvB,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;;AAE5B,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;AAC7C,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC/C,iBAAA;gBACD,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,IAAI,CAAC,eAAe,EAAE,CAAC;AACxB,aAAA;AACH,SAAC,CAAC;AAyXF,QAAA,IAAA,CAAA,uBAAuB,GAAG,CACxB,OAAqB,EACrB,YAA2C,GAAA,EAAE,KAClC;AACX,YAAA,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE;gBACvB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;AAC9C,aAAA;AACD,YAAA,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE;gBACvB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;AAC9C,aAAA;YACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,YAAA,IAAI,SAAS,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;AACpC,YAAA,IAAI,SAAS,CAAC;YACd,OAAO,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;AACzC,gBAAA,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;AACtB,gBAAA,SAAS,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;gBAChC,OAAO,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE;AAC5C,oBAAA,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;AACtB,oBAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;AACjC,wBAAA,OAAO,IAAI,CAAC;AACb,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;AACvE,YAAA,MAAM,eAAe,GACnB,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YACvD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,YAAY,CAAC;AAC5D,YAAA,IAAI,CAAC,SAAS,IAAI,eAAe,EAAE;AACjC,gBAAA,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;AACzB,gBAAA,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;AACd,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AAAM,iBAAA,IAAI,YAAY,EAAE;AACvB,gBAAA,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;AACtB,gBAAA,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;AACd,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACD,YAAA,OAAO,KAAK,CAAC;AACf,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,wBAAwB,GAAG,CAAC,IAAkB,KAAkB;YAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACxC,YAAA,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACtC,YAAA,OAAO,OAAO,CAAC;AACjB,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,uBAAuB,GAAG,CAAC,IAAkB,KAAkB;YAC7D,IAAI,YAAY,GAA6B,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC5D,YAAA,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAC7B,CACE,IAA8B,EAC9B,IAAoC,KAClC;AACF,gBAAA,MAAM,UAAU,GAAG;AACjB,oBAAA,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;AACrC,oBAAA,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;iBACtC,CAAC;gBACF,IAAI,aAAa,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE;AACtD,oBAAA,OAAO,UAAU,CAAC;AACnB,iBAAA;AAAM,qBAAA;AACL,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;aACF,EACD,YAAY,CACb,CAAC;YAEF,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACxC,YAAA,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AACpD,YAAA,OAAO,OAAO,CAAC;AACjB,SAAC,CAAC;AAvmBA,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC;AAC3B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,CAAC;AAClE,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AAClB,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;AACnB,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AACf,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,YAAY,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;KAChD;;;AAKD,IAAA,OAAO,gCAAgC,CACrC,IAAkB,EAClB,KAAmB,EAAA;;AAGnB,QAAA,MAAM,uBAAuB,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACxD,QAAA,MAAM,uBAAuB,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACzD,QAAA,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACtD,QAAA,MAAM,qBAAqB,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACvD,QAAA,QACE,IAAI,CAAC,CAAC,GAAG,uBAAuB,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI;YACvD,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,uBAAuB;YACtD,IAAI,CAAC,CAAC,GAAG,qBAAqB,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI;AACrD,YAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,qBAAqB,EACpD;KACH;IAED,sBAAsB,CAAC,IAAkB,EAAE,KAAmB,EAAA;AAC5D,QAAA,MAAM,SAAS,GACb,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI;YAC7B,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;YAC5B,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI;YAC7B,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;AAClC,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;AAC1D,QAAA,MAAM,UAAU,GACd,IAAI,CAAC,UAAU,KAAK,SAAS,GAAG,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC;AACtE,QAAA,MAAM,WAAW,GACf,KAAK,CAAC,UAAU,KAAK,SAAS,GAAG,iBAAiB,GAAG,KAAK,CAAC,UAAU,CAAC;QACxE,OAAO,UAAU,KAAK,WAAW,CAAC;KACnC;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;AAC7B,YAAA,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AACjC,SAAA;AAED,QAAA,IAAI,CAAC,gBAAgB;AAClB,aAAA,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC/C,SAAS,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;AAE3C,QAAA,IAAI,CAAC,OAAO;aACT,IAAI;;;AAGH,QAAA,SAAS,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,EAC3B,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACzB;aACA,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;KACnC;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,OAAO,EAAE;YACnB,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG;gBACjB,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,MAAM,EAAE,IAAI,CAAC,QAAQ;gBACrB,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;gBACrD,wBAAwB,EAAE,IAAI,CAAC,wBAAwB;gBACvD,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;gBACrD,gBAAgB,EAAE,CAAC,IAAkB,KAAK,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;aACtE,CAAC;YACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AACrC,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACpE,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,eAAe,EAAE,CAAC;AACxB,SAAA;KACF;IAEO,MAAM,GAAA;AACZ,QAAA,IAAI,MAAM,CAAC;AACX,QAAA,IAAI,KAAK,CAAC;AACV,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACpD,YAAA,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC;AAC5B,YAAA,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC;AAC/B,SAAA;AAAM,aAAA;AACL,YAAA,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC;AAC5B,YAAA,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC;AAC/B,SAAA;AACD,QAAA,IACE,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,IAAI,MAAM,KAAK,IAAI,CAAC,SAAS;YACrD,IAAI,CAAC,eAAe,EAAE,EACtB;YACA,IAAI,CAAC,QAAQ,EAAE,CAAC;AACjB,SAAA;KACF;IAED,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,KAAK,CACjC,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,QAAQ,CACd,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAC5D,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CACtC,QAAQ,EACR,QAAQ,EACR,IAAI,CAAC,QAAQ,CACd,CAAC;AACH,SAAA;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,mBAAmB,IAAI,IAAI,CAAC,YAAY,EAAE;YACjE,IAAI,CAAC,YAAY,EAAE,CAAC;AACpB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AAC1B,SAAA;AACD,QAAA,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;KAChC;IAaD,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,CAAC,YAAY,EAAE,CAAC;AACrB,SAAA;QACD,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;AAChD,YAAA,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACpC,SAAA;QACD,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YACpC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,SAAS,CAAC;YAC5C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,SAAS,CAAC;AACrD,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;AAC9B,SAAA;AACD,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAK,CAAC;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAK,CAAC;KACtB;IAcD,eAAe,GAAA;AACb,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC;AACxC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC;AACxC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC;AACxC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC;AAC1C,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC;AAC1C,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC;AAC1C,QAAA,MAAM,qBAAqB,GACzB,WAAW,GAAG,WAAW;AACzB,YAAA,YAAY,GAAG,YAAY;AAC3B,YAAA,YAAY,GAAG,YAAY,GAAG,WAAW,GAAG,WAAW,CAAC;AAC1D,QAAA,MAAM,uBAAuB,GAC3B,YAAY,GAAG,YAAY;AAC3B,YAAA,WAAW,GAAG,WAAW;AACzB,YAAA,WAAW,GAAG,WAAW,GAAG,YAAY,GAAG,YAAY,CAAC;AAC1D,QAAA,IAAI,qBAAqB,EAAE;AACzB,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;QACD,OAAO,CAAC,uBAAuB,CAAC;KACjC;IAED,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE;YACtC,OAAO,IAAI,CAAC,QAAQ,CAAC,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;AACnE,SAAA;AAAM,aAAA;YACL,OAAO,IAAI,CAAC,QAAQ,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC;AACvD,SAAA;KACF;IAED,WAAW,GAAA;AACT,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;AACnB,QAAA,IAAI,KAAK,CAAC;AACV,QAAA,IAAI,MAAM,CAAC;AACX,QAAA,IACE,IAAI,CAAC,QAAQ,CAAC,WAAW;AACzB,aAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EACzD;AACA,YAAA,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC;AACvB,YAAA,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC;AAC1B,SAAA;AAAM,aAAA;AACL,YAAA,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC;AACvB,YAAA,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC;AAC1B,SAAA;AACD,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;KACzB;IAED,iBAAiB,GAAA;QACf,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AACxC,YAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC3C,SAAA;aAAM,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;AAC/C,YAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC9C,SAAA;AACD,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AACjC,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAEpC,IAAI,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACxC,QAAA,IAAI,MAAM,CAAC;AACX,QAAA,OAAO,YAAY,IAAI,CAAC,EAAE,YAAY,EAAE,EAAE;AACxC,YAAA,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACjC,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AACrB,gBAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC1D,gBAAA,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACjE,aAAA;AACF,SAAA;AACD,QAAA,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QACxC,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;AAClD,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE;AACxC,gBAAA,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAC5C,aAAA;AACF,SAAA;KACF;IAEO,eAAe,GAAA;QACrB,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;AAC7B,SAAA;QAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;YAC7B,IAAI,WAAW,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AACxC,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,KAAK,IAAI,EAAE;AAC1C,gBAAA,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;AAC7C,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACpB,IAAI,CAAC,EAAE,EACP,cAAc,EACd,IAAI,CAAC,QAAQ,CAAC,eAAe,GAAG,IAAI,CACrC,CAAC;AACH,aAAA;AAAM,iBAAA;AACL,gBAAA,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AACpC,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACpB,IAAI,CAAC,EAAE,EACP,cAAc,EACd,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAC5B,CAAC;AACH,aAAA;AACD,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,KAAK,IAAI,EAAE;AAC3C,gBAAA,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;AAC9C,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACpB,IAAI,CAAC,EAAE,EACP,eAAe,EACf,IAAI,CAAC,QAAQ,CAAC,gBAAgB,GAAG,IAAI,CACtC,CAAC;AACH,aAAA;AAAM,iBAAA;AACL,gBAAA,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AACpC,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACpB,IAAI,CAAC,EAAE,EACP,eAAe,EACf,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAC5B,CAAC;AACH,aAAA;AACD,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC;YAChE,IAAI,YAAY,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AACzC,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,KAAK,IAAI,EAAE;AACzC,gBAAA,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;AAC7C,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACpB,IAAI,CAAC,EAAE,EACP,aAAa,EACb,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,IAAI,CACpC,CAAC;AACH,aAAA;AAAM,iBAAA;AACL,gBAAA,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AACrC,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACpB,IAAI,CAAC,EAAE,EACP,aAAa,EACb,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAC5B,CAAC;AACH,aAAA;AACD,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,KAAK,IAAI,EAAE;AAC5C,gBAAA,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;AAChD,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACpB,IAAI,CAAC,EAAE,EACP,gBAAgB,EAChB,IAAI,CAAC,QAAQ,CAAC,iBAAiB,GAAG,IAAI,CACvC,CAAC;AACH,aAAA;AAAM,iBAAA;AACL,gBAAA,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AACrC,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACpB,IAAI,CAAC,EAAE,EACP,gBAAgB,EAChB,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAC5B,CAAC;AACH,aAAA;AACD,YAAA,IAAI,CAAC,YAAY;gBACf,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,YAAY,IAAI,IAAI,CAAC,IAAI;AAC5C,oBAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;AAChC,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC;AACzE,YAAA,IAAI,CAAC,YAAY;AACf,gBAAA,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI;AACpD,oBAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;AAC/B,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,cAAc,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;AAC1D,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,eAAe,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;AAC3D,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,aAAa,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;AACzD,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,gBAAgB,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;AAC7D,SAAA;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;AAEnC,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;YAC7B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;AAC5C,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAChB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACpB,IAAI,CAAC,EAAE,EACP,OAAO,EACP,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAC9D,CAAC;gBACF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACpB,IAAI,CAAC,EAAE,EACP,QAAQ,EACR,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAC5D,CAAC;AACH,aAAA;AACF,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;AAC/C,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;AAC7C,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC/C,SAAA;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,IAAI,YAAY,GAAW,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAChD,QAAA,IAAI,MAAsC,CAAC;AAC3C,QAAA,OAAO,YAAY,IAAI,CAAC,EAAE,YAAY,EAAE,EAAE;AACxC,YAAA,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACjC,MAAM,CAAC,OAAO,EAAE,CAAC;AACjB,YAAA,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;AACrB,YAAA,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;AACxB,SAAA;AAED,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KACrB;IAED,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAC1D,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;AACjD,SAAA;AAAM,aAAA,IACL,IAAI,CAAC,QAAQ,CAAC,WAAW,KAAK,eAAe;YAC7C,IAAI,CAAC,cAAc,EACnB;YACA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;AACjD,SAAA;AAAM,aAAA,IACL,IAAI,CAAC,QAAQ,CAAC,WAAW,KAAK,MAAM;YACpC,CAAC,IAAI,CAAC,cAAc;YACpB,IAAI,CAAC,MAAM,EACX;YACA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;AACpD,SAAA;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,iBAAiB,CAAC,iBAAiB,CAC3D,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,WAAW,CACjB,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,iBAAiB,CAAC,iBAAiB,CACxD,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,YAAY,CAClB,CAAC;AACF,QAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;KAC3B;AAED,IAAA,OAAO,CAAC,aAA6C,EAAA;AACnD,QAAA,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;YAC1C,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;YACzD,aAAa,CAAC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;YACnD,aAAa,CAAC,WAAW,EAAE,CAAC;AAC7B,SAAA;AACD,QAAA,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;YAC1C,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;YACzD,aAAa,CAAC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;YACnD,aAAa,CAAC,WAAW,EAAE,CAAC;AAC7B,SAAA;AACD,QAAA,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;AAChE,YAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;AACtC,SAAA;aAAM,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;AACnD,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;AAClC,gBAAA,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC;gBAC/B,OAAO,CAAC,IAAI,CACV,4EAA4E;AAC1E,oBAAA,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CACjE,CAAC;AACH,aAAA;AACD,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,6BAA6B,EAAE;AAChD,gBAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;AACtC,aAAA;AAAM,iBAAA;AACL,gBAAA,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC;AAChC,aAAA;AACF,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;KAC9B;AAED,IAAA,UAAU,CAAC,aAA6C,EAAA;AACtD,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;AACtD,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;AAC7B,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE;YACpC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AACrE,SAAA;KACF;AAED,IAAA,cAAc,CAAC,IAAkB,EAAA;QAC/B,IAAI,SAAS,GAA6C,KAAK,CAAC;AAChE,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE;YACrC,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;AACtD,SAAA;QACD,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE;YAC/C,SAAS,GAAG,IAAI,CAAC;AAClB,SAAA;QACD,IAAI,CAAC,SAAS,EAAE;YACd,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AACtC,YAAA,IAAI,CAAC,EAAE;gBACL,SAAS,GAAG,CAAC,CAAC;AACf,aAAA;AACF,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;AAED,IAAA,kBAAkB,CAAC,IAAkB,EAAA;AACnC,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACtD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AAChE,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AAChE,QAAA,MAAM,WAAW,GACf,IAAI,CAAC,WAAW,KAAK,SAAS;AAC5B,cAAE,IAAI,CAAC,QAAQ,CAAC,WAAW;AAC3B,cAAE,IAAI,CAAC,WAAW,CAAC;AACvB,QAAA,MAAM,WAAW,GACf,IAAI,CAAC,WAAW,KAAK,SAAS;AAC5B,cAAE,IAAI,CAAC,QAAQ,CAAC,WAAW;AAC3B,cAAE,IAAI,CAAC,WAAW,CAAC;AACvB,QAAA,MAAM,WAAW,GACf,IAAI,CAAC,WAAW,KAAK,SAAS;AAC5B,cAAE,IAAI,CAAC,QAAQ,CAAC,WAAW;AAC3B,cAAE,IAAI,CAAC,WAAW,CAAC;AACvB,QAAA,MAAM,WAAW,GACf,IAAI,CAAC,WAAW,KAAK,SAAS;AAC5B,cAAE,IAAI,CAAC,QAAQ,CAAC,WAAW;AAC3B,cAAE,IAAI,CAAC,WAAW,CAAC;AACvB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,IAAI,WAAW,IAAI,IAAI,CAAC,IAAI,IAAI,WAAW,CAAC;AAC1E,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,IAAI,WAAW,IAAI,IAAI,CAAC,IAAI,IAAI,WAAW,CAAC;AAC1E,QAAA,MAAM,YAAY,GAChB,IAAI,CAAC,WAAW,KAAK,SAAS;AAC5B,cAAE,IAAI,CAAC,QAAQ,CAAC,WAAW;AAC3B,cAAE,IAAI,CAAC,WAAW,CAAC;AACvB,QAAA,MAAM,YAAY,GAChB,IAAI,CAAC,WAAW,KAAK,SAAS;AAC5B,cAAE,IAAI,CAAC,QAAQ,CAAC,WAAW;AAC3B,cAAE,IAAI,CAAC,WAAW,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACnC,QAAA,MAAM,SAAS,GAAG,YAAY,IAAI,IAAI,CAAC;AACvC,QAAA,MAAM,SAAS,GAAG,YAAY,IAAI,IAAI,CAAC;QACvC,OAAO,EACL,kBAAkB;YAClB,WAAW;YACX,WAAW;YACX,YAAY;YACZ,YAAY;YACZ,SAAS;AACT,YAAA,SAAS,CACV,CAAC;KACH;AAED,IAAA,gBAAgB,CACd,IAAkB,EAAA;QAElB,IAAI,YAAY,GAAG,CAAC,CAAC;AACrB,QAAA,IAAI,MAAsC,CAAC;QAC3C,OAAO,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE;AACtD,YAAA,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACjC,YAAA,IACE,MAAM,CAAC,KAAK,KAAK,IAAI;gBACrB,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,EAC/C;AACA,gBAAA,OAAO,MAAM,CAAC;AACf,aAAA;AACF,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,iBAAiB,CAAC,IAAkB,EAAA;QAClC,MAAM,CAAC,GAA0C,EAAE,CAAC;QACpD,IAAI,YAAY,GAAG,CAAC,CAAC;AACrB,QAAA,IAAI,MAAsC,CAAC;QAC3C,OAAO,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE;AACtD,YAAA,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACjC,YAAA,IACE,MAAM,CAAC,KAAK,KAAK,IAAI;gBACrB,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,EAC/C;AACA,gBAAA,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAChB,aAAA;AACF,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACV;AAED,IAAA,gBAAgB,CAAC,aAA6C,EAAA;QAC5D,IAAI,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;AACrD,YAAA,aAAa,CAAC,SAAS,GAAG,KAAK,CAAC;YAChC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7C,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7C,aAAa,CAAC,WAAW,EAAE,CAAC;AAC7B,SAAA;AAAM,aAAA;AACL,YAAA,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC;AAC/B,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;gBAClC,OAAO,CAAC,IAAI,CACV,mDAAmD;AACjD,oBAAA,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CACjE,CAAC;AACH,aAAA;AACF,SAAA;KACF;AAwED,IAAA,iBAAiB,CACf,CAAS,EACT,cAAqC,EACrC,OAAiB,EAAA;QAEjB,MAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;AACtD,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,QAAQ,CAAC;AACjB,SAAA;AAAM,aAAA;YACL,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAC9B,SAAA;KACF;AAED,IAAA,iBAAiB,CACf,CAAS,EACT,cAAqC,EACrC,OAAiB,EAAA;QAEjB,MAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;AACvD,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,QAAQ,CAAC;AACjB,SAAA;AAAM,aAAA;YACL,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAC9B,SAAA;KACF;AAED,IAAA,iBAAiB,CAAC,CAAS,EAAA;AACzB,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;KAC7B;AAED,IAAA,iBAAiB,CAAC,CAAS,EAAA;AACzB,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;KAC9B;AAED,IAAA,gBAAgB,CACd,IAAkB,EAAA;AAElB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;KAC7C;;;AAKD,IAAA,wBAAwB,CACtB,IAAkB,EAAA;QAElB,IAAI,SAAS,GAA6C,KAAK,CAAC;AAChE,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE;YACrC,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;AACtD,SAAA;QACD,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE;YAC/C,SAAS,GAAG,IAAI,CAAC;AAClB,SAAA;QACD,IAAI,CAAC,SAAS,EAAE;YACd,MAAM,CAAC,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;AACjD,YAAA,IAAI,CAAC,EAAE;gBACL,SAAS,GAAG,CAAC,CAAC;AACf,aAAA;AACF,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;;AAGD,IAAA,2BAA2B,CACzB,IAAkB,EAAA;QAElB,IAAI,YAAY,GAAW,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAChD,QAAA,IAAI,MAAsC,CAAC;AAC3C,QAAA,OAAO,YAAY,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE;AACxC,YAAA,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACjC,YAAA,IACE,MAAM,CAAC,KAAK,KAAK,IAAI;gBACrB,iBAAiB,CAAC,gCAAgC,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,EACtE;AACA,gBAAA,OAAO,MAAM,CAAC;AACf,aAAA;AACF,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;IAED,YAAY,CAAC,IAAI,GAAG,KAAK,EAAA;QACvB,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;gBACxB,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAChD,aAAA;YACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1C,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,SAAA;KACF;;;AAKO,IAAA,OAAO,iBAAiB,CAC9B,MAAc,EACd,WAAmB,EACnB,IAAY,EAAA;AAEZ,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC;QAEnE,IAAI,SAAS,GAAG,CAAC,EAAE;AACjB,YAAA,OAAO,CAAC,CAAC;AACV,SAAA;AAED,QAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AAC9B,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC9B,SAAA;AAED,QAAA,OAAO,CAAC,CAAC;KACV;AA3vBU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,kBA+BlB,UAAU,EAAA,EAAA,EAAA,KAAA,EACV,SAAS,EACT,EAAA,EAAA,KAAA,EAAA,iBAAiB,aACjB,MAAM,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAlCL,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,yHCzC9B,gdAgBA,EAAA,MAAA,EAAA,CAAA,u4BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDuBY,OAAO,EAAE,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,2EAAE,wBAAwB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FAEzC,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAT7B,SAAS;AAEE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAGL,aAAA,EAAA,iBAAiB,CAAC,IAAI,EACzB,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,OAAO,EAAE,OAAO,EAAE,wBAAwB,CAAC,EAAA,QAAA,EAAA,gdAAA,EAAA,MAAA,EAAA,CAAA,u4BAAA,CAAA,EAAA,CAAA;;0BAiClD,MAAM;2BAAC,UAAU,CAAA;;0BACjB,MAAM;2BAAC,SAAS,CAAA;;0BAChB,MAAM;2BAAC,iBAAiB,CAAA;;0BACxB,MAAM;2BAAC,MAAM,CAAA;4CA/BP,OAAO,EAAA,CAAA;sBAAf,KAAK;;;MEzCK,YAAY,CAAA;AAgCvB,IAAA,WAAA,CAAY,YAA4C,EAAA;QAFhD,IAAS,CAAA,SAAA,GAAG,CAAC,CAAC;AAGpB,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC,UAAU,GAAG;AAChB,YAAA,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC;AACpE,YAAA,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC;AACpE,YAAA,SAAS,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;AACrE,YAAA,SAAS,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;SACtE,CAAC;AACF,QAAA,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC;AAC7B,QAAA,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC;AAC7B,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;AAC3B,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;KAC5B;IAED,OAAO,GAAA;QACL,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,GAAG,IAAK,CAAC;KAC3C;IAED,SAAS,CAAC,SAAiB,EAAE,OAAiB,EAAA;QAC5C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,IAAI,CAAC,OAAO,EAAE;AAChD,YAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;AAC3B,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;AACnB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;YACvD,IAAI,CAAC,MAAM,EAAE;gBACX,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACzB,aAAA;AACD,YAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;AAC3B,YAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAC1B,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;AAC9B,YAAA,OAAO,MAAM,CAAC;AACf,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;KACF;IAED,gBAAgB,GAAA;QACd,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;AACxC,QAAA,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAClB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,SAAA;KACF;IAED,YAAY,GAAA;QACV,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,QAAA,MAAM,CAAC,GAAW,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AAC1C,QAAA,IAAI,UAA0C,CAAC;AAC/C,QAAA,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACjB,YAAA,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACjC,YAAA,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5C,YAAA,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YAC5C,UAAU,CAAC,OAAO,EAAE,CAAC;AACtB,SAAA;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;KAC3B;IAED,cAAc,GAAA;QACZ,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,QAAA,MAAM,CAAC,GAAW,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AAC1C,QAAA,IAAI,UAA0C,CAAC;AAC/C,QAAA,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACjB,YAAA,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACjC,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;AAChE,SAAA;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;KAC3B;IAED,aAAa,GAAA;QACX,IAAI,CAAC,GAAW,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5C,IAAI,MAAM,GAAG,KAAK,CAAC;AACnB,QAAA,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;AAClB,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;gBAChD,MAAM,GAAG,IAAI,CAAC;AACf,aAAA;AACF,SAAA;AACD,QAAA,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,aAAa,EAAE,CAAC;AACtB,SAAA;KACF;IAEO,IAAI,CACV,YAA4C,EAC5C,SAAiB,EAAA;AAEjB,QAAA,IAAI,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE;AACxB,YAAA,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;AACtC,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;AACxD,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;QACD,IAAI,SAAS,KAAK,EAAE,EAAE;AACpB,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AACD,QAAA,MAAM,SAAS,GACb,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACtD,QAAA,MAAM,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ,CAAC;;;QAG3E,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACtB,YAAA,IAAI,MAAM,EAAE;gBACV,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACvD,aAAA;AAAM,iBAAA;gBACL,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACvD,aAAA;AACH,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,QAAA,IAAI,aAA6C,CAAC;QAClD,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,MAAM,WAAW,GAAqC,EAAE,CAAC;QACzD,OAAO,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAChC,YAAA,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAC7B,YAAA,IAAI,aAAa,KAAK,IAAI,CAAC,YAAY,EAAE;gBACvC,SAAS;AACV,aAAA;AACD,YAAA,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,EAAE;gBACjC,QAAQ,GAAG,KAAK,CAAC;gBACjB,MAAM;AACP,aAAA;YACD,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AACtD,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,EAAE;;gBAErD,QAAQ,GAAG,KAAK,CAAC;gBACjB,MAAM;AACP,aAAA;AACD,YAAA,IACE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,YAAY,CAAC,EACrE;AACA,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC1C,gBAAA,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACjC,aAAA;AAAM,iBAAA,IACL,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,YAAY,CAAC,EACrE;AACA,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC1C,gBAAA,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACjC,aAAA;AAAM,iBAAA,IACL,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,YAAY,CAAC,EACrE;AACA,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC1C,gBAAA,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACjC,aAAA;AAAM,iBAAA,IACL,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,YAAY,CAAC,EACrE;AACA,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC1C,gBAAA,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACjC,aAAA;AAAM,iBAAA;gBACL,QAAQ,GAAG,KAAK,CAAC;gBACjB,MAAM;AACP,aAAA;AACF,SAAA;QACD,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;gBACV,IAAI,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;AACzC,gBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAClB,oBAAA,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AACzC,oBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC;AAC5B,oBAAA,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;AACzC,oBAAA,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;AAC1C,iBAAA;AACF,aAAA;AACF,SAAA;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,QAAA,OAAO,QAAQ,CAAC;KACjB;IAEO,QAAQ,CACd,mBAAmD,EACnD,YAA4C,EAAA;QAE5C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE;AAChD,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AACD,QAAA,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;QAC1C,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACzB,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;QACjD,IAAI,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE;YAClD,mBAAmB,CAAC,OAAO,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;AACtC,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;AAChD,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;IAEO,QAAQ,CACd,mBAAmD,EACnD,YAA4C,EAAA;QAE5C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE;AAChD,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AACD,QAAA,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;QAC1C,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACzB,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC;QACxD,IAAI,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE;YAClD,mBAAmB,CAAC,OAAO,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;AACtC,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;AAChD,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;IAEO,OAAO,CACb,mBAAmD,EACnD,YAA4C,EAAA;QAE5C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE;AAC/C,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AACD,QAAA,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;QAC1C,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACzB,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;QACjD,IAAI,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE;YACjD,mBAAmB,CAAC,OAAO,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;AACtC,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;AAChD,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;IAEO,OAAO,CACb,mBAAmD,EACnD,YAA4C,EAAA;QAE5C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE;AAC/C,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AACD,QAAA,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;QAC1C,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACzB,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC;QACxD,IAAI,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE;YACjD,mBAAmB,CAAC,OAAO,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;AACtC,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;AAChD,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,eAAe,CAAC,YAA4C,EAAA;QAClE,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YACZ,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAChD,YAAA,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAClC,SAAA;AACD,QAAA,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/B,YAAA,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;AACvB,YAAA,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;AACxB,SAAA,CAAC,CAAC;KACJ;AAEO,IAAA,oBAAoB,CAC1B,YAA4C,EAAA;QAE5C,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACvD,IAAI,CAAC,YAAY,EAAE;YACjB,OAAO;AACR,SAAA;QACD,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;QACtC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;QACtC,YAAY,CAAC,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;YACvC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvC,SAAA;KACF;AAEO,IAAA,WAAW,CAAC,YAA4C,EAAA;QAC9D,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;AAC9C,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACpC,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,gBAAA,EAAE,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;AAC5D,gBAAA,EAAE,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE;AACrD,aAAA,CAAC,CAAC;AACJ,SAAA;AAAM,aAAA;YACL,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACjD,YAAA,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3B,gBAAA,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;AACvB,gBAAA,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;AACxB,aAAA,CAAC,CAAC;AACJ,SAAA;KACF;AAEO,IAAA,gBAAgB,CAAC,CAAS,EAAA;AAChC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;YACV,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACnC,SAAA;KACF;AAEO,IAAA,oBAAoB,CAC1B,YAA4C,EAAA;QAE5C,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;YACV,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;gBAChC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACnC,aAAA;AACF,SAAA;KACF;IAEO,eAAe,CACrB,UAA0C,EAC1C,CAAS,EAAA;QAET,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACxB,QAAA,IAAI,YAAY,CAAC;AACjB,QAAA,IAAI,CAAC,CAAC;AACN,QAAA,IAAI,CAAC,CAAC;QACN,IAAI,MAAM,GAAG,KAAK,CAAC;AACnB,QAAA,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;AAClB,YAAA,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACvB,YAAA,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AACvB,YAAA,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YACvB,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;YACpC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;gBACrD,UAAU,CAAC,OAAO,EAAE,CAAC;AACrB,gBAAA,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBACxC,MAAM,GAAG,IAAI,CAAC;AACf,aAAA;AAAM,iBAAA;AACL,gBAAA,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;AACvB,gBAAA,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;AACxB,aAAA;AACF,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACnB,YAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAC1B,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AACF;;AC3XD,IAAI,iBAAyB,CAAC;AAC9B,IAAI,WAAmB,CAAC;AACxB,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAC5B,IAAI,eAAmC,CAAC;AACxC,IAAI,WAAgC,CAAC;AACrC,IAAI,eAAoD,CAAC;AACzD,IAAI,SAAiB,CAAC;AACtB,IAAI,SAAiB,CAAC;AACtB,IAAI,SAAiB,CAAC;AACtB,IAAI,SAAiB,CAAC;AAMhB,SAAU,MAAM,CACpB,QAAoC,EACpC,IAAY,EACZ,GAAW,EACX,KAAa,EACb,MAAc,EACd,KAAiB,EACjB,SAAmB,EACnB,qBAAwC,EACxC,MAAgB,EAChB,qBAA+C,EAAA;AAE/C,IAAA,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC;AACxD,IAAA,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC;AAC5C,IAAA,eAAe,GAAG,QAAQ,CAAC,EAAE,CAAC;IAC9B,WAAW,GAAG,MAAM,CAAC;IACrB,eAAe,GAAG,qBAAqB,CAAC;AAExC,IAAA,MAAM,WAAW,GAAG,eAAe,CAAC,WAAW,CAAC;AAChD,IAAA,MAAM,YAAY,GAAG,eAAe,CAAC,YAAY,CAAC;AAClD,IAAA,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,CAAC;AAC9C,IAAA,MAAM,SAAS,GAAG,eAAe,CAAC,SAAS,CAAC;AAC5C,IAAA,MAAM,aAAa,GAAG,GAAG,GAAG,SAAS,CAAC;IACtC,MAAM,gBAAgB,GAAG,YAAY,GAAG,SAAS,GAAG,GAAG,GAAG,MAAM,CAAC;AAEjE,IAAA,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;AAEnC,IAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,qBAAqB,EAAE;QAC5C,IAAI,SAAS,CAAC,OAAO,GAAG,OAAO,IAAI,gBAAgB,GAAG,iBAAiB,EAAE;AACvE,YAAA,OAAO,EAAE,CAAC;YACV,IACE,CAAC,WAAW,IAAI,eAAe,IAAI,CAAC,eAAe,CAAC,KAAK;AACzD,gBAAA,SAAS,EACT;gBACA,OAAO;AACR,aAAA;YACD,SAAS,GAAG,aAAa,CAAC,CAAC,EAAE,qBAAqB,EAAE,SAAS,CAAC,CAAC;AAChE,SAAA;AAAM,aAAA,IACL,SAAS,CAAC,OAAO,GAAG,OAAO;AAC3B,YAAA,SAAS,GAAG,CAAC;YACb,aAAa,GAAG,iBAAiB,EACjC;AACA,YAAA,OAAO,EAAE,CAAC;YACV,IACE,CAAC,WAAW,IAAI,eAAe,IAAI,CAAC,eAAe,CAAC,KAAK;AACzD,gBAAA,SAAS,EACT;gBACA,OAAO;AACR,aAAA;YACD,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,SAAS,CAAC,CAAC;AACjE,SAAA;AAAM,aAAA,IAAI,SAAS,CAAC,OAAO,KAAK,OAAO,EAAE;AACxC,YAAA,cAAc,EAAE,CAAC;AAClB,SAAA;AACF,KAAA;IAED,MAAM,eAAe,GAAG,UAAU,GAAG,WAAW,GAAG,IAAI,GAAG,KAAK,CAAC;AAChE,IAAA,MAAM,cAAc,GAAG,IAAI,GAAG,UAAU,CAAC;AAEzC,IAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,EAAE;QAC9C,IAAI,SAAS,CAAC,OAAO,GAAG,OAAO,IAAI,eAAe,IAAI,iBAAiB,EAAE;AACvE,YAAA,OAAO,EAAE,CAAC;YACV,IACE,CAAC,WAAW,IAAI,eAAe,IAAI,CAAC,eAAe,CAAC,IAAI;AACxD,gBAAA,SAAS,EACT;gBACA,OAAO;AACR,aAAA;YACD,SAAS,GAAG,eAAe,CAAC,CAAC,EAAE,qBAAqB,EAAE,SAAS,CAAC,CAAC;AAClE,SAAA;AAAM,aAAA,IACL,SAAS,CAAC,OAAO,GAAG,OAAO;AAC3B,YAAA,UAAU,GAAG,CAAC;YACd,cAAc,GAAG,iBAAiB,EAClC;AACA,YAAA,OAAO,EAAE,CAAC;YACV,IACE,CAAC,WAAW,IAAI,eAAe,IAAI,CAAC,eAAe,CAAC,IAAI;AACxD,gBAAA,SAAS,EACT;gBACA,OAAO;AACR,aAAA;YACD,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,SAAS,CAAC,CAAC;AACnE,SAAA;AAAM,aAAA,IAAI,SAAS,CAAC,OAAO,KAAK,OAAO,EAAE;AACxC,YAAA,gBAAgB,EAAE,CAAC;AACpB,SAAA;AACF,KAAA;AACH,CAAC;AAED,SAAS,aAAa,CACpB,IAAY,EACZ,qBAAwC,EACxC,SAAmB,EAAA;AAEnB,IAAA,IAAI,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;AAChC,IAAA,OAAO,MAAM,CAAC,WAAW,CAAC,MAAK;AAC7B,QAAA,IACE,CAAC,eAAe;AAChB,aAAC,IAAI,KAAK,CAAC,CAAC,IAAI,eAAe,CAAC,SAAS,GAAG,WAAW,GAAG,CAAC,CAAC,EAC5D;AACA,YAAA,cAAc,EAAE,CAAC;AAClB,SAAA;AACD,QAAA,eAAgB,CAAC,SAAS,IAAI,IAAI,GAAG,WAAW,CAAC;AACjD,QAAA,OAAO,IAAI,IAAI,GAAG,WAAW,CAAC;QAC9B,qBAAqB,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;KAChE,EAAE,gBAAgB,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,eAAe,CACtB,IAAY,EACZ,qBAAwC,EACxC,SAAmB,EAAA;AAEnB,IAAA,IAAI,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;AAChC,IAAA,OAAO,MAAM,CAAC,WAAW,CAAC,MAAK;AAC7B,QAAA,IACE,CAAC,eAAe;AAChB,aAAC,IAAI,KAAK,CAAC,CAAC,IAAI,eAAe,CAAC,UAAU,GAAG,WAAW,GAAG,CAAC,CAAC,EAC7D;AACA,YAAA,gBAAgB,EAAE,CAAC;AACpB,SAAA;AACD,QAAA,eAAgB,CAAC,UAAU,IAAI,IAAI,GAAG,WAAW,CAAC;AAClD,QAAA,OAAO,IAAI,IAAI,GAAG,WAAW,CAAC;QAC9B,qBAAqB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;KAChE,EAAE,gBAAgB,CAAC,CAAC;AACvB,CAAC;SAEe,YAAY,GAAA;AAC1B,IAAA,gBAAgB,EAAE,CAAC;AACnB,IAAA,cAAc,EAAE,CAAC;IACjB,eAAe,GAAG,IAAI,CAAC;AACzB,CAAC;AAED,SAAS,gBAAgB,GAAA;AACvB,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,cAAc,GAAA;AACrB,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,OAAO,GAAA;AACd,IAAA,IAAI,SAAS,EAAE;QACb,aAAa,CAAC,SAAS,CAAC,CAAC;QACzB,SAAS,GAAG,CAAC,CAAC;AACf,KAAA;AACH,CAAC;AAED,SAAS,OAAO,GAAA;AACd,IAAA,IAAI,SAAS,EAAE;QACb,aAAa,CAAC,SAAS,CAAC,CAAC;QACzB,SAAS,GAAG,CAAC,CAAC;AACf,KAAA;AACH,CAAC;AAED,SAAS,OAAO,GAAA;AACd,IAAA,IAAI,SAAS,EAAE;QACb,aAAa,CAAC,SAAS,CAAC,CAAC;QACzB,SAAS,GAAG,CAAC,CAAC;AACf,KAAA;AACH,CAAC;AAED,SAAS,OAAO,GAAA;AACd,IAAA,IAAI,SAAS,EAAE;QACb,aAAa,CAAC,SAAS,CAAC,CAAC;QACzB,SAAS,GAAG,CAAC,CAAC;AACf,KAAA;AACH;;MCtLa,YAAY,CAAA;AAKvB,IAAA,WAAA,CAAY,YAA4C,EAAA;AACtD,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC;KACvC;IAED,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,GAAG,IAAK,CAAC;KAC7D;IAED,SAAS,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE;YAC/B,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACnC,SAAA;KACF;IAED,aAAa,GAAA;QACX,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,MAAM,CAAC,GAAW,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,GAAW,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1C,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AACtD,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AACtD,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;gBACvD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC5B,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7B,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;AAC1B,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAC1D,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAC1D,gBAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;AAC7B,aAAA;AACF,SAAA;KACF;IAED,eAAe,GAAA;QACb,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AACtD,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AACtD,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;AAC1B,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;AAC7B,SAAA;KACF;IAED,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAC9B,IAAI,CAAC,UAAU,CAAC,KAAK,EACrB,IAAI,CAAC,UAAU,CAAC,IAAI,CACrB,CAAC;AACF,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;AAC7B,SAAA;KACF;AAED,IAAA,SAAS,CAAC,QAAwC,EAAA;AAChD,QAAA,IAAI,qBAAqB,CAAC;AAC1B,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,EAAE;YAC5C,qBAAqB,GAAG,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAC5D,QAAQ,CAAC,KAAK,CACf,CAAC;AACH,SAAA;AAAM,aAAA;YACL,qBAAqB,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACtE,SAAA;AACD,QAAA,IACE,qBAAqB;AACrB,YAAA,qBAAqB,KAAK,IAAI;YAC9B,qBAAqB,CAAC,YAAY,EAAE,EACpC;YACA,MAAM,mBAAmB,GACvB,qBAAqB,CAAC;AACxB,YAAA,MAAM,cAAc,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;AACnD,YAAA,MAAM,cAAc,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;AACnD,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/B,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/B,YAAA,MAAM,KAAK,GAAG,KAAK,GAAG,cAAc,CAAC;AACrC,YAAA,MAAM,KAAK,GAAG,KAAK,GAAG,cAAc,CAAC;AACrC,YAAA,mBAAmB,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;AACtD,YAAA,mBAAmB,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;AACtD,YAAA,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;AACtD,YAAA,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;YACtD,IACE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,mBAAmB,CAAC,KAAK,CAAC;gBACvD,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAC5C;AACA,gBAAA,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC;AACzB,gBAAA,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC;AACzB,gBAAA,mBAAmB,CAAC,KAAK,CAAC,CAAC,GAAG,cAAc,CAAC;AAC7C,gBAAA,mBAAmB,CAAC,KAAK,CAAC,CAAC,GAAG,cAAc,CAAC;AAC9C,aAAA;AAAM,iBAAA;gBACL,mBAAmB,CAAC,OAAO,EAAE,CAAC;AAC9B,gBAAA,IAAI,CAAC,UAAU,GAAG,mBAAmB,CAAC;AACtC,gBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,EAAE;AAC5C,oBAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAChC,IAAI,CAAC,YAAY,CAAC,KAAK,EACvB,IAAI,CAAC,YAAY,CAAC,IAAI,CACvB,CAAC;oBACF,IAAI,CAAC,WAAW,EAAE,CAAC;AACpB,iBAAA;AACF,aAAA;AACF,SAAA;KACF;AACF;;AClGD,MAAM,qCAAqC,GAAG,iCAAiC,CAAC;AAEhF,IAAK,SAKJ,CAAA;AALD,CAAA,UAAK,SAAS,EAAA;AACZ,IAAA,SAAA,CAAA,IAAA,CAAA,GAAA,IAAS,CAAA;AACT,IAAA,SAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,SAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,SAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACjB,CAAC,EALI,SAAS,KAAT,SAAS,GAKb,EAAA,CAAA,CAAA,CAAA;MAEY,iBAAiB,CAAA;AAyC5B,IAAA,WAAA,CACE,YAA4C,EAC5C,QAAoC,EAC5B,IAAY,EAAA;QAAZ,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;QALtB,IAAS,CAAA,SAAA,GAA6C,KAAK,CAAC;AAuH5D,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,CAAa,KAAU;YACjC,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,CAAC,CAAC,cAAc,EAAE,CAAC;AACnB,YAAA,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;;YAGjC,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAEvC,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE;;AAE/C,gBAAA,IACE,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBACjC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,GAAG;wBAC9C,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,GAAG;6BACzC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,EACxC;AACA,oBAAA,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,IAAI,SAAS,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;AACvE,oBAAA,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE;wBACzB,OAAO,EAAE,CAAC,CAAC,OAAO;AAClB,wBAAA,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO;AAChC,qBAAA,CAAC,CAAC;AACJ,iBAAA;;AAED,gBAAA,IACE,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;oBACnC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,IAAI;wBAC/C,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,IAAI;6BAC1C,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,MAAM,CAAC,EACzC;AACA,oBAAA,UAAU,GAAG,UAAU,CAAC,MAAM,CAC5B,SAAS,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,CACzC,CAAC;AACF,oBAAA,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE;AACzB,wBAAA,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO;wBAC/B,OAAO,EAAE,CAAC,CAAC,OAAO;AACnB,qBAAA,CAAC,CAAC;AACJ,iBAAA;;AAED,gBAAA,IACE,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC;oBACpC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,KAAK;wBAChD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,KAAK;6BAC3C,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,EAC1C;AACA,oBAAA,UAAU,GAAG,UAAU,CAAC,MAAM,CAC5B,SAAS,IAAI,SAAS,IAAI,SAAS,CAAC,KAAK,CAC1C,CAAC;AACF,oBAAA,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE;AACzB,wBAAA,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO;wBAC/B,OAAO,EAAE,CAAC,CAAC,OAAO;AACnB,qBAAA,CAAC,CAAC;AACJ,iBAAA;;AAED,gBAAA,IACE,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;oBACnC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,MAAM;wBACjD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,MAAM;6BAC5C,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,EAC3C;AACA,oBAAA,UAAU,GAAG,UAAU,CAAC,MAAM,CAC5B,SAAS,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,CACzC,CAAC;AACF,oBAAA,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE;wBACzB,OAAO,EAAE,CAAC,CAAC,OAAO;AAClB,wBAAA,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO;AAChC,qBAAA,CAAC,CAAC;AACJ,iBAAA;AACF,aAAA;;YAGD,IAAI,UAAU,CAAC,MAAM,EAAE;AACrB,gBAAA,IAAI,CAAC,UAAU;AACb,oBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU,CAAC;AAC5D,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC;AACzE,gBAAA,MAAM,CACJ,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,EACX,CAAC,EACD,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,sCAAsC,CAC5C,CAAC;AAEF,gBAAA,IAAI,CAAC,sCAAsC,CAAC,CAAC,CAAC,CAAC;AAChD,aAAA;AACH,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,sCAAsC,GAAG,CAAC,CAAa,KAAU;AAC/D,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE;AAC/B,gBAAA,IAAI,CAAC,8BAA8B,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACrE,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC,CAAC;AAC3C,aAAA;YACD,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;AACnC,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,gBAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;AAC7B,aAAC,CAAC,CAAC;AACL,SAAC,CAAC;AAiCF,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,CAAa,KAAU;YACjC,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,CAAC,CAAC,cAAc,EAAE,CAAC;AAEnB,YAAA,YAAY,EAAE,CAAC;YACf,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,WAAW,EAAE,CAAC;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CACpC,IAAI,CAAC,YAAY,CAAC,EAAE,EACpB,sBAAsB,CACvB,CAAC;AACF,YAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,KAAK,CAAC;AACrC,YAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;AAC3B,YAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AACf,YAAA,IACE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS;gBAC/B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EACpC;AACA,gBAAA,OAAO,CAAC,OAAO,CACb,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAClC,IAAI,CAAC,YAAY,CAAC,IAAI,EACtB,IAAI,CAAC,YAAY,EACjB,CAAC,CACF,CACF,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACxC,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,QAAQ,EAAE,CAAC;AACjB,aAAA;YACD,UAAU,CAAC,MAAK;gBACd,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,oBAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;AAChC,oBAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAClC,iBAAA;AACH,aAAC,CAAC,CAAC;AACL,SAAC,CAAC;QAEF,IAAU,CAAA,UAAA,GAAG,MAAW;AACtB,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAC1D,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAC1D,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;AAC1B,aAAA;YACD,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;AAC7B,aAAA;YACD,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACpB,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAK,CAAC;AACnB,aAAA;YACD,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACpB,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAK,CAAC;AACnB,aAAA;AACH,SAAC,CAAC;QAEF,IAAQ,CAAA,QAAA,GAAG,MAAW;YACpB,IACE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,aAAa;AAC9C,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS;AAC/B,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,qBAAqB;AACrD,gBAAA,IAAI,CAAC,SAAS;gBACd,IAAI,CAAC,SAAS,KAAK,IAAI;AACvB,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EACpB;gBACA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,qBAAqB,CACnD,IAAI,CAAC,YAAY,CAAC,IAAI,EACtB,IAAI,CAAC,SAAS,CAAC,IAAI,EACnB,IAAI,CAAC,QAAQ,CACd,CAAC;AACH,aAAA;AACD,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAChC,IAAI,CAAC,YAAY,CAAC,KAAK,EACvB,IAAI,CAAC,YAAY,CAAC,IAAI,CACvB,CAAC;YACF,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;AAC5B,aAAA;YACD,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACzB,aAAA;YACD,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACpB,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAK,CAAC;AACnB,aAAA;YACD,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACpB,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAK,CAAC;AACnB,aAAA;AACH,SAAC,CAAC;AAwFF,QAAA,IAAA,CAAA,cAAc,GAAG,CAAC,CAAa,KAAU;AACvC,YAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAqB,CAAC;YACvC,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,qCAAqC,CAAC,EAAE;gBACpE,OAAO;AACR,aAAA;YACD,IAAI,aAAa,CAAC,yBAAyB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE;gBAC7D,OAAO;AACR,aAAA;AACD,YAAA,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE;AAChD,gBAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAClB,OAAO;AACR,aAAA;AACD,YAAA,MAAM,OAAO,GAAG,UAAU,CAAC,MAAK;AAC9B,gBAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAClB,gBAAA,UAAU,EAAE,CAAC;aACd,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAChD,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CACnD,UAAU,EACV,SAAS,EACT,UAAU,CACX,CAAC;AACF,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CACxD,UAAU,EACV,YAAY,EACZ,UAAU,CACX,CAAC;AACF,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CACpD,QAAQ,EACR,MAAM,EACN,UAAU,CACX,CAAC;AACF,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CACvD,UAAU,EACV,WAAW,EACX,UAAU,CACX,CAAC;AACF,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CACtD,UAAU,EACV,UAAU,EACV,UAAU,CACX,CAAC;AACF,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CACzD,UAAU,EACV,aAAa,EACb,UAAU,CACX,CAAC;YAEF,SAAS,UAAU,CAAC,SAAqB,EAAA;AACvC,gBAAA,aAAa,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;AACzC,gBAAA,IACE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;AAC3C,oBAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAC3C;AACA,oBAAA,UAAU,EAAE,CAAC;AACd,iBAAA;aACF;AAED,YAAA,SAAS,UAAU,GAAA;gBACjB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,gBAAA,YAAY,EAAE,CAAC;AACf,gBAAA,WAAW,EAAE,CAAC;AACd,gBAAA,gBAAgB,EAAE,CAAC;AACnB,gBAAA,eAAe,EAAE,CAAC;AAClB,gBAAA,cAAc,EAAE,CAAC;AACjB,gBAAA,iBAAiB,EAAE,CAAC;aACrB;AACH,SAAC,CAAC;AAjfA,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG;AACf,YAAA,OAAO,EAAE,CAAC;AACV,YAAA,OAAO,EAAE,CAAC;SACX,CAAC;AACF,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;KAChB;IAED,OAAO,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;AAC9B,YAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAClC,SAAA;AACD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,IAAK,CAAC;QAC3D,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,UAAU,EAAE,CAAC;AACnB,SAAA;KACF;AAED,IAAA,SAAS,CAAC,CAAa,EAAA;QACrB,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE;YAC5B,OAAO;AACR,SAAA;AAED,QAAA,IACE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS;YAC/B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EACrC;YACA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CACnC,IAAI,CAAC,YAAY,CAAC,IAAI,EACtB,IAAI,CAAC,YAAY,EACjB,CAAC,CACF,CAAC;AACH,SAAA;QAED,CAAC,CAAC,eAAe,EAAE,CAAC;QACpB,CAAC,CAAC,cAAc,EAAE,CAAC;AAEnB,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AAC/B,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAChD,UAAU,EACV,WAAW,EACX,IAAI,CAAC,QAAQ,CACd,CAAC;YACF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAC5C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAChB,WAAW,EACX,IAAI,CAAC,QAAQ,CACd,CAAC;AACJ,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAC9C,UAAU,EACV,SAAS,EACT,IAAI,CAAC,QAAQ,CACd,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CACjD,UAAU,EACV,YAAY,EACZ,IAAI,CAAC,QAAQ,CACd,CAAC;AACF,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CACnD,QAAQ,EACR,MAAM,EACN,IAAI,CAAC,QAAQ,CACd,CAAC;AACF,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAC/C,UAAU,EACV,UAAU,EACV,IAAI,CAAC,QAAQ,CACd,CAAC;AACF,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAClD,UAAU,EACV,aAAa,EACb,IAAI,CAAC,QAAQ,CACd,CAAC;AACF,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CACjC,IAAI,CAAC,YAAY,CAAC,EAAE,EACpB,sBAAsB,CACvB,CAAC;QACF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC5C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC5D,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAChE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAClE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC;AAC9D,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU,CAAC;AAC5E,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC;AACzE,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;AACjD,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;AAC/C,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,OAAO,CAAC;AACjC,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,OAAO,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QACrC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;QACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,GAAG,EAAE;AACnD,YAAA,IAAI,CAAC,QAAQ;AACX,gBAAA,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrE,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;AACvE,SAAA;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;QACnE,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACnD,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC;AACpC,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACb,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;YAChC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;AACjC,SAAA,CAAC,CAAC;KACJ;IAyGD,8BAA8B,CAAC,CAAa,EAAE,KAAa,EAAA;QACzD,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,GAAG,EAAE;AACnD,YAAA,IAAI,CAAC,IAAI;AACP,gBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW;AAC5B,oBAAA,IAAI,CAAC,eAAe;oBACpB,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,IAAI,KAAK;oBAC1C,IAAI,CAAC,QAAQ,CAAC;AACjB,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,IAAI;AACP,gBAAA,IAAI,CAAC,eAAe;oBACpB,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,IAAI,KAAK;AAC1C,oBAAA,IAAI,CAAC,UAAU;oBACf,IAAI,CAAC,QAAQ,CAAC;AACjB,SAAA;AACD,QAAA,IAAI,CAAC,GAAG;AACN,YAAA,IAAI,CAAC,eAAe;gBACpB,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,IAAI,KAAK;AAC1C,gBAAA,IAAI,CAAC,SAAS;gBACd,IAAI,CAAC,OAAO,CAAC;KAChB;AAED,IAAA,iCAAiC,CAAC,CAAa,EAAA;QAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,GAAG,EAAE;AACnD,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;AACtE,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;AACzD,SAAA;AAED,QAAA,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;KACtD;IAoGD,qBAAqB,GAAA;QACnB,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACnD,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACxE,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACvE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;AAC3C,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;YAC7D,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;AAClD,SAAA;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;AAC3C,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;YAC7D,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;AAClD,SAAA;QACD,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,eAAe,CACxC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAC1B,IAAI,CAAC,YAAY,CAAC,EAAE,EACpB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,GAAG,CACT,CAAC;QAEF,IACE,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAClD,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAClD;AACA,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACrD,IAAI,SAAS,GAAG,EAAE,CAAC;YACnB,IAAI,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE;AAC9C,gBAAA,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AAChC,aAAA;iBAAM,IAAI,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE;AACrD,gBAAA,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AAChC,aAAA;iBAAM,IAAI,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE;AACrD,gBAAA,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;AACjC,aAAA;iBAAM,IAAI,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE;AACrD,gBAAA,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;AACjC,aAAA;AACD,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;AACzE,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;AACtB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACvE,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;gBACjD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;gBACjD,IACE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,aAAa;oBAC9C,IAAI,CAAC,SAAS,KAAK,IAAI;AACvB,oBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EACpB;AACA,oBAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;AACjC,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACb,oBAAA,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC5B,oBAAA,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC7B,iBAAA,CAAC,CAAC;AACJ,aAAA;AACD,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AAC3B,SAAA;AAAM,aAAA;;;;AAIL,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACxB,SAAA;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;KAClC;IAED,MAAM,GAAA;QACJ,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;AACpD,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,UAAU,EAAE;AAC/B,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAChD,IAAI,CAAC,YAAY,CAAC,EAAE,EACpB,WAAW,EACX,IAAI,CAAC,cAAc,CACpB,CAAC;YACF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CACjD,IAAI,CAAC,YAAY,CAAC,EAAE,EACpB,YAAY,EACZ,IAAI,CAAC,cAAc,CACpB,CAAC;AACH,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU,EAAE;AACtC,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;YAC7B,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,UAAU,EAAE,CAAC;AACnB,SAAA;KACF;AAuED;;;AAGK;AACG,IAAA,aAAa,CAAC,CAAa,EAAA;QACjC,MAAM,UAAU,GAAa,EAAE,CAAC;AAChC,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,KAAK,CAAC,EAAE;YAChE,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;AACpC,SAAA;QACD,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE;AACtC,YAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAC/B,SAAA;QACD,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE;AACtC,YAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACjC,SAAA;QACD,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE;AACtC,YAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAClC,SAAA;QACD,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE;AACtC,YAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACjC,SAAA;AACD,QAAA,OAAO,UAAU,CAAC;KACnB;AACF;;MCtkBY,kBAAkB,CAAA;AAgC7B,IAAA,WAAA,CAAY,YAA4C,EAAA;AACtD,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC,UAAU,GAAG;YAChB,QAAQ,EAAE,IAAI,CAAC,OAAO;YACtB,QAAQ,EAAE,IAAI,CAAC,OAAO;YACtB,SAAS,EAAE,IAAI,CAAC,QAAQ;YACxB,SAAS,EAAE,IAAI,CAAC,QAAQ;SACzB,CAAC;AACF,QAAA,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC;AAC7B,QAAA,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC;AAC7B,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;AAC3B,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;KAC5B;IAED,OAAO,GAAA;QACL,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,GAAG,IAAK,CAAC;KAC3C;AAED,IAAA,SAAS,CAAC,SAAiB,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,EAAE;YAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;AAChD,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;KACF;IAED,YAAY,GAAA;QACV,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,QAAA,MAAM,CAAC,GAAW,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AAC1C,QAAA,IAAI,UAA0C,CAAC;AAC/C,QAAA,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACjB,YAAA,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACjC,YAAA,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5C,YAAA,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5C,YAAA,UAAU,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;AAClD,YAAA,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YAChD,UAAU,CAAC,OAAO,EAAE,CAAC;AACtB,SAAA;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;KAC3B;IAED,cAAc,GAAA;QACZ,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,QAAA,MAAM,CAAC,GAAW,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AAC1C,QAAA,IAAI,UAA0C,CAAC;AAC/C,QAAA,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACjB,YAAA,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACjC,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;AAChE,SAAA;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;KAC3B;IAED,aAAa,GAAA;QACX,IAAI,CAAC,GAAW,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5C,IAAI,MAAM,GAAG,KAAK,CAAC;AACnB,QAAA,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;AAClB,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;gBAChD,MAAM,GAAG,IAAI,CAAC;AACf,aAAA;AACF,SAAA;AACD,QAAA,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,aAAa,EAAE,CAAC;AACtB,SAAA;KACF;IAEO,IAAI,CACV,YAA4C,EAC5C,SAAiB,EAAA;AAEjB,QAAA,MAAM,qBAAqB,GACzB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACnD,QAAA,IACE,qBAAqB;AACrB,YAAA,qBAAqB,KAAK,IAAI;YAC9B,qBAAqB,KAAK,IAAI,CAAC,YAAY;YAC3C,qBAAqB,CAAC,YAAY,EAAE,EACpC;AACA,YAAA,IACE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,CAC7B,IAAI,EACJ,qBAAqB,EACrB,YAAY,EACZ,SAAS,CACV,EACD;AACA,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACF,SAAA;aAAM,IAAI,qBAAqB,KAAK,KAAK,EAAE;AAC1C,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,QAAQ,CACd,mBAAmD,EACnD,YAA4C,EAC5C,SAAiB,EAAA;AAEjB,QAAA,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5C,QAAA,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC;QAClD,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACzB,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;QACjD,mBAAmB,CAAC,KAAK,CAAC,IAAI;YAC5B,UAAU,GAAG,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;AACrD,QAAA,IACE,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CACnC,mBAAmB,CAAC,KAAK,EACzB,YAAY,CAAC,KAAK,CACnB;YACD,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAC5D;YACA,mBAAmB,CAAC,OAAO,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;AACtC,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;AACnC,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAAM,aAAA;AACL,YAAA,mBAAmB,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,CAAC;AACtC,YAAA,mBAAmB,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC;AAC7C,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,QAAQ,CACd,mBAAmD,EACnD,YAA4C,EAC5C,SAAiB,EAAA;AAEjB,QAAA,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC;QAClD,mBAAmB,CAAC,KAAK,CAAC,IAAI;YAC5B,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;AACrD,QAAA,IACE,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CACnC,mBAAmB,CAAC,KAAK,EACzB,YAAY,CAAC,KAAK,CACnB;YACD,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAC5D;YACA,mBAAmB,CAAC,OAAO,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;AACtC,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;AACnC,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAAM,aAAA;AACL,YAAA,mBAAmB,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC;AAC7C,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,OAAO,CACb,mBAAmD,EACnD,YAA4C,EAC5C,SAAiB,EAAA;AAEjB,QAAA,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5C,QAAA,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC;QAClD,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACzB,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;QACjD,mBAAmB,CAAC,KAAK,CAAC,IAAI;YAC5B,UAAU,GAAG,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;AACrD,QAAA,IACE,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CACnC,mBAAmB,CAAC,KAAK,EACzB,YAAY,CAAC,KAAK,CACnB;YACD,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAC5D;YACA,mBAAmB,CAAC,OAAO,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;AACtC,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;AACnC,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAAM,aAAA;AACL,YAAA,mBAAmB,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,CAAC;AACtC,YAAA,mBAAmB,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC;AAC7C,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,OAAO,CACb,mBAAmD,EACnD,YAA4C,EAC5C,SAAiB,EAAA;AAEjB,QAAA,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC;QAClD,mBAAmB,CAAC,KAAK,CAAC,IAAI;YAC5B,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;AACrD,QAAA,IACE,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CACnC,mBAAmB,CAAC,KAAK,EACzB,YAAY,CAAC,KAAK,CACnB;YACD,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAC5D;YACA,mBAAmB,CAAC,OAAO,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;AACtC,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;AACnC,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAAM,aAAA;AACL,YAAA,mBAAmB,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC;AAC7C,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,WAAW,CAAC,YAA4C,EAAA;QAC9D,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;AAC9C,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACpC,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,gBAAA;AACE,oBAAA,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;AAC3B,oBAAA,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;AAC3B,oBAAA,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AACjC,oBAAA,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AAClC,iBAAA;AACD,gBAAA;AACE,oBAAA,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;AACvB,oBAAA,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;AACvB,oBAAA,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI;AAC7B,oBAAA,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI;AAC9B,iBAAA;AACF,aAAA,CAAC,CAAC;AACJ,SAAA;AAAM,aAAA;YACL,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACjD,YAAA,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3B,gBAAA,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;AACvB,gBAAA,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;AACvB,gBAAA,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI;AAC7B,gBAAA,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI;AAC9B,aAAA,CAAC,CAAC;AACJ,SAAA;KACF;AAEO,IAAA,gBAAgB,CAAC,CAAS,EAAA;AAChC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;YACV,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACnC,SAAA;KACF;IAEO,eAAe,CACrB,UAA0C,EAC1C,CAAS,EAAA;QAET,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACxB,QAAA,IAAI,YAAkE,CAAC;AACvE,QAAA,IAAI,CAAC,CAAC;AACN,QAAA,IAAI,CAAC,CAAC;AACN,QAAA,IAAI,IAAI,CAAC;AACT,QAAA,IAAI,IAAI,CAAC;AACT,QAAA,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;AAClB,YAAA,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACvB,YAAA,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AACvB,YAAA,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AACvB,YAAA,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;AAC7B,YAAA,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;YAC7B,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;YACpC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;YACpC,UAAU,CAAC,KAAK,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC;YAC1C,UAAU,CAAC,KAAK,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;gBACrD,UAAU,CAAC,OAAO,EAAE,CAAC;AACrB,gBAAA,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACzC,aAAA;AAAM,iBAAA;AACL,gBAAA,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;AACvB,gBAAA,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;AACvB,gBAAA,UAAU,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;AAC7B,gBAAA,UAAU,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;AAC9B,aAAA;AACF,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACnB,YAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AACzB,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AACF;;MCjTY,iBAAiB,CAAA;AA8D5B,IAAA,WAAA,CACE,YAA4C,EAC5C,QAAoC,EAC5B,IAAY,EAAA;QAAZ,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;AAvDtB;;;;AAIG;QACK,IAAiB,CAAA,iBAAA,GAEd,IAAI,CAAC;AA0OhB,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,CAAa,KAAU;AACjC,YAAA,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,EAAE;AACnC,gBAAA,MAAM,IAAI,KAAK,CACb,qEAAqE,CACtE,CAAC;AACH,aAAA;YAED,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,CAAC,CAAC,cAAc,EAAE,CAAC;AACnB,YAAA,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AACjC,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC;AACzE,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU,CAAC;AAC5E,YAAA,MAAM,CACJ,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,EACX,CAAC,EACD,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,iBAAiB,EACtB,IAAI,EACJ,IAAI,CAAC,qBAAqB,CAC3B,CAAC;YAEF,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;YAC/C,IAAI,CAAC,iBAAiB,CAAC;AACrB,gBAAA,OAAO,EACL,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,IAAI,KAAK;AACnE,gBAAA,OAAO,EAAE,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,IAAI,KAAK;AAC3E,aAAA,CAAC,CAAC;YAEH,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;AACnC,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,gBAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;AAC7B,aAAC,CAAC,CAAC;AACL,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,CAAa,KAAU;YACjC,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,CAAC,CAAC,cAAc,EAAE,CAAC;AACnB,YAAA,YAAY,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,WAAW,EAAE,CAAC;AACnB,YAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,KAAK,CAAC;AACrC,YAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;AAC3B,YAAA,IACE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS;gBAC/B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EACpC;AACA,gBAAA,OAAO,CAAC,OAAO,CACb,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAClC,IAAI,CAAC,YAAY,CAAC,IAAI,EACtB,IAAI,CAAC,YAAY,EACjB,CAAC,CACF,CACF,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AAC5C,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,UAAU,EAAE,CAAC;AACnB,aAAA;YACD,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CACpC,IAAI,CAAC,YAAY,CAAC,EAAE,EACpB,wBAAwB,CACzB,CAAC;gBACF,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,oBAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;AAChC,oBAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;AAC9B,iBAAA;AACH,aAAC,CAAC,CAAC;AACL,SAAC,CAAC;QAEF,IAAY,CAAA,YAAA,GAAG,MAAW;AACxB,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;AAChE,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;AAChE,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAC1D,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAC1D,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;AACzB,YAAA,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;AAC/B,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACpB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAK,CAAC;AAClB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;AAC1B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAK,CAAC;AAC1B,SAAC,CAAC;QAEF,IAAU,CAAA,UAAA,GAAG,MAAW;AACtB,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAChC,IAAI,CAAC,YAAY,CAAC,KAAK,EACvB,IAAI,CAAC,YAAY,CAAC,IAAI,CACvB,CAAC;AACF,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;AAC3B,YAAA,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC;AACjC,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACpB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAK,CAAC;AAClB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;AAC1B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAK,CAAC;AAC1B,SAAC,CAAC;AAEM,QAAA,IAAA,CAAA,WAAW,GAAG,CAAC,CAAa,KAAU;AAC5C,YAAA,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;YACrD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;AACrC,YAAA,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE;AAChC,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC7B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;AACzC,aAAA;AAAM,iBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE;AACtD,gBAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBACjC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;AACtC,aAAA;AACD,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACpE,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAChD,IAAI,CAAC,GAAG,GAAG,SAAS,EACpB,IAAI,CAAC,KAAK,CACX,CAAC;YACF,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE;AAClD,gBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/C,gBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;AAClD,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI;oBAC1B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;gBAC/C,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;gBAC7C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AACrD,gBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CACjB,IAAI,CAAC,IAAI,CAAC,SAAS,EACnB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAC3C,CAAC;AACF,gBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;AACzD,oBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC/C,oBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAClD,oBAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtE,oBAAA,IAAI,CAAC,UAAU,CACb,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAC3D,CAAC;AACF,oBAAA,IAAI,CAAC,aAAa,CAChB,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;wBAC3D,IAAI,CAAC,MAAM,CACd,CAAC;oBACF,OAAO;AACR,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;AAC9B,iBAAA;AACD,gBAAA,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;AAChC,gBAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AAC3B,aAAA;AACD,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAClC,SAAC,CAAC;AAEM,QAAA,IAAA,CAAA,UAAU,GAAG,CAAC,CAAa,KAAU;AAC3C,YAAA,MAAM,OAAO,GACX,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,GAAG;AAC7C,kBAAE,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,OAAO,CAAC;AAC3D,kBAAE,CAAC,CAAC,OAAO,CAAC;AAChB,YAAA,IAAI,CAAC,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;YAEtD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;AACpC,YAAA,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE;AAC9B,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;AACxC,aAAA;AAAM,iBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE;AACtD,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;AACrC,aAAA;AACD,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACrE,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAChD,IAAI,CAAC,IAAI,GAAG,UAAU,EACtB,IAAI,CAAC,KAAK,CACX,CAAC;YACF,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE;AAClD,gBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/C,gBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;AAClD,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI;oBAC1B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;gBAC/C,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;gBAC7C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACpD,gBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CACjB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAClB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAC3C,CAAC;AACF,gBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;AACzD,oBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC/C,oBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAClD,oBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvE,oBAAA,IAAI,CAAC,WAAW,CACd,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAC3D,CAAC;AACF,oBAAA,IAAI,CAAC,YAAY,CACf,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;wBAC3D,IAAI,CAAC,MAAM,CACd,CAAC;oBACF,OAAO;AACR,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;AAC9B,iBAAA;AACD,gBAAA,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;AAChC,gBAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AAC3B,aAAA;AACD,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,SAAC,CAAC;AAEM,QAAA,IAAA,CAAA,WAAW,GAAG,CAAC,CAAa,KAAU;AAC5C,YAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC;AACtE,YAAA,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE;AAChC,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;AAC9B,aAAA;YACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;AACrC,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE;gBAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC;gBACrD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC;gBACrD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CACpB,IAAI,CAAC,MAAM,EACX,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,MAAM,CAClC,CAAC;gBACF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;AACtC,aAAA;AACD,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AACvE,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAChD,IAAI,CAAC,MAAM,GAAG,YAAY,EAC1B,IAAI,CAAC,IAAI,CACV,CAAC;AACF,YAAA,IACE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI;gBACxD,IAAI,CAAC,WAAW,EAChB;AACA,gBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;AAClD,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI;oBAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC/C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AACrD,gBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CACjB,IAAI,CAAC,IAAI,CAAC,SAAS,EACnB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAC3C,CAAC;AACF,gBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;AACzD,oBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAClD,oBAAA,IAAI,CAAC,aAAa,CAChB,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;wBAC3D,IAAI,CAAC,MAAM,CACd,CAAC;oBACF,OAAO;AACR,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;AAC9B,iBAAA;AACD,gBAAA,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;AAChC,gBAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AAC3B,aAAA;AACD,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAClC,SAAC,CAAC;AAEM,QAAA,IAAA,CAAA,UAAU,GAAG,CAAC,CAAa,KAAU;AAC3C,YAAA,MAAM,OAAO,GACX,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,GAAG;AAC7C,kBAAE,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,OAAO,CAAC;AAC3D,kBAAE,CAAC,CAAC,OAAO,CAAC;AAChB,YAAA,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;AAEpE,YAAA,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE;AAC9B,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC5B,aAAA;YACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;AACpC,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE;gBAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC;gBACpD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC;gBACrD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;gBACrE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;AACrC,aAAA;AACD,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AACtE,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAChD,IAAI,CAAC,KAAK,GAAG,WAAW,EACxB,IAAI,CAAC,IAAI,CACV,CAAC;AACF,YAAA,IACE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI;gBACxD,IAAI,CAAC,WAAW,EAChB;AACA,gBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;AAClD,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI;oBAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC/C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACpD,gBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CACjB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAClB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAC3C,CAAC;AACF,gBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;AACzD,oBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAClD,oBAAA,IAAI,CAAC,YAAY,CACf,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;wBAC3D,IAAI,CAAC,MAAM,CACd,CAAC;oBACF,OAAO;AACR,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;AAC9B,iBAAA;AACD,gBAAA,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;AAChC,gBAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AAC3B,aAAA;AACD,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,SAAC,CAAC;AAEM,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,CAAa,KAAU;AAChD,YAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACpB,YAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACrB,SAAC,CAAC;AAEM,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,CAAa,KAAU;AAChD,YAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACpB,YAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACrB,SAAC,CAAC;AAEM,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,CAAa,KAAU;AAChD,YAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACpB,YAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACrB,SAAC,CAAC;AAEM,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,CAAa,KAAU;AAChD,YAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACpB,YAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACrB,SAAC,CAAC;AA3fA,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG;AACf,YAAA,OAAO,EAAE,CAAC;AACV,YAAA,OAAO,EAAE,CAAC;SACX,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,qBAAqB,GAAG;AAC3B,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,KAAK,EAAE,KAAK;SACb,CAAC;KACH;IAED,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,GAAG,IAAK,CAAC;KAC3C;AAED,IAAA,SAAS,CAAC,CAAa,EAAA;QACrB,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE;YAC5B,OAAO;AACR,SAAA;AACD,QAAA,IACE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS;YAC/B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EACrC;YACA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CACnC,IAAI,CAAC,YAAY,CAAC,IAAI,EACtB,IAAI,CAAC,YAAY,EACjB,CAAC,CACF,CAAC;AACH,SAAA;QACD,CAAC,CAAC,eAAe,EAAE,CAAC;QACpB,CAAC,CAAC,cAAc,EAAE,CAAC;AAEnB,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AAC/B,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAChD,UAAU,EACV,WAAW,EACX,IAAI,CAAC,QAAQ,CACd,CAAC;YACF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAC5C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAChB,WAAW,EACX,IAAI,CAAC,QAAQ,CACd,CAAC;AACJ,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAC9C,UAAU,EACV,SAAS,EACT,IAAI,CAAC,QAAQ,CACd,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CACjD,UAAU,EACV,YAAY,EACZ,IAAI,CAAC,QAAQ,CACd,CAAC;AACF,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CACnD,QAAQ,EACR,MAAM,EACN,IAAI,CAAC,QAAQ,CACd,CAAC;AACF,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAC/C,UAAU,EACV,UAAU,EACV,IAAI,CAAC,QAAQ,CACd,CAAC;AACF,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAClD,UAAU,EACV,aAAa,EACb,IAAI,CAAC,QAAQ,CACd,CAAC;AAEF,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CACjC,IAAI,CAAC,YAAY,CAAC,EAAE,EACpB,wBAAwB,CACzB,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;QACnC,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QACnC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;AACjC,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,OAAO,CAAC;AACjC,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,OAAO,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QACrC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AACvC,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AAC/D,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAC9D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC5C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC5D,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAChE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAClE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC;AAC9D,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU,CAAC;AAC5E,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC;AACzE,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;AACxD,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;AAC1D,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC;AACrD,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;AAC3D,QAAA,IAAI,CAAC,SAAS;YACZ,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAC7B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW;gBACjC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CACrC,GAAG,IAAI,CAAC,MAAM,CAAC;AAClB,QAAA,IAAI,CAAC,QAAQ;YACX,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAC7B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW;gBACjC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CACrC,GAAG,IAAI,CAAC,MAAM,CAAC;QAClB,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACnD,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC;AACpC,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;AAE3B,QAAA,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,MAAqB,CAAC;AAE9C,QAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,GAAG,IAAI,CAAC;AACxC,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC;AAC3C,SAAA;AAAM,aAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;YACzC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,GAAG,EAAE;AACnD,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,GAAG,IAAI,CAAC;AACvC,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC;AAC1C,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,GAAG,IAAI,CAAC;AACvC,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC;AAC1C,aAAA;AACF,SAAA;AAAM,aAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AACzC,YAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,GAAG,IAAI,CAAC;AACxC,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC;AAC3C,SAAA;AAAM,aAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;YACzC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,GAAG,EAAE;AACnD,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,GAAG,IAAI,CAAC;AACvC,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC;AAC1C,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,GAAG,IAAI,CAAC;AACvC,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC;AAC1C,aAAA;AACF,SAAA;AAAM,aAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;YAC1C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,GAAG,EAAE;AACnD,gBAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,GAAG,IAAI,CAAC;AACxC,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,GAAG,IAAI,CAAC;AACvC,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC;AAC/C,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,GAAG,IAAI,CAAC;AACxC,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,GAAG,IAAI,CAAC;AACvC,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC;AAC/C,aAAA;AACF,SAAA;AAAM,aAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;YAC1C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,GAAG,EAAE;AACnD,gBAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,GAAG,IAAI,CAAC;AACxC,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,GAAG,IAAI,CAAC;AACvC,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC;AAC/C,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,GAAG,IAAI,CAAC;AACxC,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,GAAG,IAAI,CAAC;AACvC,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC;AAC/C,aAAA;AACF,SAAA;AAAM,aAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;YAC1C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,GAAG,EAAE;AACnD,gBAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,GAAG,IAAI,CAAC;AACxC,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,GAAG,IAAI,CAAC;AACvC,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC;AAC/C,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,GAAG,IAAI,CAAC;AACxC,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,GAAG,IAAI,CAAC;AACvC,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC;AAC/C,aAAA;AACF,SAAA;AAAM,aAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;YAC1C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,GAAG,EAAE;AACnD,gBAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,GAAG,IAAI,CAAC;AACxC,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,GAAG,IAAI,CAAC;AACvC,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC;AAC/C,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,GAAG,IAAI,CAAC;AACxC,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,GAAG,IAAI,CAAC;AACvC,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC;AAC/C,aAAA;AACF,SAAA;KACF;IAuUD,MAAM,GAAA;QACJ,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;QACtD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,CAAC;KACjE;AAED,IAAA,cAAc,CAAC,CAA0B,EAAA;AACvC,QAAA,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAEjC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE;AAChD,YAAA,IAAI,CAAC,SAAS,CAAC,CAAe,CAAC,CAAC;YAChC,OAAO;AACR,SAAA;AAED,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,MAAK;AAC9B,YAAA,IAAI,CAAC,SAAS,CAAC,CAAe,CAAC,CAAC;AAChC,YAAA,UAAU,EAAE,CAAC;SACd,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAEhD,MAAM,EACJ,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,cAAc,EACd,iBAAiB,EAClB,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;;;;;AAMnC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CACnD,UAAU,EACV,SAAS,EACT,UAAU,CACX,CAAC;AACF,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CACxD,UAAU,EACV,YAAY,EACZ,UAAU,CACX,CAAC;AACF,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CACpD,QAAQ,EACR,MAAM,EACN,UAAU,CACX,CAAC;AACF,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CACvD,UAAU,EACV,WAAW,EACX,UAAU,CACX,CAAC;AACF,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CACtD,UAAU,EACV,UAAU,EACV,UAAU,CACX,CAAC;AACF,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CACzD,UAAU,EACV,aAAa,EACb,UAAU,CACX,CAAC;YACF,OAAO;gBACL,WAAW;gBACX,gBAAgB;gBAChB,YAAY;gBACZ,eAAe;gBACf,cAAc;gBACd,iBAAiB;aAClB,CAAC;AACJ,SAAC,CAAC,CAAC;QAEH,SAAS,UAAU,CAAC,SAAqB,EAAA;AACvC,YAAA,aAAa,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;AACzC,YAAA,IACE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,GAAI,CAAgB,CAAC,OAAO,CAAC,GAAG,CAAC;AAC3D,gBAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,GAAI,CAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,EAC3D;AACA,gBAAA,UAAU,EAAE,CAAC;AACd,aAAA;SACF;AAED,QAAA,SAAS,UAAU,GAAA;YACjB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,WAAW,EAAE,CAAC;AACd,YAAA,gBAAgB,EAAE,CAAC;AACnB,YAAA,eAAe,EAAE,CAAC;AAClB,YAAA,cAAc,EAAE,CAAC;AACjB,YAAA,iBAAiB,EAAE,CAAC;SACrB;KACF;AAED,IAAA,UAAU,CAAC,GAAW,EAAA;QACpB,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,eAAe,CACxC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAC1B,IAAI,CAAC,YAAY,CAAC,EAAE,EACpB,IAAI,CAAC,IAAI,EACT,GAAG,CACJ,CAAC;KACH;AAED,IAAA,WAAW,CAAC,IAAY,EAAA;QACtB,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,eAAe,CACxC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAC1B,IAAI,CAAC,YAAY,CAAC,EAAE,EACpB,IAAI,EACJ,IAAI,CAAC,GAAG,CACT,CAAC;KACH;AAED,IAAA,aAAa,CAAC,MAAc,EAAA;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CACjC,IAAI,CAAC,YAAY,CAAC,EAAE,EACpB,QAAQ,EACR,MAAM,GAAG,IAAI,CACd,CAAC;KACH;AAED,IAAA,YAAY,CAAC,KAAa,EAAA;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CACjC,IAAI,CAAC,YAAY,CAAC,EAAE,EACpB,OAAO,EACP,KAAK,GAAG,IAAI,CACb,CAAC;KACH;AACF;;AC7qBD,MAQa,qBAAqB,CAAA;AA4BhC,IAAA,IACI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC;KACrE;AAED,IAAA,WAAA,CACsB,EAAc,EAClC,QAA2B,EACD,QAAmB,EACrB,IAAY,EAAA;QADV,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAW;QACrB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;AAjC5B,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAGjC,CAAC;AACK,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAGnC,CAAC;AACK,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAGnC,CAAC;AAwBH,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG;YACX,IAAI,EAAE,CAAC,CAAC;YACR,IAAI,EAAE,CAAC,CAAC;YACR,CAAC,EAAE,CAAC,CAAC;YACL,CAAC,EAAE,CAAC,CAAC;SACN,CAAC;AACF,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;KAChE;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KAC7B;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,IAAI,EAAE;YAChB,IAAI,CAAC,aAAa,EAAE,CAAC;AAErB,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACd,gBAAA,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;AACvC,aAAA;AACF,SAAA;QACD,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE;YAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;AAChB,SAAA;KACF;IAED,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE;AACtD,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,CAAC,EAAE,SAAS;AACZ,YAAA,CAAC,EAAE,SAAS;AACZ,YAAA,UAAU,EAAE,SAAS;AACrB,YAAA,WAAW,EAAE,SAAS;AACtB,YAAA,aAAa,EAAE,SAAS;AACxB,YAAA,cAAc,EAAE,SAAS;AACzB,YAAA,WAAW,EAAE,SAAS;AACtB,YAAA,WAAW,EAAE,SAAS;AACtB,YAAA,WAAW,EAAE,SAAS;AACtB,YAAA,WAAW,EAAE,SAAS;AACtB,YAAA,WAAW,EAAE,SAAS;AACtB,YAAA,WAAW,EAAE,SAAS;AACtB,YAAA,gBAAgB,EAAE;AAChB,gBAAA,CAAC,EAAE,SAAS;AACZ,gBAAA,CAAC,EAAE,SAAS;AACZ,gBAAA,CAAC,EAAE,SAAS;AACZ,gBAAA,CAAC,EAAE,SAAS;AACZ,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,EAAE,EAAE,SAAS;AACd,aAAA;AACF,SAAA,CAAC,CAAC;KACJ;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,IAAK,CAAC;KACjD;IAED,OAAO,GAAA;QACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC;AAC1E,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1E,IAAI,CAAC,cAAc,EAAE,CAAC;KACvB;IAED,cAAc,GAAA;AACZ,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;AACtD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;AACtD,QAAA,MAAM,KAAK,GACT,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW;AAC3C,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;AAChC,QAAA,MAAM,MAAM,GACV,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY;AAC5C,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;AAEhC,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AACf,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AAEjB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE;AACzC,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBAC1B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACzC,aAAA;AACD,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE;AAC1C,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACzD,aAAA;AACD,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7D,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE;AAC3C,gBAAA,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAC/B,aAAA;AACF,SAAA;QACD,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,IAAI,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE;AAClD,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,EAAE;AAC5C,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC3D,aAAA;AACD,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;AAChE,SAAA;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,EAAE;AAC5C,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC3D,SAAA;AACD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;KAChE;IAED,gBAAgB,CAAC,QAAsB,EAAE,QAAsB,EAAA;AAC7D,QAAA,IACE,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI;AAC/B,YAAA,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI;AAC/B,YAAA,QAAQ,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;AACzB,YAAA,QAAQ,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,EACzB;YACA,OAAO;AACR,SAAA;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAC5C,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,OAAO,EAAE,CAAC;AAChB,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3B,YAAA,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;YACtC,IAAI,CAAC,WAAW,EAAE,CAAC;AACpB,SAAA;KACF;IAED,YAAY,GAAA;QACV,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC;QACjE,MAAM,eAAe,GACnB,IAAI,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS;AAClC,cAAE,eAAe;AACjB,cAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,eAAe,IAAI,eAAe,CAAC;KACpE;IAED,YAAY,GAAA;QACV,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC;QAC/D,MAAM,aAAa,GACjB,IAAI,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS;AACpC,cAAE,aAAa;AACf,cAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,aAAa,IAAI,aAAa,CAAC;KAChE;IAED,mBAAmB,GAAA;QACjB,MAAM,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC;AACtE,QAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;;QAEzD,IAAI,oBAAoB,KAAK,SAAS,EAAE;AACtC,YAAA,OAAO,oBAAoB,CAAC;AAC7B,SAAA;;QAED,OAAO;AACL,YAAA,GAAG,oBAAoB;AACvB,YAAA,GAAG,oBAAoB;SACxB,CAAC;KACH;AAED,IAAA,YAAY,CAAC,MAAc,EAAA;AACzB,QAAA,IAAI,MAAM,IAAI,MAAM,IAAI,CAAC,EAAE;YACzB,OAAO;AACR,SAAA;AACD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;QACtD,IAAI,UAAU,GAAG,QAAQ,EAAE;AACzB,YAAA,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;YAC5D,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU;gBAC1C,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;AACnD,SAAA;KACF;AAED,IAAA,UAAU,CAAC,MAAc,EAAA;AACvB,QAAA,IAAI,MAAM,IAAI,MAAM,IAAI,CAAC,EAAE;YACzB,OAAO;AACR,SAAA;AACD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACxC,IAAI,UAAU,GAAG,CAAC,EAAE;AAClB,YAAA,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU;gBAC1C,WAAW,GAAG,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;AACrC,SAAA;KACF;IAEO,aAAa,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE;AACtC,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AAC7B,SAAA;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,KAAK,SAAS,EAAE;AAC1D,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC;AACjD,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACV;AAnPU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,EAkCtB,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,UAAU,EAEV,EAAA,EAAA,KAAA,EAAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,SAAS,aACT,MAAM,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGArCL,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,aAAA,EAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnClC,q2DAiDA,EAAA,MAAA,EAAA,CAAA,o2CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDhBY,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FAEH,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBARjC,SAAS;+BACE,eAAe,EAAA,aAAA,EAGV,iBAAiB,CAAC,IAAI,cACzB,IAAI,EAAA,OAAA,EACP,CAAC,IAAI,CAAC,EAAA,QAAA,EAAA,q2DAAA,EAAA,MAAA,EAAA,CAAA,o2CAAA,CAAA,EAAA,CAAA;;0BAoCZ,MAAM;2BAAC,UAAU,CAAA;;0BAEjB,MAAM;2BAAC,SAAS,CAAA;;0BAChB,MAAM;2BAAC,MAAM,CAAA;4CAlCP,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACI,QAAQ,EAAA,CAAA;sBAAjB,MAAM;gBAIG,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAIG,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAiBH,MAAM,EAAA,CAAA;sBADT,WAAW;uBAAC,eAAe,CAAA;;;ME1DR,8BAA8B,CAAA;AA+BnD;;MCxBqB,0BAA0B,CAAA;AAwD/C;;AC/DD,MAIa,cAAc,CAAA;8GAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YAHf,iBAAiB,EAAE,qBAAqB,CACxC,EAAA,OAAA,EAAA,CAAA,iBAAiB,EAAE,qBAAqB,CAAA,EAAA,CAAA,CAAA,EAAA;+GAEvC,cAAc,EAAA,CAAA,CAAA,EAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;AACnD,oBAAA,OAAO,EAAE,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;AACpD,iBAAA,CAAA;;;ACRD;;AAEG;;ACFH;;AAEG;;;;"}