{"version":3,"file":"paddls-ngx-easy-table.mjs","sources":["../../../projects/ngx-easy-table/src/lib/model/config.ts","../../../projects/ngx-easy-table/src/lib/model/event.enum.ts","../../../projects/ngx-easy-table/src/lib/model/api.ts","../../../projects/ngx-easy-table/src/lib/services/config-service.ts","../../../projects/ngx-easy-table/src/lib/services/group-rows.service.ts","../../../projects/ngx-easy-table/src/lib/services/style.service.ts","../../../projects/ngx-easy-table/src/lib/features/pagination/pagination.service.ts","../../../projects/ngx-easy-table/src/lib/features/pagination/pagination-controls.directive.ts","../../../projects/ngx-easy-table/src/lib/components/pagination/pagination.component.ts","../../../projects/ngx-easy-table/src/lib/components/pagination/pagination.component.html","../../../projects/ngx-easy-table/src/lib/components/header/header.component.ts","../../../projects/ngx-easy-table/src/lib/components/header/header.component.html","../../../projects/ngx-easy-table/src/lib/components/thead/thead.component.ts","../../../projects/ngx-easy-table/src/lib/components/thead/thead.component.html","../../../projects/ngx-easy-table/src/lib/features/pagination/paginate.pipe.ts","../../../projects/ngx-easy-table/src/lib/services/filters.service.ts","../../../projects/ngx-easy-table/src/lib/pipes/search-pipe.ts","../../../projects/ngx-easy-table/src/lib/pipes/render-pipe.ts","../../../projects/ngx-easy-table/src/lib/pipes/global-search-pipe.ts","../../../projects/ngx-easy-table/src/lib/pipes/sort.pipe.ts","../../../projects/ngx-easy-table/src/lib/components/base/ngx-table.component.ts","../../../projects/ngx-easy-table/src/lib/components/base/ngx-table.component.html","../../../projects/ngx-easy-table/src/lib/features/pagination/template.ts","../../../projects/ngx-easy-table/src/lib/features/pagination/pagination-controls.component.ts","../../../projects/ngx-easy-table/src/lib/features/pagination/ngx-pagination.module.ts","../../../projects/ngx-easy-table/src/lib/components/base/base.module.ts","../../../projects/ngx-easy-table/src/lib/table.module.ts","../../../projects/ngx-easy-table/src/paddls-ngx-easy-table.ts"],"sourcesContent":["export interface Config {\n\n  searchEnabled: boolean;\n\n  headerEnabled: boolean;\n\n  orderEnabled: boolean;\n\n  orderEventOnly?: boolean;\n\n  paginationEnabled: boolean;\n\n  /* @deprecated */\n\n  exportEnabled?: boolean;\n\n  clickEvent: boolean;\n\n  selectRow: boolean;\n\n  selectCol: boolean;\n\n  selectCell: boolean;\n\n  rows: number;\n\n  additionalActions: boolean;\n\n  serverPagination: boolean;\n\n  isLoading: boolean;\n\n  detailsTemplate: boolean;\n\n  groupRows: boolean;\n\n  paginationRangeEnabled: boolean;\n\n  collapseAllRows: boolean;\n\n  checkboxes: boolean;\n\n  radio?: boolean;\n\n  resizeColumn: boolean;\n\n  fixedColumnWidth: boolean;\n\n  horizontalScroll: boolean;\n\n  /* @deprecated Use 'rowReorder' instead */\n  draggable: boolean;\n\n  logger: boolean;\n\n  showDetailsArrow?: boolean;\n\n  showContextMenu?: boolean;\n\n  persistState?: boolean;\n\n  paginationMaxSize?: number;\n\n  threeWaySort?: boolean;\n\n  columnReorder?: boolean;\n\n  rowReorder?: boolean;\n\n  reorderDelay?: number;\n\n  infiniteScroll?: boolean;\n\n  infiniteScrollThrottleTime?: number;\n\n  tableLayout: {\n    style: STYLE | string | null;\n    theme: THEME | string | null;\n    borderless: boolean | null;\n    hover: boolean | null;\n    striped: boolean | null;\n  };\n}\n\nexport enum STYLE {\n  TINY = 'tiny',\n  BIG = 'big',\n  NORMAL = 'normal',\n}\n\nexport enum THEME {\n  LIGHT = 'light',\n  DARK = 'dark',\n}\n","export enum Event {\n  onPagination = 'onPagination',\n  onOrder = 'onOrder',\n  onGlobalSearch = 'onGlobalSearch',\n  onSearch = 'onSearch',\n  onClick = 'onClick',\n  onDoubleClick = 'onDoubleClick',\n  onCheckboxSelect = 'onCheckboxSelect',\n  onRadioSelect = 'onRadioSelect',\n  onCheckboxToggle = 'onCheckboxToggle',\n  onSelectAll = 'onSelectAll',\n  onInfiniteScrollEnd = 'onInfiniteScrollEnd',\n  onColumnResizeMouseDown = 'onColumnResizeMouseDown',\n  onColumnResizeMouseUp = 'onColumnResizeMouseUp',\n  onRowDrop = 'onRowDrop',\n  onReorderStart = 'onReorderStart',\n  onRowCollapsedShow = 'onRowCollapsedShow',\n  onRowCollapsedHide = 'onRowCollapsedHide',\n  onRowContextMenu = 'onRowContextMenu',\n}\n","export enum API {\n  rowContextMenuClicked = 'rowContextMenuClicked',\n  setInputValue = 'setInputValue',\n  toolPanelClicked = 'toolPanelClicked',\n  toggleRowIndex = 'toggleRowIndex',\n  toggleCheckbox = 'toggleCheckbox',\n  onGlobalSearch = 'onGlobalSearch',\n  setPaginationCurrentPage = 'setPaginationCurrentPage',\n  getPaginationCurrentPage = 'getPaginationCurrentPage',\n  getPaginationTotalItems = 'getPaginationTotalItems',\n  getNumberOfRowsPerPage = 'getNumberOfRowsPerPage',\n  getPaginationLastPage = 'getPaginationLastPage',\n  setPaginationRange = 'setPaginationRange',\n  setPaginationPreviousLabel = 'setPaginationPreviousLabel',\n  setPaginationNextLabel = 'setPaginationNextLabel',\n  setPaginationDisplayLimit = 'setPaginationDisplayLimit',\n  setTableClass = 'setTableClass',\n  setRowClass = 'setRowClass',\n  removeRowClass = 'removeRowClass',\n  setCellClass = 'setCellClass',\n  setRowStyle = 'setRowStyle',\n  setCellStyle = 'setCellStyle',\n  sortBy = 'sortBy',\n}\n\nexport interface RowClass {\n  row: number;\n  className: string;\n}\nexport interface CellClass {\n  row: number;\n  cell: number | string;\n  className: string;\n}\nexport interface RowStyle {\n  row: number;\n  attr: string;\n  value: string;\n}\nexport interface CellStyle {\n  row: number;\n  cell: number;\n  attr: string;\n  value: string;\n}\n\nexport type ApiType =\n  | { type: API.rowContextMenuClicked }\n  | { type: API.setInputValue; value: Array<{ key: string; value: string }> }\n  | { type: API.toolPanelClicked }\n  | { type: API.toggleRowIndex; value: number }\n  | { type: API.toggleCheckbox; value: number }\n  | { type: API.onGlobalSearch; value: string }\n  | { type: API.setPaginationCurrentPage; value: number }\n  | { type: API.getPaginationCurrentPage }\n  | { type: API.getPaginationTotalItems }\n  | { type: API.getPaginationLastPage }\n  | { type: API.getNumberOfRowsPerPage }\n  | { type: API.setPaginationRange; value: number[] }\n  | { type: API.setPaginationPreviousLabel; value: string }\n  | { type: API.setPaginationNextLabel; value: string }\n  | { type: API.setPaginationDisplayLimit; value: number }\n  | { type: API.setTableClass; value: string | null }\n  | { type: API.setRowClass; value: RowClass | RowClass[] }\n  | { type: API.removeRowClass; value: RowClass | RowClass[] }\n  | { type: API.setCellClass; value: CellClass | CellClass[] }\n  | { type: API.setRowStyle; value: RowStyle | RowStyle[] }\n  | { type: API.setCellStyle; value: CellStyle | CellStyle[] }\n  | { type: API.sortBy; value: { column: string; order: 'asc' | 'desc' } };\n\nexport interface APIDefinition {\n  apiEvent<B extends ApiType>(event: B): IAPIDefinition<B>;\n}\n\nexport type IAPIDefinition<B> = B extends\n  | { type: API.getPaginationCurrentPage }\n  | { type: API.getPaginationTotalItems }\n  | { type: API.getPaginationLastPage }\n  | { type: API.getNumberOfRowsPerPage }\n  ? number\n  : void;\n","import { Injectable } from '@angular/core';\nimport { Config, STYLE, THEME } from '../model/config';\n\n// eslint-disable-next-line @typescript-eslint/naming-convention, no-underscore-dangle, id-blacklist, id-match\nexport const DefaultConfig: Config = {\n  searchEnabled: false,\n  headerEnabled: true,\n  orderEnabled: true,\n  orderEventOnly: false,\n  paginationEnabled: true,\n  exportEnabled: false,\n  clickEvent: true,\n  selectRow: false,\n  selectCol: false,\n  selectCell: false,\n  rows: 10,\n  additionalActions: false,\n  serverPagination: false,\n  isLoading: false,\n  detailsTemplate: false,\n  groupRows: false,\n  paginationRangeEnabled: true,\n  collapseAllRows: false,\n  checkboxes: false,\n  radio: false,\n  resizeColumn: false,\n  fixedColumnWidth: true,\n  horizontalScroll: false,\n  draggable: false,\n  logger: false,\n  showDetailsArrow: false,\n  showContextMenu: false,\n  persistState: false,\n  paginationMaxSize: 5,\n  threeWaySort: false,\n  tableLayout: {\n    style: STYLE.NORMAL,\n    theme: THEME.LIGHT,\n    borderless: false,\n    hover: true,\n    striped: false,\n  },\n};\n\n@Injectable()\nexport class DefaultConfigService {\n  public static config: Config = DefaultConfig;\n}\n","import { Injectable } from '@angular/core';\nimport { from } from 'rxjs';\nimport { groupBy, mergeMap, reduce } from 'rxjs/operators';\n\n@Injectable()\nexport class GroupRowsService {\n\n  public static doGroupRows<T>(data: T[], groupRowsBy: string): any[] {\n    const grouped: any[] = [];\n\n    from(data).pipe(\n      groupBy((row) => row[groupRowsBy]),\n      mergeMap((group) => group.pipe(reduce((acc: T[], curr: T) => [...acc, curr], [])))\n    ).subscribe((row) => grouped.push(row));\n\n    return grouped;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { CellClass, CellStyle, RowClass, RowStyle } from '..';\n\n@Injectable()\nexport class StyleService {\n\n  public setRowClass(val: RowClass): void {\n    const selector = `#table > tbody > tr:nth-child(${ val.row })`;\n    const row = document.querySelector(selector) as HTMLTableRowElement;\n    if (row) {\n      row.classList.add(val.className);\n    }\n  }\n\n  public removeRowClass(val: RowClass): void {\n    const selector = `#table > tbody > tr:nth-child(${ val.row })`;\n    const row = document.querySelector(selector) as HTMLTableRowElement;\n    if (row) {\n      row.classList.remove(val.className);\n    }\n  }\n\n  public setCellClass(val: CellClass): void {\n    const selector = `#table > tbody > tr:nth-child(${ val.row }) > td:nth-child(${ val.cell })`;\n    const cell = document.querySelector(selector) as HTMLTableCellElement;\n    if (cell) {\n      cell.classList.add(val.className);\n    }\n  }\n\n  public setRowStyle(val: RowStyle): void {\n    const selector = `#table > tbody > tr:nth-child(${val.row})`;\n    const row = document.querySelector(selector) as HTMLTableRowElement;\n    if (row) {\n      row.style[val.attr] = val.value;\n    }\n  }\n\n  public setCellStyle(val: CellStyle): void {\n    const selector = `#table > tbody > tr:nth-child(${val.row}) > td:nth-child(${val.cell})`;\n    const cell = document.querySelector(selector) as HTMLTableCellElement;\n    if (cell) {\n      cell.style[val.attr] = val.value;\n    }\n  }\n\n  public pinnedWidth(pinned: boolean | undefined, column: number): string | undefined {\n    if (pinned) {\n      return 150 * column + 'px';\n    }\n  }\n}\n","import {EventEmitter} from '@angular/core'\nimport {PaginationInstanceInterface} from './interfaces/pagination-instance.interface';\n\nexport class PaginationService {\n\n    public change: EventEmitter<string> = new EventEmitter<string>();\n\n    private instances: { [id: string]: PaginationInstanceInterface } = {};\n    private DEFAULT_ID = 'DEFAULT_PAGINATION_ID';\n\n    public defaultId(): string { return this.DEFAULT_ID }\n\n    /**\n     * Register a PaginationInstance with this service. Returns a\n     * boolean value signifying whether the instance is new or\n     * updated (true = new or updated, false = unchanged).\n     */\n    public register(instance: PaginationInstanceInterface): boolean {\n        if (instance.id == null) {\n            instance.id = this.DEFAULT_ID;\n        }\n\n        if (!this.instances[instance.id]) {\n            this.instances[instance.id] = instance;\n            return true;\n        } else {\n            return this.updateInstance(instance);\n        }\n    }\n\n    /**\n     * Check each property of the instance and update any that have changed. Return\n     * true if any changes were made, else return false.\n     */\n    private updateInstance(instance: PaginationInstanceInterface): boolean {\n        let changed = false;\n        for (let prop in this.instances[instance.id!]) {\n            if (instance[prop] !== this.instances[instance.id!][prop]) {\n                this.instances[instance.id!][prop] = instance[prop];\n                changed = true;\n            }\n        }\n        return changed;\n    }\n\n    /**\n     * Returns the current page number.\n     */\n    public getCurrentPage(id: string): number {\n        if (this.instances[id]) {\n            return this.instances[id].currentPage;\n        }\n        return 1;\n    }\n\n    /**\n     * Sets the current page number.\n     */\n    public setCurrentPage(id: string, page: number) {\n        if (this.instances[id]) {\n            let instance = this.instances[id];\n            let maxPage = Math.ceil((instance.totalItems ?? 0) / instance.itemsPerPage);\n            if (page <= maxPage && 1 <= page) {\n                this.instances[id].currentPage = page;\n                this.change.emit(id);\n            }\n        }\n    }\n\n    /**\n     * Sets the value of instance.totalItems\n     */\n    public setTotalItems(id: string, totalItems: number) {\n        if (this.instances[id] && 0 <= totalItems) {\n            this.instances[id].totalItems = totalItems;\n            this.change.emit(id);\n        }\n    }\n\n    /**\n     * Sets the value of instance.itemsPerPage.\n     */\n    public setItemsPerPage(id: string, itemsPerPage: number) {\n        if (this.instances[id]) {\n            this.instances[id].itemsPerPage = itemsPerPage;\n            this.change.emit(id);\n        }\n    }\n\n    /**\n     * Returns a clone of the pagination instance object matching the id. If no\n     * id specified, returns the instance corresponding to the default id.\n     */\n    public getInstance(id: string = this.DEFAULT_ID): PaginationInstanceInterface {\n        if (this.instances[id]) {\n            return this.clone(this.instances[id]);\n        }\n        return {} as PaginationInstanceInterface;\n    }\n\n    /**\n     * Perform a shallow clone of an object.\n     */\n    private clone(obj: any): any {\n        var target = {};\n        for (var i in obj) {\n            if (obj.hasOwnProperty(i)) {\n                target[i] = obj[i];\n            }\n        }\n        return target;\n    }\n\n}\n","import {ChangeDetectorRef, Directive, EventEmitter, Input, Output} from '@angular/core';\nimport {Subscription} from 'rxjs';\n\nimport {PaginationService} from './pagination.service';\nimport {PaginationInstanceInterface} from './interfaces/pagination-instance.interface';\n\nexport interface Page {\n    label: string;\n    value: any;\n}\n\n/**\n * This directive is what powers all pagination controls components, including the default one.\n * It exposes an API which is hooked up to the PaginationService to keep the PaginatePipe in sync\n * with the pagination controls.\n */\n@Directive({\n    selector: 'pagination-template,[pagination-template]',\n    exportAs: 'paginationApi'\n})\nexport class PaginationControlsDirective {\n    @Input() id: string;\n    @Input() maxSize: number = 7;\n    @Output() pageChange: EventEmitter<number> = new EventEmitter<number>();\n    @Output() pageBoundsCorrection: EventEmitter<number> = new EventEmitter<number>();\n    pages: Page[] = [];\n\n    private changeSub: Subscription;\n\n    constructor(private service: PaginationService,\n                private changeDetectorRef: ChangeDetectorRef) {\n        this.changeSub = this.service.change\n            .subscribe(id => {\n                if (this.id === id) {\n                    this.updatePageLinks();\n                    this.changeDetectorRef.markForCheck();\n                    this.changeDetectorRef.detectChanges();\n                }\n            });\n    }\n\n    ngOnInit() {\n        if (this.id === undefined) {\n            this.id = this.service.defaultId();\n        }\n        this.updatePageLinks();\n    }\n\n    ngOnChanges() {\n        this.updatePageLinks();\n    }\n\n    ngOnDestroy() {\n        this.changeSub.unsubscribe();\n    }\n\n    /**\n     * Go to the previous page\n     */\n    previous() {\n        this.checkValidId();\n        this.setCurrent(this.getCurrent() - 1);\n    }\n\n    /**\n     * Go to the next page\n     */\n    next() {\n        this.checkValidId();\n        this.setCurrent(this.getCurrent() + 1);\n    }\n\n    /**\n     * Returns true if current page is first page\n     */\n    isFirstPage(): boolean {\n        return this.getCurrent() === 1;\n    }\n\n    /**\n     * Returns true if current page is last page\n     */\n    isLastPage(): boolean {\n        return this.getLastPage() === this.getCurrent();\n    }\n\n    /**\n     * Set the current page number.\n     */\n    setCurrent(page: number) {\n        this.pageChange.emit(page);\n    }\n\n    /**\n     * Get the current page number.\n     */\n    getCurrent(): number {\n        return this.service.getCurrentPage(this.id);\n    }\n\n    /**\n     * Returns the last page number\n     */\n    getLastPage(): number {\n        let inst = this.service.getInstance(this.id);\n        const totalItems = inst.totalItems ?? 0;\n        if (totalItems < 1) {\n            // when there are 0 or fewer (an error case) items, there are no \"pages\" as such,\n            // but it makes sense to consider a single, empty page as the last page.\n            return 1;\n        }\n        return Math.ceil(totalItems / inst.itemsPerPage);\n    }\n\n    getTotalItems(): number {\n        return this.service.getInstance(this.id).totalItems ?? 0;\n    }\n\n    private checkValidId() {\n        if (this.service.getInstance(this.id).id == null) {\n            console.warn(`PaginationControlsDirective: the specified id \"${this.id}\" does not match any registered PaginationInstance`);\n        }\n    }\n\n    /**\n     * Updates the page links and checks that the current page is valid. Should run whenever the\n     * PaginationService.change stream emits a value matching the current ID, or when any of the\n     * input values changes.\n     */\n    private updatePageLinks() {\n        let inst = this.service.getInstance(this.id);\n        const correctedCurrentPage = this.outOfBoundCorrection(inst);\n\n        if (correctedCurrentPage !== inst.currentPage) {\n            setTimeout(() => {\n                this.pageBoundsCorrection.emit(correctedCurrentPage);\n                this.pages = this.createPageArray(inst.currentPage, inst.itemsPerPage, (inst.totalItems ?? 0), this.maxSize);\n            });\n        } else {\n            this.pages = this.createPageArray(inst.currentPage, inst.itemsPerPage, (inst.totalItems ?? 0), this.maxSize);\n        }\n    }\n\n    /**\n     * Checks that the instance.currentPage property is within bounds for the current page range.\n     * If not, return a correct value for currentPage, or the current value if OK.\n     */\n    private outOfBoundCorrection(instance: PaginationInstanceInterface): number {\n        const totalPages = Math.ceil((instance.totalItems ?? 0) / instance.itemsPerPage);\n        if (totalPages < instance.currentPage && 0 < totalPages) {\n            return totalPages;\n        } else if (instance.currentPage < 1) {\n            return 1;\n        }\n\n        return instance.currentPage;\n    }\n\n    /**\n     * Returns an array of Page objects to use in the pagination controls.\n     */\n    private createPageArray(currentPage: number, itemsPerPage: number, totalItems: number, paginationRange: number): Page[] {\n        // paginationRange could be a string if passed from attribute, so cast to number.\n        paginationRange = +paginationRange;\n        let pages = [];\n\n        // Return 1 as default page number\n        // Make sense to show 1 instead of empty when there are no items\n        const totalPages = Math.max(Math.ceil(totalItems / itemsPerPage), 1);\n        const halfWay = Math.ceil(paginationRange / 2);\n\n        const isStart = currentPage <= halfWay;\n        const isEnd = totalPages - halfWay < currentPage;\n        const isMiddle = !isStart && !isEnd;\n\n        let ellipsesNeeded = paginationRange < totalPages;\n        let i = 1;\n\n        while (i <= totalPages && i <= paginationRange) {\n            let label;\n            let pageNumber = this.calculatePageNumber(i, currentPage, paginationRange, totalPages);\n            let openingEllipsesNeeded = (i === 2 && (isMiddle || isEnd));\n            let closingEllipsesNeeded = (i === paginationRange - 1 && (isMiddle || isStart));\n            if (ellipsesNeeded && (openingEllipsesNeeded || closingEllipsesNeeded)) {\n                label = '...';\n            } else {\n                label = pageNumber;\n            }\n            // @ts-ignore don't know why it considers the object as never :shrug:\n            pages.push({\n              label: label,\n              value: pageNumber\n            });\n            i ++;\n        }\n        return pages;\n    }\n\n    /**\n     * Given the position in the sequence of pagination links [i],\n     * figure out what page number corresponds to that position.\n     */\n    private calculatePageNumber(i: number, currentPage: number, paginationRange: number, totalPages: number) {\n        let halfWay = Math.ceil(paginationRange / 2);\n        if (i === paginationRange) {\n            return totalPages;\n        } else if (i === 1) {\n            return i;\n        } else if (paginationRange < totalPages) {\n            if (totalPages - halfWay < currentPage) {\n                return totalPages - paginationRange + i;\n            } else if (halfWay < currentPage) {\n                return currentPage - halfWay + i;\n            } else {\n                return i;\n            }\n        } else {\n            return i;\n        }\n    }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnChanges,\n  Output,\n  SimpleChanges,\n  ViewChild,\n} from '@angular/core';\nimport { Config } from '../..';\nimport {PaginationControlsDirective} from \"../../features/pagination\";\n\nexport interface PaginationRange {\n\n  page: number;\n\n  limit: number;\n}\n\n@Component({\n  selector: 'lib-pagination',\n  templateUrl: './pagination.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PaginationComponent implements OnChanges {\n\n  @Input()\n  public pagination;\n\n  @Input()\n  public config: Config;\n\n  @Input()\n  public id;\n\n  @Output()\n  public readonly updateRange: EventEmitter<PaginationRange> = new EventEmitter();\n\n  @ViewChild('paginationDirective', {static: true})\n  public paginationDirective: PaginationControlsDirective;\n\n  @ViewChild('paginationRange')\n  public paginationRange: { nativeElement: { contains: (arg0: any) => any; }; };\n\n  public ranges: number[] = [5, 10, 25, 50, 100];\n\n  public selectedLimit: number;\n\n  public showRange = false;\n\n  public screenReaderPaginationLabel = 'Pagination';\n\n  public screenReaderPageLabel = 'page';\n\n  public screenReaderCurrentLabel = 'You are on page';\n\n  public previousLabel = '';\n\n  public nextLabel = '';\n\n  public directionLinks = true;\n\n  @HostListener('document:click', ['$event.target'])\n  public onClick(targetElement: any): void {\n    if (this.paginationRange && !this.paginationRange.nativeElement.contains(targetElement)) {\n      this.showRange = false;\n    }\n  }\n\n  public ngOnChanges(changes: SimpleChanges): void {\n    const {config} = changes;\n    if (config && config.currentValue) {\n      this.selectedLimit = this.config.rows;\n    }\n  }\n\n  public onPageChange(page: number): void {\n    this.updateRange.emit({\n      page,\n      limit: this.selectedLimit,\n    });\n  }\n\n  public changeLimit(limit: number, callFromAPI: boolean): void {\n    if (!callFromAPI) {\n      this.showRange = !this.showRange;\n    }\n    this.selectedLimit = limit;\n    this.updateRange.emit({\n      page: 1,\n      limit,\n    });\n  }\n}\n","<div [class.ngx-table__table--dark-pagination-wrapper]=\"config.tableLayout.theme === 'dark'\"\n     [style.display]=\"config.paginationEnabled ? '' : 'none'\"\n     class=\"ngx-pagination-wrapper\">\n  <div class=\"ngx-pagination-steps\">\n    <pagination-template #paginationDirective=\"paginationApi\"\n                         (pageChange)=\"onPageChange($event)\"\n                         [class.ngx-table__table--dark-pagination]=\"config.tableLayout.theme === 'dark'\"\n                         [id]=\"id\"\n                         [maxSize]=\"config.paginationMaxSize || 5\"\n                         id=\"pagination-controls\">\n      <ul [attr.aria-label]=\"screenReaderPaginationLabel\"\n          [class.responsive]=\"true\"\n          class=\"ngx-pagination\"\n          role=\"navigation\">\n        <li *ngIf=\"directionLinks\"\n            [class.disabled]=\"paginationDirective.isFirstPage()\"\n            class=\"pagination-previous\">\n          <a (click)=\"paginationDirective.previous()\"\n             (keyup.enter)=\"paginationDirective.previous()\"\n             *ngIf=\"1 < paginationDirective.getCurrent()\"\n             [attr.aria-label]=\"previousLabel + ' ' + screenReaderPageLabel\"\n             tabindex=\"0\">\n            {{ previousLabel }} <span class=\"show-for-sr\">{{ screenReaderPageLabel }}</span>\n          </a>\n          <span *ngIf=\"paginationDirective.isFirstPage()\">\n            {{ previousLabel }} <span class=\"show-for-sr\">{{ screenReaderPageLabel }}</span>\n          </span>\n        </li>\n        <li class=\"small-screen\">\n          {{ paginationDirective.getCurrent() }} / {{ paginationDirective.getLastPage() }}\n        </li>\n        <li *ngFor=\"let page of paginationDirective.pages\"\n            [class.current]=\"paginationDirective.getCurrent() === page.value\"\n            [class.ellipsis]=\"page.label === '...'\">\n          <a (click)=\"paginationDirective.setCurrent(page.value)\"\n             (keyup.enter)=\"paginationDirective.setCurrent(page.value)\"\n             *ngIf=\"paginationDirective.getCurrent() !== page.value\"\n             tabindex=\"0\">\n            <span class=\"show-for-sr\">{{ screenReaderPageLabel }} </span>\n            <span>{{ page.label }}</span>\n          </a>\n          <ng-container *ngIf=\"paginationDirective.getCurrent() === page.value\">\n            <span class=\"show-for-sr\">{{ screenReaderCurrentLabel }} </span>\n            <span>{{ page.label }}</span>\n          </ng-container>\n        </li>\n        <li *ngIf=\"directionLinks\"\n            [class.disabled]=\"paginationDirective.isLastPage()\"\n            class=\"pagination-next\">\n          <a (click)=\"paginationDirective.next()\"\n             (keyup.enter)=\"paginationDirective.next()\"\n             *ngIf=\"!paginationDirective.isLastPage()\"\n             [attr.aria-label]=\"nextLabel + ' ' + screenReaderPageLabel\"\n             tabindex=\"0\">\n            {{ nextLabel }} <span class=\"show-for-sr\">{{ screenReaderPageLabel }}</span>\n          </a>\n          <span *ngIf=\"paginationDirective.isLastPage()\">\n            {{ nextLabel }} <span class=\"show-for-sr\">{{ screenReaderPageLabel }}</span>\n          </span>\n        </li>\n      </ul>\n    </pagination-template>\n  </div>\n  <div #paginationRange\n       *ngIf=\"config.paginationRangeEnabled\"\n       [class.ngx-table__table--dark-pagination-range]=\"config.tableLayout.theme === 'dark'\"\n       class=\"ngx-pagination-range\">\n    <div class=\"ngx-dropdown ngx-pagination-range-dropdown\"\n         id=\"rowAmount\">\n      <div class=\"ngx-btn-group\">\n        <div (click)=\"showRange = !showRange\"\n             class=\"ngx-pagination-range-dropdown-button\">\n          {{selectedLimit}} <i class=\"ngx-icon ngx-icon-arrow-down\"></i>\n        </div>\n        <ul *ngIf=\"showRange\"\n            class=\"ngx-menu\">\n          <li (click)=\"changeLimit(limit, false)\"\n              *ngFor=\"let limit of ranges\"\n              [class.ngx-pagination-range--selected]=\"limit === selectedLimit\"\n              class=\"ngx-pagination-range-dropdown-button-item\">\n            <span>{{limit}}</span>\n          </li>\n        </ul>\n      </div>\n    </div>\n  </div>\n</div>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { Columns } from '../..';\n\n@Component({\n  selector: 'lib-header',\n  templateUrl: './header.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeaderComponent {\n\n  @Input()\n  public column: Columns;\n\n  @Output()\n  public readonly update = new EventEmitter<Array<{ key: string; value: string }>>();\n\n  public unifyKey(key: string): string {\n    return key.replace('.', '_');\n  }\n\n  public onSearch(input: HTMLInputElement): void {\n    this.update.emit([{value: input.value, key: this.column.key}]);\n  }\n}\n","<label for=\"search_{{ unifyKey(column.key) }}\">\n  <input #input\n         (input)=\"onSearch(input)\"\n         aria-label=\"Search\"\n         class=\"ngx-table__header-search\"\n         id=\"search_{{ unifyKey(column.key) }}\"\n         placeholder=\"{{ column.placeholder ? column.placeholder : column.title }}\"\n         type=\"text\"/>\n</label>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  HostListener,\n  Input,\n  Output,\n  TemplateRef,\n  ViewChild,\n  ViewChildren,\n} from '@angular/core';\nimport { Columns, Config, Event } from '../..';\nimport { StyleService } from '../../services/style.service';\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\n\n@Component({\n  // eslint-disable-next-line @angular-eslint/component-selector\n  selector: '[lib-thead]',\n  templateUrl: './thead.component.html',\n  styles: [\n    `\n        .cdk-drag-preview {\n            text-align: left;\n            padding-top: 9px;\n            padding-left: 4px;\n            color: #50596c;\n            border: 1px solid #e7e9ed;\n        }\n    `,\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [StyleService],\n})\nexport class TableTHeadComponent {\n\n  @Input()\n  public config: Config;\n\n  @Input()\n  public columns: Columns[];\n\n  @Input()\n  public sortKey: string | null;\n\n  @Input()\n  public sortState: Map<string, string>;\n\n  @Input()\n  public selectAllTemplate;\n\n  @Input()\n  public filtersTemplate;\n\n  @Input()\n  public additionalActionsTemplate: TemplateRef<void>;\n\n  @Output()\n  public readonly filter = new EventEmitter<Array<{ key: string; value: string }>>();\n\n  @Output()\n  public readonly order = new EventEmitter<Columns>();\n\n  @Output()\n  public readonly selectAll = new EventEmitter<void>();\n\n  @Output()\n  public readonly event = new EventEmitter<{ event: string; value: any }>();\n\n  public menuActive = false;\n\n  public openedHeaderActionTemplate: string | null = null;\n\n  public startOffset;\n\n  public onSelectAllBinded = this.onSelectAll.bind(this);\n\n  @ViewChild('th')\n  private th: any;\n\n  @ViewChildren('headerDropdown')\n  private headerDropdown: any;\n\n  @ViewChild('additionalActionMenu')\n  private additionalActionMenu: any;\n\n  public constructor(public readonly styleService: StyleService) {\n  }\n\n  public get arrowDefinition(): boolean {\n    return this.config.showDetailsArrow || typeof this.config.showDetailsArrow === 'undefined';\n  }\n\n  @HostListener('document:click', ['$event.target'])\n  public onClick(targetElement: any): void {\n    if (\n      this.additionalActionMenu &&\n      !this.additionalActionMenu.nativeElement.contains(targetElement)\n    ) {\n      this.menuActive = false;\n    }\n\n    // if click outside the header then close opened Header Action Template\n    if (\n      this.openedHeaderActionTemplate &&\n      // if no header have the clicked point\n      !this.headerDropdown.toArray().some((ref) => ref.nativeElement.contains(targetElement))\n    ) {\n      this.openedHeaderActionTemplate = null;\n    }\n  }\n\n  getColumnDefinition(column: Columns): boolean {\n    return column.searchEnabled || typeof column.searchEnabled === 'undefined';\n  }\n\n  orderBy(column: Columns): void {\n    this.order.emit(column);\n  }\n\n  isOrderEnabled(column: Columns): boolean {\n    const columnOrderEnabled = column.orderEnabled === undefined ? true : column.orderEnabled;\n    return this.config.orderEnabled && columnOrderEnabled;\n  }\n\n  columnDrop(event: CdkDragDrop<string[]>): void {\n    moveItemInArray(this.columns, event.previousIndex, event.currentIndex);\n  }\n\n  onSearch($event: Array<{ key: string; value: string }>): void {\n    this.filter.emit($event);\n  }\n\n  getColumnWidth(column: any): string | null {\n    if (column.width) {\n      return column.width;\n    }\n    return this.config.fixedColumnWidth ? 100 / this.columns.length + '%' : null;\n  }\n\n  onSelectAll(): void {\n    this.selectAll.emit();\n  }\n\n  onMouseDown(event: MouseEvent, th: HTMLTableCellElement): void {\n    if (!this.config.resizeColumn) {\n      return;\n    }\n    this.th = th;\n    this.startOffset = th.offsetWidth - event.pageX;\n    this.event.emit({\n      event: Event.onColumnResizeMouseDown,\n      value: event,\n    });\n  }\n\n  onMouseMove(event: MouseEvent): void {\n    if (!this.config.resizeColumn) {\n      return;\n    }\n    if (this.th && this.th.style) {\n      this.th.style.width = this.startOffset + event.pageX + 'px';\n      this.th.style.cursor = 'col-resize';\n      this.th.style['user-select'] = 'none';\n    }\n  }\n\n  onMouseUp(event: MouseEvent): void {\n    if (!this.config.resizeColumn) {\n      return;\n    }\n    this.event.emit({\n      event: Event.onColumnResizeMouseUp,\n      value: event,\n    });\n    this.th.style.cursor = 'default';\n    this.th = undefined;\n  }\n\n  showHeaderActionTemplateMenu(column: Columns): void {\n    if (!column.headerActionTemplate) {\n      console.error('Column [headerActionTemplate] property not defined');\n    }\n    if (this.openedHeaderActionTemplate === column.key) {\n      this.openedHeaderActionTemplate = null;\n      return;\n    }\n    this.openedHeaderActionTemplate = column.key;\n  }\n\n  showMenu(): void {\n    if (!this.additionalActionsTemplate) {\n      console.error('[additionalActionsTemplate] property not defined');\n    }\n    this.menuActive = !this.menuActive;\n  }\n}\n","<tr *ngIf=\"config.headerEnabled && !config.columnReorder\"\n    class=\"ngx-table__header\">\n  <th *ngIf=\"config.checkboxes || config.radio\"\n      [style.width]=\"'3%'\">\n    <ng-container *ngIf=\"selectAllTemplate && config.checkboxes\"\n                  [ngTemplateOutletContext]=\"{ $implicit: onSelectAllBinded }\"\n                  [ngTemplateOutlet]=\"selectAllTemplate\">\n    </ng-container>\n    <label *ngIf=\"!selectAllTemplate && config.checkboxes\"\n           class=\"ngx-form-checkbox\"\n           for=\"selectAllCheckboxes\">\n      <input (change)=\"onSelectAll()\"\n             id=\"selectAllCheckboxes\"\n             type=\"checkbox\"/>\n      <em class=\"ngx-form-icon\"\n          id=\"selectAllCheckbox\"></em>\n    </label>\n  </th>\n  <ng-container *ngFor=\"let column of columns; let colIndex = index; let last = last\">\n    <th #th\n        (mousedown)=\"onMouseDown($event, th)\"\n        (mousemove)=\"onMouseMove($event)\"\n        (mouseup)=\"onMouseUp($event)\"\n        [class.pinned-left]=\"column.pinned\"\n        [ngClass]=\"column.cssClass && column.cssClass.includeHeader ? column.cssClass.name : ''\"\n        [style.left]=\"styleService.pinnedWidth(column.pinned, colIndex)\"\n        [style.width]=\"getColumnWidth(column)\"\n        class=\"ngx-table__header-cell\">\n      <div (click)=\"orderBy(column)\"\n           [class.pointer]=\"isOrderEnabled(column)\"\n           style=\"display: inline\">\n        <div class=\"ngx-table__header-title\">\n          {{ column.title }}<span>&nbsp;</span>\n          <em *ngIf=\"column.pinned\"\n              class=\"ngx-icon ngx-icon-pin\"></em>\n          <div [style.display]=\"config.orderEnabled ? 'inline' : 'none'\">\n            <em *ngIf=\"sortKey === column.key && this.sortState.get(sortKey) === 'asc'\"\n                class=\"ngx-icon ngx-icon-arrow-up\">\n            </em>\n            <em *ngIf=\"sortKey === column.key && this.sortState.get(sortKey) === 'desc'\"\n                class=\"ngx-icon ngx-icon-arrow-down\">\n            </em>\n          </div>\n        </div>\n      </div>\n      <div #headerDropdown\n           *ngIf=\"!!column.headerActionTemplate\"\n           class=\"ngx-dropdown\">\n        <a (click)=\"showHeaderActionTemplateMenu(column)\"\n           class=\"ngx-btn ngx-btn-link\">\n          <span class=\"ngx-icon ngx-icon-more\"></span>\n        </a>\n        <div *ngIf=\"column.key === openedHeaderActionTemplate\"\n             class=\"ngx-menu ngx-table__table-menu\">\n          <ng-container [ngTemplateOutlet]=\"column.headerActionTemplate\"></ng-container>\n        </div>\n      </div>\n      <div *ngIf=\"config.resizeColumn && !last\"\n           class=\"ngx-table__column-resizer\"></div>\n    </th>\n  </ng-container>\n  <th *ngIf=\"\n      config.additionalActions ||\n      (config.detailsTemplate && arrowDefinition) ||\n      config.collapseAllRows ||\n      config.groupRows\n   \"\n      class=\"ngx-table__header-cell-additional-actions\">\n    <div #additionalActionMenu\n         *ngIf=\"config.additionalActions\"\n         class=\"ngx-dropdown\">\n      <a (click)=\"showMenu()\"\n         class=\"ngx-btn ngx-btn-link\">\n        <span class=\"ngx-icon ngx-icon-menu\"></span>\n      </a>\n      <ul *ngIf=\"menuActive\"\n          class=\"ngx-menu ngx-table__table-menu\">\n        <ng-container *ngIf=\"additionalActionsTemplate\"\n                      [ngTemplateOutlet]=\"additionalActionsTemplate\">\n        </ng-container>\n      </ul>\n    </div>\n  </th>\n</tr>\n<tr (cdkDropListDropped)=\"columnDrop($event)\"\n    *ngIf=\"config.headerEnabled && config.columnReorder\"\n    cdkDropList\n    cdkDropListOrientation=\"horizontal\"\n    class=\"ngx-table__header ngx-table__header--draggable\">\n  <th *ngIf=\"config.checkboxes || config.radio\"\n      [style.width]=\"'3%'\">\n    <ng-container *ngIf=\"selectAllTemplate && config.checkboxes\"\n                  [ngTemplateOutletContext]=\"{ $implicit: onSelectAllBinded }\"\n                  [ngTemplateOutlet]=\"selectAllTemplate\">\n    </ng-container>\n    <label *ngIf=\"!selectAllTemplate && config.checkboxes\"\n           class=\"ngx-form-checkbox\"\n           for=\"selectAllCheckboxes\">\n      <input (change)=\"onSelectAll()\"\n             id=\"selectAllCheckboxesDrag\"\n             type=\"checkbox\"/>\n      <em class=\"ngx-form-icon\"\n          id=\"selectAllCheckboxDrag\"></em>\n    </label>\n  </th>\n  <ng-container *ngFor=\"let column of columns; let colIndex = index; let last = last\">\n    <th #th\n        (mousedown)=\"onMouseDown($event, th)\"\n        (mousemove)=\"onMouseMove($event)\"\n        (mouseup)=\"onMouseUp($event)\"\n        [cdkDragStartDelay]=\"config.reorderDelay || 0\"\n        [class.pinned-left]=\"column.pinned\"\n        [ngClass]=\"column.cssClass && column.cssClass.includeHeader ? column.cssClass.name : ''\"\n        [style.left]=\"styleService.pinnedWidth(column.pinned, colIndex)\"\n        [style.width]=\"getColumnWidth(column)\"\n        cdkDrag\n        cdkDragLockAxis=\"x\"\n        class=\"ngx-table__header-cell ngx-table__header-cell--draggable\">\n      <div (click)=\"orderBy(column)\"\n           [class.pointer]=\"isOrderEnabled(column)\"\n           cdkDragHandle\n           style=\"display: inline\">\n        <div class=\"ngx-table__header-title\">\n          {{ column.title }}<span>&nbsp;</span>\n          <em *ngIf=\"column.pinned\"\n              class=\"ngx-icon ngx-icon-pin\"></em>\n          <div [style.display]=\"config.orderEnabled ? 'inline' : 'none'\">\n            <em *ngIf=\"sortKey === column.key && this.sortState.get(sortKey) === 'asc'\"\n                class=\"ngx-icon ngx-icon-arrow-up\">\n            </em>\n            <em *ngIf=\"sortKey === column.key && this.sortState.get(sortKey) === 'desc'\"\n                class=\"ngx-icon ngx-icon-arrow-down\">\n            </em>\n          </div>\n        </div>\n      </div>\n      <div #headerDropdown\n           *ngIf=\"!!column.headerActionTemplate\"\n           class=\"ngx-dropdown\">\n        <a (click)=\"showHeaderActionTemplateMenu(column)\"\n           class=\"ngx-btn ngx-btn-link\">\n          <span class=\"ngx-icon ngx-icon-more\"></span>\n        </a>\n        <div *ngIf=\"column.key === openedHeaderActionTemplate\"\n             class=\"ngx-menu ngx-table__table-menu\">\n          <ng-container [ngTemplateOutlet]=\"column.headerActionTemplate\"></ng-container>\n        </div>\n      </div>\n      <div *ngIf=\"config.resizeColumn && !last\"\n           class=\"ngx-table__column-resizer\"></div>\n    </th>\n  </ng-container>\n  <th *ngIf=\"\n      config.additionalActions ||\n      (config.detailsTemplate && arrowDefinition) ||\n      config.collapseAllRows ||\n      config.groupRows\n    \"\n      class=\"ngx-table__header-cell-additional-actions\">\n    <div #additionalActionMenu\n         *ngIf=\"config.additionalActions\"\n         class=\"ngx-dropdown\">\n      <a (click)=\"showMenu()\"\n         class=\"ngx-btn ngx-btn-link\">\n        <span class=\"ngx-icon ngx-icon-menu\"></span>\n      </a>\n      <ul *ngIf=\"menuActive\"\n          class=\"ngx-menu ngx-table__table-menu\">\n        <ng-container *ngIf=\"additionalActionsTemplate\"\n                      [ngTemplateOutlet]=\"additionalActionsTemplate\">\n        </ng-container>\n      </ul>\n    </div>\n  </th>\n</tr>\n<tr *ngIf=\"config.searchEnabled && !filtersTemplate\"\n    class=\"ngx-table__sort-header\">\n  <th *ngIf=\"config.checkboxes || config.radio\"></th>\n  <ng-container *ngFor=\"let column of columns; let colIndex = index\">\n    <th [class.pinned-left]=\"column.pinned\"\n        [ngClass]=\"column.cssClass && column.cssClass.includeHeader ? column.cssClass.name : ''\"\n        [style.left]=\"styleService.pinnedWidth(column.pinned, colIndex)\">\n      <lib-header (update)=\"onSearch($event)\"\n                  *ngIf=\"getColumnDefinition(column)\"\n                  [column]=\"column\">\n      </lib-header>\n    </th>\n  </ng-container>\n  <th *ngIf=\"config.additionalActions || (config.detailsTemplate && arrowDefinition)\"></th>\n</tr>\n<ng-container *ngIf=\"filtersTemplate\">\n  <tr>\n    <ng-container [ngTemplateOutlet]=\"filtersTemplate\"></ng-container>\n  </tr>\n</ng-container>\n","import {Pipe} from \"@angular/core\";\nimport {PaginationService} from \"./pagination.service\";\nimport {PaginationInstanceInterface} from './interfaces/pagination-instance.interface';\n\nconst LARGE_NUMBER = Number.MAX_SAFE_INTEGER;\n\nexport type Collection<T> = T[] | ReadonlyArray<T>;\n\nexport interface PaginatePipeArgs {\n    id?: string;\n    itemsPerPage?: string | number;\n    currentPage?: string | number;\n    totalItems?: string | number;\n}\n\nexport interface PipeState {\n    collection: ArrayLike<any>;\n    size: number;\n    start: number;\n    end: number;\n    slice: ArrayLike<any>;\n}\n\n@Pipe({\n    name: 'paginate',\n    pure: false\n})\nexport class PaginatePipe {\n\n    // store the values from the last time the pipe was invoked\n    private state: { [id: string]: PipeState } = {};\n\n    constructor(private service: PaginationService) {\n    }\n\n    public transform<T, U extends Collection<T>>(collection: U, args: PaginatePipeArgs): U {\n\n        // When an observable is passed through the AsyncPipe, it will output\n        // `null` until the subscription resolves. In this case, we want to\n        // use the cached data from the `state` object to prevent the NgFor\n        // from flashing empty until the real values arrive.\n        if (!(collection instanceof Array)) {\n            let _id = args.id || this.service.defaultId();\n            if (this.state[_id]) {\n                return this.state[_id].slice as U;\n            } else {\n                return collection;\n            }\n        }\n\n        let serverSideMode = args.totalItems && args.totalItems !== collection.length;\n        let instance = this.createInstance(collection, args);\n        let id = instance.id;\n\n        let start, end;\n        let perPage = instance.itemsPerPage;\n\n        let emitChange = this.service.register(instance);\n\n        if (!serverSideMode && collection instanceof Array) {\n            perPage = +perPage || LARGE_NUMBER;\n            start = (instance.currentPage - 1) * perPage;\n            end = start + perPage;\n\n            let isIdentical = this.stateIsIdentical(id!, collection, start, end);\n            if (isIdentical) {\n                return this.state[id!].slice as U;\n            } else {\n                let slice = collection.slice(start, end);\n                this.saveState(id!, collection, slice, start, end);\n                this.service.change.emit(id);\n                return slice as U;\n            }\n        } else {\n            if (emitChange) {\n                this.service.change.emit(id);\n            }\n\n            // save the state for server-side collection to avoid null\n            // flash as new data loads.\n            this.saveState(id!, collection, collection, start, end);\n\n            return collection;\n        }\n    }\n\n    /**\n     * Create an PaginationInstance object, using defaults for any optional properties not supplied.\n     */\n    private createInstance(collection: readonly any[], config: PaginatePipeArgs): PaginationInstanceInterface {\n        this.checkConfig(config);\n\n        return {\n            id: config.id != null ? config.id : this.service.defaultId(),\n            itemsPerPage: Number(config.itemsPerPage) || 0,\n            currentPage: Number(config.currentPage) || 1,\n            totalItems: Number(config.totalItems) || collection.length\n        };\n    }\n\n    /**\n     * Ensure the argument passed to the filter contains the required properties.\n     */\n    private checkConfig(config: PaginatePipeArgs): void {\n        const required = ['itemsPerPage', 'currentPage'];\n\n        const missing = required.filter(prop => !(prop in config));\n        if (0 < missing.length) {\n            throw new Error(`PaginatePipe: Argument is missing the following required properties: ${missing.join(', ')}`);\n        }\n    }\n\n    /**\n     * To avoid returning a brand new array each time the pipe is run, we store the state of the sliced\n     * array for a given id. This means that the next time the pipe is run on this collection & id, we just\n     * need to check that the collection, start and end points are all identical, and if so, return the\n     * last sliced array.\n     */\n    private saveState(id: string, collection: ArrayLike<any>, slice: ArrayLike<any>, start: number, end: number) {\n        this.state[id] = {\n            collection,\n            size: collection.length,\n            slice,\n            start,\n            end\n        };\n    }\n\n    /**\n     * For a given id, returns true if the collection, size, start and end values are identical.\n     */\n    private stateIsIdentical(id: string, collection: ArrayLike<any>, start: number, end: number): boolean {\n        let state = this.state[id];\n        if (!state) {\n            return false;\n        }\n        let isMetaDataIdentical = state.size === collection.length &&\n            state.start === start &&\n            state.end === end;\n\n        if(!isMetaDataIdentical) {\n            return false;\n        }\n\n        return (state.slice as Array<any>).every((element, index) => element === collection[start + index]);\n    }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class FiltersService {\n\n  public static getPath(p: string[], o: any): any {\n    // https://github.com/dherges/ng-packagr/issues/696\n    /* eslint-disable-next-line */\n    return p.reduce((xs: string, x: string) => (xs && typeof xs[x] !== 'undefined' ? xs[x] : null), o);\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FiltersService } from '../services/filters.service';\nimport { Config } from '..';\nimport { Subject } from 'rxjs';\n\n@Pipe({\n  name: 'search',\n})\nexport class SearchPipe implements PipeTransform {\n  private filters: { [key: string]: string } = {};\n\n  public transform(array: any[],\n                   filter: Array<{ value: string; key: string }>,\n                   filteredCountSubject: Subject<number>,\n                   config?: Config): any {\n    filteredCountSubject.next(0);\n    if (typeof array === 'undefined') {\n      return;\n    }\n    if (typeof filter === 'undefined') {\n      filteredCountSubject.next(array.length);\n      return array;\n    }\n    filter.forEach((f) => {\n      this.filters[f.key] = f.value.toString().toLocaleLowerCase();\n      if (Object.keys(f).length === 0 || f.value === '') {\n        delete this.filters[f.key];\n      }\n    });\n    if (config && config.groupRows) {\n      return array.map((arr) => this.filterGroup(arr, filteredCountSubject));\n    }\n    return this.filterGroup(array, filteredCountSubject);\n  }\n\n  private filterGroup(array: any[], filteredCountSubject: Subject<number>): any[] {\n    const arr = array.filter((obj) => {\n      return Object.keys(this.filters).every((c) => {\n        const split = c.split('.');\n        const val = FiltersService.getPath(split, obj);\n        const element =\n          typeof val === 'object' ? JSON.stringify(val) : val.toString().toLocaleLowerCase();\n        const strings = this.filters[c].split(',');\n        return strings.some((s) => element.indexOf(s.trim()) > -1);\n      });\n    });\n    filteredCountSubject.next(arr.length);\n    return arr;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FiltersService } from '../services/filters.service';\n\n@Pipe({\n  name: 'render',\n})\nexport class RenderPipe implements PipeTransform {\n\n  public transform(row: any, key: string): string {\n    const split = key.split('.');\n\n    return FiltersService.getPath(split, row);\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { Columns } from '../model/columns';\n\n@Pipe({\n  name: 'global',\n})\nexport class GlobalSearchPipe implements PipeTransform {\n\n  public transform(array: any[], filter: string, columns: Columns[], filteredCountSubject: Subject<number>): any {\n    filteredCountSubject.next(0);\n    if (typeof array === 'undefined') {\n      return;\n    }\n\n    if (typeof filter === 'undefined' || filter === '') {\n      filteredCountSubject.next(array.length);\n      return array;\n    }\n\n    const predicate: (row: any) => boolean = (row: any) => columns.reduce(\n      (acc: boolean, curr: Columns) =>\n        acc ||\n        curr?.searchPredicate?.(row) ||\n        (['number', 'boolean', 'string'].includes(typeof row?.[curr.key]) && `${ row?.[curr.key] }`.toLocaleLowerCase().includes(filter.toLocaleLowerCase())),\n      false\n    );\n\n    const arr = array.filter(predicate);\n    filteredCountSubject.next(arr.length);\n\n    return arr;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FiltersService } from '../services/filters.service';\nimport { Config } from '..';\n\n@Pipe({\n  name: 'sort',\n})\nexport class SortPipe implements PipeTransform {\n\n  private defaultArray: any[] = [];\n\n  private static isNaN(aV: any, bV: any): boolean {\n    return isNaN(parseFloat(aV)) || !isFinite(aV) || isNaN(parseFloat(bV)) || !isFinite(bV);\n  }\n\n  private static compare(a: any[], b: any[], key: string): number {\n    const split = key.split('.');\n    const aPath = FiltersService.getPath(split, a);\n    const bPath = FiltersService.getPath(split, b);\n    const aValue = (aPath + '').toLowerCase();\n    const bValue = (bPath + '').toLowerCase();\n    if (SortPipe.isNaN(aPath, bPath)) {\n      return aValue.localeCompare(bValue);\n    }\n    if (parseFloat(aPath) < parseFloat(bPath)) {\n      return -1;\n    }\n    if (parseFloat(aPath) > parseFloat(bPath)) {\n      return 1;\n    }\n\n    return 0;\n  }\n\n  public transform(array: any[], filter: { order: string; key: string }, config?: Config): any[] {\n    if (this.defaultArray.length === 0) {\n      this.defaultArray = array;\n    }\n    if (!filter.key || filter.key === '') {\n      return array;\n    }\n    if (filter.order === '') {\n      return this.defaultArray;\n    }\n    if (filter.order === 'asc') {\n      return this.sortAsc(array, filter, config);\n    }\n    return this.sortDesc(array, filter, config);\n  }\n\n  private sortAsc(array: any[], filter: { order: string; key: string }, config?: Config): any[] {\n    if (config && config.groupRows) {\n      return array.map((arr) => arr.sort((a, b) => SortPipe.compare(a, b, filter.key)));\n    }\n    return array.sort((a, b) => SortPipe.compare(a, b, filter.key));\n  }\n\n  private sortDesc(array: any[], filter: { order: string; key: string }, config?: Config): any[] {\n    if (config && config.groupRows) {\n      return array.map((arr) => arr.sort((a, b) => SortPipe.compare(b, a, filter.key)));\n    }\n    return array.sort((a, b) => SortPipe.compare(b, a, filter.key));\n  }\n}\n","import { CdkDragDrop, CdkDragStart, moveItemInArray } from '@angular/cdk/drag-drop';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChange,\n  SimpleChanges,\n  TemplateRef,\n  ViewChild,\n} from '@angular/core';\n\nimport { API, ApiType, Columns, Config, Event, Pagination } from '../..';\nimport { DefaultConfigService } from '../../services/config-service';\nimport { PaginationComponent, PaginationRange } from '../pagination/pagination.component';\nimport { GroupRowsService } from '../../services/group-rows.service';\nimport { StyleService } from '../../services/style.service';\nimport { Subject } from 'rxjs';\nimport { CdkVirtualScrollViewport, ScrollDispatcher } from '@angular/cdk/scrolling';\nimport { filter, takeUntil, throttleTime } from 'rxjs/operators';\n\ntype ColumnKeyType = string | number | boolean;\n\ninterface RowContextMenuPosition {\n\n  top: string | null;\n\n  left: string | null;\n\n  value: any | null;\n}\n\n@Component({\n  // eslint-disable-next-line @angular-eslint/component-selector\n  selector: 'ngx-table',\n  providers: [DefaultConfigService, GroupRowsService, StyleService],\n  templateUrl: './ngx-table.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgxTableComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n\n  @Input()\n  public configuration: Config;\n\n  @Input()\n  public data: any[];\n\n  @Input()\n  public pagination: Pagination;\n\n  @Input()\n  public groupRowsBy: string;\n\n  @Input()\n  public id = 'table';\n\n  @Input()\n  public toggleRowIndex;\n\n  @Input()\n  public detailsTemplate: TemplateRef<any>;\n\n  @Input()\n  public summaryTemplate: TemplateRef<{ total: number; limit: number; page: number }>;\n\n  @Input()\n  public groupRowsHeaderTemplate: TemplateRef<any>;\n\n  @Input()\n  public filtersTemplate: TemplateRef<any>;\n\n  @Input()\n  public selectAllTemplate: TemplateRef<any>;\n\n  @Input()\n  public noResultsTemplate: TemplateRef<void>;\n\n  @Input()\n  public loadingTemplate: TemplateRef<void>;\n\n  @Input()\n  public additionalActionsTemplate: TemplateRef<void>;\n\n  @Input()\n  public rowContextMenu: TemplateRef<any>;\n\n  @Input()\n  public columns: Columns[];\n\n  @Output()\n  public readonly event = new EventEmitter<{ event: string; value: any }>();\n\n  @Output()\n  public readonly filteredCount$: Subject<number> = new Subject<number>();\n\n  @ContentChild(TemplateRef, {static: true})\n  public rowTemplate: TemplateRef<any>;\n\n  @ViewChild('contextMenu')\n  public contextMenu: { nativeElement: { contains: (arg0: any) => any; }; };\n\n  @ViewChild(CdkVirtualScrollViewport)\n  public viewPort: CdkVirtualScrollViewport;\n\n\n  public selectedRow: number;\n\n  public selectedCol: number;\n\n  public term: any;\n\n  public filterCount = -1;\n\n  public tableClass: string | null = null;\n\n  public globalSearchTerm: string;\n\n  public grouped: any = [];\n\n  public isSelected = false;\n\n  public page = 1;\n\n  public count = 0;\n\n  public sortState = new Map();\n\n  public sortKey: string | null = null;\n\n  public rowContextMenuPosition: RowContextMenuPosition = {\n    top: null,\n    left: null,\n    value: null,\n  };\n\n  public limit;\n\n  public sortBy: { key: string } & { order: string } = {\n    key: '',\n    order: 'asc',\n  };\n\n  public selectedDetailsTemplateRowId = new Set<number>();\n\n  public selectedCheckboxes = new Set<number>();\n\n  public config: Config;\n\n  @ViewChild('paginationComponent')\n  private paginationComponent: PaginationComponent;\n\n  private unsubscribe = new Subject<void>();\n\n  public constructor(private readonly cdr: ChangeDetectorRef,\n                     private readonly scrollDispatcher: ScrollDispatcher,\n                     public readonly styleService: StyleService) {\n    this.filteredCount$.pipe(takeUntil(this.unsubscribe)).subscribe((count: number) => {\n      setTimeout(() => {\n        this.filterCount = count;\n        this.cdr.detectChanges();\n      });\n    });\n  }\n\n  public get loadingHeight(): number {\n    const table = document.getElementById(this.id) as HTMLTableElement;\n    if (table && table.rows && table.rows.length > 3) {\n      const searchEnabled = this.config.searchEnabled ? 1 : 0;\n      const headerEnabled = this.config.headerEnabled ? 1 : 0;\n      const borderTrHeight = 1;\n      const borderDivHeight = 2;\n      return (\n        (table.rows.length - searchEnabled - headerEnabled) *\n        (table.rows[3].offsetHeight - borderTrHeight) -\n        borderDivHeight\n      );\n    }\n\n    return 30;\n  }\n\n  public get arrowDefinition(): boolean {\n    return this.config.showDetailsArrow || typeof this.config.showDetailsArrow === 'undefined';\n  }\n\n  @HostListener('document:click', ['$event.target'])\n  public onContextMenuClick(targetElement: any): void {\n    if (this.contextMenu && !this.contextMenu.nativeElement.contains(targetElement)) {\n      this.rowContextMenuPosition = {\n        top: null,\n        left: null,\n        value: null,\n      };\n    }\n  }\n\n  public ngOnInit(): void {\n    if (!this.columns) {\n      console.error('[columns] property required!');\n    }\n    if (this.configuration) {\n      this.config = this.configuration;\n    } else {\n      this.config = DefaultConfigService.config;\n    }\n    this.limit = this.config.rows;\n    if (this.groupRowsBy) {\n      this.grouped = GroupRowsService.doGroupRows(this.data, this.groupRowsBy);\n    }\n    this.doDecodePersistedState();\n  }\n\n  public ngOnDestroy(): void {\n    this.unsubscribe.next();\n    this.unsubscribe.complete();\n  }\n\n  public ngAfterViewInit(): void {\n    const throttleValue = this.config.infiniteScrollThrottleTime\n      ? this.config.infiniteScrollThrottleTime\n      : 200;\n    this.scrollDispatcher\n      .scrolled()\n      .pipe(\n        throttleTime(throttleValue),\n        filter((event) => {\n          return (\n            !!event &&\n            this.viewPort &&\n            this.viewPort.getRenderedRange().end === this.viewPort.getDataLength()\n          );\n        }),\n        takeUntil(this.unsubscribe)\n      )\n      .subscribe(() => {\n        this.emitEvent(Event.onInfiniteScrollEnd, null);\n      });\n  }\n\n  public ngOnChanges(changes: SimpleChanges): void {\n    const {configuration, data, pagination, groupRowsBy} = changes;\n    this.toggleRowIndex = changes.toggleRowIndex;\n    if (configuration && configuration.currentValue) {\n      this.config = configuration.currentValue;\n    }\n    if (data && data.currentValue) {\n      this.doApplyData(data);\n    }\n    if (pagination && pagination.currentValue) {\n      const {count, limit, offset} = pagination.currentValue as Pagination;\n      this.count = count;\n      this.limit = limit;\n      this.page = offset;\n    }\n    if (groupRowsBy && groupRowsBy.currentValue) {\n      this.grouped = GroupRowsService.doGroupRows(this.data, this.groupRowsBy);\n    }\n    if (this.toggleRowIndex && this.toggleRowIndex.currentValue) {\n      const row = this.toggleRowIndex.currentValue;\n      this.collapseRow(row.index);\n    }\n  }\n\n  public orderBy(column: Columns): void {\n    if (typeof column.orderEnabled !== 'undefined' && !column.orderEnabled) {\n      return;\n    }\n    this.sortKey = column.key;\n    if (!this.config.orderEnabled || this.sortKey === '') {\n      return;\n    }\n\n    this.setColumnOrder(column);\n    if (!this.config.orderEventOnly && !column.orderEventOnly) {\n      this.sortBy.key = this.sortKey;\n      this.sortBy.order = this.sortState.get(this.sortKey);\n    } else {\n      this.sortBy.key = '';\n      this.sortBy.order = '';\n    }\n    if (!this.config.serverPagination) {\n      this.data = [...this.data];\n      this.sortBy = {...this.sortBy};\n    }\n\n    const value = {\n      key: this.sortKey,\n      order: this.sortState.get(this.sortKey),\n    };\n    this.emitEvent(Event.onOrder, value);\n  }\n\n  public onClick($event: MouseEvent, row: any, key: ColumnKeyType, colIndex: any, rowIndex: number): void {\n    if (this.config.selectRow) {\n      this.selectedRow = rowIndex;\n    }\n    if (this.config.selectCol && colIndex) {\n      this.selectedCol = colIndex;\n    }\n    if (this.config.selectCell && colIndex) {\n      this.selectedRow = rowIndex;\n      this.selectedCol = colIndex;\n    }\n\n    if (this.config.clickEvent) {\n      const value = {\n        event: $event,\n        row,\n        key,\n        rowId: rowIndex,\n        colId: colIndex,\n      };\n      this.emitEvent(Event.onClick, value);\n    }\n  }\n\n  public onDoubleClick(\n    $event: MouseEvent,\n    row: any,\n    key: ColumnKeyType,\n    colIndex: any,\n    rowIndex: number\n  ): void {\n    const value = {\n      event: $event,\n      row,\n      key,\n      rowId: rowIndex,\n      colId: colIndex,\n    };\n    this.emitEvent(Event.onDoubleClick, value);\n  }\n\n  public onCheckboxSelect($event: any, row: any, rowIndex: number): void {\n    const value = {\n      event: $event,\n      row,\n      rowId: rowIndex,\n    };\n    this.emitEvent(Event.onCheckboxSelect, value);\n  }\n\n  public onRadioSelect($event: any, row: any, rowIndex: number): void {\n    const value = {\n      event: $event,\n      row,\n      rowId: rowIndex,\n    };\n    this.emitEvent(Event.onRadioSelect, value);\n  }\n\n  public onSelectAll(): void {\n    this.isSelected = !this.isSelected;\n    this.emitEvent(Event.onSelectAll, this.isSelected);\n  }\n\n  public onSearch($event: Array<{ key: string; value: string }>): void {\n    if (!this.config.serverPagination) {\n      this.term = $event;\n    }\n    this.emitEvent(Event.onSearch, $event);\n  }\n\n  public onGlobalSearch(value: string): void {\n    if (!this.config.serverPagination) {\n      this.globalSearchTerm = value;\n    }\n    this.emitEvent(Event.onGlobalSearch, value);\n  }\n\n  public onPagination(pagination: PaginationRange): void {\n    this.page = pagination.page;\n    this.limit = pagination.limit;\n    this.emitEvent(Event.onPagination, pagination);\n  }\n\n  public toggleCheckbox(rowIndex: number): void {\n    /* eslint-disable @typescript-eslint/no-unused-expressions */\n    this.selectedCheckboxes.has(rowIndex)\n      ? this.selectedCheckboxes.delete(rowIndex)\n      : this.selectedCheckboxes.add(rowIndex);\n  }\n\n  public collapseRow(rowIndex: number): void {\n    if (this.selectedDetailsTemplateRowId.has(rowIndex)) {\n      this.selectedDetailsTemplateRowId.delete(rowIndex);\n      this.emitEvent(Event.onRowCollapsedHide, rowIndex);\n    } else {\n      this.selectedDetailsTemplateRowId.add(rowIndex);\n      this.emitEvent(Event.onRowCollapsedShow, rowIndex);\n    }\n  }\n\n  public isRowCollapsed(rowIndex: number): boolean {\n    if (this.config.collapseAllRows) {\n      return true;\n    }\n    return this.selectedDetailsTemplateRowId.has(rowIndex);\n  }\n\n  public onRowContextMenu(\n    $event: MouseEvent,\n    row: any,\n    key: ColumnKeyType,\n    colIndex: any,\n    rowIndex: number\n  ): void {\n    if (!this.config.showContextMenu) {\n      return;\n    }\n    $event.preventDefault();\n    const value = {\n      event: $event,\n      row,\n      key,\n      rowId: rowIndex,\n      colId: colIndex,\n    };\n    this.rowContextMenuPosition = {\n      top: `${ $event.pageY - 10 }px`,\n      left: `${ $event.pageX - 10 }px`,\n      value,\n    };\n\n    this.emitEvent(Event.onRowContextMenu, value);\n  }\n\n  public onDragStart(event: CdkDragStart): void {\n    this.emitEvent(Event.onReorderStart, event);\n  }\n\n  public onDrop(event: CdkDragDrop<string[]>): void {\n    this.emitEvent(Event.onRowDrop, event);\n    moveItemInArray(this.data, event.previousIndex, event.currentIndex);\n  }\n\n  // DO NOT REMOVE. It is called from parent component. See src/app/demo/api-doc/api-doc.component.ts\n  public apiEvent(event: ApiType): void | number {\n    return this.bindApi(event);\n  }\n\n  public emitEvent(event: string, value: any): void {\n    this.event.emit({event, value});\n    if (this.config.persistState) {\n      localStorage.setItem(event, JSON.stringify(value));\n    }\n    if (this.config.logger) {\n      // eslint-disable-next-line no-console\n      console.log({event, value});\n    }\n  }\n\n  private doDecodePersistedState(): void {\n    if (!this.config.persistState) {\n      return;\n    }\n    const pagination = localStorage.getItem(Event.onPagination);\n    const sort = localStorage.getItem(Event.onOrder);\n    const search = localStorage.getItem(Event.onSearch);\n    if (pagination) {\n      this.onPagination(JSON.parse(pagination));\n    }\n    if (sort) {\n      const {key, order} = JSON.parse(sort);\n      this.bindApi({\n        type: API.sortBy,\n        value: {column: key, order},\n      });\n    }\n    if (search) {\n      this.bindApi({\n        type: API.setInputValue,\n        value: JSON.parse(search),\n      });\n    }\n  }\n\n  private doApplyData(data: SimpleChange): void {\n    const order = this.columns.find((c) => !!c.orderBy);\n    if (order) {\n      this.sortState.set(this.sortKey, order.orderBy === 'asc' ? 'desc' : 'asc');\n      this.orderBy(order);\n    } else {\n      this.data = [...data.currentValue];\n    }\n  }\n\n  /* eslint-disable */\n  private bindApi(event: ApiType): void | number {\n    switch (event.type) {\n      case API.rowContextMenuClicked:\n        this.rowContextMenuPosition = {\n          top: null,\n          left: null,\n          value: null,\n        };\n        break;\n      case API.toolPanelClicked:\n        // TODO\n        break;\n      case API.toggleRowIndex:\n        this.collapseRow(event.value);\n        break;\n      case API.toggleCheckbox:\n        this.toggleCheckbox(event.value);\n        break;\n      case API.setInputValue:\n        if (this.config.searchEnabled) {\n          event.value.forEach((input) => {\n            const element = document.getElementById(`search_${ input.key }`) as HTMLInputElement;\n            if (!element) {\n              console.error(\n                `Column '${ input.key }' not available in the DOM. Have you misspelled a name?`\n              );\n            } else {\n              element.value = input.value;\n            }\n          });\n        }\n        this.onSearch(event.value);\n        this.cdr.detectChanges();\n        break;\n      case API.onGlobalSearch:\n        this.onGlobalSearch(event.value);\n        this.cdr.detectChanges();\n        break;\n      case API.setRowClass:\n        if (Array.isArray(event.value)) {\n          event.value.forEach((val) => this.styleService.setRowClass(val));\n          break;\n        }\n        this.styleService.setRowClass(event.value);\n        this.cdr.detectChanges();\n        break;\n      case API.removeRowClass:\n        if (Array.isArray(event.value)) {\n          event.value.forEach((val) => this.styleService.removeRowClass(val));\n          break;\n        }\n        this.styleService.setRowClass(event.value);\n        this.cdr.detectChanges();\n        break;\n      case API.setCellClass:\n        if (Array.isArray(event.value)) {\n          event.value.forEach((val) => this.styleService.setCellClass(val));\n          break;\n        }\n        this.styleService.setCellClass(event.value);\n        break;\n      case API.setRowStyle:\n        if (Array.isArray(event.value)) {\n          event.value.forEach((val) => this.styleService.setRowStyle(val));\n          break;\n        }\n        this.styleService.setRowStyle(event.value);\n        break;\n      case API.setCellStyle:\n        if (Array.isArray(event.value)) {\n          event.value.forEach((val) => this.styleService.setCellStyle(val));\n          break;\n        }\n        this.styleService.setCellStyle(event.value);\n        break;\n      case API.setTableClass:\n        this.tableClass = event.value;\n        this.cdr.detectChanges();\n        break;\n      case API.getPaginationTotalItems:\n        return this.paginationComponent.paginationDirective.getTotalItems();\n      case API.getPaginationCurrentPage:\n        return this.paginationComponent.paginationDirective.getCurrent();\n      case API.getPaginationLastPage:\n        return this.paginationComponent.paginationDirective.getLastPage();\n      case API.getNumberOfRowsPerPage:\n        return this.paginationComponent.paginationDirective.isLastPage()\n          ? this.paginationComponent.paginationDirective.getTotalItems() % this.limit\n          : this.limit;\n      case API.setPaginationCurrentPage:\n        this.paginationComponent.paginationDirective.setCurrent(event.value);\n        break;\n      case API.setPaginationRange:\n        this.paginationComponent.ranges = event.value;\n        break;\n      case API.setPaginationPreviousLabel:\n        this.paginationComponent.previousLabel = event.value;\n        break;\n      case API.setPaginationNextLabel:\n        this.paginationComponent.nextLabel = event.value;\n        break;\n      case API.setPaginationDisplayLimit:\n        this.paginationComponent.changeLimit(event.value, true);\n        break;\n      case API.sortBy:\n        const column: Columns = {title: '', key: event.value.column, orderBy: event.value.order};\n        this.orderBy(column);\n        this.cdr.detectChanges();\n        break;\n      default:\n        break;\n    }\n  }\n\n  private setColumnOrder(column: Columns): void {\n    const key: string = column.key;\n\n    switch (this.sortState.get(key)) {\n      case '':\n      case undefined:\n        this.sortState.set(key, column.orderBy || 'desc');\n        break;\n      case 'asc':\n        this.config.threeWaySort ? this.sortState.set(key, '') : this.sortState.set(key, 'desc');\n        break;\n      case 'desc':\n        this.sortState.set(key, 'asc');\n        break;\n    }\n    if (this.sortState.size > 1) {\n      const temp = this.sortState.get(key);\n      this.sortState.clear();\n      this.sortState.set(key, temp);\n    }\n  }\n}\n","<div [class.ngx-container--dark]=\"config.tableLayout.theme === 'dark'\"\n     class=\"ngx-container\">\n  <table [class.ngx-table__horizontal-scroll]=\"config.horizontalScroll && !config.isLoading\"\n         [class.ngx-table__table--big]=\"config.tableLayout.style === 'big'\"\n         [class.ngx-table__table--borderless]=\"config.tableLayout.borderless\"\n         [class.ngx-table__table--dark]=\"config.tableLayout.theme === 'dark'\"\n         [class.ngx-table__table--hoverable]=\"config.tableLayout.hover\"\n         [class.ngx-table__table--normal]=\"config.tableLayout.style === 'normal'\"\n         [class.ngx-table__table--striped]=\"config.tableLayout.striped\"\n         [class.ngx-table__table--tiny]=\"config.tableLayout.style === 'tiny'\"\n         [id]=\"id\"\n         [ngClass]=\"tableClass === null || tableClass === '' ? 'ngx-table' : tableClass\">\n    <thead (event)=\"emitEvent($event.event, $event.value)\"\n           (filter)=\"onSearch($event)\"\n           (order)=\"orderBy($event)\"\n           (selectAll)=\"onSelectAll()\"\n           [additionalActionsTemplate]=\"additionalActionsTemplate\"\n           [class.ngx-infinite-scroll-viewport-thead]=\"config.infiniteScroll\"\n           [columns]=\"columns\"\n           [config]=\"config\"\n           [filtersTemplate]=\"filtersTemplate\"\n           [selectAllTemplate]=\"selectAllTemplate\"\n           [sortKey]=\"sortKey\"\n           [sortState]=\"sortState\"\n           lib-thead>\n    </thead>\n    <tbody *ngIf=\"data && !config.isLoading && !config.rowReorder\">\n    <ng-container *ngIf=\"rowTemplate\">\n      <ul *ngIf=\"rowContextMenuPosition.top\"\n          [ngStyle]=\"{\n            position: 'absolute',\n            top: rowContextMenuPosition.top,\n            left: rowContextMenuPosition.left\n          }\"\n          class=\"ngx-table__table-row-context-menu\">\n        <ng-container [ngTemplateOutletContext]=\"{ $implicit: rowContextMenuPosition.value }\"\n                      [ngTemplateOutlet]=\"rowContextMenu\">\n        </ng-container>\n      </ul>\n      <ng-container *ngIf=\"!config.infiniteScroll\">\n        <ng-container *ngFor=\"\n              let row of data\n                | sort: sortBy\n                | search: term:filteredCount$\n                | global: globalSearchTerm:columns:filteredCount$\n                | paginate: { itemsPerPage: limit, currentPage: page, totalItems: count, id: id };\n              let rowIndex = index\n            \">\n          <tr #contextMenu\n              (click)=\"onClick($event, row, '', null, rowIndex)\"\n              (contextmenu)=\"onRowContextMenu($event, row, '', null, rowIndex)\"\n              (dblclick)=\"onDoubleClick($event, row, '', null, rowIndex)\"\n              [class.ngx-table__table-row--selected]=\"rowIndex === selectedRow && !config.selectCell\">\n            <ng-container [ngTemplateOutletContext]=\"{ $implicit: row, index: rowIndex }\"\n                          [ngTemplateOutlet]=\"rowTemplate\">\n            </ng-container>\n            <td *ngIf=\"config.detailsTemplate && arrowDefinition\">\n                <span (click)=\"collapseRow(rowIndex)\"\n                      [ngClass]=\"isRowCollapsed(rowIndex) ? 'ngx-icon-arrow-down' : 'ngx-icon-arrow-right'\"\n                      class=\"ngx-icon\">\n                </span>\n            </td>\n          </tr>\n          <tr *ngIf=\"(config.detailsTemplate && selectedDetailsTemplateRowId.has(rowIndex)) || config.collapseAllRows\">\n            <td [attr.colspan]=\"columns.length + 1\">\n              <ng-container [ngTemplateOutletContext]=\"{ $implicit: row, index: rowIndex }\"\n                            [ngTemplateOutlet]=\"detailsTemplate\">\n              </ng-container>\n            </td>\n          </tr>\n        </ng-container>\n      </ng-container>\n      <cdk-virtual-scroll-viewport *ngIf=\"config.infiniteScroll\"\n                                   class=\"ngx-infinite-scroll-viewport\"\n                                   itemSize=\"50\">\n        <ng-container *cdkVirtualFor=\"\n              let row of data\n                | sort: sortBy\n                | search: term:filteredCount$\n                | global: globalSearchTerm:columns:filteredCount$;\n              let rowIndex = index\n            \">\n          <tr #contextMenu\n              (click)=\"onClick($event, row, '', null, rowIndex)\"\n              (contextmenu)=\"onRowContextMenu($event, row, '', null, rowIndex)\"\n              (dblclick)=\"onDoubleClick($event, row, '', null, rowIndex)\"\n              [class.ngx-table__table-row--selected]=\"\n                rowIndex === selectedRow && !config.selectCell\n              \">\n            <ng-container [ngTemplateOutletContext]=\"{ $implicit: row, index: rowIndex }\"\n                          [ngTemplateOutlet]=\"rowTemplate\">\n            </ng-container>\n            <td *ngIf=\"config.detailsTemplate && arrowDefinition\">\n                <span (click)=\"collapseRow(rowIndex)\"\n                      [ngClass]=\"isRowCollapsed(rowIndex) ? 'ngx-icon-arrow-down' : 'ngx-icon-arrow-right'\"\n                      class=\"ngx-icon\">\n                </span>\n            </td>\n          </tr>\n          <tr *ngIf=\"(config.detailsTemplate && selectedDetailsTemplateRowId.has(rowIndex)) || config.collapseAllRows\">\n            <td [attr.colspan]=\"columns.length + 1\">\n              <ng-container [ngTemplateOutletContext]=\"{ $implicit: row, index: rowIndex }\"\n                            [ngTemplateOutlet]=\"detailsTemplate\">\n              </ng-container>\n            </td>\n          </tr>\n        </ng-container>\n      </cdk-virtual-scroll-viewport>\n    </ng-container>\n    <ng-container *ngIf=\"!rowTemplate && !config.groupRows\">\n      <ul *ngIf=\"rowContextMenuPosition.top\"\n          [ngStyle]=\"{\n            position: 'absolute',\n            top: rowContextMenuPosition.top,\n            left: rowContextMenuPosition.left\n          }\"\n          class=\"ngx-table__table-row-context-menu\">\n        <ng-container [ngTemplateOutletContext]=\"{ $implicit: rowContextMenuPosition.value }\"\n                      [ngTemplateOutlet]=\"rowContextMenu\">\n        </ng-container>\n      </ul>\n      <ng-container *ngIf=\"!config.infiniteScroll\">\n        <ng-container *ngFor=\"\n              let row of data\n                | sort: sortBy\n                | search: term:filteredCount$\n                | global: globalSearchTerm:columns:filteredCount$\n                | paginate: { itemsPerPage: limit, currentPage: page, totalItems: count, id: id };\n              let rowIndex = index\n            \">\n          <tr [class.ngx-table__table-row--selected]=\"\n                rowIndex === selectedRow && !config.selectCell\n              \">\n            <td *ngIf=\"config.checkboxes\">\n              <label class=\"ngx-form-checkbox\">\n                <input\n                    (change)=\"onCheckboxSelect($event, row, rowIndex)\"\n                    [checked]=\"isSelected || selectedCheckboxes.has(rowIndex)\"\n                    id=\"checkbox-{{ rowIndex }}\"\n                    type=\"checkbox\"\n                />\n                <em class=\"ngx-form-icon\"></em>\n              </label>\n            </td>\n            <td *ngIf=\"config.radio\">\n              <label>\n                <input\n                    (change)=\"onRadioSelect($event, row, rowIndex)\"\n                    id=\"radio-{{ rowIndex }}\"\n                    name=\"radio\"\n                    type=\"radio\"\n                />\n              </label>\n            </td>\n            <ng-container *ngFor=\"let column of columns; let colIndex = index\">\n              <td #contextMenu\n                  (click)=\"onClick($event, row, column.key, colIndex, rowIndex)\"\n                  (contextmenu)=\"onRowContextMenu($event, row, column.key, colIndex, rowIndex)\"\n                  (dblclick)=\"onDoubleClick($event, row, column.key, colIndex, rowIndex)\"\n                  [class.ngx-table__table-cell--selected]=\"\n                    colIndex === selectedCol &&\n                    rowIndex === selectedRow &&\n                    !config.selectCol &&\n                    !config.selectRow\n                  \"\n                  [class.ngx-table__table-col--selected]=\"\n                    colIndex === selectedCol && !config.selectCell\n                  \"\n                  [class.pinned-left]=\"column.pinned\"\n                  [ngClass]=\"column.cssClass ? column.cssClass.name : ''\"\n                  [style.left]=\"styleService.pinnedWidth(column.pinned, colIndex)\">\n                <div *ngIf=\"!column.cellTemplate\">{{ row | render: column.key }}</div>\n                <ng-container *ngIf=\"column.cellTemplate\"\n                              [ngTemplateOutletContext]=\"{\n                      $implicit: row,\n                      rowIndex: rowIndex,\n                      column: column\n                    }\"\n                              [ngTemplateOutlet]=\"column.cellTemplate\">\n                </ng-container>\n              </td>\n            </ng-container>\n            <td *ngIf=\"config.additionalActions || (config.detailsTemplate && arrowDefinition)\">\n                <span (click)=\"collapseRow(rowIndex)\"\n                      [ngClass]=\"isRowCollapsed(rowIndex) ? 'ngx-icon-arrow-down' : 'ngx-icon-arrow-right'\"\n                      class=\"ngx-icon\">\n                </span>\n            </td>\n          </tr>\n          <tr *ngIf=\"(config.detailsTemplate && selectedDetailsTemplateRowId.has(rowIndex)) || config.collapseAllRows\">\n            <td *ngIf=\"config.checkboxes || config.radio\"></td>\n            <td [attr.colspan]=\"columns.length + 1\">\n              <ng-container [ngTemplateOutletContext]=\"{ $implicit: row, index: rowIndex }\"\n                            [ngTemplateOutlet]=\"detailsTemplate\">\n              </ng-container>\n            </td>\n          </tr>\n        </ng-container>\n      </ng-container>\n      <!-- infinite scroll -->\n      <cdk-virtual-scroll-viewport *ngIf=\"config.infiniteScroll\"\n                                   class=\"ngx-infinite-scroll-viewport\"\n                                   itemSize=\"50\">\n        <ng-container *cdkVirtualFor=\"\n              let row of data\n                | sort: sortBy\n                | search: term:filteredCount$\n                | global: globalSearchTerm:columns:filteredCount$;\n              let rowIndex = index\n            \">\n          <tr [class.ngx-table__table-row--selected]=\"\n                rowIndex === selectedRow && !config.selectCell\n              \">\n            <td *ngIf=\"config.checkboxes\">\n              <label class=\"ngx-form-checkbox\">\n                <input (change)=\"onCheckboxSelect($event, row, rowIndex)\"\n                       [checked]=\"isSelected || selectedCheckboxes.has(rowIndex)\"\n                       id=\"checkbox-infinite-scroll-{{ rowIndex }}\"\n                       type=\"checkbox\"/>\n                <em class=\"ngx-form-icon\"></em>\n              </label>\n            </td>\n            <td *ngIf=\"config.radio\">\n              <label>\n                <input (change)=\"onRadioSelect($event, row, rowIndex)\"\n                       id=\"radio-infinite-scroll-{{ rowIndex }}\"\n                       name=\"radio\"\n                       type=\"radio\"/>\n              </label>\n            </td>\n            <ng-container *ngFor=\"let column of columns; let colIndex = index\">\n              <td #contextMenu\n                  (click)=\"onClick($event, row, column.key, colIndex, rowIndex)\"\n                  (contextmenu)=\"onRowContextMenu($event, row, column.key, colIndex, rowIndex)\"\n                  (dblclick)=\"onDoubleClick($event, row, column.key, colIndex, rowIndex)\"\n                  [class.ngx-table__table-cell--selected]=\"\n                    colIndex === selectedCol &&\n                    rowIndex === selectedRow &&\n                    !config.selectCol &&\n                    !config.selectRow\n                  \"\n                  [class.ngx-table__table-col--selected]=\"\n                    colIndex === selectedCol && !config.selectCell\n                  \"\n                  [class.pinned-left]=\"column.pinned\"\n                  [ngClass]=\"column.cssClass ? column.cssClass.name : ''\"\n                  [style.left]=\"styleService.pinnedWidth(column.pinned, colIndex)\">\n                <div *ngIf=\"!column.cellTemplate\">{{ row | render: column.key }}</div>\n                <ng-container *ngIf=\"column.cellTemplate\"\n                              [ngTemplateOutletContext]=\"{\n                      $implicit: row,\n                      rowIndex: rowIndex,\n                      column: column\n                    }\"\n                              [ngTemplateOutlet]=\"column.cellTemplate\">\n                </ng-container>\n              </td>\n            </ng-container>\n            <td *ngIf=\"config.additionalActions || (config.detailsTemplate && arrowDefinition)\">\n                <span (click)=\"collapseRow(rowIndex)\"\n                      [ngClass]=\"isRowCollapsed(rowIndex) ? 'ngx-icon-arrow-down' : 'ngx-icon-arrow-right'\"\n                      class=\"ngx-icon\">\n                </span>\n            </td>\n          </tr>\n          <tr *ngIf=\"(config.detailsTemplate && selectedDetailsTemplateRowId.has(rowIndex)) || config.collapseAllRows\">\n            <td *ngIf=\"config.checkboxes || config.radio\"></td>\n            <td [attr.colspan]=\"columns.length + 1\">\n              <ng-container [ngTemplateOutletContext]=\"{ $implicit: row, index: rowIndex }\"\n                            [ngTemplateOutlet]=\"detailsTemplate\">\n              </ng-container>\n            </td>\n          </tr>\n        </ng-container>\n      </cdk-virtual-scroll-viewport>\n    </ng-container>\n    <ng-container *ngIf=\"!rowTemplate && config.groupRows\">\n      <ng-container *ngFor=\"\n            let group of grouped\n              | sort: sortBy:config\n              | search: term:filteredCount$:config\n              | global: globalSearchTerm:columns:filteredCount$\n              | paginate: { itemsPerPage: limit, currentPage: page, totalItems: count, id: id };\n            let rowIndex = index\n          \">\n        <tr>\n          <ng-container *ngIf=\"!groupRowsHeaderTemplate\">\n            <td [attr.colspan]=\"columns.length\">\n              <div>{{ group[0][groupRowsBy] }} ({{ group.length }})</div>\n            </td>\n          </ng-container>\n          <ng-container *ngIf=\"groupRowsHeaderTemplate\"\n                        [ngTemplateOutletContext]=\"{\n                total: group.length,\n                key: groupRowsBy,\n                value: group[0] ? group[0][groupRowsBy] : '',\n                group: group,\n                index: rowIndex\n              }\"\n                        [ngTemplateOutlet]=\"groupRowsHeaderTemplate\">\n          </ng-container>\n          <td>\n              <span (click)=\"collapseRow(rowIndex)\"\n                    *ngIf=\"arrowDefinition\"\n                    [ngClass]=\"\n                  isRowCollapsed(rowIndex) ? 'ngx-icon-arrow-down' : 'ngx-icon-arrow-right'\n                \"\n                    class=\"ngx-icon\">\n              </span>\n          </td>\n        </tr>\n        <ng-container *ngIf=\"selectedDetailsTemplateRowId.has(rowIndex)\">\n          <tr *ngFor=\"let row of group\">\n            <td *ngFor=\"let column of columns\">\n              {{ row | render: column.key }}\n              <!-- TODO allow users to add groupRowsTemplateRef -->\n            </td>\n            <td></td>\n          </tr>\n        </ng-container>\n      </ng-container>\n    </ng-container>\n    </tbody>\n    <tbody (cdkDropListDropped)=\"onDrop($event)\"\n           *ngIf=\"data && !config.isLoading && config.rowReorder\"\n           cdkDropList\n           class=\"ngx-draggable-row-area\">\n    <ng-container *ngIf=\"!rowTemplate && !config.groupRows\">\n      <ng-container *ngFor=\"\n            let row of data\n              | sort: sortBy\n              | search: term:filteredCount$\n              | global: globalSearchTerm:columns:filteredCount$\n              | paginate: { itemsPerPage: limit, currentPage: page, totalItems: count, id: id };\n            let rowIndex = index\n          \">\n        <tr (cdkDragStarted)=\"onDragStart($event)\"\n            [cdkDragStartDelay]=\"config.reorderDelay || 0\"\n            cdkDrag\n            cdkDragLockAxis=\"y\"\n            class=\"ngx-draggable-row\">\n          <td *ngIf=\"config.checkboxes\">\n            <label class=\"ngx-form-checkbox\">\n              <input\n                  (change)=\"onCheckboxSelect($event, row, rowIndex)\"\n                  [checked]=\"isSelected || selectedCheckboxes.has(rowIndex)\"\n                  id=\"checkbox-draggable-{{ rowIndex }}\"\n                  type=\"checkbox\"\n              />\n              <em class=\"ngx-form-icon\"></em>\n            </label>\n          </td>\n          <td *ngIf=\"config.radio\">\n            <label>\n              <input\n                  (change)=\"onRadioSelect($event, row, rowIndex)\"\n                  id=\"radio-draggable-{{ rowIndex }}\"\n                  name=\"radio\"\n                  type=\"radio\"\n              />\n            </label>\n          </td>\n          <ng-container *ngFor=\"let column of columns; let colIndex = index\">\n            <td (click)=\"onClick($event, row, column.key, colIndex, rowIndex)\"\n                (dblclick)=\"onDoubleClick($event, row, column.key, colIndex, rowIndex)\"\n                [class.ngx-table__table-cell--selected]=\"\n                  colIndex === selectedCol &&\n                  rowIndex === selectedRow &&\n                  !config.selectCol &&\n                  !config.selectRow\n                \"\n                [class.ngx-table__table-col--selected]=\"\n                  colIndex === selectedCol && !config.selectCell\n                \">\n              <div *ngIf=\"!column.cellTemplate\">{{ row | render: column.key }}</div>\n              <ng-container *ngIf=\"column.cellTemplate\"\n                            [ngTemplateOutletContext]=\"{\n                    $implicit: row,\n                    rowIndex: rowIndex,\n                    column: column\n                  }\"\n                            [ngTemplateOutlet]=\"column.cellTemplate\">\n              </ng-container>\n            </td>\n          </ng-container>\n        </tr>\n      </ng-container>\n    </ng-container>\n    </tbody>\n    <tbody *ngIf=\"filterCount === 0\">\n    <tr class=\"ngx-table__body-empty\">\n      <ng-container *ngIf=\"noResultsTemplate\"\n                    [ngTemplateOutlet]=\"noResultsTemplate\">\n      </ng-container>\n      <td *ngIf=\"!noResultsTemplate\"\n          [attr.colspan]=\"columns && columns.length + 1\">\n        <div class=\"ngx-table__table-no-results\">No results</div>\n      </td>\n    </tr>\n    </tbody>\n    <tbody *ngIf=\"config.isLoading\">\n    <ng-container *ngIf=\"loadingTemplate\"\n                  [ngTemplateOutlet]=\"loadingTemplate\"></ng-container>\n    <tr class=\"ngx-table__body-loading\">\n      <td *ngIf=\"!loadingTemplate\"\n          [attr.colspan]=\"columns && columns.length + 1\">\n        <div [style.height.px]=\"loadingHeight\"\n             class=\"ngx-table__table-loader-wrapper\">\n          <div class=\"ngx-table__table-loader\"></div>\n        </div>\n      </td>\n    </tr>\n    </tbody>\n    <tfoot *ngIf=\"summaryTemplate\">\n    <tr>\n      <ng-container [ngTemplateOutletContext]=\"{ total: data.length, limit: limit, page: page }\"\n                    [ngTemplateOutlet]=\"summaryTemplate\">\n      </ng-container>\n    </tr>\n    </tfoot>\n  </table>\n  <lib-pagination #paginationComponent\n                  (updateRange)=\"onPagination($event)\"\n                  [attr.id]=\"'pagination' + id\"\n                  [config]=\"config\"\n                  [id]=\"id\"\n                  [pagination]=\"pagination\">\n  </lib-pagination>\n</div>\n","/**\n * The default template and styles for the pagination links are borrowed directly\n * from Zurb Foundation 6: http://foundation.zurb.com/sites/docs/pagination.html\n */\n\nexport const DEFAULT_TEMPLATE = `\n    <pagination-template  #p=\"paginationApi\"\n                         [id]=\"id\"\n                         [maxSize]=\"maxSize\"\n                         (pageChange)=\"pageChange.emit($event)\"\n                         (pageBoundsCorrection)=\"pageBoundsCorrection.emit($event)\">\n    <nav role=\"navigation\" [attr.aria-label]=\"screenReaderPaginationLabel\">\n    <ul class=\"ngx-pagination\" \n        [class.responsive]=\"responsive\"\n        *ngIf=\"!(autoHide && p.pages.length <= 1)\">\n\n        <li class=\"pagination-previous\" [class.disabled]=\"p.isFirstPage()\" *ngIf=\"directionLinks\"> \n            <a tabindex=\"0\" *ngIf=\"1 < p.getCurrent()\" (keyup.enter)=\"p.previous()\" (click)=\"p.previous()\">\n                {{ previousLabel }} <span class=\"show-for-sr\">{{ screenReaderPageLabel }}</span>\n            </a>\n            <span *ngIf=\"p.isFirstPage()\" aria-disabled=\"true\">\n                {{ previousLabel }} <span class=\"show-for-sr\">{{ screenReaderPageLabel }}</span>\n            </span>\n        </li> \n\n        <li class=\"small-screen\">\n            {{ p.getCurrent() }} / {{ p.getLastPage() }}\n        </li>\n\n        <li [class.current]=\"p.getCurrent() === page.value\" \n            [class.ellipsis]=\"page.label === '...'\"\n            *ngFor=\"let page of p.pages; trackBy: trackByIndex\">\n            <a tabindex=\"0\" (keyup.enter)=\"p.setCurrent(page.value)\" (click)=\"p.setCurrent(page.value)\" *ngIf=\"p.getCurrent() !== page.value\">\n                <span class=\"show-for-sr\">{{ screenReaderPageLabel }} </span>\n                <span>{{ (page.label === '...') ? page.label : (page.label | number:'') }}</span>\n            </a>\n            <ng-container *ngIf=\"p.getCurrent() === page.value\">\n              <span aria-live=\"polite\">\n                <span class=\"show-for-sr\">{{ screenReaderCurrentLabel }} </span>\n                <span>{{ (page.label === '...') ? page.label : (page.label | number:'') }}</span> \n              </span>\n            </ng-container>\n        </li>\n\n        <li class=\"pagination-next\" [class.disabled]=\"p.isLastPage()\" *ngIf=\"directionLinks\">\n            <a tabindex=\"0\" *ngIf=\"!p.isLastPage()\" (keyup.enter)=\"p.next()\" (click)=\"p.next()\">\n                 {{ nextLabel }} <span class=\"show-for-sr\">{{ screenReaderPageLabel }}</span>\n            </a>\n            <span *ngIf=\"p.isLastPage()\" aria-disabled=\"true\">\n                 {{ nextLabel }} <span class=\"show-for-sr\">{{ screenReaderPageLabel }}</span>\n            </span>\n        </li>\n\n    </ul>\n    </nav>\n    </pagination-template>\n    `;\n\nexport const DEFAULT_STYLES = `\n.ngx-pagination {\n  margin-left: 0;\n  margin-bottom: 1rem; }\n  .ngx-pagination::before, .ngx-pagination::after {\n    content: ' ';\n    display: table; }\n  .ngx-pagination::after {\n    clear: both; }\n  .ngx-pagination li {\n    -moz-user-select: none;\n    -webkit-user-select: none;\n    -ms-user-select: none;\n    margin-right: 0.0625rem;\n    border-radius: 0; }\n  .ngx-pagination li {\n    display: inline-block; }\n  .ngx-pagination a,\n  .ngx-pagination button {\n    color: #0a0a0a; \n    display: block;\n    padding: 0.1875rem 0.625rem;\n    border-radius: 0; }\n    .ngx-pagination a:hover,\n    .ngx-pagination button:hover {\n      background: #e6e6e6; }\n  .ngx-pagination .current {\n    padding: 0.1875rem 0.625rem;\n    background: #2199e8;\n    color: #fefefe;\n    cursor: default; }\n  .ngx-pagination .disabled {\n    padding: 0.1875rem 0.625rem;\n    color: #cacaca;\n    cursor: default; } \n    .ngx-pagination .disabled:hover {\n      background: transparent; }\n  .ngx-pagination a, .ngx-pagination button {\n    cursor: pointer; }\n\n.ngx-pagination .pagination-previous a::before,\n.ngx-pagination .pagination-previous.disabled::before { \n  content: '«';\n  display: inline-block;\n  margin-right: 0.5rem; }\n\n.ngx-pagination .pagination-next a::after,\n.ngx-pagination .pagination-next.disabled::after {\n  content: '»';\n  display: inline-block;\n  margin-left: 0.5rem; }\n\n.ngx-pagination .show-for-sr {\n  position: absolute !important;\n  width: 1px;\n  height: 1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0); }\n.ngx-pagination .small-screen {\n  display: none; }\n@media screen and (max-width: 601px) {\n  .ngx-pagination.responsive .small-screen {\n    display: inline-block; } \n  .ngx-pagination.responsive li:not(.small-screen):not(.pagination-previous):not(.pagination-next) {\n    display: none; }\n}\n  `;\n","import {Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core'\nimport {DEFAULT_TEMPLATE, DEFAULT_STYLES} from './template';\n\nfunction coerceToBoolean(input: string | boolean): boolean {\n    return !!input && input !== 'false';\n}\n\n/**\n * The default pagination controls component. Actually just a default implementation of a custom template.\n */\n@Component({\n    selector: 'pagination-controls',\n    template: DEFAULT_TEMPLATE,\n    styles: [DEFAULT_STYLES],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None\n})\nexport class PaginationControlsComponent {\n\n    @Input() id: string;\n    @Input() maxSize: number = 7;\n    @Input()\n    get directionLinks(): boolean {\n        return this._directionLinks;\n    }\n    set directionLinks(value: boolean) {\n        this._directionLinks = coerceToBoolean(value);\n    }\n    @Input()\n    get autoHide(): boolean {\n        return this._autoHide;\n    }\n    set autoHide(value: boolean) {\n        this._autoHide = coerceToBoolean(value);\n    }\n    @Input()\n    get responsive(): boolean {\n        return this._responsive;\n    }\n    set responsive(value: boolean) {\n        this._responsive = coerceToBoolean(value);\n    }\n    @Input() previousLabel: string = 'Previous';\n    @Input() nextLabel: string = 'Next';\n    @Input() screenReaderPaginationLabel: string = 'Pagination';\n    @Input() screenReaderPageLabel: string = 'page';\n    @Input() screenReaderCurrentLabel: string = `You're on page`;\n    @Output() pageChange: EventEmitter<number> = new EventEmitter<number>();\n    @Output() pageBoundsCorrection: EventEmitter<number> = new EventEmitter<number>();\n\n    private _directionLinks: boolean = true;\n    private _autoHide: boolean = false;\n    private _responsive: boolean = false;\n\n    trackByIndex(index: number) {\n        return index;\n    }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PaginatePipe} from './paginate.pipe';\nimport {PaginationService} from './pagination.service';\nimport {PaginationControlsComponent} from './pagination-controls.component';\nimport {PaginationControlsDirective} from './pagination-controls.directive';\n\n@NgModule({\n    imports: [CommonModule],\n    declarations: [\n        PaginatePipe,\n        PaginationControlsComponent,\n        PaginationControlsDirective\n    ],\n    providers: [PaginationService],\n    exports: [PaginatePipe, PaginationControlsComponent, PaginationControlsDirective]\n})\nexport class NgxPaginationModule { }\n","import { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { NgxTableComponent } from './ngx-table.component';\n\nimport { HeaderComponent } from '../header/header.component';\nimport { PaginationComponent } from '../pagination/pagination.component';\n\nimport { GlobalSearchPipe } from '../../pipes/global-search-pipe';\nimport { RenderPipe } from '../../pipes/render-pipe';\nimport { SearchPipe } from '../../pipes/search-pipe';\nimport { SortPipe } from '../../pipes/sort.pipe';\n\nimport { TableTHeadComponent } from '../thead/thead.component';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport {NgxPaginationModule} from \"../../features/pagination\";\n\nconst COMPONENTS: any[] = [\n  NgxTableComponent,\n  HeaderComponent,\n  PaginationComponent,\n  TableTHeadComponent\n];\n\nconst PIPES: any[] = [\n  SearchPipe,\n  RenderPipe,\n  GlobalSearchPipe,\n  SortPipe\n];\n\n@NgModule({\n  declarations: [\n    ...COMPONENTS,\n    ...PIPES\n  ],\n  imports: [\n    CommonModule,\n    NgxPaginationModule,\n    DragDropModule,\n    ScrollingModule\n  ],\n  exports: [NgxTableComponent],\n})\nexport class BaseModule {\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { NgxTableComponent } from './components/base/ngx-table.component';\nimport { BaseModule } from './components/base/base.module';\n\n@NgModule({\n  imports: [CommonModule, BaseModule],\n  exports: [NgxTableComponent],\n  providers: [],\n})\nexport class TableModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PaginationService","i1","i2.PaginationControlsDirective","i1.StyleService","i2","i3","i4.HeaderComponent","i2.StyleService","i4","i5.PaginationComponent","i6.TableTHeadComponent","i7.PaginatePipe","i8.SearchPipe","i9.RenderPipe","i10.GlobalSearchPipe","i11.SortPipe"],"mappings":";;;;;;;;;;;IAoFY,MAIX;AAJD,CAAA,UAAY,KAAK,EAAA;AACf,IAAA,KAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,KAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,KAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACnB,CAAC,EAJW,KAAK,KAAL,KAAK,GAIhB,EAAA,CAAA,CAAA,CAAA;IAEW,MAGX;AAHD,CAAA,UAAY,KAAK,EAAA;AACf,IAAA,KAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,KAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACf,CAAC,EAHW,KAAK,KAAL,KAAK,GAGhB,EAAA,CAAA,CAAA;;IC7FW,MAmBX;AAnBD,CAAA,UAAY,KAAK,EAAA;AACf,IAAA,KAAA,CAAA,cAAA,CAAA,GAAA,cAA6B,CAAA;AAC7B,IAAA,KAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,KAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC,CAAA;AACjC,IAAA,KAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,KAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,KAAA,CAAA,eAAA,CAAA,GAAA,eAA+B,CAAA;AAC/B,IAAA,KAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC,CAAA;AACrC,IAAA,KAAA,CAAA,eAAA,CAAA,GAAA,eAA+B,CAAA;AAC/B,IAAA,KAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC,CAAA;AACrC,IAAA,KAAA,CAAA,aAAA,CAAA,GAAA,aAA2B,CAAA;AAC3B,IAAA,KAAA,CAAA,qBAAA,CAAA,GAAA,qBAA2C,CAAA;AAC3C,IAAA,KAAA,CAAA,yBAAA,CAAA,GAAA,yBAAmD,CAAA;AACnD,IAAA,KAAA,CAAA,uBAAA,CAAA,GAAA,uBAA+C,CAAA;AAC/C,IAAA,KAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACvB,IAAA,KAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC,CAAA;AACjC,IAAA,KAAA,CAAA,oBAAA,CAAA,GAAA,oBAAyC,CAAA;AACzC,IAAA,KAAA,CAAA,oBAAA,CAAA,GAAA,oBAAyC,CAAA;AACzC,IAAA,KAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC,CAAA;AACvC,CAAC,EAnBW,KAAK,KAAL,KAAK,GAmBhB,EAAA,CAAA,CAAA;;ICnBW,IAuBX;AAvBD,CAAA,UAAY,GAAG,EAAA;AACb,IAAA,GAAA,CAAA,uBAAA,CAAA,GAAA,uBAA+C,CAAA;AAC/C,IAAA,GAAA,CAAA,eAAA,CAAA,GAAA,eAA+B,CAAA;AAC/B,IAAA,GAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC,CAAA;AACrC,IAAA,GAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC,CAAA;AACjC,IAAA,GAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC,CAAA;AACjC,IAAA,GAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC,CAAA;AACjC,IAAA,GAAA,CAAA,0BAAA,CAAA,GAAA,0BAAqD,CAAA;AACrD,IAAA,GAAA,CAAA,0BAAA,CAAA,GAAA,0BAAqD,CAAA;AACrD,IAAA,GAAA,CAAA,yBAAA,CAAA,GAAA,yBAAmD,CAAA;AACnD,IAAA,GAAA,CAAA,wBAAA,CAAA,GAAA,wBAAiD,CAAA;AACjD,IAAA,GAAA,CAAA,uBAAA,CAAA,GAAA,uBAA+C,CAAA;AAC/C,IAAA,GAAA,CAAA,oBAAA,CAAA,GAAA,oBAAyC,CAAA;AACzC,IAAA,GAAA,CAAA,4BAAA,CAAA,GAAA,4BAAyD,CAAA;AACzD,IAAA,GAAA,CAAA,wBAAA,CAAA,GAAA,wBAAiD,CAAA;AACjD,IAAA,GAAA,CAAA,2BAAA,CAAA,GAAA,2BAAuD,CAAA;AACvD,IAAA,GAAA,CAAA,eAAA,CAAA,GAAA,eAA+B,CAAA;AAC/B,IAAA,GAAA,CAAA,aAAA,CAAA,GAAA,aAA2B,CAAA;AAC3B,IAAA,GAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC,CAAA;AACjC,IAAA,GAAA,CAAA,cAAA,CAAA,GAAA,cAA6B,CAAA;AAC7B,IAAA,GAAA,CAAA,aAAA,CAAA,GAAA,aAA2B,CAAA;AAC3B,IAAA,GAAA,CAAA,cAAA,CAAA,GAAA,cAA6B,CAAA;AAC7B,IAAA,GAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACnB,CAAC,EAvBW,GAAG,KAAH,GAAG,GAuBd,EAAA,CAAA,CAAA;;ACpBD;AACa,MAAA,aAAa,GAAW;AACnC,IAAA,aAAa,EAAE,KAAK;AACpB,IAAA,aAAa,EAAE,IAAI;AACnB,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,cAAc,EAAE,KAAK;AACrB,IAAA,iBAAiB,EAAE,IAAI;AACvB,IAAA,aAAa,EAAE,KAAK;AACpB,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,UAAU,EAAE,KAAK;AACjB,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,iBAAiB,EAAE,KAAK;AACxB,IAAA,gBAAgB,EAAE,KAAK;AACvB,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,eAAe,EAAE,KAAK;AACtB,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,sBAAsB,EAAE,IAAI;AAC5B,IAAA,eAAe,EAAE,KAAK;AACtB,IAAA,UAAU,EAAE,KAAK;AACjB,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,gBAAgB,EAAE,IAAI;AACtB,IAAA,gBAAgB,EAAE,KAAK;AACvB,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,MAAM,EAAE,KAAK;AACb,IAAA,gBAAgB,EAAE,KAAK;AACvB,IAAA,eAAe,EAAE,KAAK;AACtB,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,iBAAiB,EAAE,CAAC;AACpB,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,WAAW,EAAE;QACX,KAAK,EAAE,KAAK,CAAC,MAAM;QACnB,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,OAAO,EAAE,KAAK;AACf,KAAA;EACD;MAGW,oBAAoB,CAAA;aACjB,IAAM,CAAA,MAAA,GAAW,aAAX,CAAyB,EAAA;8GADlC,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAApB,oBAAoB,EAAA,CAAA,CAAA,EAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;;;MCvCE,gBAAgB,CAAA;AAEpB,IAAA,OAAO,WAAW,CAAI,IAAS,EAAE,WAAmB,EAAA;QACzD,MAAM,OAAO,GAAU,EAAE,CAAC;AAE1B,QAAA,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CACb,OAAO,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,WAAW,CAAC,CAAC,EAClC,QAAQ,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAQ,EAAE,IAAO,KAAK,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CACnF,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAExC,QAAA,OAAO,OAAO,CAAC;KAChB;8GAXU,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAhB,gBAAgB,EAAA,CAAA,CAAA,EAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;;;MCAE,YAAY,CAAA;AAEhB,IAAA,WAAW,CAAC,GAAa,EAAA;AAC9B,QAAA,MAAM,QAAQ,GAAG,CAAA,8BAAA,EAAkC,GAAG,CAAC,GAAI,GAAG,CAAC;QAC/D,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAwB,CAAC;AACpE,QAAA,IAAI,GAAG,EAAE;YACP,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAClC,SAAA;KACF;AAEM,IAAA,cAAc,CAAC,GAAa,EAAA;AACjC,QAAA,MAAM,QAAQ,GAAG,CAAA,8BAAA,EAAkC,GAAG,CAAC,GAAI,GAAG,CAAC;QAC/D,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAwB,CAAC;AACpE,QAAA,IAAI,GAAG,EAAE;YACP,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACrC,SAAA;KACF;AAEM,IAAA,YAAY,CAAC,GAAc,EAAA;QAChC,MAAM,QAAQ,GAAG,CAAA,8BAAA,EAAkC,GAAG,CAAC,GAAI,CAAA,iBAAA,EAAqB,GAAG,CAAC,IAAK,CAAA,CAAA,CAAG,CAAC;QAC7F,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAyB,CAAC;AACtE,QAAA,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACnC,SAAA;KACF;AAEM,IAAA,WAAW,CAAC,GAAa,EAAA;AAC9B,QAAA,MAAM,QAAQ,GAAG,CAAA,8BAAA,EAAiC,GAAG,CAAC,GAAG,GAAG,CAAC;QAC7D,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAwB,CAAC;AACpE,QAAA,IAAI,GAAG,EAAE;YACP,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;AACjC,SAAA;KACF;AAEM,IAAA,YAAY,CAAC,GAAc,EAAA;QAChC,MAAM,QAAQ,GAAG,CAAA,8BAAA,EAAiC,GAAG,CAAC,GAAG,CAAA,iBAAA,EAAoB,GAAG,CAAC,IAAI,CAAA,CAAA,CAAG,CAAC;QACzF,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAyB,CAAC;AACtE,QAAA,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;AAClC,SAAA;KACF;IAEM,WAAW,CAAC,MAA2B,EAAE,MAAc,EAAA;AAC5D,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,OAAO,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC;AAC5B,SAAA;KACF;8GA9CU,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAZ,YAAY,EAAA,CAAA,CAAA,EAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB,UAAU;;;MCAE,iBAAiB,CAAA;AAA9B,IAAA,WAAA,GAAA;AAEW,QAAA,IAAA,CAAA,MAAM,GAAyB,IAAI,YAAY,EAAU,CAAC;QAEzD,IAAS,CAAA,SAAA,GAAkD,EAAE,CAAC;QAC9D,IAAU,CAAA,UAAA,GAAG,uBAAuB,CAAC;KAyGhD;AAvGU,IAAA,SAAS,KAAa,OAAO,IAAI,CAAC,UAAU,CAAA,EAAE;AAErD;;;;AAIG;AACI,IAAA,QAAQ,CAAC,QAAqC,EAAA;AACjD,QAAA,IAAI,QAAQ,CAAC,EAAE,IAAI,IAAI,EAAE;AACrB,YAAA,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;AACjC,SAAA;QAED,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;YAC9B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;AACvC,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AACxC,SAAA;KACJ;AAED;;;AAGG;AACK,IAAA,cAAc,CAAC,QAAqC,EAAA;QACxD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAG,CAAC,EAAE;AAC3C,YAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAG,CAAC,CAAC,IAAI,CAAC,EAAE;AACvD,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAG,CAAC,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACpD,OAAO,GAAG,IAAI,CAAC;AAClB,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,OAAO,CAAC;KAClB;AAED;;AAEG;AACI,IAAA,cAAc,CAAC,EAAU,EAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE;YACpB,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC;AACzC,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACZ;AAED;;AAEG;IACI,cAAc,CAAC,EAAU,EAAE,IAAY,EAAA;AAC1C,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE;YACpB,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAClC,YAAA,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC;AAC5E,YAAA,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,IAAI,EAAE;gBAC9B,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC;AACtC,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,aAAA;AACJ,SAAA;KACJ;AAED;;AAEG;IACI,aAAa,CAAC,EAAU,EAAE,UAAkB,EAAA;QAC/C,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,UAAU,EAAE;YACvC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,UAAU,GAAG,UAAU,CAAC;AAC3C,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,SAAA;KACJ;AAED;;AAEG;IACI,eAAe,CAAC,EAAU,EAAE,YAAoB,EAAA;AACnD,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE;YACpB,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,YAAY,GAAG,YAAY,CAAC;AAC/C,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,SAAA;KACJ;AAED;;;AAGG;AACI,IAAA,WAAW,CAAC,EAAA,GAAa,IAAI,CAAC,UAAU,EAAA;AAC3C,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE;YACpB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;AACzC,SAAA;AACD,QAAA,OAAO,EAAiC,CAAC;KAC5C;AAED;;AAEG;AACK,IAAA,KAAK,CAAC,GAAQ,EAAA;QAClB,IAAI,MAAM,GAAG,EAAE,CAAC;AAChB,QAAA,KAAK,IAAI,CAAC,IAAI,GAAG,EAAE;AACf,YAAA,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;gBACvB,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACtB,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACjB;AAEJ;;ACtGD;;;;AAIG;MAKU,2BAA2B,CAAA;IASpC,WAAoB,CAAA,OAA0B,EAC1B,iBAAoC,EAAA;QADpC,IAAO,CAAA,OAAA,GAAP,OAAO,CAAmB;QAC1B,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;QAR/C,IAAO,CAAA,OAAA,GAAW,CAAC,CAAC;AACnB,QAAA,IAAA,CAAA,UAAU,GAAyB,IAAI,YAAY,EAAU,CAAC;AAC9D,QAAA,IAAA,CAAA,oBAAoB,GAAyB,IAAI,YAAY,EAAU,CAAC;QAClF,IAAK,CAAA,KAAA,GAAW,EAAE,CAAC;AAMf,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;aAC/B,SAAS,CAAC,EAAE,IAAG;AACZ,YAAA,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE;gBAChB,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AACtC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;AAC1C,aAAA;AACL,SAAC,CAAC,CAAC;KACV;IAED,QAAQ,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,EAAE;YACvB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;AACtC,SAAA;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;IAED,WAAW,GAAA;QACP,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;KAChC;AAED;;AAEG;IACH,QAAQ,GAAA;QACJ,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;KAC1C;AAED;;AAEG;IACH,IAAI,GAAA;QACA,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;KAC1C;AAED;;AAEG;IACH,WAAW,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;KAClC;AAED;;AAEG;IACH,UAAU,GAAA;QACN,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;KACnD;AAED;;AAEG;AACH,IAAA,UAAU,CAAC,IAAY,EAAA;AACnB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC9B;AAED;;AAEG;IACH,UAAU,GAAA;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KAC/C;AAED;;AAEG;IACH,WAAW,GAAA;AACP,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC7C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;QACxC,IAAI,UAAU,GAAG,CAAC,EAAE;;;AAGhB,YAAA,OAAO,CAAC,CAAC;AACZ,SAAA;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;KACpD;IAED,aAAa,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC;KAC5D;IAEO,YAAY,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE;YAC9C,OAAO,CAAC,IAAI,CAAC,CAAA,+CAAA,EAAkD,IAAI,CAAC,EAAE,CAAoD,kDAAA,CAAA,CAAC,CAAC;AAC/H,SAAA;KACJ;AAED;;;;AAIG;IACK,eAAe,GAAA;AACnB,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;AAE7D,QAAA,IAAI,oBAAoB,KAAK,IAAI,CAAC,WAAW,EAAE;YAC3C,UAAU,CAAC,MAAK;AACZ,gBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;gBACrD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;AACjH,aAAC,CAAC,CAAC;AACN,SAAA;AAAM,aAAA;YACH,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;AAChH,SAAA;KACJ;AAED;;;AAGG;AACK,IAAA,oBAAoB,CAAC,QAAqC,EAAA;AAC9D,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC;QACjF,IAAI,UAAU,GAAG,QAAQ,CAAC,WAAW,IAAI,CAAC,GAAG,UAAU,EAAE;AACrD,YAAA,OAAO,UAAU,CAAC;AACrB,SAAA;AAAM,aAAA,IAAI,QAAQ,CAAC,WAAW,GAAG,CAAC,EAAE;AACjC,YAAA,OAAO,CAAC,CAAC;AACZ,SAAA;QAED,OAAO,QAAQ,CAAC,WAAW,CAAC;KAC/B;AAED;;AAEG;AACK,IAAA,eAAe,CAAC,WAAmB,EAAE,YAAoB,EAAE,UAAkB,EAAE,eAAuB,EAAA;;QAE1G,eAAe,GAAG,CAAC,eAAe,CAAC;QACnC,IAAI,KAAK,GAAG,EAAE,CAAC;;;AAIf,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;QACrE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;AAE/C,QAAA,MAAM,OAAO,GAAG,WAAW,IAAI,OAAO,CAAC;AACvC,QAAA,MAAM,KAAK,GAAG,UAAU,GAAG,OAAO,GAAG,WAAW,CAAC;AACjD,QAAA,MAAM,QAAQ,GAAG,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC;AAEpC,QAAA,IAAI,cAAc,GAAG,eAAe,GAAG,UAAU,CAAC;QAClD,IAAI,CAAC,GAAG,CAAC,CAAC;AAEV,QAAA,OAAO,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,eAAe,EAAE;AAC5C,YAAA,IAAI,KAAK,CAAC;AACV,YAAA,IAAI,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;AACvF,YAAA,IAAI,qBAAqB,IAAI,CAAC,KAAK,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC;AAC7D,YAAA,IAAI,qBAAqB,IAAI,CAAC,KAAK,eAAe,GAAG,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC;AACjF,YAAA,IAAI,cAAc,KAAK,qBAAqB,IAAI,qBAAqB,CAAC,EAAE;gBACpE,KAAK,GAAG,KAAK,CAAC;AACjB,aAAA;AAAM,iBAAA;gBACH,KAAK,GAAG,UAAU,CAAC;AACtB,aAAA;;YAED,KAAK,CAAC,IAAI,CAAC;AACT,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,KAAK,EAAE,UAAU;AAClB,aAAA,CAAC,CAAC;AACH,YAAA,CAAC,EAAG,CAAC;AACR,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AAED;;;AAGG;AACK,IAAA,mBAAmB,CAAC,CAAS,EAAE,WAAmB,EAAE,eAAuB,EAAE,UAAkB,EAAA;QACnG,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK,eAAe,EAAE;AACvB,YAAA,OAAO,UAAU,CAAC;AACrB,SAAA;aAAM,IAAI,CAAC,KAAK,CAAC,EAAE;AAChB,YAAA,OAAO,CAAC,CAAC;AACZ,SAAA;aAAM,IAAI,eAAe,GAAG,UAAU,EAAE;AACrC,YAAA,IAAI,UAAU,GAAG,OAAO,GAAG,WAAW,EAAE;AACpC,gBAAA,OAAO,UAAU,GAAG,eAAe,GAAG,CAAC,CAAC;AAC3C,aAAA;iBAAM,IAAI,OAAO,GAAG,WAAW,EAAE;AAC9B,gBAAA,OAAO,WAAW,GAAG,OAAO,GAAG,CAAC,CAAC;AACpC,aAAA;AAAM,iBAAA;AACH,gBAAA,OAAO,CAAC,CAAC;AACZ,aAAA;AACJ,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,CAAC,CAAC;AACZ,SAAA;KACJ;8GAvMQ,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAA3B,2BAA2B,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAJvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,2CAA2C;AACrD,oBAAA,QAAQ,EAAE,eAAe;AAC5B,iBAAA,CAAA;qIAEY,EAAE,EAAA,CAAA;sBAAV,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACI,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBACG,oBAAoB,EAAA,CAAA;sBAA7B,MAAM;;;MCEE,mBAAmB,CAAA;AALhC,IAAA,WAAA,GAAA;AAiBkB,QAAA,IAAA,CAAA,WAAW,GAAkC,IAAI,YAAY,EAAE,CAAC;AAQzE,QAAA,IAAA,CAAA,MAAM,GAAa,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QAIxC,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;QAElB,IAA2B,CAAA,2BAAA,GAAG,YAAY,CAAC;QAE3C,IAAqB,CAAA,qBAAA,GAAG,MAAM,CAAC;QAE/B,IAAwB,CAAA,wBAAA,GAAG,iBAAiB,CAAC;QAE7C,IAAa,CAAA,aAAA,GAAG,EAAE,CAAC;QAEnB,IAAS,CAAA,SAAA,GAAG,EAAE,CAAC;QAEf,IAAc,CAAA,cAAA,GAAG,IAAI,CAAC;AAiC9B,KAAA;AA9BQ,IAAA,OAAO,CAAC,aAAkB,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;AACvF,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACxB,SAAA;KACF;AAEM,IAAA,WAAW,CAAC,OAAsB,EAAA;AACvC,QAAA,MAAM,EAAC,MAAM,EAAC,GAAG,OAAO,CAAC;AACzB,QAAA,IAAI,MAAM,IAAI,MAAM,CAAC,YAAY,EAAE;YACjC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACvC,SAAA;KACF;AAEM,IAAA,YAAY,CAAC,IAAY,EAAA;AAC9B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACpB,IAAI;YACJ,KAAK,EAAE,IAAI,CAAC,aAAa;AAC1B,SAAA,CAAC,CAAC;KACJ;IAEM,WAAW,CAAC,KAAa,EAAE,WAAoB,EAAA;QACpD,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;AAClC,SAAA;AACD,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACpB,YAAA,IAAI,EAAE,CAAC;YACP,KAAK;AACN,SAAA,CAAC,CAAC;KACJ;8GApEU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,0eC1BhC,uqIAuFA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,sBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FD7Da,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;+BACE,gBAAgB,EAAA,eAAA,EAET,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,uqIAAA,EAAA,CAAA;8BAKxC,UAAU,EAAA,CAAA;sBADhB,KAAK;gBAIC,MAAM,EAAA,CAAA;sBADZ,KAAK;gBAIC,EAAE,EAAA,CAAA;sBADR,KAAK;gBAIU,WAAW,EAAA,CAAA;sBAD1B,MAAM;gBAIA,mBAAmB,EAAA,CAAA;sBADzB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,qBAAqB,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAA;gBAIzC,eAAe,EAAA,CAAA;sBADrB,SAAS;uBAAC,iBAAiB,CAAA;gBAsBrB,OAAO,EAAA,CAAA;sBADb,YAAY;uBAAC,gBAAgB,EAAE,CAAC,eAAe,CAAC,CAAA;;;MExDtC,eAAe,CAAA;AAL5B,IAAA,WAAA,GAAA;AAWkB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAyC,CAAC;AASpF,KAAA;AAPQ,IAAA,QAAQ,CAAC,GAAW,EAAA;QACzB,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;KAC9B;AAEM,IAAA,QAAQ,CAAC,KAAuB,EAAA;QACrC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAC,CAAC,CAAC,CAAC;KAChE;8GAdU,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,+GCR5B,uWASA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FDDa,eAAe,EAAA,UAAA,EAAA,CAAA;kBAL3B,SAAS;+BACE,YAAY,EAAA,eAAA,EAEL,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,uWAAA,EAAA,CAAA;8BAKxC,MAAM,EAAA,CAAA;sBADZ,KAAK;gBAIU,MAAM,EAAA,CAAA;sBADrB,MAAM;;;MEoBI,mBAAmB,CAAA;AAoD9B,IAAA,WAAA,CAAmC,YAA0B,EAAA;QAA1B,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;AA5B7C,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAyC,CAAC;AAGnE,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAAW,CAAC;AAGpC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAQ,CAAC;AAGrC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAAiC,CAAC;QAEnE,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;QAEnB,IAA0B,CAAA,0BAAA,GAAkB,IAAI,CAAC;QAIjD,IAAiB,CAAA,iBAAA,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAYtD;AAED,IAAA,IAAW,eAAe,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,KAAK,WAAW,CAAC;KAC5F;AAGM,IAAA,OAAO,CAAC,aAAkB,EAAA;QAC/B,IACE,IAAI,CAAC,oBAAoB;YACzB,CAAC,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,EAChE;AACA,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AACzB,SAAA;;QAGD,IACE,IAAI,CAAC,0BAA0B;;YAE/B,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,EACvF;AACA,YAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC;AACxC,SAAA;KACF;AAED,IAAA,mBAAmB,CAAC,MAAe,EAAA;QACjC,OAAO,MAAM,CAAC,aAAa,IAAI,OAAO,MAAM,CAAC,aAAa,KAAK,WAAW,CAAC;KAC5E;AAED,IAAA,OAAO,CAAC,MAAe,EAAA;AACrB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACzB;AAED,IAAA,cAAc,CAAC,MAAe,EAAA;AAC5B,QAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,YAAY,KAAK,SAAS,GAAG,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC;AAC1F,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,kBAAkB,CAAC;KACvD;AAED,IAAA,UAAU,CAAC,KAA4B,EAAA;AACrC,QAAA,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;KACxE;AAED,IAAA,QAAQ,CAAC,MAA6C,EAAA;AACpD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC1B;AAED,IAAA,cAAc,CAAC,MAAW,EAAA;QACxB,IAAI,MAAM,CAAC,KAAK,EAAE;YAChB,OAAO,MAAM,CAAC,KAAK,CAAC;AACrB,SAAA;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC;KAC9E;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;KACvB;IAED,WAAW,CAAC,KAAiB,EAAE,EAAwB,EAAA;AACrD,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;YAC7B,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC;AAChD,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACd,KAAK,EAAE,KAAK,CAAC,uBAAuB;AACpC,YAAA,KAAK,EAAE,KAAK;AACb,SAAA,CAAC,CAAC;KACJ;AAED,IAAA,WAAW,CAAC,KAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;YAC7B,OAAO;AACR,SAAA;QACD,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;AAC5B,YAAA,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;YAC5D,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC;YACpC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC;AACvC,SAAA;KACF;AAED,IAAA,SAAS,CAAC,KAAiB,EAAA;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;YAC7B,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACd,KAAK,EAAE,KAAK,CAAC,qBAAqB;AAClC,YAAA,KAAK,EAAE,KAAK;AACb,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;AACjC,QAAA,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;KACrB;AAED,IAAA,4BAA4B,CAAC,MAAe,EAAA;AAC1C,QAAA,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE;AAChC,YAAA,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;AACrE,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,0BAA0B,KAAK,MAAM,CAAC,GAAG,EAAE;AAClD,YAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC;YACvC,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,0BAA0B,GAAG,MAAM,CAAC,GAAG,CAAC;KAC9C;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE;AACnC,YAAA,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;AACnE,SAAA;AACD,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;KACpC;8GAjKU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAFnB,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,SAAA,EAAA,CAAC,YAAY,CAAC,yTC/B3B,0mQAmMA,EAAA,MAAA,EAAA,CAAA,8GAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,eAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FDlKa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAlB/B,SAAS;AAEE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,mBAaN,uBAAuB,CAAC,MAAM,EACpC,SAAA,EAAA,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,0mQAAA,EAAA,MAAA,EAAA,CAAA,8GAAA,CAAA,EAAA,CAAA;gGAKlB,MAAM,EAAA,CAAA;sBADZ,KAAK;gBAIC,OAAO,EAAA,CAAA;sBADb,KAAK;gBAIC,OAAO,EAAA,CAAA;sBADb,KAAK;gBAIC,SAAS,EAAA,CAAA;sBADf,KAAK;gBAIC,iBAAiB,EAAA,CAAA;sBADvB,KAAK;gBAIC,eAAe,EAAA,CAAA;sBADrB,KAAK;gBAIC,yBAAyB,EAAA,CAAA;sBAD/B,KAAK;gBAIU,MAAM,EAAA,CAAA;sBADrB,MAAM;gBAIS,KAAK,EAAA,CAAA;sBADpB,MAAM;gBAIS,SAAS,EAAA,CAAA;sBADxB,MAAM;gBAIS,KAAK,EAAA,CAAA;sBADpB,MAAM;gBAYC,EAAE,EAAA,CAAA;sBADT,SAAS;uBAAC,IAAI,CAAA;gBAIP,cAAc,EAAA,CAAA;sBADrB,YAAY;uBAAC,gBAAgB,CAAA;gBAItB,oBAAoB,EAAA,CAAA;sBAD3B,SAAS;uBAAC,sBAAsB,CAAA;gBAW1B,OAAO,EAAA,CAAA;sBADb,YAAY;uBAAC,gBAAgB,EAAE,CAAC,eAAe,CAAC,CAAA;;;AExFnD,MAAM,YAAY,GAAG,MAAM,CAAC,gBAAgB,CAAC;MAuBhC,YAAY,CAAA;AAKrB,IAAA,WAAA,CAAoB,OAA0B,EAAA;QAA1B,IAAO,CAAA,OAAA,GAAP,OAAO,CAAmB;;QAFtC,IAAK,CAAA,KAAA,GAAgC,EAAE,CAAC;KAG/C;IAEM,SAAS,CAA6B,UAAa,EAAE,IAAsB,EAAA;;;;;AAM9E,QAAA,IAAI,EAAE,UAAU,YAAY,KAAK,CAAC,EAAE;AAChC,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;AAC9C,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;gBACjB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAU,CAAC;AACrC,aAAA;AAAM,iBAAA;AACH,gBAAA,OAAO,UAAU,CAAC;AACrB,aAAA;AACJ,SAAA;AAED,QAAA,IAAI,cAAc,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,CAAC,MAAM,CAAC;QAC9E,IAAI,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AACrD,QAAA,IAAI,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;QAErB,IAAI,KAAK,EAAE,GAAG,CAAC;AACf,QAAA,IAAI,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC;QAEpC,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAEjD,QAAA,IAAI,CAAC,cAAc,IAAI,UAAU,YAAY,KAAK,EAAE;AAChD,YAAA,OAAO,GAAG,CAAC,OAAO,IAAI,YAAY,CAAC;YACnC,KAAK,GAAG,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,IAAI,OAAO,CAAC;AAC7C,YAAA,GAAG,GAAG,KAAK,GAAG,OAAO,CAAC;AAEtB,YAAA,IAAI,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAG,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;AACrE,YAAA,IAAI,WAAW,EAAE;gBACb,OAAO,IAAI,CAAC,KAAK,CAAC,EAAG,CAAC,CAAC,KAAU,CAAC;AACrC,aAAA;AAAM,iBAAA;gBACH,IAAI,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACzC,gBAAA,IAAI,CAAC,SAAS,CAAC,EAAG,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;gBACnD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC7B,gBAAA,OAAO,KAAU,CAAC;AACrB,aAAA;AACJ,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,UAAU,EAAE;gBACZ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAChC,aAAA;;;AAID,YAAA,IAAI,CAAC,SAAS,CAAC,EAAG,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;AAExD,YAAA,OAAO,UAAU,CAAC;AACrB,SAAA;KACJ;AAED;;AAEG;IACK,cAAc,CAAC,UAA0B,EAAE,MAAwB,EAAA;AACvE,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAEzB,OAAO;YACH,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,IAAI,GAAG,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YAC5D,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;YAC9C,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;YAC5C,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM;SAC7D,CAAC;KACL;AAED;;AAEG;AACK,IAAA,WAAW,CAAC,MAAwB,EAAA;AACxC,QAAA,MAAM,QAAQ,GAAG,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;AAEjD,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC;AAC3D,QAAA,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE;AACpB,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,qEAAA,EAAwE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAE,CAAA,CAAC,CAAC;AACjH,SAAA;KACJ;AAED;;;;;AAKG;IACK,SAAS,CAAC,EAAU,EAAE,UAA0B,EAAE,KAAqB,EAAE,KAAa,EAAE,GAAW,EAAA;AACvG,QAAA,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG;YACb,UAAU;YACV,IAAI,EAAE,UAAU,CAAC,MAAM;YACvB,KAAK;YACL,KAAK;YACL,GAAG;SACN,CAAC;KACL;AAED;;AAEG;AACK,IAAA,gBAAgB,CAAC,EAAU,EAAE,UAA0B,EAAE,KAAa,EAAE,GAAW,EAAA;QACvF,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,EAAE;AACR,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;QACD,IAAI,mBAAmB,GAAG,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,MAAM;YACtD,KAAK,CAAC,KAAK,KAAK,KAAK;AACrB,YAAA,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC;QAEtB,IAAG,CAAC,mBAAmB,EAAE;AACrB,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;QAED,OAAQ,KAAK,CAAC,KAAoB,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,KAAK,KAAK,OAAO,KAAK,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;KACvG;8GAtHQ,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAN,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;4GAAZ,YAAY,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA,CAAA,EAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAJxB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,IAAI,EAAE,KAAK;AACd,iBAAA,CAAA;;;MCvBY,cAAc,CAAA;AAElB,IAAA,OAAO,OAAO,CAAC,CAAW,EAAE,CAAM,EAAA;;;AAGvC,QAAA,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAU,EAAE,CAAS,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,WAAW,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;KACpG;8GANU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAd,cAAc,EAAA,CAAA,CAAA,EAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,UAAU;;;MCME,UAAU,CAAA;AAHvB,IAAA,WAAA,GAAA;QAIU,IAAO,CAAA,OAAA,GAA8B,EAAE,CAAC;AAwCjD,KAAA;AAtCQ,IAAA,SAAS,CAAC,KAAY,EACZ,MAA6C,EAC7C,oBAAqC,EACrC,MAAe,EAAA;AAC9B,QAAA,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7B,QAAA,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;YAChC,OAAO;AACR,SAAA;AACD,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,YAAA,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACxC,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AACD,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AACnB,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,iBAAiB,EAAE,CAAC;AAC7D,YAAA,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE,EAAE;gBACjD,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5B,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,EAAE;AAC9B,YAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC,CAAC;AACxE,SAAA;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;KACtD;IAEO,WAAW,CAAC,KAAY,EAAE,oBAAqC,EAAA;QACrE,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;AAC/B,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAI;gBAC3C,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC3B,MAAM,GAAG,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC/C,MAAM,OAAO,GACX,OAAO,GAAG,KAAK,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,iBAAiB,EAAE,CAAC;AACrF,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC3C,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7D,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AACH,QAAA,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACtC,QAAA,OAAO,GAAG,CAAC;KACZ;8GAxCU,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;4GAAV,UAAU,EAAA,IAAA,EAAA,QAAA,EAAA,CAAA,CAAA,EAAA;;2FAAV,UAAU,EAAA,UAAA,EAAA,CAAA;kBAHtB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,QAAQ;AACf,iBAAA,CAAA;;;MCDY,UAAU,CAAA;IAEd,SAAS,CAAC,GAAQ,EAAE,GAAW,EAAA;QACpC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE7B,OAAO,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;KAC3C;8GANU,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;4GAAV,UAAU,EAAA,IAAA,EAAA,QAAA,EAAA,CAAA,CAAA,EAAA;;2FAAV,UAAU,EAAA,UAAA,EAAA,CAAA;kBAHtB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,QAAQ;AACf,iBAAA,CAAA;;;MCEY,gBAAgB,CAAA;AAEpB,IAAA,SAAS,CAAC,KAAY,EAAE,MAAc,EAAE,OAAkB,EAAE,oBAAqC,EAAA;AACtG,QAAA,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7B,QAAA,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;YAChC,OAAO;AACR,SAAA;QAED,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,EAAE,EAAE;AAClD,YAAA,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACxC,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AAED,QAAA,MAAM,SAAS,GAA0B,CAAC,GAAQ,KAAK,OAAO,CAAC,MAAM,CACnE,CAAC,GAAY,EAAE,IAAa,KAC1B,GAAG;AACH,YAAA,IAAI,EAAE,eAAe,GAAG,GAAG,CAAC;aAC3B,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAI,EAAA,GAAG,GAAG,IAAI,CAAC,GAAG,CAAE,EAAE,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,EACvJ,KAAK,CACN,CAAC;QAEF,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACpC,QAAA,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAEtC,QAAA,OAAO,GAAG,CAAC;KACZ;8GAzBU,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;4GAAhB,gBAAgB,EAAA,IAAA,EAAA,QAAA,EAAA,CAAA,CAAA,EAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,QAAQ;AACf,iBAAA,CAAA;;;MCCY,QAAQ,CAAA;AAHrB,IAAA,WAAA,GAAA;QAKU,IAAY,CAAA,YAAA,GAAU,EAAE,CAAC;AAsDlC,KAAA;AApDS,IAAA,OAAO,KAAK,CAAC,EAAO,EAAE,EAAO,EAAA;QACnC,OAAO,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;KACzF;AAEO,IAAA,OAAO,OAAO,CAAC,CAAQ,EAAE,CAAQ,EAAE,GAAW,EAAA;QACpD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,CAAC,KAAK,GAAG,EAAE,EAAE,WAAW,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,CAAC,KAAK,GAAG,EAAE,EAAE,WAAW,EAAE,CAAC;QAC1C,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;AAChC,YAAA,OAAO,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AACrC,SAAA;QACD,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE;YACzC,OAAO,CAAC,CAAC,CAAC;AACX,SAAA;QACD,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE;AACzC,YAAA,OAAO,CAAC,CAAC;AACV,SAAA;AAED,QAAA,OAAO,CAAC,CAAC;KACV;AAEM,IAAA,SAAS,CAAC,KAAY,EAAE,MAAsC,EAAE,MAAe,EAAA;AACpF,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC3B,SAAA;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,KAAK,EAAE,EAAE;AACpC,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AACD,QAAA,IAAI,MAAM,CAAC,KAAK,KAAK,EAAE,EAAE;YACvB,OAAO,IAAI,CAAC,YAAY,CAAC;AAC1B,SAAA;AACD,QAAA,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,EAAE;YAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC5C,SAAA;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KAC7C;AAEO,IAAA,OAAO,CAAC,KAAY,EAAE,MAAsC,EAAE,MAAe,EAAA;AACnF,QAAA,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,EAAE;AAC9B,YAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACnF,SAAA;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;KACjE;AAEO,IAAA,QAAQ,CAAC,KAAY,EAAE,MAAsC,EAAE,MAAe,EAAA;AACpF,QAAA,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,EAAE;AAC9B,YAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACnF,SAAA;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;KACjE;8GAvDU,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;4GAAR,QAAQ,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAAR,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAHpB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,MAAM;AACb,iBAAA,CAAA;;;MCyCY,iBAAiB,CAAA;AAkH5B,IAAA,WAAA,CAAoC,GAAsB,EACtB,gBAAkC,EACnC,YAA0B,EAAA;QAFzB,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QACtB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QACnC,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QArGtD,IAAE,CAAA,EAAA,GAAG,OAAO,CAAC;AAoCJ,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAAiC,CAAC;AAG1D,QAAA,IAAA,CAAA,cAAc,GAAoB,IAAI,OAAO,EAAU,CAAC;QAkBjE,IAAW,CAAA,WAAA,GAAG,CAAC,CAAC,CAAC;QAEjB,IAAU,CAAA,UAAA,GAAkB,IAAI,CAAC;QAIjC,IAAO,CAAA,OAAA,GAAQ,EAAE,CAAC;QAElB,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;QAEnB,IAAI,CAAA,IAAA,GAAG,CAAC,CAAC;QAET,IAAK,CAAA,KAAA,GAAG,CAAC,CAAC;AAEV,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;QAEtB,IAAO,CAAA,OAAA,GAAkB,IAAI,CAAC;AAE9B,QAAA,IAAA,CAAA,sBAAsB,GAA2B;AACtD,YAAA,GAAG,EAAE,IAAI;AACT,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,KAAK,EAAE,IAAI;SACZ,CAAC;AAIK,QAAA,IAAA,CAAA,MAAM,GAAwC;AACnD,YAAA,GAAG,EAAE,EAAE;AACP,YAAA,KAAK,EAAE,KAAK;SACb,CAAC;AAEK,QAAA,IAAA,CAAA,4BAA4B,GAAG,IAAI,GAAG,EAAU,CAAC;AAEjD,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;AAOtC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAQ,CAAC;AAKxC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAa,KAAI;YAChF,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AAC3B,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,IAAW,aAAa,GAAA;QACtB,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAqB,CAAC;AACnE,QAAA,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AAChD,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,GAAG,CAAC,CAAC;AACxD,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,GAAG,CAAC,CAAC;YACxD,MAAM,cAAc,GAAG,CAAC,CAAC;YACzB,MAAM,eAAe,GAAG,CAAC,CAAC;YAC1B,QACE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,aAAa,GAAG,aAAa;iBACjD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,cAAc,CAAC;AAC7C,gBAAA,eAAe,EACf;AACH,SAAA;AAED,QAAA,OAAO,EAAE,CAAC;KACX;AAED,IAAA,IAAW,eAAe,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,KAAK,WAAW,CAAC;KAC5F;AAGM,IAAA,kBAAkB,CAAC,aAAkB,EAAA;AAC1C,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;YAC/E,IAAI,CAAC,sBAAsB,GAAG;AAC5B,gBAAA,GAAG,EAAE,IAAI;AACT,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,KAAK,EAAE,IAAI;aACZ,CAAC;AACH,SAAA;KACF;IAEM,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;AAC/C,SAAA;QACD,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;AAClC,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC;AAC3C,SAAA;QACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QAC9B,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,OAAO,GAAG,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AAC1E,SAAA;QACD,IAAI,CAAC,sBAAsB,EAAE,CAAC;KAC/B;IAEM,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;KAC7B;IAEM,eAAe,GAAA;AACpB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,0BAA0B;AAC1D,cAAE,IAAI,CAAC,MAAM,CAAC,0BAA0B;cACtC,GAAG,CAAC;AACR,QAAA,IAAI,CAAC,gBAAgB;AAClB,aAAA,QAAQ,EAAE;aACV,IAAI,CACH,YAAY,CAAC,aAAa,CAAC,EAC3B,MAAM,CAAC,CAAC,KAAK,KAAI;YACf,QACE,CAAC,CAAC,KAAK;AACP,gBAAA,IAAI,CAAC,QAAQ;AACb,gBAAA,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,EACtE;SACH,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAC5B;aACA,SAAS,CAAC,MAAK;YACd,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;AAClD,SAAC,CAAC,CAAC;KACN;AAEM,IAAA,WAAW,CAAC,OAAsB,EAAA;QACvC,MAAM,EAAC,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAC,GAAG,OAAO,CAAC;AAC/D,QAAA,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;AAC7C,QAAA,IAAI,aAAa,IAAI,aAAa,CAAC,YAAY,EAAE;AAC/C,YAAA,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,YAAY,CAAC;AAC1C,SAAA;AACD,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;AAC7B,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACxB,SAAA;AACD,QAAA,IAAI,UAAU,IAAI,UAAU,CAAC,YAAY,EAAE;YACzC,MAAM,EAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAC,GAAG,UAAU,CAAC,YAA0B,CAAC;AACrE,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,YAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;AACpB,SAAA;AACD,QAAA,IAAI,WAAW,IAAI,WAAW,CAAC,YAAY,EAAE;AAC3C,YAAA,IAAI,CAAC,OAAO,GAAG,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AAC1E,SAAA;QACD,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AAC3D,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;AAC7C,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC7B,SAAA;KACF;AAEM,IAAA,OAAO,CAAC,MAAe,EAAA;QAC5B,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;YACtE,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,KAAK,EAAE,EAAE;YACpD,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;YACzD,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;AAC/B,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtD,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC;AACrB,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;AACxB,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;YACjC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,MAAM,GAAG,EAAC,GAAG,IAAI,CAAC,MAAM,EAAC,CAAC;AAChC,SAAA;AAED,QAAA,MAAM,KAAK,GAAG;YACZ,GAAG,EAAE,IAAI,CAAC,OAAO;YACjB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;SACxC,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;KACtC;IAEM,OAAO,CAAC,MAAkB,EAAE,GAAQ,EAAE,GAAkB,EAAE,QAAa,EAAE,QAAgB,EAAA;AAC9F,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AACzB,YAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;AAC7B,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,QAAQ,EAAE;AACrC,YAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;AAC7B,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,QAAQ,EAAE;AACtC,YAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;AAC5B,YAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;AAC7B,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAC1B,YAAA,MAAM,KAAK,GAAG;AACZ,gBAAA,KAAK,EAAE,MAAM;gBACb,GAAG;gBACH,GAAG;AACH,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,KAAK,EAAE,QAAQ;aAChB,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACtC,SAAA;KACF;IAEM,aAAa,CAClB,MAAkB,EAClB,GAAQ,EACR,GAAkB,EAClB,QAAa,EACb,QAAgB,EAAA;AAEhB,QAAA,MAAM,KAAK,GAAG;AACZ,YAAA,KAAK,EAAE,MAAM;YACb,GAAG;YACH,GAAG;AACH,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,KAAK,EAAE,QAAQ;SAChB,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;KAC5C;AAEM,IAAA,gBAAgB,CAAC,MAAW,EAAE,GAAQ,EAAE,QAAgB,EAAA;AAC7D,QAAA,MAAM,KAAK,GAAG;AACZ,YAAA,KAAK,EAAE,MAAM;YACb,GAAG;AACH,YAAA,KAAK,EAAE,QAAQ;SAChB,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;KAC/C;AAEM,IAAA,aAAa,CAAC,MAAW,EAAE,GAAQ,EAAE,QAAgB,EAAA;AAC1D,QAAA,MAAM,KAAK,GAAG;AACZ,YAAA,KAAK,EAAE,MAAM;YACb,GAAG;AACH,YAAA,KAAK,EAAE,QAAQ;SAChB,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;KAC5C;IAEM,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;KACpD;AAEM,IAAA,QAAQ,CAAC,MAA6C,EAAA;AAC3D,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;AACjC,YAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;AACpB,SAAA;QACD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;KACxC;AAEM,IAAA,cAAc,CAAC,KAAa,EAAA;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;AACjC,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAC/B,SAAA;QACD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;KAC7C;AAEM,IAAA,YAAY,CAAC,UAA2B,EAAA;AAC7C,QAAA,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;KAChD;AAEM,IAAA,cAAc,CAAC,QAAgB,EAAA;;AAEpC,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC;cACjC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC;cACxC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;KAC3C;AAEM,IAAA,WAAW,CAAC,QAAgB,EAAA;QACjC,IAAI,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACnD,YAAA,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACnD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;AACpD,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAChD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;AACpD,SAAA;KACF;AAEM,IAAA,cAAc,CAAC,QAAgB,EAAA;AACpC,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;AAC/B,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;QACD,OAAO,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;KACxD;IAEM,gBAAgB,CACrB,MAAkB,EAClB,GAAQ,EACR,GAAkB,EAClB,QAAa,EACb,QAAgB,EAAA;AAEhB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;YAChC,OAAO;AACR,SAAA;QACD,MAAM,CAAC,cAAc,EAAE,CAAC;AACxB,QAAA,MAAM,KAAK,GAAG;AACZ,YAAA,KAAK,EAAE,MAAM;YACb,GAAG;YACH,GAAG;AACH,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,KAAK,EAAE,QAAQ;SAChB,CAAC;QACF,IAAI,CAAC,sBAAsB,GAAG;AAC5B,YAAA,GAAG,EAAE,CAAI,EAAA,MAAM,CAAC,KAAK,GAAG,EAAG,CAAI,EAAA,CAAA;AAC/B,YAAA,IAAI,EAAE,CAAI,EAAA,MAAM,CAAC,KAAK,GAAG,EAAG,CAAI,EAAA,CAAA;YAChC,KAAK;SACN,CAAC;QAEF,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;KAC/C;AAEM,IAAA,WAAW,CAAC,KAAmB,EAAA;QACpC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;KAC7C;AAEM,IAAA,MAAM,CAAC,KAA4B,EAAA;QACxC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACvC,QAAA,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;KACrE;;AAGM,IAAA,QAAQ,CAAC,KAAc,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KAC5B;IAEM,SAAS,CAAC,KAAa,EAAE,KAAU,EAAA;QACxC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,KAAK,EAAC,CAAC,CAAC;AAChC,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;AAC5B,YAAA,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACpD,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;;YAEtB,OAAO,CAAC,GAAG,CAAC,EAAC,KAAK,EAAE,KAAK,EAAC,CAAC,CAAC;AAC7B,SAAA;KACF;IAEO,sBAAsB,GAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;YAC7B,OAAO;AACR,SAAA;QACD,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACpD,QAAA,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AAC3C,SAAA;AACD,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,MAAM,EAAC,GAAG,EAAE,KAAK,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,CAAC,OAAO,CAAC;gBACX,IAAI,EAAE,GAAG,CAAC,MAAM;AAChB,gBAAA,KAAK,EAAE,EAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAC;AAC5B,aAAA,CAAC,CAAC;AACJ,SAAA;AACD,QAAA,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,OAAO,CAAC;gBACX,IAAI,EAAE,GAAG,CAAC,aAAa;AACvB,gBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AAC1B,aAAA,CAAC,CAAC;AACJ,SAAA;KACF;AAEO,IAAA,WAAW,CAAC,IAAkB,EAAA;AACpC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AACpD,QAAA,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC;AAC3E,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACrB,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;AACpC,SAAA;KACF;;AAGO,IAAA,OAAO,CAAC,KAAc,EAAA;QAC5B,QAAQ,KAAK,CAAC,IAAI;YAChB,KAAK,GAAG,CAAC,qBAAqB;gBAC5B,IAAI,CAAC,sBAAsB,GAAG;AAC5B,oBAAA,GAAG,EAAE,IAAI;AACT,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,KAAK,EAAE,IAAI;iBACZ,CAAC;gBACF,MAAM;YACR,KAAK,GAAG,CAAC,gBAAgB;;gBAEvB,MAAM;YACR,KAAK,GAAG,CAAC,cAAc;AACrB,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC9B,MAAM;YACR,KAAK,GAAG,CAAC,cAAc;AACrB,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACjC,MAAM;YACR,KAAK,GAAG,CAAC,aAAa;AACpB,gBAAA,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;oBAC7B,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAC5B,wBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAW,OAAA,EAAA,KAAK,CAAC,GAAI,CAAE,CAAA,CAAqB,CAAC;wBACrF,IAAI,CAAC,OAAO,EAAE;4BACZ,OAAO,CAAC,KAAK,CACX,CAAA,QAAA,EAAY,KAAK,CAAC,GAAI,CAAyD,uDAAA,CAAA,CAChF,CAAC;AACH,yBAAA;AAAM,6BAAA;AACL,4BAAA,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;AAC7B,yBAAA;AACH,qBAAC,CAAC,CAAC;AACJ,iBAAA;AACD,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC3B,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;gBACzB,MAAM;YACR,KAAK,GAAG,CAAC,cAAc;AACrB,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACjC,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;gBACzB,MAAM;YACR,KAAK,GAAG,CAAC,WAAW;gBAClB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AAC9B,oBAAA,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;oBACjE,MAAM;AACP,iBAAA;gBACD,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC3C,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;gBACzB,MAAM;YACR,KAAK,GAAG,CAAC,cAAc;gBACrB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AAC9B,oBAAA,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;oBACpE,MAAM;AACP,iBAAA;gBACD,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC3C,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;gBACzB,MAAM;YACR,KAAK,GAAG,CAAC,YAAY;gBACnB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AAC9B,oBAAA,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;oBAClE,MAAM;AACP,iBAAA;gBACD,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC5C,MAAM;YACR,KAAK,GAAG,CAAC,WAAW;gBAClB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AAC9B,oBAAA,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;oBACjE,MAAM;AACP,iBAAA;gBACD,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC3C,MAAM;YACR,KAAK,GAAG,CAAC,YAAY;gBACnB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AAC9B,oBAAA,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;oBAClE,MAAM;AACP,iBAAA;gBACD,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC5C,MAAM;YACR,KAAK,GAAG,CAAC,aAAa;AACpB,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;AAC9B,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;gBACzB,MAAM;YACR,KAAK,GAAG,CAAC,uBAAuB;gBAC9B,OAAO,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,aAAa,EAAE,CAAC;YACtE,KAAK,GAAG,CAAC,wBAAwB;gBAC/B,OAAO,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,UAAU,EAAE,CAAC;YACnE,KAAK,GAAG,CAAC,qBAAqB;gBAC5B,OAAO,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC;YACpE,KAAK,GAAG,CAAC,sBAAsB;AAC7B,gBAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,UAAU,EAAE;AAC9D,sBAAE,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,KAAK;AAC3E,sBAAE,IAAI,CAAC,KAAK,CAAC;YACjB,KAAK,GAAG,CAAC,wBAAwB;gBAC/B,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACrE,MAAM;YACR,KAAK,GAAG,CAAC,kBAAkB;gBACzB,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC9C,MAAM;YACR,KAAK,GAAG,CAAC,0BAA0B;gBACjC,IAAI,CAAC,mBAAmB,CAAC,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC;gBACrD,MAAM;YACR,KAAK,GAAG,CAAC,sBAAsB;gBAC7B,IAAI,CAAC,mBAAmB,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;gBACjD,MAAM;YACR,KAAK,GAAG,CAAC,yBAAyB;gBAChC,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBACxD,MAAM;YACR,KAAK,GAAG,CAAC,MAAM;gBACb,MAAM,MAAM,GAAY,EAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAC,CAAC;AACzF,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACrB,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;gBACzB,MAAM;AACR,YAAA;gBACE,MAAM;AACT,SAAA;KACF;AAEO,IAAA,cAAc,CAAC,MAAe,EAAA;AACpC,QAAA,MAAM,GAAG,GAAW,MAAM,CAAC,GAAG,CAAC;QAE/B,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;AAC7B,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,KAAK,SAAS;AACZ,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC;gBAClD,MAAM;AACR,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBACzF,MAAM;AACR,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC/B,MAAM;AACT,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE;YAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACrC,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC/B,SAAA;KACF;8GAvkBU,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAO,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAJjB,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,mCAAA,EAAA,EAAA,EAAA,SAAA,EAAA,CAAC,oBAAoB,EAAE,gBAAgB,EAAE,YAAY,CAAC,EA4DnD,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,WAAW,EAMd,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,wBAAwB,kLC7GrC,4wnBA6aA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,gCAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,IAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,2BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,WAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,YAAA,EAAA,IAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,gBAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FD9Xa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;+BAEE,WAAW,EAAA,SAAA,EACV,CAAC,oBAAoB,EAAE,gBAAgB,EAAE,YAAY,CAAC,EAAA,eAAA,EAEhD,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,4wnBAAA,EAAA,CAAA;+JAKxC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAIC,IAAI,EAAA,CAAA;sBADV,KAAK;gBAIC,UAAU,EAAA,CAAA;sBADhB,KAAK;gBAIC,WAAW,EAAA,CAAA;sBADjB,KAAK;gBAIC,EAAE,EAAA,CAAA;sBADR,KAAK;gBAIC,cAAc,EAAA,CAAA;sBADpB,KAAK;gBAIC,eAAe,EAAA,CAAA;sBADrB,KAAK;gBAIC,eAAe,EAAA,CAAA;sBADrB,KAAK;gBAIC,uBAAuB,EAAA,CAAA;sBAD7B,KAAK;gBAIC,eAAe,EAAA,CAAA;sBADrB,KAAK;gBAIC,iBAAiB,EAAA,CAAA;sBADvB,KAAK;gBAIC,iBAAiB,EAAA,CAAA;sBADvB,KAAK;gBAIC,eAAe,EAAA,CAAA;sBADrB,KAAK;gBAIC,yBAAyB,EAAA,CAAA;sBAD/B,KAAK;gBAIC,cAAc,EAAA,CAAA;sBADpB,KAAK;gBAIC,OAAO,EAAA,CAAA;sBADb,KAAK;gBAIU,KAAK,EAAA,CAAA;sBADpB,MAAM;gBAIS,cAAc,EAAA,CAAA;sBAD7B,MAAM;gBAIA,WAAW,EAAA,CAAA;sBADjB,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAA;gBAIlC,WAAW,EAAA,CAAA;sBADjB,SAAS;uBAAC,aAAa,CAAA;gBAIjB,QAAQ,EAAA,CAAA;sBADd,SAAS;uBAAC,wBAAwB,CAAA;gBAgD3B,mBAAmB,EAAA,CAAA;sBAD1B,SAAS;uBAAC,qBAAqB,CAAA;gBAsCzB,kBAAkB,EAAA,CAAA;sBADxB,YAAY;uBAAC,gBAAgB,EAAE,CAAC,eAAe,CAAC,CAAA;;;AEjMnD;;;AAGG;AAEI,MAAM,gBAAgB,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAmD3B,CAAC;AAEC,MAAM,cAAc,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkE3B;;ACzHH,SAAS,eAAe,CAAC,KAAuB,EAAA;AAC5C,IAAA,OAAO,CAAC,CAAC,KAAK,IAAI,KAAK,KAAK,OAAO,CAAC;AACxC,CAAC;AAED;;AAEG;MAQU,2BAA2B,CAAA;AAPxC,IAAA,WAAA,GAAA;QAUa,IAAO,CAAA,OAAA,GAAW,CAAC,CAAC;QAsBpB,IAAa,CAAA,aAAA,GAAW,UAAU,CAAC;QACnC,IAAS,CAAA,SAAA,GAAW,MAAM,CAAC;QAC3B,IAA2B,CAAA,2BAAA,GAAW,YAAY,CAAC;QACnD,IAAqB,CAAA,qBAAA,GAAW,MAAM,CAAC;QACvC,IAAwB,CAAA,wBAAA,GAAW,gBAAgB,CAAC;AACnD,QAAA,IAAA,CAAA,UAAU,GAAyB,IAAI,YAAY,EAAU,CAAC;AAC9D,QAAA,IAAA,CAAA,oBAAoB,GAAyB,IAAI,YAAY,EAAU,CAAC;QAE1E,IAAe,CAAA,eAAA,GAAY,IAAI,CAAC;QAChC,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;QAC3B,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;AAKxC,KAAA;AApCG,IAAA,IACI,cAAc,GAAA;QACd,OAAO,IAAI,CAAC,eAAe,CAAC;KAC/B;IACD,IAAI,cAAc,CAAC,KAAc,EAAA;AAC7B,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;KACjD;AACD,IAAA,IACI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;IACD,IAAI,QAAQ,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;KAC3C;AACD,IAAA,IACI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC,WAAW,CAAC;KAC3B;IACD,IAAI,UAAU,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;KAC7C;AAaD,IAAA,YAAY,CAAC,KAAa,EAAA;AACtB,QAAA,OAAO,KAAK,CAAC;KAChB;8GAvCQ,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAA3B,2BAA2B,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,SAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,SAAA,EAAA,WAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,4lFAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,s7CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAd,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,sBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAPvC,SAAS;+BACI,qBAAqB,EAAA,QAAA,EACrB,gBAAgB,EAET,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,MAAA,EAAA,CAAA,s7CAAA,CAAA,EAAA,CAAA;8BAI5B,EAAE,EAAA,CAAA;sBAAV,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEF,cAAc,EAAA,CAAA;sBADjB,KAAK;gBAQF,QAAQ,EAAA,CAAA;sBADX,KAAK;gBAQF,UAAU,EAAA,CAAA;sBADb,KAAK;gBAOG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,2BAA2B,EAAA,CAAA;sBAAnC,KAAK;gBACG,qBAAqB,EAAA,CAAA;sBAA7B,KAAK;gBACG,wBAAwB,EAAA,CAAA;sBAAhC,KAAK;gBACI,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBACG,oBAAoB,EAAA,CAAA;sBAA7B,MAAM;;;MC/BE,mBAAmB,CAAA;8GAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAnB,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,mBAAmB,iBAPxB,YAAY;YACZ,2BAA2B;AAC3B,YAAA,2BAA2B,aAJrB,YAAY,CAAA,EAAA,OAAA,EAAA,CAOZ,YAAY,EAAE,2BAA2B,EAAE,2BAA2B,CAAA,EAAA,CAAA,CAAA,EAAA;AAEvE,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,mBAAmB,EAHjB,SAAA,EAAA,CAAC,iBAAiB,CAAC,YANpB,YAAY,CAAA,EAAA,CAAA,CAAA,EAAA;;2FASb,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAV/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,YAAY,EAAE;wBACV,YAAY;wBACZ,2BAA2B;wBAC3B,2BAA2B;AAC9B,qBAAA;oBACD,SAAS,EAAE,CAAC,iBAAiB,CAAC;AAC9B,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,2BAA2B,EAAE,2BAA2B,CAAC;AACpF,iBAAA,CAAA;;;ACED,MAAM,UAAU,GAAU;IACxB,iBAAiB;IACjB,eAAe;IACf,mBAAmB;IACnB,mBAAmB;CACpB,CAAC;AAEF,MAAM,KAAK,GAAU;IACnB,UAAU;IACV,UAAU;IACV,gBAAgB;IAChB,QAAQ;CACT,CAAC;MAeW,UAAU,CAAA;8GAAV,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAV,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,UAAU,iBA1BrB,iBAAiB;YACjB,eAAe;YACf,mBAAmB;AACnB,YAAA,mBAAmB,EAInB,UAAU;YACV,UAAU;YACV,gBAAgB;AAChB,YAAA,QAAQ,aASN,YAAY;YACZ,mBAAmB;YACnB,cAAc;AACd,YAAA,eAAe,aAEP,iBAAiB,CAAA,EAAA,CAAA,CAAA,EAAA;AAEhB,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,UAAU,YAPnB,YAAY;YACZ,mBAAmB;YACnB,cAAc;YACd,eAAe,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAIN,UAAU,EAAA,UAAA,EAAA,CAAA;kBAbtB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;AACZ,wBAAA,GAAG,UAAU;AACb,wBAAA,GAAG,KAAK;AACT,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,cAAc;wBACd,eAAe;AAChB,qBAAA;oBACD,OAAO,EAAE,CAAC,iBAAiB,CAAC;AAC7B,iBAAA,CAAA;;;MCjCY,WAAW,CAAA;8GAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAX,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,WAAW,EAJZ,OAAA,EAAA,CAAA,YAAY,EAAE,UAAU,aACxB,iBAAiB,CAAA,EAAA,CAAA,CAAA,EAAA;+GAGhB,WAAW,EAAA,OAAA,EAAA,CAJZ,YAAY,EAAE,UAAU,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAIvB,WAAW,EAAA,UAAA,EAAA,CAAA;kBALvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC;oBACnC,OAAO,EAAE,CAAC,iBAAiB,CAAC;AAC5B,oBAAA,SAAS,EAAE,EAAE;AACd,iBAAA,CAAA;;;ACVD;;AAEG;;;;"}