{"version":3,"file":"almaobservatory-ngx-datatable.mjs","sources":["../../../../projects/swimlane/ngx-datatable/src/lib/services/scrollbar-helper.service.ts","../../../../projects/swimlane/ngx-datatable/src/lib/services/dimensions-helper.service.ts","../../../../projects/swimlane/ngx-datatable/src/lib/services/column-changes.service.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/footer/footer-template.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/directives/visibility.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/directives/draggable.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/directives/resizeable.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/directives/orderable.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/directives/long-press.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/scroller.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/body-group-header-template.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/body-group-header.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/column-prop-getters.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/tree.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/camel-case.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/id.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/column-helper.ts","../../../../projects/swimlane/ngx-datatable/src/lib/types/column-mode.type.ts","../../../../projects/swimlane/ngx-datatable/src/lib/types/selection.type.ts","../../../../projects/swimlane/ngx-datatable/src/lib/types/sort.type.ts","../../../../projects/swimlane/ngx-datatable/src/lib/types/contextmenu.type.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/columns/column-header.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/columns/column-cell.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/columns/tree.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/columns/column.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/row-detail/row-detail-template.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/row-detail/row-detail.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/footer/footer.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/column.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/row-height-cache.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/prefixes.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/translate.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/progress-bar.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/selection.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/keys.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/selection.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/types/sort-direction.type.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/body-cell.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/body-row.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/summary/summary-row.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/body-row-wrapper.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/body.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/sort.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/header/header-cell.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/header/header.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/throttle.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/math.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/footer/pager.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/footer/footer.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/datatable.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/datatable.component.html","../../../../projects/swimlane/ngx-datatable/src/lib/ngx-datatable.module.ts","../../../../projects/swimlane/ngx-datatable/src/lib/types/click.type.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/elm-from-point.ts","../../../../projects/swimlane/ngx-datatable/src/public-api.ts","../../../../projects/swimlane/ngx-datatable/src/almaobservatory-ngx-datatable.ts"],"sourcesContent":["import { Inject, Injectable } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\n\r\n/**\r\n * Gets the width of the scrollbar.  Nesc for windows\r\n * http://stackoverflow.com/a/13382873/888165\r\n */\r\n@Injectable()\r\nexport class ScrollbarHelper {\r\n  width: number = this.getWidth();\r\n\r\n  constructor(@Inject(DOCUMENT) private document: any) {}\r\n\r\n  getWidth(): number {\r\n    const outer = this.document.createElement('div');\r\n    outer.style.visibility = 'hidden';\r\n    outer.style.width = '100px';\r\n    outer.style.msOverflowStyle = 'scrollbar';\r\n    this.document.body.appendChild(outer);\r\n\r\n    const widthNoScroll = outer.offsetWidth;\r\n    outer.style.overflow = 'scroll';\r\n\r\n    const inner = this.document.createElement('div');\r\n    inner.style.width = '100%';\r\n    outer.appendChild(inner);\r\n\r\n    const widthWithScroll = inner.offsetWidth;\r\n    outer.parentNode.removeChild(outer);\r\n\r\n    return widthNoScroll - widthWithScroll;\r\n  }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\n\r\n/**\r\n * Gets the width of the scrollbar.  Nesc for windows\r\n * http://stackoverflow.com/a/13382873/888165\r\n */\r\n@Injectable()\r\nexport class DimensionsHelper {\r\n  getDimensions(element: Element): ClientRect {\r\n    return element.getBoundingClientRect();\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { Observable, Subject } from 'rxjs';\r\n\r\n/**\r\n * service to make DatatableComponent aware of changes to\r\n * input bindings of DataTableColumnDirective\r\n */\r\n@Injectable()\r\nexport class ColumnChangesService {\r\n  private columnInputChanges = new Subject<void>();\r\n\r\n  get columnInputChanges$(): Observable<void> {\r\n    return this.columnInputChanges.asObservable();\r\n  }\r\n\r\n  onInputChange(): void {\r\n    this.columnInputChanges.next();\r\n  }\r\n}\r\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({ selector: '[ngx-datatable-footer-template]' })\r\nexport class DataTableFooterTemplateDirective {\r\n  constructor(public template: TemplateRef<any>) {}\r\n}\r\n","import { Directive, Output, EventEmitter, ElementRef, HostBinding, NgZone, OnInit, OnDestroy } from '@angular/core';\r\n\r\n/**\r\n * Visibility Observer Directive\r\n *\r\n * Usage:\r\n *\r\n * \t\t<div\r\n * \t\t\tvisibilityObserver\r\n * \t\t\t(visible)=\"onVisible($event)\">\r\n * \t\t</div>\r\n *\r\n */\r\n@Directive({ selector: '[visibilityObserver]' })\r\nexport class VisibilityDirective implements OnInit, OnDestroy {\r\n  @HostBinding('class.visible')\r\n  isVisible: boolean = false;\r\n\r\n  @Output() visible: EventEmitter<any> = new EventEmitter();\r\n\r\n  timeout: any;\r\n\r\n  constructor(private element: ElementRef, private zone: NgZone) {}\r\n\r\n  ngOnInit(): void {\r\n    this.runCheck();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    clearTimeout(this.timeout);\r\n  }\r\n\r\n  onVisibilityChange(): void {\r\n    // trigger zone recalc for columns\r\n    this.zone.run(() => {\r\n      this.isVisible = true;\r\n      this.visible.emit(true);\r\n    });\r\n  }\r\n\r\n  runCheck(): void {\r\n    const check = () => {\r\n      // https://davidwalsh.name/offsetheight-visibility\r\n      const { offsetHeight, offsetWidth } = this.element.nativeElement;\r\n\r\n      if (offsetHeight && offsetWidth) {\r\n        clearTimeout(this.timeout);\r\n        this.onVisibilityChange();\r\n      } else {\r\n        clearTimeout(this.timeout);\r\n        this.zone.runOutsideAngular(() => {\r\n          this.timeout = setTimeout(() => check(), 50);\r\n        });\r\n      }\r\n    };\r\n\r\n    this.timeout = setTimeout(() => check());\r\n  }\r\n}\r\n","import { Directive, ElementRef, Input, Output, EventEmitter, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { Subscription, fromEvent } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n/**\r\n * Draggable Directive for Angular2\r\n *\r\n * Inspiration:\r\n *   https://github.com/AngularClass/angular2-examples/blob/master/rx-draggable/directives/draggable.ts\r\n *   http://stackoverflow.com/questions/35662530/how-to-implement-drag-and-drop-in-angular2\r\n *\r\n */\r\n@Directive({ selector: '[draggable]' })\r\nexport class DraggableDirective implements OnDestroy, OnChanges {\r\n  @Input() dragEventTarget: any;\r\n  @Input() dragModel: any;\r\n  @Input() dragX: boolean = true;\r\n  @Input() dragY: boolean = true;\r\n\r\n  @Output() dragStart: EventEmitter<any> = new EventEmitter();\r\n  @Output() dragging: EventEmitter<any> = new EventEmitter();\r\n  @Output() dragEnd: EventEmitter<any> = new EventEmitter();\r\n\r\n  element: HTMLElement;\r\n  isDragging: boolean = false;\r\n  subscription: Subscription;\r\n\r\n  constructor(element: ElementRef) {\r\n    this.element = element.nativeElement;\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['dragEventTarget'] && changes['dragEventTarget'].currentValue && this.dragModel.dragging) {\r\n      this.onMousedown(changes['dragEventTarget'].currentValue);\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this._destroySubscription();\r\n  }\r\n\r\n  onMouseup(event: MouseEvent): void {\r\n    if (!this.isDragging) return;\r\n\r\n    this.isDragging = false;\r\n    this.element.classList.remove('dragging');\r\n\r\n    if (this.subscription) {\r\n      this._destroySubscription();\r\n      this.dragEnd.emit({\r\n        event,\r\n        element: this.element,\r\n        model: this.dragModel\r\n      });\r\n    }\r\n  }\r\n\r\n  onMousedown(event: MouseEvent): void {\r\n    // we only want to drag the inner header text\r\n    const isDragElm = (<HTMLElement>event.target).classList.contains('draggable');\r\n\r\n    if (isDragElm && (this.dragX || this.dragY)) {\r\n      event.preventDefault();\r\n      this.isDragging = true;\r\n\r\n      const mouseDownPos = { x: event.clientX, y: event.clientY };\r\n\r\n      const mouseup = fromEvent(document, 'mouseup');\r\n      this.subscription = mouseup.subscribe((ev: MouseEvent) => this.onMouseup(ev));\r\n\r\n      const mouseMoveSub = fromEvent(document, 'mousemove')\r\n        .pipe(takeUntil(mouseup))\r\n        .subscribe((ev: MouseEvent) => this.move(ev, mouseDownPos));\r\n\r\n      this.subscription.add(mouseMoveSub);\r\n\r\n      this.dragStart.emit({\r\n        event,\r\n        element: this.element,\r\n        model: this.dragModel\r\n      });\r\n    }\r\n  }\r\n\r\n  move(event: MouseEvent, mouseDownPos: { x: number; y: number }): void {\r\n    if (!this.isDragging) return;\r\n\r\n    const x = event.clientX - mouseDownPos.x;\r\n    const y = event.clientY - mouseDownPos.y;\r\n\r\n    if (this.dragX) this.element.style.left = `${x}px`;\r\n    if (this.dragY) this.element.style.top = `${y}px`;\r\n\r\n    this.element.classList.add('dragging');\r\n\r\n    this.dragging.emit({\r\n      event,\r\n      element: this.element,\r\n      model: this.dragModel\r\n    });\r\n  }\r\n\r\n  private _destroySubscription(): void {\r\n    if (this.subscription) {\r\n      this.subscription.unsubscribe();\r\n      this.subscription = undefined;\r\n    }\r\n  }\r\n}\r\n","import {\r\n  Directive,\r\n  ElementRef,\r\n  HostListener,\r\n  Input,\r\n  Output,\r\n  EventEmitter,\r\n  OnDestroy,\r\n  AfterViewInit,\r\n  Renderer2\r\n} from '@angular/core';\r\nimport { Subscription, fromEvent } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Directive({\r\n  selector: '[resizeable]',\r\n  host: {\r\n    '[class.resizeable]': 'resizeEnabled'\r\n  }\r\n})\r\nexport class ResizeableDirective implements OnDestroy, AfterViewInit {\r\n  @Input() resizeEnabled: boolean = true;\r\n  @Input() minWidth: number;\r\n  @Input() maxWidth: number;\r\n\r\n  @Output() resize: EventEmitter<any> = new EventEmitter();\r\n\r\n  element: HTMLElement;\r\n  subscription: Subscription;\r\n  resizing: boolean = false;\r\n  private resizeHandle: HTMLElement;\r\n\r\n  constructor(element: ElementRef, private renderer: Renderer2) {\r\n    this.element = element.nativeElement;\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    const renderer2 = this.renderer;\r\n    this.resizeHandle = renderer2.createElement('span');\r\n    if (this.resizeEnabled) {\r\n      renderer2.addClass(this.resizeHandle, 'resize-handle');\r\n    } else {\r\n      renderer2.addClass(this.resizeHandle, 'resize-handle--not-resizable');\r\n    }\r\n    renderer2.appendChild(this.element, this.resizeHandle);\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this._destroySubscription();\r\n    if (this.renderer.destroyNode) {\r\n      this.renderer.destroyNode(this.resizeHandle);\r\n    } else if (this.resizeHandle) {\r\n      this.renderer.removeChild(this.renderer.parentNode(this.resizeHandle), this.resizeHandle);\r\n    }\r\n  }\r\n\r\n  onMouseup(): void {\r\n    this.resizing = false;\r\n\r\n    if (this.subscription && !this.subscription.closed) {\r\n      this._destroySubscription();\r\n      this.resize.emit(this.element.clientWidth);\r\n    }\r\n  }\r\n\r\n  @HostListener('mousedown', ['$event'])\r\n  onMousedown(event: MouseEvent): void {\r\n    const isHandle = (<HTMLElement>event.target).classList.contains('resize-handle');\r\n    const initialWidth = this.element.clientWidth;\r\n    const mouseDownScreenX = event.screenX;\r\n\r\n    if (isHandle) {\r\n      event.stopPropagation();\r\n      this.resizing = true;\r\n\r\n      const mouseup = fromEvent(document, 'mouseup');\r\n      this.subscription = mouseup.subscribe((ev: MouseEvent) => this.onMouseup());\r\n\r\n      const mouseMoveSub = fromEvent(document, 'mousemove')\r\n        .pipe(takeUntil(mouseup))\r\n        .subscribe((e: MouseEvent) => this.move(e, initialWidth, mouseDownScreenX));\r\n\r\n      this.subscription.add(mouseMoveSub);\r\n    }\r\n  }\r\n\r\n  move(event: MouseEvent, initialWidth: number, mouseDownScreenX: number): void {\r\n    const movementX = event.screenX - mouseDownScreenX;\r\n    const newWidth = initialWidth + movementX;\r\n\r\n    const overMinWidth = !this.minWidth || newWidth >= this.minWidth;\r\n    const underMaxWidth = !this.maxWidth || newWidth <= this.maxWidth;\r\n\r\n    if (overMinWidth && underMaxWidth) {\r\n      this.element.style.width = `${newWidth}px`;\r\n    }\r\n  }\r\n\r\n  private _destroySubscription() {\r\n    if (this.subscription) {\r\n      this.subscription.unsubscribe();\r\n      this.subscription = undefined;\r\n    }\r\n  }\r\n}\r\n","import {\r\n  Directive,\r\n  Output,\r\n  EventEmitter,\r\n  ContentChildren,\r\n  QueryList,\r\n  KeyValueDiffers,\r\n  AfterContentInit,\r\n  OnDestroy,\r\n  Inject\r\n} from '@angular/core';\r\nimport { DraggableDirective } from './draggable.directive';\r\nimport { DOCUMENT } from '@angular/common';\r\n\r\n@Directive({ selector: '[orderable]' })\r\nexport class OrderableDirective implements AfterContentInit, OnDestroy {\r\n  @Output() reorder: EventEmitter<any> = new EventEmitter();\r\n  @Output() targetChanged: EventEmitter<any> = new EventEmitter();\r\n\r\n  @ContentChildren(DraggableDirective, { descendants: true })\r\n  draggables: QueryList<DraggableDirective>;\r\n\r\n  positions: any;\r\n  differ: any;\r\n  lastDraggingIndex: number;\r\n\r\n  constructor(differs: KeyValueDiffers, @Inject(DOCUMENT) private document: any) {\r\n    this.differ = differs.find({}).create();\r\n  }\r\n\r\n  ngAfterContentInit(): void {\r\n    // HACK: Investigate Better Way\r\n    this.updateSubscriptions();\r\n    this.draggables.changes.subscribe(this.updateSubscriptions.bind(this));\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.draggables.forEach(d => {\r\n      d.dragStart.unsubscribe();\r\n      d.dragging.unsubscribe();\r\n      d.dragEnd.unsubscribe();\r\n    });\r\n  }\r\n\r\n  updateSubscriptions(): void {\r\n    const diffs = this.differ.diff(this.createMapDiffs());\r\n\r\n    if (diffs) {\r\n      const subscribe = ({ currentValue, previousValue }: any) => {\r\n        unsubscribe({ previousValue });\r\n\r\n        if (currentValue) {\r\n          currentValue.dragStart.subscribe(this.onDragStart.bind(this));\r\n          currentValue.dragging.subscribe(this.onDragging.bind(this));\r\n          currentValue.dragEnd.subscribe(this.onDragEnd.bind(this));\r\n        }\r\n      };\r\n\r\n      const unsubscribe = ({ previousValue }: any) => {\r\n        if (previousValue) {\r\n          previousValue.dragStart.unsubscribe();\r\n          previousValue.dragging.unsubscribe();\r\n          previousValue.dragEnd.unsubscribe();\r\n        }\r\n      };\r\n\r\n      diffs.forEachAddedItem(subscribe);\r\n      // diffs.forEachChangedItem(subscribe.bind(this));\r\n      diffs.forEachRemovedItem(unsubscribe);\r\n    }\r\n  }\r\n\r\n  onDragStart(): void {\r\n    this.positions = {};\r\n\r\n    let i = 0;\r\n    for (const dragger of this.draggables.toArray()) {\r\n      const elm = dragger.element;\r\n      const left = parseInt(elm.offsetLeft.toString(), 0);\r\n      this.positions[dragger.dragModel.prop] = {\r\n        left,\r\n        right: left + parseInt(elm.offsetWidth.toString(), 0),\r\n        index: i++,\r\n        element: elm\r\n      };\r\n    }\r\n  }\r\n\r\n  onDragging({ element, model, event }: any): void {\r\n    const prevPos = this.positions[model.prop];\r\n    const target = this.isTarget(model, event);\r\n\r\n    if (target) {\r\n      if (this.lastDraggingIndex !== target.i) {\r\n        this.targetChanged.emit({\r\n          prevIndex: this.lastDraggingIndex,\r\n          newIndex: target.i,\r\n          initialIndex: prevPos.index\r\n        });\r\n        this.lastDraggingIndex = target.i;\r\n      }\r\n    } else if (this.lastDraggingIndex !== prevPos.index) {\r\n      this.targetChanged.emit({\r\n        prevIndex: this.lastDraggingIndex,\r\n        initialIndex: prevPos.index\r\n      });\r\n      this.lastDraggingIndex = prevPos.index;\r\n    }\r\n  }\r\n\r\n  onDragEnd({ element, model, event }: any): void {\r\n    const prevPos = this.positions[model.prop];\r\n\r\n    const target = this.isTarget(model, event);\r\n    if (target) {\r\n      this.reorder.emit({\r\n        prevIndex: prevPos.index,\r\n        newIndex: target.i,\r\n        model\r\n      });\r\n    }\r\n\r\n    this.lastDraggingIndex = undefined;\r\n    element.style.left = 'auto';\r\n  }\r\n\r\n  isTarget(model: any, event: any): any {\r\n    let i = 0;\r\n    const x = event.x || event.clientX;\r\n    const y = event.y || event.clientY;\r\n    const targets = this.document.elementsFromPoint(x, y);\r\n\r\n    for (const prop in this.positions) {\r\n      // current column position which throws event.\r\n      const pos = this.positions[prop];\r\n\r\n      // since we drag the inner span, we need to find it in the elements at the cursor\r\n      if (model.prop !== prop && targets.find((el: any) => el === pos.element)) {\r\n        return {\r\n          pos,\r\n          i\r\n        };\r\n      }\r\n\r\n      i++;\r\n    }\r\n  }\r\n\r\n  private createMapDiffs(): { [key: string]: DraggableDirective } {\r\n    return this.draggables.toArray().reduce((acc, curr) => {\r\n      acc[curr.dragModel.$$id] = curr;\r\n      return acc;\r\n    }, {});\r\n  }\r\n}\r\n","import { Directive, Input, Output, EventEmitter, HostBinding, HostListener, OnDestroy } from '@angular/core';\r\nimport { Observable, Subscription, fromEvent } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { MouseEvent } from '../events';\r\n\r\n@Directive({ selector: '[long-press]' })\r\nexport class LongPressDirective implements OnDestroy {\r\n  @Input() pressEnabled: boolean = true;\r\n  @Input() pressModel: any;\r\n  @Input() duration: number = 500;\r\n\r\n  @Output() longPressStart: EventEmitter<any> = new EventEmitter();\r\n  @Output() longPressing: EventEmitter<any> = new EventEmitter();\r\n  @Output() longPressEnd: EventEmitter<any> = new EventEmitter();\r\n\r\n  pressing: boolean;\r\n  isLongPressing: boolean;\r\n  timeout: any;\r\n  mouseX: number = 0;\r\n  mouseY: number = 0;\r\n\r\n  subscription: Subscription;\r\n\r\n  @HostBinding('class.press')\r\n  get press(): boolean {\r\n    return this.pressing;\r\n  }\r\n\r\n  @HostBinding('class.longpress')\r\n  get isLongPress(): boolean {\r\n    return this.isLongPressing;\r\n  }\r\n\r\n  @HostListener('mousedown', ['$event'])\r\n  onMouseDown(event: MouseEvent): void {\r\n    // don't do right/middle clicks\r\n    if (event.which !== 1 || !this.pressEnabled) return;\r\n\r\n    // don't start drag if its on resize handle\r\n    const target = <HTMLElement>event.target;\r\n    if (target.classList.contains('resize-handle')) return;\r\n\r\n    this.mouseX = event.clientX;\r\n    this.mouseY = event.clientY;\r\n\r\n    this.pressing = true;\r\n    this.isLongPressing = false;\r\n\r\n    const mouseup = fromEvent(document, 'mouseup');\r\n    this.subscription = mouseup.subscribe((ev: MouseEvent) => this.onMouseup());\r\n\r\n    this.timeout = setTimeout(() => {\r\n      this.isLongPressing = true;\r\n      this.longPressStart.emit({\r\n        event,\r\n        model: this.pressModel\r\n      });\r\n\r\n      this.subscription.add(\r\n        fromEvent(document, 'mousemove')\r\n          .pipe(takeUntil(mouseup))\r\n          .subscribe((mouseEvent: MouseEvent) => this.onMouseMove(mouseEvent))\r\n      );\r\n\r\n      this.loop(event);\r\n    }, this.duration);\r\n\r\n    this.loop(event);\r\n  }\r\n\r\n  onMouseMove(event: MouseEvent): void {\r\n    if (this.pressing && !this.isLongPressing) {\r\n      const xThres = Math.abs(event.clientX - this.mouseX) > 10;\r\n      const yThres = Math.abs(event.clientY - this.mouseY) > 10;\r\n\r\n      if (xThres || yThres) {\r\n        this.endPress();\r\n      }\r\n    }\r\n  }\r\n\r\n  loop(event: MouseEvent): void {\r\n    if (this.isLongPressing) {\r\n      this.timeout = setTimeout(() => {\r\n        this.longPressing.emit({\r\n          event,\r\n          model: this.pressModel\r\n        });\r\n        this.loop(event);\r\n      }, 50);\r\n    }\r\n  }\r\n\r\n  endPress(): void {\r\n    clearTimeout(this.timeout);\r\n    this.isLongPressing = false;\r\n    this.pressing = false;\r\n    this._destroySubscription();\r\n\r\n    this.longPressEnd.emit({\r\n      model: this.pressModel\r\n    });\r\n  }\r\n\r\n  onMouseup(): void {\r\n    this.endPress();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this._destroySubscription();\r\n  }\r\n\r\n  private _destroySubscription(): void {\r\n    if (this.subscription) {\r\n      this.subscription.unsubscribe();\r\n      this.subscription = undefined;\r\n    }\r\n  }\r\n}\r\n","import {\r\n  Component,\r\n  Input,\r\n  ElementRef,\r\n  Output,\r\n  EventEmitter,\r\n  Renderer2,\r\n  NgZone,\r\n  OnInit,\r\n  OnDestroy,\r\n  HostBinding,\r\n  ChangeDetectionStrategy\r\n} from '@angular/core';\r\n\r\nimport { MouseEvent } from '../../events';\r\n\r\n@Component({\r\n  selector: 'datatable-scroller',\r\n  template: ` <ng-content></ng-content> `,\r\n  host: {\r\n    class: 'datatable-scroll'\r\n  },\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ScrollerComponent implements OnInit, OnDestroy {\r\n  @Input() scrollbarV: boolean = false;\r\n  @Input() scrollbarH: boolean = false;\r\n\r\n  @HostBinding('style.height.px')\r\n  @Input()\r\n  scrollHeight: number;\r\n\r\n  @HostBinding('style.width.px')\r\n  @Input()\r\n  scrollWidth: number;\r\n\r\n  @Output() scroll: EventEmitter<any> = new EventEmitter();\r\n\r\n  scrollYPos: number = 0;\r\n  scrollXPos: number = 0;\r\n  prevScrollYPos: number = 0;\r\n  prevScrollXPos: number = 0;\r\n  element: any;\r\n  parentElement: any;\r\n  onScrollListener: any;\r\n\r\n  private _scrollEventListener: any = null;\r\n\r\n  constructor(private ngZone: NgZone, element: ElementRef, private renderer: Renderer2) {\r\n    this.element = element.nativeElement;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    // manual bind so we don't always listen\r\n    if (this.scrollbarV || this.scrollbarH) {\r\n      const renderer = this.renderer;\r\n      this.parentElement = renderer.parentNode(renderer.parentNode(this.element));\r\n      this._scrollEventListener = this.onScrolled.bind(this);\r\n      this.parentElement.addEventListener('scroll', this._scrollEventListener);\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    if (this._scrollEventListener) {\r\n      this.parentElement.removeEventListener('scroll', this._scrollEventListener);\r\n      this._scrollEventListener = null;\r\n    }\r\n  }\r\n\r\n  setOffset(offsetY: number): void {\r\n    if (this.parentElement) {\r\n      this.parentElement.scrollTop = offsetY;\r\n    }\r\n  }\r\n\r\n  onScrolled(event: MouseEvent): void {\r\n    const dom: Element = <Element>event.currentTarget;\r\n    requestAnimationFrame(() => {\r\n      this.scrollYPos = dom.scrollTop;\r\n      this.scrollXPos = dom.scrollLeft;\r\n      this.updateOffset();\r\n    });\r\n  }\r\n\r\n  updateOffset(): void {\r\n    let direction: string;\r\n    if (this.scrollYPos < this.prevScrollYPos) {\r\n      direction = 'down';\r\n    } else if (this.scrollYPos > this.prevScrollYPos) {\r\n      direction = 'up';\r\n    }\r\n\r\n    this.scroll.emit({\r\n      direction,\r\n      scrollYPos: this.scrollYPos,\r\n      scrollXPos: this.scrollXPos\r\n    });\r\n\r\n    this.prevScrollYPos = this.scrollYPos;\r\n    this.prevScrollXPos = this.scrollXPos;\r\n  }\r\n}\r\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[ngx-datatable-group-header-template]'\r\n})\r\nexport class DatatableGroupHeaderTemplateDirective {\r\n  constructor(public template: TemplateRef<any>) {}\r\n}\r\n","import { Input, Output, EventEmitter, Directive, TemplateRef, ContentChild } from '@angular/core';\r\nimport { DatatableGroupHeaderTemplateDirective } from './body-group-header-template.directive';\r\n\r\n@Directive({ selector: 'ngx-datatable-group-header' })\r\nexport class DatatableGroupHeaderDirective {\r\n  /**\r\n   * Row height is required when virtual scroll is enabled.\r\n   */\r\n  @Input() rowHeight: number | ((group?: any, index?: number) => number) = 0;\r\n\r\n  @Input('template')\r\n  _templateInput: TemplateRef<any>;\r\n\r\n  @ContentChild(DatatableGroupHeaderTemplateDirective, { read: TemplateRef, static: true })\r\n  _templateQuery: TemplateRef<any>;\r\n\r\n  get template(): TemplateRef<any> {\r\n    return this._templateInput || this._templateQuery;\r\n  }\r\n\r\n  /**\r\n   * Track toggling of group visibility\r\n   */\r\n  @Output() toggle: EventEmitter<any> = new EventEmitter();\r\n\r\n  /**\r\n   * Toggle the expansion of a group\r\n   */\r\n  toggleExpandGroup(group: any): void {\r\n    this.toggle.emit({\r\n      type: 'group',\r\n      value: group\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Expand all groups\r\n   */\r\n  expandAllGroups(): void {\r\n    this.toggle.emit({\r\n      type: 'all',\r\n      value: true\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Collapse all groups\r\n   */\r\n  collapseAllGroups(): void {\r\n    this.toggle.emit({\r\n      type: 'all',\r\n      value: false\r\n    });\r\n  }\r\n}\r\n","import { TableColumnProp } from '../types/table-column.type';\r\n\r\n// maybe rename this file to prop-getters.ts\r\n\r\nexport type ValueGetter = (obj: any, prop: TableColumnProp) => any;\r\n\r\n/**\r\n * Always returns the empty string ''\r\n */\r\nexport function emptyStringGetter(): string {\r\n  return '';\r\n}\r\n\r\n/**\r\n * Returns the appropriate getter function for this kind of prop.\r\n * If prop == null, returns the emptyStringGetter.\r\n */\r\nexport function getterForProp(prop: TableColumnProp): ValueGetter {\r\n  if (prop == null) {\r\n    return emptyStringGetter;\r\n  }\r\n\r\n  if (typeof prop === 'number') {\r\n    return numericIndexGetter;\r\n  } else {\r\n    // deep or simple\r\n    if (prop.indexOf('.') !== -1) {\r\n      return deepValueGetter;\r\n    } else {\r\n      return shallowValueGetter;\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Returns the value at this numeric index.\r\n * @param row array of values\r\n * @param index numeric index\r\n * @returns any or '' if invalid index\r\n */\r\nexport function numericIndexGetter(row: any[], index: number): any {\r\n  if (row == null) {\r\n    return '';\r\n  }\r\n  // mimic behavior of deepValueGetter\r\n  if (!row || index == null) {\r\n    return row;\r\n  }\r\n\r\n  const value = row[index];\r\n  if (value == null) {\r\n    return '';\r\n  }\r\n  return value;\r\n}\r\n\r\n/**\r\n * Returns the value of a field.\r\n * (more efficient than deepValueGetter)\r\n * @param obj object containing the field\r\n * @param fieldName field name string\r\n */\r\nexport function shallowValueGetter(obj: any, fieldName: string): any {\r\n  if (obj == null) {\r\n    return '';\r\n  }\r\n  if (!obj || !fieldName) {\r\n    return obj;\r\n  }\r\n\r\n  const value = obj[fieldName];\r\n  if (value == null) {\r\n    return '';\r\n  }\r\n  return value;\r\n}\r\n\r\n/**\r\n * Returns a deep object given a string. zoo['animal.type']\r\n */\r\nexport function deepValueGetter(obj: any, path: string): any {\r\n  if (obj == null) {\r\n    return '';\r\n  }\r\n  if (!obj || !path) {\r\n    return obj;\r\n  }\r\n\r\n  // check if path matches a root-level field\r\n  // { \"a.b.c\": 123 }\r\n  let current = obj[path];\r\n  if (current !== undefined) {\r\n    return current;\r\n  }\r\n\r\n  current = obj;\r\n  const split = path.split('.');\r\n\r\n  if (split.length) {\r\n    for (let i = 0; i < split.length; i++) {\r\n      current = current[split[i]];\r\n\r\n      // if found undefined, return empty string\r\n      if (current === undefined || current === null) {\r\n        return '';\r\n      }\r\n    }\r\n  }\r\n\r\n  return current;\r\n}\r\n","import { getterForProp } from './column-prop-getters';\r\nimport { TableColumnProp } from '../types/table-column.type';\r\n\r\nexport type OptionalValueGetter = (row: any) => any | undefined;\r\nexport function optionalGetterForProp(prop: TableColumnProp): OptionalValueGetter {\r\n  return prop && (row => getterForProp(prop)(row, prop));\r\n}\r\n\r\n/**\r\n * This functions rearrange items by their parents\r\n * Also sets the level value to each of the items\r\n *\r\n * Note: Expecting each item has a property called parentId\r\n * Note: This algorithm will fail if a list has two or more items with same ID\r\n * NOTE: This algorithm will fail if there is a deadlock of relationship\r\n *\r\n * For example,\r\n *\r\n * Input\r\n *\r\n * id -> parent\r\n * 1  -> 0\r\n * 2  -> 0\r\n * 3  -> 1\r\n * 4  -> 1\r\n * 5  -> 2\r\n * 7  -> 8\r\n * 6  -> 3\r\n *\r\n *\r\n * Output\r\n * id -> level\r\n * 1      -> 0\r\n * --3    -> 1\r\n * ----6  -> 2\r\n * --4    -> 1\r\n * 2      -> 0\r\n * --5    -> 1\r\n * 7     -> 8\r\n *\r\n *\r\n * @param rows\r\n *\r\n */\r\nexport function groupRowsByParents(rows: any[], from?: OptionalValueGetter, to?: OptionalValueGetter): any[] {\r\n  if (from && to) {\r\n    const nodeById = {};\r\n    const l = rows.length;\r\n    let node: TreeNode | null = null;\r\n\r\n    nodeById[0] = new TreeNode(); // that's the root node\r\n\r\n    const uniqIDs = rows.reduce((arr, item) => {\r\n      const toValue = to(item);\r\n      if (arr.indexOf(toValue) === -1) {\r\n        arr.push(toValue);\r\n      }\r\n      return arr;\r\n    }, []);\r\n\r\n    for (let i = 0; i < l; i++) {\r\n      // make TreeNode objects for each item\r\n      nodeById[to(rows[i])] = new TreeNode(rows[i]);\r\n    }\r\n\r\n    for (let i = 0; i < l; i++) {\r\n      // link all TreeNode objects\r\n      node = nodeById[to(rows[i])];\r\n      let parent = 0;\r\n      const fromValue = from(node.row);\r\n      if (!!fromValue && uniqIDs.indexOf(fromValue) > -1) {\r\n        parent = fromValue;\r\n      }\r\n      node.parent = nodeById[parent];\r\n      node.row['level'] = node.parent.row['level'] + 1;\r\n      node.parent.children.push(node);\r\n    }\r\n\r\n    let resolvedRows: any[] = [];\r\n    nodeById[0].flatten(function () {\r\n      resolvedRows = [...resolvedRows, this.row];\r\n    }, true);\r\n\r\n    return resolvedRows;\r\n  } else {\r\n    return rows;\r\n  }\r\n}\r\n\r\nclass TreeNode {\r\n  public row: any;\r\n  public parent: any;\r\n  public children: any[];\r\n\r\n  constructor(row: any | null = null) {\r\n    if (!row) {\r\n      row = {\r\n        level: -1,\r\n        treeStatus: 'expanded'\r\n      };\r\n    }\r\n    this.row = row;\r\n    this.parent = null;\r\n    this.children = [];\r\n  }\r\n\r\n  flatten(f: any, recursive: boolean) {\r\n    if (this.row['treeStatus'] === 'expanded') {\r\n      for (let i = 0, l = this.children.length; i < l; i++) {\r\n        const child = this.children[i];\r\n        f.apply(child, Array.prototype.slice.call(arguments, 2));\r\n        if (recursive) child.flatten.apply(child, arguments);\r\n      }\r\n    }\r\n  }\r\n}\r\n","/**\r\n * Converts strings from something to camel case\r\n * http://stackoverflow.com/questions/10425287/convert-dash-separated-string-to-camelcase\r\n */\r\nexport function camelCase(str: string): string {\r\n  // Replace special characters with a space\r\n  str = str.replace(/[^a-zA-Z0-9 ]/g, ' ');\r\n  // put a space before an uppercase letter\r\n  str = str.replace(/([a-z](?=[A-Z]))/g, '$1 ');\r\n\r\n  // Lower case first character and some other stuff\r\n  str = str\r\n    .replace(/([^a-zA-Z0-9 ])|^[0-9]+/g, '')\r\n    .trim()\r\n    .toLowerCase();\r\n\r\n  // uppercase characters preceded by a space or number\r\n  str = str.replace(/([ 0-9]+)([a-zA-Z])/g, function (a, b, c) {\r\n    return b.trim() + c.toUpperCase();\r\n  });\r\n\r\n  return str;\r\n}\r\n\r\n/**\r\n * Converts strings from camel case to words\r\n * http://stackoverflow.com/questions/7225407/convert-camelcasetext-to-camel-case-text\r\n */\r\nexport function deCamelCase(str: string): string {\r\n  return str.replace(/([A-Z])/g, match => ` ${match}`).replace(/^./, match => match.toUpperCase());\r\n}\r\n","/**\r\n * Creates a unique object id.\r\n * http://stackoverflow.com/questions/6248666/how-to-generate-short-uid-like-ax4j9z-in-js\r\n */\r\nexport function id() {\r\n  return ('0000' + ((Math.random() * Math.pow(36, 4)) << 0).toString(36)).slice(-4);\r\n}\r\n","import { camelCase, deCamelCase } from './camel-case';\r\nimport { id } from './id';\r\nimport { getterForProp } from './column-prop-getters';\r\nimport { TableColumn } from '../types/table-column.type';\r\nimport { DataTableColumnDirective } from '../components/columns/column.directive';\r\n\r\n/**\r\n * Sets the column defaults\r\n */\r\nexport function setColumnDefaults(columns: TableColumn[]) {\r\n  if (!columns) return;\r\n\r\n  // Only one column should hold the tree view\r\n  // Thus if multiple columns are provided with\r\n  // isTreeColumn as true we take only the first one\r\n  let treeColumnFound: boolean = false;\r\n\r\n  for (const column of columns) {\r\n    if (!column.$$id) {\r\n      column.$$id = id();\r\n    }\r\n\r\n    // prop can be numeric; zero is valid not a missing prop\r\n    // translate name => prop\r\n    if (isNullOrUndefined(column.prop) && column.name) {\r\n      column.prop = camelCase(column.name);\r\n    }\r\n\r\n    if (!column.$$valueGetter) {\r\n      column.$$valueGetter = getterForProp(column.prop);\r\n    }\r\n\r\n    // format props if no name passed\r\n    if (!isNullOrUndefined(column.prop) && isNullOrUndefined(column.name)) {\r\n      column.name = deCamelCase(String(column.prop));\r\n    }\r\n\r\n    if (isNullOrUndefined(column.prop) && isNullOrUndefined(column.name)) {\r\n      column.name = ''; // Fixes IE and Edge displaying `null`\r\n    }\r\n\r\n    if (!column.hasOwnProperty('resizeable')) {\r\n      column.resizeable = true;\r\n    }\r\n\r\n    if (!column.hasOwnProperty('sortable')) {\r\n      column.sortable = true;\r\n    }\r\n\r\n    if (!column.hasOwnProperty('draggable')) {\r\n      column.draggable = true;\r\n    }\r\n\r\n    if (!column.hasOwnProperty('canAutoResize')) {\r\n      column.canAutoResize = true;\r\n    }\r\n\r\n    if (!column.hasOwnProperty('width')) {\r\n      column.width = 150;\r\n    }\r\n\r\n    if (!column.hasOwnProperty('isTreeColumn')) {\r\n      column.isTreeColumn = false;\r\n    } else {\r\n      if (column.isTreeColumn && !treeColumnFound) {\r\n        // If the first column with isTreeColumn is true found\r\n        // we mark that treeCoulmn is found\r\n        treeColumnFound = true;\r\n      } else {\r\n        // After that isTreeColumn property for any other column\r\n        // will be set as false\r\n        column.isTreeColumn = false;\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nexport function isNullOrUndefined<T>(value: T | null | undefined): value is null | undefined {\r\n  return value === null || value === undefined;\r\n}\r\n\r\n/**\r\n * Translates templates definitions to objects\r\n */\r\nexport function translateTemplates(templates: DataTableColumnDirective[]): any[] {\r\n  const result: any[] = [];\r\n  for (const temp of templates) {\r\n    const col: any = {};\r\n\r\n    const props = Object.getOwnPropertyNames(temp);\r\n    for (const prop of props) {\r\n      col[prop] = temp[prop];\r\n    }\r\n\r\n    if (temp.headerTemplate) {\r\n      col.headerTemplate = temp.headerTemplate;\r\n    }\r\n\r\n    if (temp.cellTemplate) {\r\n      col.cellTemplate = temp.cellTemplate;\r\n    }\r\n\r\n    if (temp.summaryFunc) {\r\n      col.summaryFunc = temp.summaryFunc;\r\n    }\r\n\r\n    if (temp.summaryTemplate) {\r\n      col.summaryTemplate = temp.summaryTemplate;\r\n    }\r\n\r\n    result.push(col);\r\n  }\r\n\r\n  return result;\r\n}\r\n","export enum ColumnMode {\r\n  standard = 'standard',\r\n  flex = 'flex',\r\n  force = 'force'\r\n}\r\n","export enum SelectionType {\r\n  single = 'single',\r\n  multi = 'multi',\r\n  multiClick = 'multiClick',\r\n  cell = 'cell',\r\n  checkbox = 'checkbox'\r\n}\r\n","export enum SortType {\r\n  single = 'single',\r\n  multi = 'multi'\r\n}\r\n","export enum ContextmenuType {\r\n  header = 'header',\r\n  body = 'body'\r\n}\r\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({ selector: '[ngx-datatable-header-template]' })\r\nexport class DataTableColumnHeaderDirective {\r\n  constructor(public template: TemplateRef<any>) {}\r\n}\r\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({ selector: '[ngx-datatable-cell-template]' })\r\nexport class DataTableColumnCellDirective {\r\n  constructor(public template: TemplateRef<any>) {}\r\n}\r\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({ selector: '[ngx-datatable-tree-toggle]' })\r\nexport class DataTableColumnCellTreeToggle {\r\n  constructor(public template: TemplateRef<any>) {}\r\n}\r\n","import { Directive, TemplateRef, ContentChild, Input, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { DataTableColumnHeaderDirective } from './column-header.directive';\r\nimport { DataTableColumnCellDirective } from './column-cell.directive';\r\nimport { DataTableColumnCellTreeToggle } from './tree.directive';\r\nimport { ColumnChangesService } from '../../services/column-changes.service';\r\nimport { TableColumnProp } from '../../types/table-column.type';\r\n\r\n@Directive({ selector: 'ngx-datatable-column' })\r\nexport class DataTableColumnDirective implements OnChanges {\r\n  @Input() name: string;\r\n  @Input() prop: TableColumnProp;\r\n  @Input() frozenLeft: any;\r\n  @Input() frozenRight: any;\r\n  @Input() flexGrow: number;\r\n  @Input() resizeable: boolean;\r\n  @Input() comparator: any;\r\n  @Input() pipe: any;\r\n  @Input() sortable: boolean;\r\n  @Input() draggable: boolean;\r\n  @Input() canAutoResize: boolean;\r\n  @Input() minWidth: number;\r\n  @Input() width: number;\r\n  @Input() maxWidth: number;\r\n  @Input() checkboxable: boolean;\r\n  @Input() headerCheckboxable: boolean;\r\n  @Input() headerClass: string | ((data: any) => string | any);\r\n  @Input() cellClass: string | ((data: any) => string | any);\r\n  @Input() isTreeColumn: boolean;\r\n  @Input() treeLevelIndent: number;\r\n  @Input() summaryFunc: (cells: any[]) => any;\r\n  @Input() summaryTemplate: TemplateRef<any>;\r\n\r\n  @Input('cellTemplate')\r\n  _cellTemplateInput: TemplateRef<any>;\r\n\r\n  @ContentChild(DataTableColumnCellDirective, { read: TemplateRef, static: true })\r\n  _cellTemplateQuery: TemplateRef<any>;\r\n\r\n  get cellTemplate(): TemplateRef<any> {\r\n    return this._cellTemplateInput || this._cellTemplateQuery;\r\n  }\r\n\r\n  @Input('headerTemplate')\r\n  _headerTemplateInput: TemplateRef<any>;\r\n\r\n  @ContentChild(DataTableColumnHeaderDirective, { read: TemplateRef, static: true })\r\n  _headerTemplateQuery: TemplateRef<any>;\r\n\r\n  get headerTemplate(): TemplateRef<any> {\r\n    return this._headerTemplateInput || this._headerTemplateQuery;\r\n  }\r\n\r\n  @Input('treeToggleTemplate')\r\n  _treeToggleTemplateInput: TemplateRef<any>;\r\n\r\n  @ContentChild(DataTableColumnCellTreeToggle, { read: TemplateRef, static: true })\r\n  _treeToggleTemplateQuery: TemplateRef<any>;\r\n\r\n  get treeToggleTemplate(): TemplateRef<any> {\r\n    return this._treeToggleTemplateInput || this._treeToggleTemplateQuery;\r\n  }\r\n\r\n  private isFirstChange = true;\r\n\r\n  constructor(private columnChangesService: ColumnChangesService) {}\r\n\r\n  ngOnChanges() {\r\n    if (this.isFirstChange) {\r\n      this.isFirstChange = false;\r\n    } else {\r\n      this.columnChangesService.onInputChange();\r\n    }\r\n  }\r\n}\r\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[ngx-datatable-row-detail-template]'\r\n})\r\nexport class DatatableRowDetailTemplateDirective {\r\n  constructor(public template: TemplateRef<any>) {}\r\n}\r\n","import { Input, Output, EventEmitter, Directive, TemplateRef, ContentChild } from '@angular/core';\r\nimport { DatatableRowDetailTemplateDirective } from './row-detail-template.directive';\r\n\r\n@Directive({ selector: 'ngx-datatable-row-detail' })\r\nexport class DatatableRowDetailDirective {\r\n  /**\r\n   * The detail row height is required especially\r\n   * when virtual scroll is enabled.\r\n   */\r\n  @Input() rowHeight: number | ((row?: any, index?: number) => number) = 0;\r\n\r\n  @Input('template')\r\n  _templateInput: TemplateRef<any>;\r\n\r\n  @ContentChild(DatatableRowDetailTemplateDirective, { read: TemplateRef, static: true })\r\n  _templateQuery: TemplateRef<any>;\r\n\r\n  get template(): TemplateRef<any> {\r\n    return this._templateInput || this._templateQuery;\r\n  }\r\n\r\n  /**\r\n   * Row detail row visbility was toggled.\r\n   */\r\n  @Output() toggle: EventEmitter<any> = new EventEmitter();\r\n\r\n  /**\r\n   * Toggle the expansion of the row\r\n   */\r\n  toggleExpandRow(row: any): void {\r\n    this.toggle.emit({\r\n      type: 'row',\r\n      value: row\r\n    });\r\n  }\r\n\r\n  /**\r\n   * API method to expand all the rows.\r\n   */\r\n  expandAllRows(): void {\r\n    this.toggle.emit({\r\n      type: 'all',\r\n      value: true\r\n    });\r\n  }\r\n\r\n  /**\r\n   * API method to collapse all the rows.\r\n   */\r\n  collapseAllRows(): void {\r\n    this.toggle.emit({\r\n      type: 'all',\r\n      value: false\r\n    });\r\n  }\r\n}\r\n","import { Input, Directive, TemplateRef, ContentChild } from '@angular/core';\r\nimport { DataTableFooterTemplateDirective } from './footer-template.directive';\r\n\r\n@Directive({ selector: 'ngx-datatable-footer' })\r\nexport class DatatableFooterDirective {\r\n  @Input() footerHeight: number;\r\n  @Input() totalMessage: string;\r\n  @Input() selectedMessage: string | boolean;\r\n  @Input() pagerLeftArrowIcon: string;\r\n  @Input() pagerRightArrowIcon: string;\r\n  @Input() pagerPreviousIcon: string;\r\n  @Input() pagerNextIcon: string;\r\n\r\n  @Input('template')\r\n  _templateInput: TemplateRef<any>;\r\n\r\n  @ContentChild(DataTableFooterTemplateDirective, { read: TemplateRef })\r\n  _templateQuery: TemplateRef<any>;\r\n\r\n  get template(): TemplateRef<any> {\r\n    return this._templateInput || this._templateQuery;\r\n  }\r\n}\r\n","/**\r\n * Returns the columns by pin.\r\n */\r\nexport function columnsByPin(cols: any[]) {\r\n  const ret: { left: any; center: any; right: any } = {\r\n    left: [],\r\n    center: [],\r\n    right: []\r\n  };\r\n\r\n  if (cols) {\r\n    for (const col of cols) {\r\n      if (col.frozenLeft) {\r\n        ret.left.push(col);\r\n      } else if (col.frozenRight) {\r\n        ret.right.push(col);\r\n      } else {\r\n        ret.center.push(col);\r\n      }\r\n    }\r\n  }\r\n\r\n  return ret;\r\n}\r\n\r\n/**\r\n * Returns the widths of all group sets of a column\r\n */\r\nexport function columnGroupWidths(groups: any, all: any) {\r\n  return {\r\n    left: columnTotalWidth(groups.left),\r\n    center: columnTotalWidth(groups.center),\r\n    right: columnTotalWidth(groups.right),\r\n    total: Math.floor(columnTotalWidth(all))\r\n  };\r\n}\r\n\r\n/**\r\n * Calculates the total width of all columns and their groups\r\n */\r\nexport function columnTotalWidth(columns: any[], prop?: string) {\r\n  let totalWidth = 0;\r\n\r\n  if (columns) {\r\n    for (const c of columns) {\r\n      const has = prop && c[prop];\r\n      const width = has ? c[prop] : c.width;\r\n      totalWidth = totalWidth + parseFloat(width);\r\n    }\r\n  }\r\n\r\n  return totalWidth;\r\n}\r\n\r\n/**\r\n * Calculates the total width of all columns and their groups\r\n */\r\nexport function columnsTotalWidth(columns: any, prop?: any) {\r\n  let totalWidth = 0;\r\n\r\n  for (const column of columns) {\r\n    const has = prop && column[prop];\r\n    totalWidth = totalWidth + (has ? column[prop] : column.width);\r\n  }\r\n\r\n  return totalWidth;\r\n}\r\n\r\nexport function columnsByPinArr(val: any) {\r\n  const colsByPinArr = [];\r\n  const colsByPin = columnsByPin(val);\r\n\r\n  colsByPinArr.push({ type: 'left', columns: colsByPin['left'] });\r\n  colsByPinArr.push({ type: 'center', columns: colsByPin['center'] });\r\n  colsByPinArr.push({ type: 'right', columns: colsByPin['right'] });\r\n\r\n  return colsByPinArr;\r\n}\r\n","/**\r\n * This object contains the cache of the various row heights that are present inside\r\n * the data table.   Its based on Fenwick tree data structure that helps with\r\n * querying sums that have time complexity of log n.\r\n *\r\n * Fenwick Tree Credits: http://petr-mitrichev.blogspot.com/2013/05/fenwick-tree-range-updates.html\r\n * https://github.com/mikolalysenko/fenwick-tree\r\n *\r\n */\r\nexport class RowHeightCache {\r\n  /**\r\n   * Tree Array stores the cumulative information of the row heights to perform efficient\r\n   * range queries and updates.  Currently the tree is initialized to the base row\r\n   * height instead of the detail row height.\r\n   */\r\n  private treeArray: number[] = [];\r\n\r\n  /**\r\n   * Clear the Tree array.\r\n   */\r\n  clearCache(): void {\r\n    this.treeArray = [];\r\n  }\r\n\r\n  /**\r\n   * Initialize the Fenwick tree with row Heights.\r\n   *\r\n   * @param rows The array of rows which contain the expanded status.\r\n   * @param rowHeight The row height.\r\n   * @param detailRowHeight The detail row height.\r\n   */\r\n  initCache(details: any): void {\r\n    const { rows, rowHeight, detailRowHeight, externalVirtual, rowCount, rowIndexes, rowExpansions } = details;\r\n    const isFn = typeof rowHeight === 'function';\r\n    const isDetailFn = typeof detailRowHeight === 'function';\r\n\r\n    if (!isFn && isNaN(rowHeight)) {\r\n      throw new Error(`Row Height cache initialization failed. Please ensure that 'rowHeight' is a\r\n        valid number or function value: (${rowHeight}) when 'scrollbarV' is enabled.`);\r\n    }\r\n\r\n    // Add this additional guard in case detailRowHeight is set to 'auto' as it wont work.\r\n    if (!isDetailFn && isNaN(detailRowHeight)) {\r\n      throw new Error(`Row Height cache initialization failed. Please ensure that 'detailRowHeight' is a\r\n        valid number or function value: (${detailRowHeight}) when 'scrollbarV' is enabled.`);\r\n    }\r\n\r\n    const n = externalVirtual ? rowCount : rows.length;\r\n    this.treeArray = new Array(n);\r\n\r\n    for (let i = 0; i < n; ++i) {\r\n      this.treeArray[i] = 0;\r\n    }\r\n\r\n    for (let i = 0; i < n; ++i) {\r\n      const row = rows[i];\r\n      let currentRowHeight = rowHeight;\r\n      if (isFn) {\r\n        currentRowHeight = rowHeight(row);\r\n      }\r\n\r\n      // Add the detail row height to the already expanded rows.\r\n      // This is useful for the table that goes through a filter or sort.\r\n      const expanded = rowExpansions.has(row);\r\n      if (row && expanded) {\r\n        if (isDetailFn) {\r\n          const index = rowIndexes.get(row);\r\n          currentRowHeight += detailRowHeight(row, index);\r\n        } else {\r\n          currentRowHeight += detailRowHeight;\r\n        }\r\n      }\r\n\r\n      this.update(i, currentRowHeight);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Given the ScrollY position i.e. sum, provide the rowIndex\r\n   * that is present in the current view port.  Below handles edge cases.\r\n   */\r\n  getRowIndex(scrollY: number): number {\r\n    if (scrollY === 0) return 0;\r\n    return this.calcRowIndex(scrollY);\r\n  }\r\n\r\n  /**\r\n   * When a row is expanded or rowHeight is changed, update the height.  This can\r\n   * be utilized in future when Angular Data table supports dynamic row heights.\r\n   */\r\n  update(atRowIndex: number, byRowHeight: number): void {\r\n    if (!this.treeArray.length) {\r\n      throw new Error(`Update at index ${atRowIndex} with value ${byRowHeight} failed:\r\n        Row Height cache not initialized.`);\r\n    }\r\n\r\n    const n = this.treeArray.length;\r\n    atRowIndex |= 0;\r\n\r\n    while (atRowIndex < n) {\r\n      this.treeArray[atRowIndex] += byRowHeight;\r\n      atRowIndex |= atRowIndex + 1;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Range Sum query from 1 to the rowIndex\r\n   */\r\n  query(atIndex: number): number {\r\n    if (!this.treeArray.length) {\r\n      throw new Error(`query at index ${atIndex} failed: Fenwick tree array not initialized.`);\r\n    }\r\n\r\n    let sum = 0;\r\n    atIndex |= 0;\r\n\r\n    while (atIndex >= 0) {\r\n      sum += this.treeArray[atIndex];\r\n      atIndex = (atIndex & (atIndex + 1)) - 1;\r\n    }\r\n\r\n    return sum;\r\n  }\r\n\r\n  /**\r\n   * Find the total height between 2 row indexes\r\n   */\r\n  queryBetween(atIndexA: number, atIndexB: number): number {\r\n    return this.query(atIndexB) - this.query(atIndexA - 1);\r\n  }\r\n\r\n  /**\r\n   * Given the ScrollY position i.e. sum, provide the rowIndex\r\n   * that is present in the current view port.\r\n   */\r\n  private calcRowIndex(sum: number): number {\r\n    if (!this.treeArray.length) return 0;\r\n\r\n    let pos = -1;\r\n    const dataLength = this.treeArray.length;\r\n\r\n    // Get the highest bit for the block size.\r\n    const highestBit = Math.pow(2, dataLength.toString(2).length - 1);\r\n\r\n    for (let blockSize = highestBit; blockSize !== 0; blockSize >>= 1) {\r\n      const nextPos = pos + blockSize;\r\n      if (nextPos < dataLength && sum >= this.treeArray[nextPos]) {\r\n        sum -= this.treeArray[nextPos];\r\n        pos = nextPos;\r\n      }\r\n    }\r\n\r\n    return pos + 1;\r\n  }\r\n}\r\n","import { camelCase } from './camel-case';\r\n\r\nconst cache = {};\r\nconst testStyle = typeof document !== 'undefined' ? document.createElement('div').style : undefined;\r\n\r\n// Get Prefix\r\n// http://davidwalsh.name/vendor-prefix\r\nconst prefix = (function () {\r\n  const styles = typeof window !== 'undefined' ? window.getComputedStyle(document.documentElement, '') : undefined;\r\n  const match =\r\n    typeof styles !== 'undefined'\r\n      ? Array.prototype.slice\r\n          .call(styles)\r\n          .join('')\r\n          .match(/-(moz|webkit|ms)-/)\r\n      : null;\r\n  const pre = match !== null ? match[1] : undefined;\r\n  // tslint:disable-next-line: tsr-detect-non-literal-regexp\r\n  const dom = typeof pre !== 'undefined' ? 'WebKit|Moz|MS|O'.match(new RegExp('(' + pre + ')', 'i'))[1] : undefined;\r\n\r\n  return dom\r\n    ? {\r\n        dom,\r\n        lowercase: pre,\r\n        css: `-${pre}-`,\r\n        js: pre[0].toUpperCase() + pre.substr(1)\r\n      }\r\n    : undefined;\r\n})();\r\n\r\nexport function getVendorPrefixedName(property: string) {\r\n  const name = camelCase(property);\r\n\r\n  if (!cache[name]) {\r\n    if (testStyle[property] !== undefined) {\r\n      cache[name] = property;\r\n    } else if (prefix !== undefined && testStyle[prefix.css + property] !== undefined) {\r\n      cache[name] = prefix.css + property;\r\n    }\r\n  }\r\n\r\n  return cache[name];\r\n}","import { getVendorPrefixedName } from './prefixes';\r\nimport { camelCase } from './camel-case';\r\n\r\n// browser detection and prefixing tools\r\nconst transform = typeof window !== 'undefined' ? getVendorPrefixedName('transform') : undefined;\r\nconst backfaceVisibility = typeof window !== 'undefined' ? getVendorPrefixedName('backfaceVisibility') : undefined;\r\nconst hasCSSTransforms = typeof window !== 'undefined' ? !!getVendorPrefixedName('transform') : undefined;\r\nconst hasCSS3DTransforms = typeof window !== 'undefined' ? !!getVendorPrefixedName('perspective') : undefined;\r\nconst ua = typeof window !== 'undefined' ? window.navigator.userAgent : 'Chrome';\r\nconst isSafari = /Safari\\//.test(ua) && !/Chrome\\//.test(ua);\r\n\r\nexport function translateXY(styles: any, x: number, y: number) {\r\n  if (typeof transform !== 'undefined' && hasCSSTransforms) {\r\n    if (!isSafari && hasCSS3DTransforms) {\r\n      styles[transform] = `translate3d(${x}px, ${y}px, 0)`;\r\n      styles[backfaceVisibility] = 'hidden';\r\n    } else {\r\n      styles[camelCase(transform)] = `translate(${x}px, ${y}px)`;\r\n    }\r\n  } else {\r\n    styles.top = `${y}px`;\r\n    styles.left = `${x}px`;\r\n  }\r\n}\r\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'datatable-progress',\r\n  template: `\r\n    <div class=\"progress-linear\" role=\"progressbar\">\r\n      <div class=\"container\">\r\n        <div class=\"bar\"></div>\r\n      </div>\r\n    </div>\r\n  `,\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ProgressBarComponent {}\r\n","export function selectRows(selected: any[], row: any, comparefn: any) {\r\n  const selectedIndex = comparefn(row, selected);\r\n\r\n  if (selectedIndex > -1) {\r\n    selected.splice(selectedIndex, 1);\r\n  } else {\r\n    selected.push(row);\r\n  }\r\n\r\n  return selected;\r\n}\r\n\r\nexport function selectRowsBetween(\r\n  selected: any[],\r\n  rows: any[],\r\n  index: number,\r\n  prevIndex: number,\r\n  comparefn: any\r\n): any[] {\r\n  const reverse = index < prevIndex;\r\n\r\n  for (let i = 0; i < rows.length; i++) {\r\n    const row = rows[i];\r\n    const greater = i >= prevIndex && i <= index;\r\n    const lesser = i <= prevIndex && i >= index;\r\n\r\n    let range = { start: 0, end: 0 };\r\n    if (reverse) {\r\n      range = {\r\n        start: index,\r\n        end: prevIndex\r\n      };\r\n    } else {\r\n      range = {\r\n        start: prevIndex,\r\n        end: index + 1\r\n      };\r\n    }\r\n\r\n    if ((reverse && lesser) || (!reverse && greater)) {\r\n      // if in the positive range to be added to `selected`, and\r\n      // not already in the selected array, add it\r\n      if (i >= range.start && i <= range.end) {\r\n        selected.push(row);\r\n      }\r\n    }\r\n  }\r\n\r\n  return selected;\r\n}\r\n","export enum Keys {\r\n  up = 38,\r\n  down = 40,\r\n  return = 13,\r\n  escape = 27,\r\n  left = 37,\r\n  right = 39\r\n}\r\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\r\nimport { SelectionType } from '../../types/selection.type';\r\nimport { selectRowsBetween, selectRows } from '../../utils/selection';\r\nimport { Keys } from '../../utils/keys';\r\n\r\nexport interface Model {\r\n  type: string;\r\n  event: MouseEvent | KeyboardEvent;\r\n  row: any;\r\n  rowElement: any;\r\n  cellElement: any;\r\n  cellIndex: number;\r\n}\r\n\r\n@Component({\r\n  selector: 'datatable-selection',\r\n  template: ` <ng-content></ng-content> `,\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DataTableSelectionComponent {\r\n  @Input() rows: any[];\r\n  @Input() selected: any[];\r\n  @Input() selectEnabled: boolean;\r\n  @Input() selectionType: SelectionType;\r\n  @Input() rowIdentity: any;\r\n  @Input() selectCheck: any;\r\n\r\n  @Output() activate: EventEmitter<any> = new EventEmitter();\r\n  @Output() select: EventEmitter<any> = new EventEmitter();\r\n\r\n  prevIndex: number;\r\n\r\n  selectRow(event: KeyboardEvent | MouseEvent, index: number, row: any): void {\r\n    if (!this.selectEnabled) return;\r\n\r\n    const chkbox = this.selectionType === SelectionType.checkbox;\r\n    const multi = this.selectionType === SelectionType.multi;\r\n    const multiClick = this.selectionType === SelectionType.multiClick;\r\n    let selected: any[] = [];\r\n\r\n    if (multi || chkbox || multiClick) {\r\n      if (event.shiftKey) {\r\n        selected = selectRowsBetween([], this.rows, index, this.prevIndex, this.getRowSelectedIdx.bind(this));\r\n      } else if (event.ctrlKey || event.metaKey || multiClick || chkbox) {\r\n        selected = selectRows([...this.selected], row, this.getRowSelectedIdx.bind(this));\r\n      } else {\r\n        selected = selectRows([], row, this.getRowSelectedIdx.bind(this));\r\n      }\r\n    } else {\r\n      selected = selectRows([], row, this.getRowSelectedIdx.bind(this));\r\n    }\r\n\r\n    if (typeof this.selectCheck === 'function') {\r\n      selected = selected.filter(this.selectCheck.bind(this));\r\n    }\r\n\r\n    this.selected.splice(0, this.selected.length);\r\n    this.selected.push(...selected);\r\n\r\n    this.prevIndex = index;\r\n\r\n    this.select.emit({\r\n      selected\r\n    });\r\n  }\r\n\r\n  onActivate(model: Model, index: number): void {\r\n    const { type, event, row } = model;\r\n    const chkbox = this.selectionType === SelectionType.checkbox;\r\n    const select = (!chkbox && (type === 'click' || type === 'dblclick')) || (chkbox && type === 'checkbox');\r\n\r\n    if (select) {\r\n      this.selectRow(event, index, row);\r\n    } else if (type === 'keydown') {\r\n      if ((<KeyboardEvent>event).keyCode === Keys.return) {\r\n        this.selectRow(event, index, row);\r\n      } else {\r\n        this.onKeyboardFocus(model);\r\n      }\r\n    }\r\n    this.activate.emit(model);\r\n  }\r\n\r\n  onKeyboardFocus(model: Model): void {\r\n    const { keyCode } = <KeyboardEvent>model.event;\r\n    const shouldFocus = keyCode === Keys.up || keyCode === Keys.down || keyCode === Keys.right || keyCode === Keys.left;\r\n\r\n    if (shouldFocus) {\r\n      const isCellSelection = this.selectionType === SelectionType.cell;\r\n\r\n      if (!model.cellElement || !isCellSelection) {\r\n        this.focusRow(model.rowElement, keyCode);\r\n      } else if (isCellSelection) {\r\n        this.focusCell(model.cellElement, model.rowElement, keyCode, model.cellIndex);\r\n      }\r\n    }\r\n  }\r\n\r\n  focusRow(rowElement: any, keyCode: number): void {\r\n    const nextRowElement = this.getPrevNextRow(rowElement, keyCode);\r\n    if (nextRowElement) nextRowElement.focus();\r\n  }\r\n\r\n  getPrevNextRow(rowElement: any, keyCode: number): any {\r\n    const parentElement = rowElement.parentElement;\r\n\r\n    if (parentElement) {\r\n      let focusElement: HTMLElement;\r\n      if (keyCode === Keys.up) {\r\n        focusElement = parentElement.previousElementSibling;\r\n      } else if (keyCode === Keys.down) {\r\n        focusElement = parentElement.nextElementSibling;\r\n      }\r\n\r\n      if (focusElement && focusElement.children.length) {\r\n        return focusElement.children[0];\r\n      }\r\n    }\r\n  }\r\n\r\n  focusCell(cellElement: any, rowElement: any, keyCode: number, cellIndex: number): void {\r\n    let nextCellElement: HTMLElement;\r\n\r\n    if (keyCode === Keys.left) {\r\n      nextCellElement = cellElement.previousElementSibling;\r\n    } else if (keyCode === Keys.right) {\r\n      nextCellElement = cellElement.nextElementSibling;\r\n    } else if (keyCode === Keys.up || keyCode === Keys.down) {\r\n      const nextRowElement = this.getPrevNextRow(rowElement, keyCode);\r\n      if (nextRowElement) {\r\n        const children = nextRowElement.getElementsByClassName('datatable-body-cell');\r\n        if (children.length) nextCellElement = children[cellIndex];\r\n      }\r\n    }\r\n\r\n    if (nextCellElement) nextCellElement.focus();\r\n  }\r\n\r\n  getRowSelected(row: any): boolean {\r\n    return this.getRowSelectedIdx(row, this.selected) > -1;\r\n  }\r\n\r\n  getRowSelectedIdx(row: any, selected: any[]): number {\r\n    if (!selected || !selected.length) return -1;\r\n\r\n    const rowId = this.rowIdentity(row);\r\n    return selected.findIndex(r => {\r\n      const id = this.rowIdentity(r);\r\n      return id === rowId;\r\n    });\r\n  }\r\n}\r\n","export enum SortDirection {\r\n  asc = 'asc',\r\n  desc = 'desc'\r\n}\r\n","import {\r\n  Component,\r\n  Input,\r\n  PipeTransform,\r\n  HostBinding,\r\n  ViewChild,\r\n  ChangeDetectorRef,\r\n  Output,\r\n  EventEmitter,\r\n  HostListener,\r\n  ElementRef,\r\n  ViewContainerRef,\r\n  OnDestroy,\r\n  DoCheck,\r\n  ChangeDetectionStrategy\r\n} from '@angular/core';\r\n\r\nimport { TableColumn } from '../../types/table-column.type';\r\nimport { SortDirection } from '../../types/sort-direction.type';\r\nimport { Keys } from '../../utils/keys';\r\n\r\nexport type TreeStatus = 'collapsed' | 'expanded' | 'loading' | 'disabled';\r\n\r\n@Component({\r\n  selector: 'datatable-body-cell',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  template: `\r\n    <div class=\"datatable-body-cell-label\" [style.margin-left.px]=\"calcLeftMargin(column, row)\">\r\n      <label\r\n        *ngIf=\"column.checkboxable && (!displayCheck || displayCheck(row, column, value))\"\r\n        class=\"datatable-checkbox\"\r\n      >\r\n        <input type=\"checkbox\" [checked]=\"isSelected\" (click)=\"onCheckboxChange($event)\" />\r\n      </label>\r\n      <ng-container *ngIf=\"column.isTreeColumn\">\r\n        <button\r\n          *ngIf=\"!column.treeToggleTemplate\"\r\n          class=\"datatable-tree-button\"\r\n          [disabled]=\"treeStatus === 'disabled'\"\r\n          (click)=\"onTreeAction()\"\r\n        >\r\n          <span>\r\n            <i *ngIf=\"treeStatus === 'loading'\" class=\"icon datatable-icon-collapse\"></i>\r\n            <i *ngIf=\"treeStatus === 'collapsed'\" class=\"icon datatable-icon-up\"></i>\r\n            <i *ngIf=\"treeStatus === 'expanded' || treeStatus === 'disabled'\" class=\"icon datatable-icon-down\"></i>\r\n          </span>\r\n        </button>\r\n        <ng-template\r\n          *ngIf=\"column.treeToggleTemplate\"\r\n          [ngTemplateOutlet]=\"column.treeToggleTemplate\"\r\n          [ngTemplateOutletContext]=\"{ cellContext: cellContext }\"\r\n        >\r\n        </ng-template>\r\n      </ng-container>\r\n\r\n      <span *ngIf=\"!column.cellTemplate\" [title]=\"sanitizedValue\" [innerHTML]=\"value\"> </span>\r\n      <ng-template\r\n        #cellTemplate\r\n        *ngIf=\"column.cellTemplate\"\r\n        [ngTemplateOutlet]=\"column.cellTemplate\"\r\n        [ngTemplateOutletContext]=\"cellContext\"\r\n      >\r\n      </ng-template>\r\n    </div>\r\n  `\r\n})\r\nexport class DataTableBodyCellComponent implements DoCheck, OnDestroy {\r\n  @Input() displayCheck: (row: any, column?: TableColumn, value?: any) => boolean;\r\n\r\n  @Input() set group(group: any) {\r\n    this._group = group;\r\n    this.cellContext.group = group;\r\n    this.checkValueUpdates();\r\n    this.cd.markForCheck();\r\n  }\r\n\r\n  get group() {\r\n    return this._group;\r\n  }\r\n\r\n  @Input() set rowHeight(val: number) {\r\n    this._rowHeight = val;\r\n    this.cellContext.rowHeight = val;\r\n    this.checkValueUpdates();\r\n    this.cd.markForCheck();\r\n  }\r\n\r\n  get rowHeight() {\r\n    return this._rowHeight;\r\n  }\r\n\r\n  @Input() set isSelected(val: boolean) {\r\n    this._isSelected = val;\r\n    this.cellContext.isSelected = val;\r\n    this.cd.markForCheck();\r\n  }\r\n\r\n  get isSelected(): boolean {\r\n    return this._isSelected;\r\n  }\r\n\r\n  @Input() set expanded(val: boolean) {\r\n    this._expanded = val;\r\n    this.cellContext.expanded = val;\r\n    this.cd.markForCheck();\r\n  }\r\n\r\n  get expanded(): boolean {\r\n    return this._expanded;\r\n  }\r\n\r\n  @Input() set rowIndex(val: number) {\r\n    this._rowIndex = val;\r\n    this.cellContext.rowIndex = val;\r\n    this.checkValueUpdates();\r\n    this.cd.markForCheck();\r\n  }\r\n\r\n  get rowIndex(): number {\r\n    return this._rowIndex;\r\n  }\r\n\r\n  @Input() set column(column: TableColumn) {\r\n    this._column = column;\r\n    this.cellContext.column = column;\r\n    this.checkValueUpdates();\r\n    this.cd.markForCheck();\r\n  }\r\n\r\n  get column(): TableColumn {\r\n    return this._column;\r\n  }\r\n\r\n  @Input() set row(row: any) {\r\n    this._row = row;\r\n    this.cellContext.row = row;\r\n    this.checkValueUpdates();\r\n    this.cd.markForCheck();\r\n  }\r\n\r\n  get row(): any {\r\n    return this._row;\r\n  }\r\n\r\n  @Input() set sorts(val: any[]) {\r\n    this._sorts = val;\r\n    this.calcSortDir = this.calcSortDir(val);\r\n  }\r\n\r\n  get sorts(): any[] {\r\n    return this._sorts;\r\n  }\r\n\r\n  @Input() set treeStatus(status: TreeStatus) {\r\n    if (status !== 'collapsed' && status !== 'expanded' && status !== 'loading' && status !== 'disabled') {\r\n      this._treeStatus = 'collapsed';\r\n    } else {\r\n      this._treeStatus = status;\r\n    }\r\n    this.cellContext.treeStatus = this._treeStatus;\r\n    this.checkValueUpdates();\r\n    this.cd.markForCheck();\r\n  }\r\n\r\n  get treeStatus(): TreeStatus {\r\n    return this._treeStatus;\r\n  }\r\n\r\n  @Output() activate: EventEmitter<any> = new EventEmitter();\r\n\r\n  @Output() treeAction: EventEmitter<any> = new EventEmitter();\r\n\r\n  @ViewChild('cellTemplate', { read: ViewContainerRef, static: true })\r\n  cellTemplate: ViewContainerRef;\r\n\r\n  @HostBinding('class')\r\n  get columnCssClasses(): any {\r\n    let cls = 'datatable-body-cell';\r\n    if (this.column.cellClass) {\r\n      if (typeof this.column.cellClass === 'string') {\r\n        cls += ' ' + this.column.cellClass;\r\n      } else if (typeof this.column.cellClass === 'function') {\r\n        const res = this.column.cellClass({\r\n          row: this.row,\r\n          group: this.group,\r\n          column: this.column,\r\n          value: this.value,\r\n          rowHeight: this.rowHeight\r\n        });\r\n\r\n        if (typeof res === 'string') {\r\n          cls += ' ' + res;\r\n        } else if (typeof res === 'object') {\r\n          const keys = Object.keys(res);\r\n          for (const k of keys) {\r\n            if (res[k] === true) {\r\n              cls += ` ${k}`;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n    if (!this.sortDir) {\r\n      cls += ' sort-active';\r\n    }\r\n    if (this.isFocused) {\r\n      cls += ' active';\r\n    }\r\n    if (this.sortDir === SortDirection.asc) {\r\n      cls += ' sort-asc';\r\n    }\r\n    if (this.sortDir === SortDirection.desc) {\r\n      cls += ' sort-desc';\r\n    }\r\n\r\n    return cls;\r\n  }\r\n\r\n  @HostBinding('style.width.px')\r\n  get width(): number {\r\n    return this.column.width;\r\n  }\r\n\r\n  @HostBinding('style.minWidth.px')\r\n  get minWidth(): number {\r\n    return this.column.minWidth;\r\n  }\r\n\r\n  @HostBinding('style.maxWidth.px')\r\n  get maxWidth(): number {\r\n    return this.column.maxWidth;\r\n  }\r\n\r\n  @HostBinding('style.height')\r\n  get height(): string | number {\r\n    const height = this.rowHeight;\r\n    if (isNaN(height)) {\r\n      return height;\r\n    }\r\n    return height + 'px';\r\n  }\r\n\r\n  sanitizedValue: any;\r\n  value: any;\r\n  sortDir: SortDirection;\r\n  isFocused = false;\r\n  onCheckboxChangeFn = this.onCheckboxChange.bind(this);\r\n  activateFn = this.activate.emit.bind(this.activate);\r\n\r\n  cellContext: any;\r\n\r\n  private _isSelected: boolean;\r\n  private _sorts: any[];\r\n  private _column: TableColumn;\r\n  private _row: any;\r\n  private _group: any;\r\n  private _rowHeight: number;\r\n  private _rowIndex: number;\r\n  private _expanded: boolean;\r\n  private _element: any;\r\n  private _treeStatus: TreeStatus;\r\n\r\n  constructor(element: ElementRef, private cd: ChangeDetectorRef) {\r\n    this.cellContext = {\r\n      onCheckboxChangeFn: this.onCheckboxChangeFn,\r\n      activateFn: this.activateFn,\r\n      row: this.row,\r\n      group: this.group,\r\n      value: this.value,\r\n      column: this.column,\r\n      rowHeight: this.rowHeight,\r\n      isSelected: this.isSelected,\r\n      rowIndex: this.rowIndex,\r\n      treeStatus: this.treeStatus,\r\n      onTreeAction: this.onTreeAction.bind(this)\r\n    };\r\n\r\n    this._element = element.nativeElement;\r\n  }\r\n\r\n  ngDoCheck(): void {\r\n    this.checkValueUpdates();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.cellTemplate) {\r\n      this.cellTemplate.clear();\r\n    }\r\n  }\r\n\r\n  checkValueUpdates(): void {\r\n    let value = '';\r\n\r\n    if (!this.row || !this.column) {\r\n      value = '';\r\n    } else {\r\n      const val = this.column.$$valueGetter(this.row, this.column.prop);\r\n      const userPipe: PipeTransform = this.column.pipe;\r\n\r\n      if (userPipe) {\r\n        value = userPipe.transform(val);\r\n      } else if (value !== undefined) {\r\n        value = val;\r\n      }\r\n    }\r\n\r\n    if (this.value !== value) {\r\n      this.value = value;\r\n      this.cellContext.value = value;\r\n      this.sanitizedValue = value !== null && value !== undefined ? this.stripHtml(value) : value;\r\n      this.cd.markForCheck();\r\n    }\r\n  }\r\n\r\n  @HostListener('focus')\r\n  onFocus(): void {\r\n    this.isFocused = true;\r\n  }\r\n\r\n  @HostListener('blur')\r\n  onBlur(): void {\r\n    this.isFocused = false;\r\n  }\r\n\r\n  @HostListener('click', ['$event'])\r\n  onClick(event: MouseEvent): void {\r\n    this.activate.emit({\r\n      type: 'click',\r\n      event,\r\n      row: this.row,\r\n      group: this.group,\r\n      rowHeight: this.rowHeight,\r\n      column: this.column,\r\n      value: this.value,\r\n      cellElement: this._element\r\n    });\r\n  }\r\n\r\n  @HostListener('dblclick', ['$event'])\r\n  onDblClick(event: MouseEvent): void {\r\n    this.activate.emit({\r\n      type: 'dblclick',\r\n      event,\r\n      row: this.row,\r\n      group: this.group,\r\n      rowHeight: this.rowHeight,\r\n      column: this.column,\r\n      value: this.value,\r\n      cellElement: this._element\r\n    });\r\n  }\r\n\r\n  @HostListener('keydown', ['$event'])\r\n  onKeyDown(event: KeyboardEvent): void {\r\n    const keyCode = event.keyCode;\r\n    const isTargetCell = event.target === this._element;\r\n\r\n    const isAction =\r\n      keyCode === Keys.return ||\r\n      keyCode === Keys.down ||\r\n      keyCode === Keys.up ||\r\n      keyCode === Keys.left ||\r\n      keyCode === Keys.right;\r\n\r\n    if (isAction && isTargetCell) {\r\n      event.preventDefault();\r\n      event.stopPropagation();\r\n\r\n      this.activate.emit({\r\n        type: 'keydown',\r\n        event,\r\n        row: this.row,\r\n        group: this.group,\r\n        rowHeight: this.rowHeight,\r\n        column: this.column,\r\n        value: this.value,\r\n        cellElement: this._element\r\n      });\r\n    }\r\n  }\r\n\r\n  onCheckboxChange(event: any): void {\r\n    this.activate.emit({\r\n      type: 'checkbox',\r\n      event,\r\n      row: this.row,\r\n      group: this.group,\r\n      rowHeight: this.rowHeight,\r\n      column: this.column,\r\n      value: this.value,\r\n      cellElement: this._element,\r\n      treeStatus: 'collapsed'\r\n    });\r\n  }\r\n\r\n  calcSortDir(sorts: any[]): any {\r\n    if (!sorts) {\r\n      return;\r\n    }\r\n\r\n    const sort = sorts.find((s: any) => {\r\n      return s.prop === this.column.prop;\r\n    });\r\n\r\n    if (sort) {\r\n      return sort.dir;\r\n    }\r\n  }\r\n\r\n  stripHtml(html: string): string {\r\n    if (!html.replace) {\r\n      return html;\r\n    }\r\n    return html.replace(/<\\/?[^>]+(>|$)/g, '');\r\n  }\r\n\r\n  onTreeAction() {\r\n    this.treeAction.emit(this.row);\r\n  }\r\n\r\n  calcLeftMargin(column: any, row: any) {\r\n    const levelIndent = column.treeLevelIndent != null ? column.treeLevelIndent : 50;\r\n    return column.isTreeColumn ? row.level * levelIndent : 0;\r\n  }\r\n}\r\n","import {\r\n  Component,\r\n  Input,\r\n  HostBinding,\r\n  ElementRef,\r\n  Output,\r\n  KeyValueDiffers,\r\n  KeyValueDiffer,\r\n  EventEmitter,\r\n  HostListener,\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  DoCheck,\r\n  SkipSelf\r\n} from '@angular/core';\r\n\r\nimport { TreeStatus } from './body-cell.component';\r\nimport { columnsByPin, columnGroupWidths, columnsByPinArr } from '../../utils/column';\r\nimport { Keys } from '../../utils/keys';\r\nimport { ScrollbarHelper } from '../../services/scrollbar-helper.service';\r\nimport { translateXY } from '../../utils/translate';\r\n\r\n@Component({\r\n  selector: 'datatable-body-row',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  template: `\r\n    <div\r\n      *ngFor=\"let colGroup of _columnsByPin; let i = index; trackBy: trackByGroups\"\r\n      class=\"datatable-row-{{ colGroup.type }} datatable-row-group\"\r\n      [ngStyle]=\"_groupStyles[colGroup.type]\"\r\n    >\r\n      <datatable-body-cell\r\n        role=\"cell\"\r\n        *ngFor=\"let column of colGroup.columns; let ii = index; trackBy: columnTrackingFn\"\r\n        tabindex=\"-1\"\r\n        [row]=\"row\"\r\n        [group]=\"group\"\r\n        [expanded]=\"expanded\"\r\n        [isSelected]=\"isSelected\"\r\n        [rowIndex]=\"rowIndex\"\r\n        [column]=\"column\"\r\n        [rowHeight]=\"rowHeight\"\r\n        [displayCheck]=\"displayCheck\"\r\n        [treeStatus]=\"treeStatus\"\r\n        (activate)=\"onActivate($event, ii)\"\r\n        (treeAction)=\"onTreeAction()\"\r\n      >\r\n      </datatable-body-cell>\r\n    </div>\r\n  `\r\n})\r\nexport class DataTableBodyRowComponent implements DoCheck {\r\n  @Input() set columns(val: any[]) {\r\n    this._columns = val;\r\n    this.recalculateColumns(val);\r\n    this.buildStylesByGroup();\r\n  }\r\n\r\n  get columns(): any[] {\r\n    return this._columns;\r\n  }\r\n\r\n  @Input() set innerWidth(val: number) {\r\n    if (this._columns) {\r\n      const colByPin = columnsByPin(this._columns);\r\n      this._columnGroupWidths = columnGroupWidths(colByPin, this._columns);\r\n    }\r\n\r\n    this._innerWidth = val;\r\n    this.recalculateColumns();\r\n    this.buildStylesByGroup();\r\n  }\r\n\r\n  get innerWidth(): number {\r\n    return this._innerWidth;\r\n  }\r\n\r\n  @Input() expanded: boolean;\r\n  @Input() rowClass: any;\r\n  @Input() row: any;\r\n  @Input() group: any;\r\n  @Input() isSelected: boolean;\r\n  @Input() rowIndex: number;\r\n  @Input() displayCheck: any;\r\n  @Input() treeStatus: TreeStatus = 'collapsed';\r\n\r\n  @Input()\r\n  set offsetX(val: number) {\r\n    this._offsetX = val;\r\n    this.buildStylesByGroup();\r\n  }\r\n  get offsetX() {\r\n    return this._offsetX;\r\n  }\r\n\r\n  @HostBinding('class')\r\n  get cssClass() {\r\n    let cls = 'datatable-body-row';\r\n    if (this.isSelected) {\r\n      cls += ' active';\r\n    }\r\n    if (this.rowIndex % 2 !== 0) {\r\n      cls += ' datatable-row-odd';\r\n    }\r\n    if (this.rowIndex % 2 === 0) {\r\n      cls += ' datatable-row-even';\r\n    }\r\n\r\n    if (this.rowClass) {\r\n      const res = this.rowClass(this.row);\r\n      if (typeof res === 'string') {\r\n        cls += ` ${res}`;\r\n      } else if (typeof res === 'object') {\r\n        const keys = Object.keys(res);\r\n        for (const k of keys) {\r\n          if (res[k] === true) {\r\n            cls += ` ${k}`;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return cls;\r\n  }\r\n\r\n  @HostBinding('style.height.px')\r\n  @Input()\r\n  rowHeight: number;\r\n\r\n  @HostBinding('style.width.px')\r\n  get columnsTotalWidths(): string {\r\n    return this._columnGroupWidths.total;\r\n  }\r\n\r\n  @Output() activate: EventEmitter<any> = new EventEmitter();\r\n  @Output() treeAction: EventEmitter<any> = new EventEmitter();\r\n\r\n  _element: any;\r\n  _columnGroupWidths: any;\r\n  _columnsByPin: any;\r\n  _offsetX: number;\r\n  _columns: any[];\r\n  _innerWidth: number;\r\n  _groupStyles: { [prop: string]: {} } = {\r\n    left: {},\r\n    center: {},\r\n    right: {}\r\n  };\r\n\r\n  private _rowDiffer: KeyValueDiffer<{}, {}>;\r\n\r\n  constructor(\r\n    private differs: KeyValueDiffers,\r\n    @SkipSelf() private scrollbarHelper: ScrollbarHelper,\r\n    private cd: ChangeDetectorRef,\r\n    element: ElementRef\r\n  ) {\r\n    this._element = element.nativeElement;\r\n    this._rowDiffer = differs.find({}).create();\r\n  }\r\n\r\n  ngDoCheck(): void {\r\n    if (this._rowDiffer.diff(this.row)) {\r\n      this.cd.markForCheck();\r\n    }\r\n  }\r\n\r\n  trackByGroups(index: number, colGroup: any): any {\r\n    return colGroup.type;\r\n  }\r\n\r\n  columnTrackingFn(index: number, column: any): any {\r\n    return column.$$id;\r\n  }\r\n\r\n  buildStylesByGroup() {\r\n    this._groupStyles.left = this.calcStylesByGroup('left');\r\n    this._groupStyles.center = this.calcStylesByGroup('center');\r\n    this._groupStyles.right = this.calcStylesByGroup('right');\r\n    this.cd.markForCheck();\r\n  }\r\n\r\n  calcStylesByGroup(group: string) {\r\n    const widths = this._columnGroupWidths;\r\n    const offsetX = this.offsetX;\r\n\r\n    const styles = {\r\n      width: `${widths[group]}px`\r\n    };\r\n\r\n    if (group === 'left') {\r\n      translateXY(styles, offsetX, 0);\r\n    } else if (group === 'right') {\r\n      const bodyWidth = parseInt(this.innerWidth + '', 0);\r\n      const totalDiff = widths.total - bodyWidth;\r\n      const offsetDiff = totalDiff - offsetX;\r\n      const offset = (offsetDiff + this.scrollbarHelper.width) * -1;\r\n      translateXY(styles, offset, 0);\r\n    }\r\n\r\n    return styles;\r\n  }\r\n\r\n  onActivate(event: any, index: number): void {\r\n    event.cellIndex = index;\r\n    event.rowElement = this._element;\r\n    this.activate.emit(event);\r\n  }\r\n\r\n  @HostListener('keydown', ['$event'])\r\n  onKeyDown(event: KeyboardEvent): void {\r\n    const keyCode = event.keyCode;\r\n    const isTargetRow = event.target === this._element;\r\n\r\n    const isAction =\r\n      keyCode === Keys.return ||\r\n      keyCode === Keys.down ||\r\n      keyCode === Keys.up ||\r\n      keyCode === Keys.left ||\r\n      keyCode === Keys.right;\r\n\r\n    if (isAction && isTargetRow) {\r\n      event.preventDefault();\r\n      event.stopPropagation();\r\n\r\n      this.activate.emit({\r\n        type: 'keydown',\r\n        event,\r\n        row: this.row,\r\n        rowElement: this._element\r\n      });\r\n    }\r\n  }\r\n\r\n  @HostListener('mouseenter', ['$event'])\r\n  onMouseenter(event: any): void {\r\n    this.activate.emit({\r\n      type: 'mouseenter',\r\n      event,\r\n      row: this.row,\r\n      rowElement: this._element\r\n    });\r\n  }\r\n\r\n  recalculateColumns(val: any[] = this.columns): void {\r\n    this._columns = val;\r\n    const colsByPin = columnsByPin(this._columns);\r\n    this._columnsByPin = columnsByPinArr(this._columns);\r\n    this._columnGroupWidths = columnGroupWidths(colsByPin, this._columns);\r\n  }\r\n\r\n  onTreeAction() {\r\n    this.treeAction.emit();\r\n  }\r\n}\r\n","import { Component, Input, OnChanges, PipeTransform, TemplateRef } from '@angular/core';\r\n\r\nexport interface ISummaryColumn {\r\n  summaryFunc?: (cells: any[]) => any;\r\n  summaryTemplate?: TemplateRef<any>;\r\n\r\n  prop: string;\r\n  pipe?: PipeTransform;\r\n}\r\n\r\nfunction defaultSumFunc(cells: any[]): any {\r\n  const cellsWithValues = cells.filter(cell => !!cell);\r\n\r\n  if (!cellsWithValues.length) {\r\n    return null;\r\n  }\r\n  if (cellsWithValues.some(cell => typeof cell !== 'number')) {\r\n    return null;\r\n  }\r\n\r\n  return cellsWithValues.reduce((res, cell) => res + cell);\r\n}\r\n\r\nfunction noopSumFunc(cells: any[]): void {\r\n  return null;\r\n}\r\n\r\n@Component({\r\n  selector: 'datatable-summary-row',\r\n  template: `\r\n    <datatable-body-row\r\n      *ngIf=\"summaryRow && _internalColumns\"\r\n      tabindex=\"-1\"\r\n      [innerWidth]=\"innerWidth\"\r\n      [offsetX]=\"offsetX\"\r\n      [columns]=\"_internalColumns\"\r\n      [rowHeight]=\"rowHeight\"\r\n      [row]=\"summaryRow\"\r\n      [rowIndex]=\"-1\"\r\n    >\r\n    </datatable-body-row>\r\n  `,\r\n  host: {\r\n    class: 'datatable-summary-row'\r\n  }\r\n})\r\nexport class DataTableSummaryRowComponent implements OnChanges {\r\n  @Input() rows: any[];\r\n  @Input() columns: ISummaryColumn[];\r\n\r\n  @Input() rowHeight: number;\r\n  @Input() offsetX: number;\r\n  @Input() innerWidth: number;\r\n\r\n  _internalColumns: ISummaryColumn[];\r\n  summaryRow: any = {};\r\n\r\n  ngOnChanges() {\r\n    if (!this.columns || !this.rows) {\r\n      return;\r\n    }\r\n    this.updateInternalColumns();\r\n    this.updateValues();\r\n  }\r\n\r\n  private updateInternalColumns() {\r\n    this._internalColumns = this.columns.map(col => ({\r\n      ...col,\r\n      cellTemplate: col.summaryTemplate\r\n    }));\r\n  }\r\n\r\n  private updateValues() {\r\n    this.summaryRow = {};\r\n\r\n    this.columns\r\n      .filter(col => !col.summaryTemplate)\r\n      .forEach(col => {\r\n        const cellsFromSingleColumn = this.rows.map(row => row[col.prop]);\r\n        const sumFunc = this.getSummaryFunction(col);\r\n\r\n        this.summaryRow[col.prop] = col.pipe\r\n          ? col.pipe.transform(sumFunc(cellsFromSingleColumn))\r\n          : sumFunc(cellsFromSingleColumn);\r\n      });\r\n  }\r\n\r\n  private getSummaryFunction(column: ISummaryColumn): (a: any[]) => any {\r\n    if (column.summaryFunc === undefined) {\r\n      return defaultSumFunc;\r\n    } else if (column.summaryFunc === null) {\r\n      return noopSumFunc;\r\n    } else {\r\n      return column.summaryFunc;\r\n    }\r\n  }\r\n}\r\n","import {\r\n  Component,\r\n  Input,\r\n  Output,\r\n  EventEmitter,\r\n  HostListener,\r\n  DoCheck,\r\n  ChangeDetectionStrategy,\r\n  KeyValueDiffer,\r\n  ChangeDetectorRef,\r\n  KeyValueDiffers\r\n} from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'datatable-row-wrapper',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  template: `\r\n    <div *ngIf=\"groupHeader && groupHeader.template\" class=\"datatable-group-header\" [ngStyle]=\"getGroupHeaderStyle()\">\r\n      <ng-template\r\n        *ngIf=\"groupHeader && groupHeader.template\"\r\n        [ngTemplateOutlet]=\"groupHeader.template\"\r\n        [ngTemplateOutletContext]=\"groupContext\"\r\n      >\r\n      </ng-template>\r\n    </div>\r\n    <ng-content *ngIf=\"(groupHeader && groupHeader.template && expanded) || !groupHeader || !groupHeader.template\">\r\n    </ng-content>\r\n    <div\r\n      *ngIf=\"rowDetail && rowDetail.template && expanded\"\r\n      [style.height.px]=\"detailRowHeight\"\r\n      class=\"datatable-row-detail\"\r\n    >\r\n      <ng-template\r\n        *ngIf=\"rowDetail && rowDetail.template\"\r\n        [ngTemplateOutlet]=\"rowDetail.template\"\r\n        [ngTemplateOutletContext]=\"rowContext\"\r\n      >\r\n      </ng-template>\r\n    </div>\r\n  `,\r\n  host: {\r\n    class: 'datatable-row-wrapper'\r\n  }\r\n})\r\nexport class DataTableRowWrapperComponent implements DoCheck {\r\n  @Input() innerWidth: number;\r\n  @Input() rowDetail: any;\r\n  @Input() groupHeader: any;\r\n  @Input() offsetX: number;\r\n  @Input() detailRowHeight: any;\r\n  @Input() row: any;\r\n  @Input() groupedRows: any;\r\n  @Output() rowContextmenu = new EventEmitter<{ event: MouseEvent; row: any }>(false);\r\n\r\n  @Input() set rowIndex(val: number) {\r\n    this._rowIndex = val;\r\n    this.rowContext.rowIndex = val;\r\n    this.groupContext.rowIndex = val;\r\n    this.cd.markForCheck();\r\n  }\r\n\r\n  get rowIndex(): number {\r\n    return this._rowIndex;\r\n  }\r\n\r\n  @Input() set expanded(val: boolean) {\r\n    this._expanded = val;\r\n    this.groupContext.expanded = val;\r\n    this.rowContext.expanded = val;\r\n    this.cd.markForCheck();\r\n  }\r\n\r\n  get expanded(): boolean {\r\n    return this._expanded;\r\n  }\r\n\r\n  groupContext: any;\r\n  rowContext: any;\r\n\r\n  private rowDiffer: KeyValueDiffer<{}, {}>;\r\n  private _expanded: boolean = false;\r\n  private _rowIndex: number;\r\n\r\n  constructor(private cd: ChangeDetectorRef, private differs: KeyValueDiffers) {\r\n    this.groupContext = {\r\n      group: this.row,\r\n      expanded: this.expanded,\r\n      rowIndex: this.rowIndex\r\n    };\r\n\r\n    this.rowContext = {\r\n      row: this.row,\r\n      expanded: this.expanded,\r\n      rowIndex: this.rowIndex\r\n    };\r\n\r\n    this.rowDiffer = differs.find({}).create();\r\n  }\r\n\r\n  ngDoCheck(): void {\r\n    if (this.rowDiffer.diff(this.row)) {\r\n      this.rowContext.row = this.row;\r\n      this.groupContext.group = this.row;\r\n      this.cd.markForCheck();\r\n    }\r\n  }\r\n\r\n  @HostListener('contextmenu', ['$event'])\r\n  onContextmenu($event: MouseEvent): void {\r\n    this.rowContextmenu.emit({ event: $event, row: this.row });\r\n  }\r\n\r\n  getGroupHeaderStyle(): any {\r\n    const styles = {};\r\n\r\n    styles['transform'] = 'translate3d(' + this.offsetX + 'px, 0px, 0px)';\r\n    styles['backface-visibility'] = 'hidden';\r\n    styles['width'] = this.innerWidth;\r\n\r\n    return styles;\r\n  }\r\n}\r\n","import {\r\n  Component,\r\n  Output,\r\n  EventEmitter,\r\n  Input,\r\n  HostBinding,\r\n  ChangeDetectorRef,\r\n  ViewChild,\r\n  OnInit,\r\n  OnDestroy,\r\n  ChangeDetectionStrategy\r\n} from '@angular/core';\r\nimport { ScrollerComponent } from './scroller.component';\r\nimport { SelectionType } from '../../types/selection.type';\r\nimport { columnsByPin, columnGroupWidths } from '../../utils/column';\r\nimport { RowHeightCache } from '../../utils/row-height-cache';\r\nimport { translateXY } from '../../utils/translate';\r\n\r\n@Component({\r\n  selector: 'datatable-body',\r\n  template: `\r\n    <datatable-progress *ngIf=\"loadingIndicator\"> </datatable-progress>\r\n    <datatable-selection\r\n      #selector\r\n      [selected]=\"selected\"\r\n      [rows]=\"rows\"\r\n      [selectCheck]=\"selectCheck\"\r\n      [selectEnabled]=\"selectEnabled\"\r\n      [selectionType]=\"selectionType\"\r\n      [rowIdentity]=\"rowIdentity\"\r\n      (select)=\"select.emit($event)\"\r\n      (activate)=\"activate.emit($event)\"\r\n    >\r\n      <datatable-scroller\r\n        *ngIf=\"rows?.length\"\r\n        [scrollbarV]=\"scrollbarV\"\r\n        [scrollbarH]=\"scrollbarH\"\r\n        [scrollHeight]=\"scrollHeight\"\r\n        [scrollWidth]=\"columnGroupWidths?.total\"\r\n        (scroll)=\"onBodyScroll($event)\"\r\n      >\r\n        <datatable-summary-row\r\n          *ngIf=\"summaryRow && summaryPosition === 'top'\"\r\n          [rowHeight]=\"summaryHeight\"\r\n          [offsetX]=\"offsetX\"\r\n          [innerWidth]=\"innerWidth\"\r\n          [rows]=\"rows\"\r\n          [columns]=\"columns\"\r\n        >\r\n        </datatable-summary-row>\r\n        <datatable-row-wrapper\r\n          [groupedRows]=\"groupedRows\"\r\n          *ngFor=\"let group of temp; let i = index; trackBy: rowTrackingFn\"\r\n          [innerWidth]=\"innerWidth\"\r\n          [ngStyle]=\"getRowsStyles(group)\"\r\n          [rowDetail]=\"rowDetail\"\r\n          [groupHeader]=\"groupHeader\"\r\n          [offsetX]=\"offsetX\"\r\n          [detailRowHeight]=\"getDetailRowHeight(group && group[i], i)\"\r\n          [row]=\"group\"\r\n          [expanded]=\"getRowExpanded(group)\"\r\n          [rowIndex]=\"getRowIndex(group && group[i])\"\r\n          (rowContextmenu)=\"rowContextmenu.emit($event)\"\r\n        >\r\n          <datatable-body-row\r\n            role=\"row\"\r\n            *ngIf=\"!groupedRows; else groupedRowsTemplate\"\r\n            tabindex=\"-1\"\r\n            [isSelected]=\"selector.getRowSelected(group)\"\r\n            [innerWidth]=\"innerWidth\"\r\n            [offsetX]=\"offsetX\"\r\n            [columns]=\"columns\"\r\n            [rowHeight]=\"getRowHeight(group)\"\r\n            [row]=\"group\"\r\n            [rowIndex]=\"getRowIndex(group)\"\r\n            [expanded]=\"getRowExpanded(group)\"\r\n            [rowClass]=\"rowClass\"\r\n            [displayCheck]=\"displayCheck\"\r\n            [treeStatus]=\"group && group.treeStatus\"\r\n            (treeAction)=\"onTreeAction(group)\"\r\n            (activate)=\"selector.onActivate($event, indexes.first + i)\"\r\n          >\r\n          </datatable-body-row>\r\n          <ng-template #groupedRowsTemplate>\r\n            <datatable-body-row\r\n              role=\"row\"\r\n              *ngFor=\"let row of group.value; let i = index; trackBy: rowTrackingFn\"\r\n              tabindex=\"-1\"\r\n              [isSelected]=\"selector.getRowSelected(row)\"\r\n              [innerWidth]=\"innerWidth\"\r\n              [offsetX]=\"offsetX\"\r\n              [columns]=\"columns\"\r\n              [rowHeight]=\"getRowHeight(row)\"\r\n              [row]=\"row\"\r\n              [group]=\"group.value\"\r\n              [rowIndex]=\"getRowIndex(row)\"\r\n              [expanded]=\"getRowExpanded(row)\"\r\n              [rowClass]=\"rowClass\"\r\n              (activate)=\"selector.onActivate($event, i)\"\r\n            >\r\n            </datatable-body-row>\r\n          </ng-template>\r\n        </datatable-row-wrapper>\r\n        <datatable-summary-row\r\n          role=\"row\"\r\n          *ngIf=\"summaryRow && summaryPosition === 'bottom'\"\r\n          [ngStyle]=\"getBottomSummaryRowStyles()\"\r\n          [rowHeight]=\"summaryHeight\"\r\n          [offsetX]=\"offsetX\"\r\n          [innerWidth]=\"innerWidth\"\r\n          [rows]=\"rows\"\r\n          [columns]=\"columns\"\r\n        >\r\n        </datatable-summary-row>\r\n      </datatable-scroller>\r\n      <div class=\"empty-row\" *ngIf=\"!rows?.length && !loadingIndicator\" [innerHTML]=\"emptyMessage\"></div>\r\n    </datatable-selection>\r\n  `,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  host: {\r\n    class: 'datatable-body'\r\n  }\r\n})\r\nexport class DataTableBodyComponent implements OnInit, OnDestroy {\r\n  @Input() scrollbarV: boolean;\r\n  @Input() scrollbarH: boolean;\r\n  @Input() loadingIndicator: boolean;\r\n  @Input() externalPaging: boolean;\r\n  @Input() rowHeight: number | 'auto' | ((row?: any) => number);\r\n  @Input() offsetX: number;\r\n  @Input() emptyMessage: string;\r\n  @Input() selectionType: SelectionType;\r\n  @Input() selected: any[] = [];\r\n  @Input() rowIdentity: any;\r\n  @Input() rowDetail: any;\r\n  @Input() groupHeader: any;\r\n  @Input() selectCheck: any;\r\n  @Input() displayCheck: any;\r\n  @Input() trackByProp: string;\r\n  @Input() rowClass: any;\r\n  @Input() groupedRows: any;\r\n  @Input() groupExpansionDefault: boolean;\r\n  @Input() innerWidth: number;\r\n  @Input() groupRowsBy: string;\r\n  @Input() virtualization: boolean;\r\n  @Input() summaryRow: boolean;\r\n  @Input() summaryPosition: string;\r\n  @Input() summaryHeight: number;\r\n\r\n  @Input() set pageSize(val: number) {\r\n    this._pageSize = val;\r\n    this.recalcLayout();\r\n  }\r\n\r\n  get pageSize(): number {\r\n    return this._pageSize;\r\n  }\r\n\r\n  @Input() set rows(val: any[]) {\r\n    this._rows = val;\r\n    this.recalcLayout();\r\n  }\r\n\r\n  get rows(): any[] {\r\n    return this._rows;\r\n  }\r\n\r\n  @Input() set columns(val: any[]) {\r\n    this._columns = val;\r\n    const colsByPin = columnsByPin(val);\r\n    this.columnGroupWidths = columnGroupWidths(colsByPin, val);\r\n  }\r\n\r\n  get columns(): any[] {\r\n    return this._columns;\r\n  }\r\n\r\n  @Input() set offset(val: number) {\r\n    this._offset = val;\r\n    if (!this.scrollbarV || (this.scrollbarV && !this.virtualization)) this.recalcLayout();\r\n  }\r\n\r\n  get offset(): number {\r\n    return this._offset;\r\n  }\r\n\r\n  @Input() set rowCount(val: number) {\r\n    this._rowCount = val;\r\n    this.recalcLayout();\r\n  }\r\n\r\n  get rowCount(): number {\r\n    return this._rowCount;\r\n  }\r\n\r\n  @HostBinding('style.width')\r\n  get bodyWidth(): string {\r\n    if (this.scrollbarH) {\r\n      return this.innerWidth + 'px';\r\n    } else {\r\n      return '100%';\r\n    }\r\n  }\r\n\r\n  @Input()\r\n  @HostBinding('style.height')\r\n  set bodyHeight(val) {\r\n    if (this.scrollbarV) {\r\n      this._bodyHeight = val + 'px';\r\n    } else {\r\n      this._bodyHeight = 'auto';\r\n    }\r\n\r\n    this.recalcLayout();\r\n  }\r\n\r\n  get bodyHeight() {\r\n    return this._bodyHeight;\r\n  }\r\n\r\n  @Output() scroll: EventEmitter<any> = new EventEmitter();\r\n  @Output() page: EventEmitter<any> = new EventEmitter();\r\n  @Output() activate: EventEmitter<any> = new EventEmitter();\r\n  @Output() select: EventEmitter<any> = new EventEmitter();\r\n  @Output() detailToggle: EventEmitter<any> = new EventEmitter();\r\n  @Output() rowContextmenu = new EventEmitter<{ event: MouseEvent; row: any }>(false);\r\n  @Output() treeAction: EventEmitter<any> = new EventEmitter();\r\n\r\n  @ViewChild(ScrollerComponent) scroller: ScrollerComponent;\r\n\r\n  /**\r\n   * Returns if selection is enabled.\r\n   */\r\n  get selectEnabled(): boolean {\r\n    return !!this.selectionType;\r\n  }\r\n\r\n  /**\r\n   * Property that would calculate the height of scroll bar\r\n   * based on the row heights cache for virtual scroll and virtualization. Other scenarios\r\n   * calculate scroll height automatically (as height will be undefined).\r\n   */\r\n  get scrollHeight(): number | undefined {\r\n    if (this.scrollbarV && this.virtualization && this.rowCount) {\r\n      return this.rowHeightsCache.query(this.rowCount - 1);\r\n    }\r\n    // avoid TS7030: Not all code paths return a value.\r\n    return undefined;\r\n  }\r\n\r\n  rowHeightsCache: RowHeightCache = new RowHeightCache();\r\n  temp: any[] = [];\r\n  offsetY = 0;\r\n  indexes: any = {};\r\n  columnGroupWidths: any;\r\n  columnGroupWidthsWithoutGroup: any;\r\n  rowTrackingFn: any;\r\n  listener: any;\r\n  rowIndexes: any = new WeakMap<any, string>();\r\n  rowExpansions: any[] = [];\r\n\r\n  _rows: any[];\r\n  _bodyHeight: any;\r\n  _columns: any[];\r\n  _rowCount: number;\r\n  _offset: number;\r\n  _pageSize: number;\r\n\r\n  /**\r\n   * Creates an instance of DataTableBodyComponent.\r\n   */\r\n  constructor(private cd: ChangeDetectorRef) {\r\n    // declare fn here so we can get access to the `this` property\r\n    this.rowTrackingFn = (index: number, row: any): any => {\r\n      const idx = this.getRowIndex(row);\r\n      if (this.trackByProp) {\r\n        return row[this.trackByProp];\r\n      } else {\r\n        return idx;\r\n      }\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Called after the constructor, initializing input properties\r\n   */\r\n  ngOnInit(): void {\r\n    if (this.rowDetail) {\r\n      this.listener = this.rowDetail.toggle.subscribe(({ type, value }: { type: string; value: any }) => {\r\n        if (type === 'row') {\r\n          this.toggleRowExpansion(value);\r\n        }\r\n        if (type === 'all') {\r\n          this.toggleAllRows(value);\r\n        }\r\n\r\n        // Refresh rows after toggle\r\n        // Fixes #883\r\n        this.updateIndexes();\r\n        this.updateRows();\r\n        this.cd.markForCheck();\r\n      });\r\n    }\r\n\r\n    if (this.groupHeader) {\r\n      this.listener = this.groupHeader.toggle.subscribe(({ type, value }: { type: string; value: any }) => {\r\n        if (type === 'group') {\r\n          this.toggleRowExpansion(value);\r\n        }\r\n        if (type === 'all') {\r\n          this.toggleAllRows(value);\r\n        }\r\n\r\n        // Refresh rows after toggle\r\n        // Fixes #883\r\n        this.updateIndexes();\r\n        this.updateRows();\r\n        this.cd.markForCheck();\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Called once, before the instance is destroyed.\r\n   */\r\n  ngOnDestroy(): void {\r\n    if (this.rowDetail || this.groupHeader) {\r\n      this.listener.unsubscribe();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Updates the Y offset given a new offset.\r\n   */\r\n  updateOffsetY(offset?: number): void {\r\n    // scroller is missing on empty table\r\n    if (!this.scroller) {\r\n      return;\r\n    }\r\n\r\n    if (this.scrollbarV && this.virtualization && offset) {\r\n      // First get the row Index that we need to move to.\r\n      const rowIndex = this.pageSize * offset;\r\n      offset = this.rowHeightsCache.query(rowIndex - 1);\r\n    } else if (this.scrollbarV && !this.virtualization) {\r\n      offset = 0;\r\n    }\r\n\r\n    this.scroller.setOffset(offset || 0);\r\n  }\r\n\r\n  /**\r\n   * Body was scrolled, this is mainly useful for\r\n   * when a user is server-side pagination via virtual scroll.\r\n   */\r\n  onBodyScroll(event: any): void {\r\n    const scrollYPos: number = event.scrollYPos;\r\n    const scrollXPos: number = event.scrollXPos;\r\n\r\n    // if scroll change, trigger update\r\n    // this is mainly used for header cell positions\r\n    if (this.offsetY !== scrollYPos || this.offsetX !== scrollXPos) {\r\n      this.scroll.emit({\r\n        offsetY: scrollYPos,\r\n        offsetX: scrollXPos\r\n      });\r\n    }\r\n\r\n    this.offsetY = scrollYPos;\r\n    this.offsetX = scrollXPos;\r\n\r\n    this.updateIndexes();\r\n    this.updatePage(event.direction);\r\n    this.updateRows();\r\n  }\r\n\r\n  /**\r\n   * Updates the page given a direction.\r\n   */\r\n  updatePage(direction: string): void {\r\n    let offset = this.indexes.first / this.pageSize;\r\n\r\n    if (direction === 'up') {\r\n      offset = Math.ceil(offset);\r\n    } else if (direction === 'down') {\r\n      offset = Math.floor(offset);\r\n    }\r\n\r\n    if (direction !== undefined && !isNaN(offset)) {\r\n      this.page.emit({ offset });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Updates the rows in the view port\r\n   */\r\n  updateRows(): void {\r\n    const { first, last } = this.indexes;\r\n    let rowIndex = first;\r\n    let idx = 0;\r\n    const temp: any[] = [];\r\n\r\n    // if grouprowsby has been specified treat row paging\r\n    // parameters as group paging parameters ie if limit 10 has been\r\n    // specified treat it as 10 groups rather than 10 rows\r\n    if (this.groupedRows) {\r\n      let maxRowsPerGroup = 3;\r\n      // if there is only one group set the maximum number of\r\n      // rows per group the same as the total number of rows\r\n      if (this.groupedRows.length === 1) {\r\n        maxRowsPerGroup = this.groupedRows[0].value.length;\r\n      }\r\n\r\n      while (rowIndex < last && rowIndex < this.groupedRows.length) {\r\n        // Add the groups into this page\r\n        const group = this.groupedRows[rowIndex];\r\n        this.rowIndexes.set(group, rowIndex);\r\n\r\n        if (group.value) {\r\n          // add indexes for each group item\r\n          group.value.forEach((g: any, i: number) => {\r\n            const _idx = `${rowIndex}-${i}`;\r\n            this.rowIndexes.set(g, _idx);\r\n          });\r\n        }\r\n        temp[idx] = group;\r\n        idx++;\r\n\r\n        // Group index in this context\r\n        rowIndex++;\r\n      }\r\n    } else {\r\n      while (rowIndex < last && rowIndex < this.rowCount) {\r\n        const row = this.rows[rowIndex];\r\n\r\n        if (row) {\r\n          // add indexes for each row\r\n          this.rowIndexes.set(row, rowIndex);\r\n          temp[idx] = row;\r\n        }\r\n\r\n        idx++;\r\n        rowIndex++;\r\n      }\r\n    }\r\n\r\n    this.temp = temp;\r\n  }\r\n\r\n  /**\r\n   * Get the row height\r\n   */\r\n  getRowHeight(row: any): number {\r\n    // if its a function return it\r\n    if (typeof this.rowHeight === 'function') {\r\n      return this.rowHeight(row);\r\n    }\r\n\r\n    return this.rowHeight as number;\r\n  }\r\n\r\n  /**\r\n   * @param group the group with all rows\r\n   */\r\n  getGroupHeight(group: any): number {\r\n    let rowHeight = 0;\r\n\r\n    if (group.value) {\r\n      for (let index = 0; index < group.value.length; index++) {\r\n        rowHeight += this.getRowAndDetailHeight(group.value[index]);\r\n      }\r\n    }\r\n\r\n    return rowHeight;\r\n  }\r\n\r\n  /**\r\n   * Calculate row height based on the expanded state of the row.\r\n   */\r\n  getRowAndDetailHeight(row: any): number {\r\n    let rowHeight = this.getRowHeight(row);\r\n    const expanded = this.getRowExpanded(row);\r\n\r\n    // Adding detail row height if its expanded.\r\n    if (expanded) {\r\n      rowHeight += this.getDetailRowHeight(row);\r\n    }\r\n\r\n    return rowHeight;\r\n  }\r\n\r\n  /**\r\n   * Get the height of the detail row.\r\n   */\r\n  getDetailRowHeight = (row?: any, index?: any): number => {\r\n    if (!this.rowDetail) {\r\n      return 0;\r\n    }\r\n    const rowHeight = this.rowDetail.rowHeight;\r\n    return typeof rowHeight === 'function' ? rowHeight(row, index) : (rowHeight as number);\r\n  };\r\n\r\n  /**\r\n   * Calculates the styles for the row so that the rows can be moved in 2D space\r\n   * during virtual scroll inside the DOM.   In the below case the Y position is\r\n   * manipulated.   As an example, if the height of row 0 is 30 px and row 1 is\r\n   * 100 px then following styles are generated:\r\n   *\r\n   * transform: translate3d(0px, 0px, 0px);    ->  row0\r\n   * transform: translate3d(0px, 30px, 0px);   ->  row1\r\n   * transform: translate3d(0px, 130px, 0px);  ->  row2\r\n   *\r\n   * Row heights have to be calculated based on the row heights cache as we wont\r\n   * be able to determine which row is of what height before hand.  In the above\r\n   * case the positionY of the translate3d for row2 would be the sum of all the\r\n   * heights of the rows before it (i.e. row0 and row1).\r\n   *\r\n   * @param rows the row that needs to be placed in the 2D space.\r\n   * @returns the CSS3 style to be applied\r\n   *\r\n   * @memberOf DataTableBodyComponent\r\n   */\r\n  getRowsStyles(rows: any): any {\r\n    const styles: any = {};\r\n\r\n    // only add styles for the group if there is a group\r\n    if (this.groupedRows) {\r\n      styles.width = this.columnGroupWidths.total;\r\n    }\r\n\r\n    if (this.scrollbarV && this.virtualization) {\r\n      let idx = 0;\r\n\r\n      if (this.groupedRows) {\r\n        // Get the latest row rowindex in a group\r\n        const row = rows[rows.length - 1];\r\n        idx = row ? this.getRowIndex(row) : 0;\r\n      } else {\r\n        idx = this.getRowIndex(rows);\r\n      }\r\n\r\n      // const pos = idx * rowHeight;\r\n      // The position of this row would be the sum of all row heights\r\n      // until the previous row position.\r\n      const pos = this.rowHeightsCache.query(idx - 1);\r\n\r\n      translateXY(styles, 0, pos);\r\n    }\r\n\r\n    return styles;\r\n  }\r\n\r\n  /**\r\n   * Calculate bottom summary row offset for scrollbar mode.\r\n   * For more information about cache and offset calculation\r\n   * see description for `getRowsStyles` method\r\n   *\r\n   * @returns the CSS3 style to be applied\r\n   *\r\n   * @memberOf DataTableBodyComponent\r\n   */\r\n  getBottomSummaryRowStyles(): any {\r\n    if (!this.scrollbarV || !this.rows || !this.rows.length) {\r\n      return null;\r\n    }\r\n\r\n    const styles = { position: 'absolute' };\r\n    const pos = this.rowHeightsCache.query(this.rows.length - 1);\r\n\r\n    translateXY(styles, 0, pos);\r\n\r\n    return styles;\r\n  }\r\n\r\n  /**\r\n   * Hides the loading indicator\r\n   */\r\n  hideIndicator(): void {\r\n    setTimeout(() => (this.loadingIndicator = false), 500);\r\n  }\r\n\r\n  /**\r\n   * Updates the index of the rows in the viewport\r\n   */\r\n  updateIndexes(): void {\r\n    let first = 0;\r\n    let last = 0;\r\n\r\n    if (this.scrollbarV) {\r\n      if (this.virtualization) {\r\n        // Calculation of the first and last indexes will be based on where the\r\n        // scrollY position would be at.  The last index would be the one\r\n        // that shows up inside the view port the last.\r\n        const height = parseInt(this.bodyHeight, 0);\r\n        first = this.rowHeightsCache.getRowIndex(this.offsetY);\r\n        last = this.rowHeightsCache.getRowIndex(height + this.offsetY) + 1;\r\n      } else {\r\n        // If virtual rows are not needed\r\n        // We render all in one go\r\n        first = 0;\r\n        last = this.rowCount;\r\n      }\r\n    } else {\r\n      // The server is handling paging and will pass an array that begins with the\r\n      // element at a specified offset.  first should always be 0 with external paging.\r\n      if (!this.externalPaging) {\r\n        first = Math.max(this.offset * this.pageSize, 0);\r\n      }\r\n      last = Math.min(first + this.pageSize, this.rowCount);\r\n    }\r\n\r\n    this.indexes = { first, last };\r\n  }\r\n\r\n  /**\r\n   * Refreshes the full Row Height cache.  Should be used\r\n   * when the entire row array state has changed.\r\n   */\r\n  refreshRowHeightCache(): void {\r\n    if (!this.scrollbarV || (this.scrollbarV && !this.virtualization)) {\r\n      return;\r\n    }\r\n\r\n    // clear the previous row height cache if already present.\r\n    // this is useful during sorts, filters where the state of the\r\n    // rows array is changed.\r\n    this.rowHeightsCache.clearCache();\r\n\r\n    // Initialize the tree only if there are rows inside the tree.\r\n    if (this.rows && this.rows.length) {\r\n      const rowExpansions = new Set();\r\n      for (const row of this.rows) {\r\n        if (this.getRowExpanded(row)) {\r\n          rowExpansions.add(row);\r\n        }\r\n      }\r\n\r\n      this.rowHeightsCache.initCache({\r\n        rows: this.rows,\r\n        rowHeight: this.rowHeight,\r\n        detailRowHeight: this.getDetailRowHeight,\r\n        externalVirtual: this.scrollbarV && this.externalPaging,\r\n        rowCount: this.rowCount,\r\n        rowIndexes: this.rowIndexes,\r\n        rowExpansions\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets the index for the view port\r\n   */\r\n  getAdjustedViewPortIndex(): number {\r\n    // Capture the row index of the first row that is visible on the viewport.\r\n    // If the scroll bar is just below the row which is highlighted then make that as the\r\n    // first index.\r\n    const viewPortFirstRowIndex = this.indexes.first;\r\n\r\n    if (this.scrollbarV && this.virtualization) {\r\n      const offsetScroll = this.rowHeightsCache.query(viewPortFirstRowIndex - 1);\r\n      return offsetScroll <= this.offsetY ? viewPortFirstRowIndex - 1 : viewPortFirstRowIndex;\r\n    }\r\n\r\n    return viewPortFirstRowIndex;\r\n  }\r\n\r\n  /**\r\n   * Toggle the Expansion of the row i.e. if the row is expanded then it will\r\n   * collapse and vice versa.   Note that the expanded status is stored as\r\n   * a part of the row object itself as we have to preserve the expanded row\r\n   * status in case of sorting and filtering of the row set.\r\n   */\r\n  toggleRowExpansion(row: any): void {\r\n    // Capture the row index of the first row that is visible on the viewport.\r\n    const viewPortFirstRowIndex = this.getAdjustedViewPortIndex();\r\n    const rowExpandedIdx = this.getRowExpandedIdx(row, this.rowExpansions);\r\n    const expanded = rowExpandedIdx > -1;\r\n\r\n    // If the detailRowHeight is auto --> only in case of non-virtualized scroll\r\n    if (this.scrollbarV && this.virtualization) {\r\n      const detailRowHeight = this.getDetailRowHeight(row) * (expanded ? -1 : 1);\r\n      // const idx = this.rowIndexes.get(row) || 0;\r\n      const idx = this.getRowIndex(row);\r\n      this.rowHeightsCache.update(idx, detailRowHeight);\r\n    }\r\n\r\n    // Update the toggled row and update thive nevere heights in the cache.\r\n    if (expanded) {\r\n      this.rowExpansions.splice(rowExpandedIdx, 1);\r\n    } else {\r\n      this.rowExpansions.push(row);\r\n    }\r\n\r\n    this.detailToggle.emit({\r\n      rows: [row],\r\n      currentIndex: viewPortFirstRowIndex\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Expand/Collapse all the rows no matter what their state is.\r\n   */\r\n  toggleAllRows(expanded: boolean): void {\r\n    // clear prev expansions\r\n    this.rowExpansions = [];\r\n\r\n    // Capture the row index of the first row that is visible on the viewport.\r\n    const viewPortFirstRowIndex = this.getAdjustedViewPortIndex();\r\n\r\n    if (expanded) {\r\n      for (const row of this.rows) {\r\n        this.rowExpansions.push(row);\r\n      }\r\n    }\r\n\r\n    if (this.scrollbarV) {\r\n      // Refresh the full row heights cache since every row was affected.\r\n      this.recalcLayout();\r\n    }\r\n\r\n    // Emit all rows that have been expanded.\r\n    this.detailToggle.emit({\r\n      rows: this.rows,\r\n      currentIndex: viewPortFirstRowIndex\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Recalculates the table\r\n   */\r\n  recalcLayout(): void {\r\n    this.refreshRowHeightCache();\r\n    this.updateIndexes();\r\n    this.updateRows();\r\n  }\r\n\r\n  /**\r\n   * Tracks the column\r\n   */\r\n  columnTrackingFn(index: number, column: any): any {\r\n    return column.$$id;\r\n  }\r\n\r\n  /**\r\n   * Gets the row pinning group styles\r\n   */\r\n  stylesByGroup(group: string) {\r\n    const widths = this.columnGroupWidths;\r\n    const offsetX = this.offsetX;\r\n\r\n    const styles = {\r\n      width: `${widths[group]}px`\r\n    };\r\n\r\n    if (group === 'left') {\r\n      translateXY(styles, offsetX, 0);\r\n    } else if (group === 'right') {\r\n      const bodyWidth = parseInt(this.innerWidth + '', 0);\r\n      const totalDiff = widths.total - bodyWidth;\r\n      const offsetDiff = totalDiff - offsetX;\r\n      const offset = offsetDiff * -1;\r\n      translateXY(styles, offset, 0);\r\n    }\r\n\r\n    return styles;\r\n  }\r\n\r\n  /**\r\n   * Returns if the row was expanded and set default row expansion when row expansion is empty\r\n   */\r\n  getRowExpanded(row: any): boolean {\r\n    if (this.rowExpansions.length === 0 && this.groupExpansionDefault) {\r\n      for (const group of this.groupedRows) {\r\n        this.rowExpansions.push(group);\r\n      }\r\n    }\r\n\r\n    return this.getRowExpandedIdx(row, this.rowExpansions) > -1;\r\n  }\r\n\r\n  getRowExpandedIdx(row: any, expanded: any[]): number {\r\n    if (!expanded || !expanded.length) return -1;\r\n\r\n    const rowId = this.rowIdentity(row);\r\n    return expanded.findIndex(r => {\r\n      const id = this.rowIdentity(r);\r\n      return id === rowId;\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Gets the row index given a row\r\n   */\r\n  getRowIndex(row: any): number {\r\n    return this.rowIndexes.get(row) || 0;\r\n  }\r\n\r\n  onTreeAction(row: any) {\r\n    this.treeAction.emit({ row });\r\n  }\r\n}\r\n","import { getterForProp } from './column-prop-getters';\r\nimport { SortType } from '../types/sort.type';\r\nimport { SortDirection } from '../types/sort-direction.type';\r\nimport { SortPropDir } from '../types/sort-prop-dir.type';\r\n/**\r\n * Gets the next sort direction\r\n */\r\nexport function nextSortDir(sortType: SortType, current: SortDirection): SortDirection | undefined {\r\n  if (sortType === SortType.single) {\r\n    if (current === SortDirection.asc) {\r\n      return SortDirection.desc;\r\n    } else {\r\n      return SortDirection.asc;\r\n    }\r\n  } else {\r\n    if (!current) {\r\n      return SortDirection.asc;\r\n    } else if (current === SortDirection.asc) {\r\n      return SortDirection.desc;\r\n    } else if (current === SortDirection.desc) {\r\n      return undefined;\r\n    }\r\n    // avoid TS7030: Not all code paths return a value.\r\n    return undefined;\r\n  }\r\n}\r\n\r\n/**\r\n * Adapted from fueld-ui on 6/216\r\n * https://github.com/FuelInteractive/fuel-ui/tree/master/src/pipes/OrderBy\r\n */\r\nexport function orderByComparator(a: any, b: any): number {\r\n  if (a === null || typeof a === 'undefined') a = 0;\r\n  if (b === null || typeof b === 'undefined') b = 0;\r\n  if (a instanceof Date && b instanceof Date) {\r\n    if (a < b) return -1;\r\n    if (a > b) return 1;\r\n  } else if (isNaN(parseFloat(a)) || !isFinite(a) || isNaN(parseFloat(b)) || !isFinite(b)) {\r\n    // Convert to string in case of a=0 or b=0\r\n    a = String(a);\r\n    b = String(b);\r\n    // Isn't a number so lowercase the string to properly compare\r\n    if (a.toLowerCase() < b.toLowerCase()) return -1;\r\n    if (a.toLowerCase() > b.toLowerCase()) return 1;\r\n  } else {\r\n    // Parse strings as numbers to compare properly\r\n    if (parseFloat(a) < parseFloat(b)) return -1;\r\n    if (parseFloat(a) > parseFloat(b)) return 1;\r\n  }\r\n\r\n  // equal each other\r\n  return 0;\r\n}\r\n\r\n/**\r\n * creates a shallow copy of the `rows` input and returns the sorted copy. this function\r\n * does not sort the `rows` argument in place\r\n */\r\nexport function sortRows(rows: any[], columns: any[], dirs: SortPropDir[]): any[] {\r\n  if (!rows) return [];\r\n  if (!dirs || !dirs.length || !columns) return [...rows];\r\n\r\n  /**\r\n   * record the row ordering of results from prior sort operations (if applicable)\r\n   * this is necessary to guarantee stable sorting behavior\r\n   */\r\n  const rowToIndexMap = new Map<any, number>();\r\n  rows.forEach((row, index) => rowToIndexMap.set(row, index));\r\n\r\n  const temp = [...rows];\r\n  const cols = columns.reduce((obj, col) => {\r\n    if (col.comparator && typeof col.comparator === 'function') {\r\n      obj[col.prop] = col.comparator;\r\n    }\r\n    return obj;\r\n  }, {});\r\n\r\n  // cache valueGetter and compareFn so that they\r\n  // do not need to be looked-up in the sort function body\r\n  const cachedDirs = dirs.map(dir => {\r\n    const prop = dir.prop;\r\n    return {\r\n      prop,\r\n      dir: dir.dir,\r\n      valueGetter: getterForProp(prop),\r\n      compareFn: cols[prop] || orderByComparator\r\n    };\r\n  });\r\n\r\n  return temp.sort(function (rowA: any, rowB: any) {\r\n    for (const cachedDir of cachedDirs) {\r\n      // Get property and valuegetters for column to be sorted\r\n      const { prop, valueGetter } = cachedDir;\r\n      // Get A and B cell values from rows based on properties of the columns\r\n      const propA = valueGetter(rowA, prop);\r\n      const propB = valueGetter(rowB, prop);\r\n\r\n      // Compare function gets five parameters:\r\n      // Two cell values to be compared as propA and propB\r\n      // Two rows corresponding to the cells as rowA and rowB\r\n      // Direction of the sort for this column as SortDirection\r\n      // Compare can be a standard JS comparison function (a,b) => -1|0|1\r\n      // as additional parameters are silently ignored. The whole row and sort\r\n      // direction enable more complex sort logic.\r\n      const comparison =\r\n        cachedDir.dir !== SortDirection.desc\r\n          ? cachedDir.compareFn(propA, propB, rowA, rowB, cachedDir.dir)\r\n          : -cachedDir.compareFn(propA, propB, rowA, rowB, cachedDir.dir);\r\n\r\n      // Don't return 0 yet in case of needing to sort by next property\r\n      if (comparison !== 0) return comparison;\r\n    }\r\n\r\n    if (!(rowToIndexMap.has(rowA) && rowToIndexMap.has(rowB))) return 0;\r\n\r\n    /**\r\n     * all else being equal, preserve original order of the rows (stable sort)\r\n     */\r\n    return rowToIndexMap.get(rowA) < rowToIndexMap.get(rowB) ? -1 : 1;\r\n  });\r\n}\r\n","import {\r\n  Component,\r\n  Input,\r\n  EventEmitter,\r\n  Output,\r\n  HostBinding,\r\n  HostListener,\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef\r\n} from '@angular/core';\r\nimport { SortType } from '../../types/sort.type';\r\nimport { SelectionType } from '../../types/selection.type';\r\nimport { TableColumn } from '../../types/table-column.type';\r\nimport { nextSortDir } from '../../utils/sort';\r\nimport { SortDirection } from '../../types/sort-direction.type';\r\n\r\n@Component({\r\n  selector: 'datatable-header-cell',\r\n  template: `\r\n    <div class=\"datatable-header-cell-template-wrap\">\r\n      <ng-template\r\n        *ngIf=\"isTarget\"\r\n        [ngTemplateOutlet]=\"targetMarkerTemplate\"\r\n        [ngTemplateOutletContext]=\"targetMarkerContext\"\r\n      >\r\n      </ng-template>\r\n      <label *ngIf=\"isCheckboxable\" class=\"datatable-checkbox\">\r\n        <input type=\"checkbox\" [checked]=\"allRowsSelected\" (change)=\"select.emit(!allRowsSelected)\" />\r\n      </label>\r\n      <span *ngIf=\"!column.headerTemplate\" class=\"datatable-header-cell-wrapper\">\r\n        <span class=\"datatable-header-cell-label draggable\" (click)=\"onSort()\" [innerHTML]=\"name\"> </span>\r\n      </span>\r\n      <ng-template\r\n        *ngIf=\"column.headerTemplate\"\r\n        [ngTemplateOutlet]=\"column.headerTemplate\"\r\n        [ngTemplateOutletContext]=\"cellContext\"\r\n      >\r\n      </ng-template>\r\n      <span (click)=\"onSort()\" [class]=\"sortClass\"> </span>\r\n    </div>\r\n  `,\r\n  host: {\r\n    class: 'datatable-header-cell'\r\n  },\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DataTableHeaderCellComponent {\r\n  @Input() sortType: SortType;\r\n  @Input() sortAscendingIcon: string;\r\n  @Input() sortDescendingIcon: string;\r\n  @Input() sortUnsetIcon: string;\r\n\r\n  @Input() isTarget: boolean;\r\n  @Input() targetMarkerTemplate: any;\r\n  @Input() targetMarkerContext: any;\r\n\r\n  _allRowsSelected: boolean;\r\n\r\n  @Input() set allRowsSelected(value) {\r\n    this._allRowsSelected = value;\r\n    this.cellContext.allRowsSelected = value;\r\n  }\r\n  get allRowsSelected() {\r\n    return this._allRowsSelected;\r\n  }\r\n\r\n  @Input() selectionType: SelectionType;\r\n\r\n  @Input() set column(column: TableColumn) {\r\n    this._column = column;\r\n    this.cellContext.column = column;\r\n    this.cd.markForCheck();\r\n  }\r\n\r\n  get column(): TableColumn {\r\n    return this._column;\r\n  }\r\n\r\n  @HostBinding('style.height.px')\r\n  @Input()\r\n  headerHeight: number;\r\n\r\n  @Input() set sorts(val: any[]) {\r\n    this._sorts = val;\r\n    this.sortDir = this.calcSortDir(val);\r\n    this.cellContext.sortDir = this.sortDir;\r\n    this.sortClass = this.calcSortClass(this.sortDir);\r\n    this.cd.markForCheck();\r\n  }\r\n\r\n  get sorts(): any[] {\r\n    return this._sorts;\r\n  }\r\n\r\n  @Output() sort: EventEmitter<any> = new EventEmitter();\r\n  @Output() select: EventEmitter<any> = new EventEmitter();\r\n  @Output() columnContextmenu = new EventEmitter<{ event: MouseEvent; column: any }>(false);\r\n\r\n  @HostBinding('class')\r\n  get columnCssClasses(): any {\r\n    let cls = 'datatable-header-cell';\r\n\r\n    if (this.column.sortable) cls += ' sortable';\r\n    if (this.column.resizeable) cls += ' resizeable';\r\n    if (this.column.headerClass) {\r\n      if (typeof this.column.headerClass === 'string') {\r\n        cls += ' ' + this.column.headerClass;\r\n      } else if (typeof this.column.headerClass === 'function') {\r\n        const res = this.column.headerClass({\r\n          column: this.column\r\n        });\r\n\r\n        if (typeof res === 'string') {\r\n          cls += res;\r\n        } else if (typeof res === 'object') {\r\n          const keys = Object.keys(res);\r\n          for (const k of keys) {\r\n            if (res[k] === true) cls += ` ${k}`;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    const sortDir = this.sortDir;\r\n    if (sortDir) {\r\n      cls += ` sort-active sort-${sortDir}`;\r\n    }\r\n\r\n    return cls;\r\n  }\r\n\r\n  @HostBinding('attr.title')\r\n  get name(): string {\r\n    // guaranteed to have a value by setColumnDefaults() in column-helper.ts\r\n    return this.column.headerTemplate === undefined ? this.column.name : undefined;\r\n  }\r\n\r\n  @HostBinding('style.minWidth.px')\r\n  get minWidth(): number {\r\n    return this.column.minWidth;\r\n  }\r\n\r\n  @HostBinding('style.maxWidth.px')\r\n  get maxWidth(): number {\r\n    return this.column.maxWidth;\r\n  }\r\n\r\n  @HostBinding('style.width.px')\r\n  get width(): number {\r\n    return this.column.width;\r\n  }\r\n\r\n  get isCheckboxable(): boolean {\r\n    return this.column.checkboxable && this.column.headerCheckboxable && this.selectionType === SelectionType.checkbox;\r\n  }\r\n\r\n  sortFn = this.onSort.bind(this);\r\n  sortClass: string;\r\n  sortDir: SortDirection;\r\n  selectFn = this.select.emit.bind(this.select);\r\n\r\n  cellContext: any;\r\n\r\n  private _column: TableColumn;\r\n  private _sorts: any[];\r\n\r\n  constructor(private cd: ChangeDetectorRef) {\r\n    this.cellContext = {\r\n      column: this.column,\r\n      sortDir: this.sortDir,\r\n      sortFn: this.sortFn,\r\n      allRowsSelected: this.allRowsSelected,\r\n      selectFn: this.selectFn\r\n    };\r\n  }\r\n\r\n  @HostListener('contextmenu', ['$event'])\r\n  onContextmenu($event: MouseEvent): void {\r\n    this.columnContextmenu.emit({ event: $event, column: this.column });\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.sortClass = this.calcSortClass(this.sortDir);\r\n  }\r\n\r\n  calcSortDir(sorts: any[]): any {\r\n    if (sorts && this.column) {\r\n      const sort = sorts.find((s: any) => {\r\n        return s.prop === this.column.prop;\r\n      });\r\n\r\n      if (sort) return sort.dir;\r\n    }\r\n  }\r\n\r\n  onSort(): void {\r\n    if (!this.column.sortable) return;\r\n\r\n    const newValue = nextSortDir(this.sortType, this.sortDir);\r\n    this.sort.emit({\r\n      column: this.column,\r\n      prevValue: this.sortDir,\r\n      newValue\r\n    });\r\n  }\r\n\r\n  calcSortClass(sortDir: SortDirection): string {\r\n    if (!this.cellContext.column.sortable) return;\r\n    if (sortDir === SortDirection.asc) {\r\n      return `sort-btn sort-asc ${this.sortAscendingIcon}`;\r\n    } else if (sortDir === SortDirection.desc) {\r\n      return `sort-btn sort-desc ${this.sortDescendingIcon}`;\r\n    } else {\r\n      return `sort-btn ${this.sortUnsetIcon}`;\r\n    }\r\n  }\r\n}\r\n","import {\r\n  Component,\r\n  Output,\r\n  EventEmitter,\r\n  Input,\r\n  HostBinding,\r\n  ChangeDetectorRef,\r\n  ChangeDetectionStrategy,\r\n  OnDestroy\r\n} from '@angular/core';\r\nimport { columnsByPin, columnGroupWidths, columnsByPinArr } from '../../utils/column';\r\nimport { SortType } from '../../types/sort.type';\r\nimport { SelectionType } from '../../types/selection.type';\r\nimport { DataTableColumnDirective } from '../columns/column.directive';\r\nimport { translateXY } from '../../utils/translate';\r\n\r\n@Component({\r\n  selector: 'datatable-header',\r\n  template: `\r\n    <div\r\n      role=\"row\"\r\n      orderable\r\n      (reorder)=\"onColumnReordered($event)\"\r\n      (targetChanged)=\"onTargetChanged($event)\"\r\n      [style.width.px]=\"_columnGroupWidths.total\"\r\n      class=\"datatable-header-inner\"\r\n    >\r\n      <div\r\n        *ngFor=\"let colGroup of _columnsByPin; trackBy: trackByGroups\"\r\n        [class]=\"'datatable-row-' + colGroup.type\"\r\n        [ngStyle]=\"_styleByGroup[colGroup.type]\"\r\n      >\r\n        <datatable-header-cell\r\n          role=\"columnheader\"\r\n          *ngFor=\"let column of colGroup.columns; trackBy: columnTrackingFn\"\r\n          resizeable\r\n          [resizeEnabled]=\"column.resizeable\"\r\n          (resize)=\"onColumnResized($event, column)\"\r\n          long-press\r\n          [pressModel]=\"column\"\r\n          [pressEnabled]=\"reorderable && column.draggable\"\r\n          (longPressStart)=\"onLongPressStart($event)\"\r\n          (longPressEnd)=\"onLongPressEnd($event)\"\r\n          draggable\r\n          [dragX]=\"reorderable && column.draggable && column.dragging\"\r\n          [dragY]=\"false\"\r\n          [dragModel]=\"column\"\r\n          [dragEventTarget]=\"dragEventTarget\"\r\n          [headerHeight]=\"headerHeight\"\r\n          [isTarget]=\"column.isTarget\"\r\n          [targetMarkerTemplate]=\"targetMarkerTemplate\"\r\n          [targetMarkerContext]=\"column.targetMarkerContext\"\r\n          [column]=\"column\"\r\n          [sortType]=\"sortType\"\r\n          [sorts]=\"sorts\"\r\n          [selectionType]=\"selectionType\"\r\n          [sortAscendingIcon]=\"sortAscendingIcon\"\r\n          [sortDescendingIcon]=\"sortDescendingIcon\"\r\n          [sortUnsetIcon]=\"sortUnsetIcon\"\r\n          [allRowsSelected]=\"allRowsSelected\"\r\n          (sort)=\"onSort($event)\"\r\n          (select)=\"select.emit($event)\"\r\n          (columnContextmenu)=\"columnContextmenu.emit($event)\"\r\n        >\r\n        </datatable-header-cell>\r\n      </div>\r\n    </div>\r\n  `,\r\n  host: {\r\n    class: 'datatable-header'\r\n  },\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DataTableHeaderComponent implements OnDestroy {\r\n  @Input() sortAscendingIcon: any;\r\n  @Input() sortDescendingIcon: any;\r\n  @Input() sortUnsetIcon: any;\r\n  @Input() scrollbarH: boolean;\r\n  @Input() dealsWithGroup: boolean;\r\n  @Input() targetMarkerTemplate: any;\r\n\r\n  targetMarkerContext: any;\r\n\r\n  @Input() set innerWidth(val: number) {\r\n    this._innerWidth = val;\r\n    setTimeout(() => {\r\n      if (this._columns) {\r\n        const colByPin = columnsByPin(this._columns);\r\n        this._columnGroupWidths = columnGroupWidths(colByPin, this._columns);\r\n        this.setStylesByGroup();\r\n      }\r\n    });\r\n  }\r\n\r\n  get innerWidth(): number {\r\n    return this._innerWidth;\r\n  }\r\n\r\n  @Input() sorts: any[];\r\n  @Input() sortType: SortType;\r\n  @Input() allRowsSelected: boolean;\r\n  @Input() selectionType: SelectionType;\r\n  @Input() reorderable: boolean;\r\n\r\n  dragEventTarget: any;\r\n\r\n  @HostBinding('style.height')\r\n  @Input()\r\n  set headerHeight(val: any) {\r\n    if (val !== 'auto') {\r\n      this._headerHeight = `${val}px`;\r\n    } else {\r\n      this._headerHeight = val;\r\n    }\r\n  }\r\n\r\n  get headerHeight(): any {\r\n    return this._headerHeight;\r\n  }\r\n\r\n  @Input() set columns(val: any[]) {\r\n    this._columns = val;\r\n\r\n    const colsByPin = columnsByPin(val);\r\n    this._columnsByPin = columnsByPinArr(val);\r\n    setTimeout(() => {\r\n      this._columnGroupWidths = columnGroupWidths(colsByPin, val);\r\n      this.setStylesByGroup();\r\n    });\r\n  }\r\n\r\n  get columns(): any[] {\r\n    return this._columns;\r\n  }\r\n\r\n  @Input()\r\n  set offsetX(val: number) {\r\n    this._offsetX = val;\r\n    this.setStylesByGroup();\r\n  }\r\n  get offsetX() {\r\n    return this._offsetX;\r\n  }\r\n\r\n  @Output() sort: EventEmitter<any> = new EventEmitter();\r\n  @Output() reorder: EventEmitter<any> = new EventEmitter();\r\n  @Output() resize: EventEmitter<any> = new EventEmitter();\r\n  @Output() select: EventEmitter<any> = new EventEmitter();\r\n  @Output() columnContextmenu = new EventEmitter<{ event: MouseEvent; column: any }>(false);\r\n\r\n  _columnsByPin: any;\r\n  _columnGroupWidths: any = {\r\n    total: 100\r\n  };\r\n  _innerWidth: number;\r\n  _offsetX: number;\r\n  _columns: any[];\r\n  _headerHeight: string;\r\n  _styleByGroup: { [prop: string]: {} } = {\r\n    left: {},\r\n    center: {},\r\n    right: {}\r\n  };\r\n\r\n  private destroyed = false;\r\n\r\n  constructor(private cd: ChangeDetectorRef) {}\r\n\r\n  ngOnDestroy(): void {\r\n    this.destroyed = true;\r\n  }\r\n\r\n  onLongPressStart({ event, model }: { event: any; model: any }) {\r\n    model.dragging = true;\r\n    this.dragEventTarget = event;\r\n  }\r\n\r\n  onLongPressEnd({ event, model }: { event: any; model: any }) {\r\n    this.dragEventTarget = event;\r\n\r\n    // delay resetting so sort can be\r\n    // prevented if we were dragging\r\n    setTimeout(() => {\r\n      // datatable component creates copies from columns on reorder\r\n      // set dragging to false on new objects\r\n      const column = this._columns.find(c => c.$$id === model.$$id);\r\n      if (column) {\r\n        column.dragging = false;\r\n      }\r\n    }, 5);\r\n  }\r\n\r\n  @HostBinding('style.width')\r\n  get headerWidth(): string {\r\n    if (this.scrollbarH) {\r\n      return this.innerWidth + 'px';\r\n    }\r\n\r\n    return '100%';\r\n  }\r\n\r\n  trackByGroups(index: number, colGroup: any): any {\r\n    return colGroup.type;\r\n  }\r\n\r\n  columnTrackingFn(index: number, column: any): any {\r\n    return column.$$id;\r\n  }\r\n\r\n  onColumnResized(width: number, column: DataTableColumnDirective): void {\r\n    if (width <= column.minWidth) {\r\n      width = column.minWidth;\r\n    } else if (width >= column.maxWidth) {\r\n      width = column.maxWidth;\r\n    }\r\n\r\n    this.resize.emit({\r\n      column,\r\n      prevValue: column.width,\r\n      newValue: width\r\n    });\r\n  }\r\n\r\n  onColumnReordered({ prevIndex, newIndex, model }: any): void {\r\n    const column = this.getColumn(newIndex);\r\n    column.isTarget = false;\r\n    column.targetMarkerContext = undefined;\r\n    this.reorder.emit({\r\n      column: model,\r\n      prevValue: prevIndex,\r\n      newValue: newIndex\r\n    });\r\n  }\r\n\r\n  onTargetChanged({ prevIndex, newIndex, initialIndex }: any): void {\r\n    if (prevIndex || prevIndex === 0) {\r\n      const oldColumn = this.getColumn(prevIndex);\r\n      oldColumn.isTarget = false;\r\n      oldColumn.targetMarkerContext = undefined;\r\n    }\r\n    if (newIndex || newIndex === 0) {\r\n      const newColumn = this.getColumn(newIndex);\r\n      newColumn.isTarget = true;\r\n\r\n      if (initialIndex !== newIndex) {\r\n        newColumn.targetMarkerContext = {\r\n          class: 'targetMarker '.concat(initialIndex > newIndex ? 'dragFromRight' : 'dragFromLeft')\r\n        };\r\n      }\r\n    }\r\n  }\r\n\r\n  getColumn(index: number): any {\r\n    const leftColumnCount = this._columnsByPin[0].columns.length;\r\n    if (index < leftColumnCount) {\r\n      return this._columnsByPin[0].columns[index];\r\n    }\r\n\r\n    const centerColumnCount = this._columnsByPin[1].columns.length;\r\n    if (index < leftColumnCount + centerColumnCount) {\r\n      return this._columnsByPin[1].columns[index - leftColumnCount];\r\n    }\r\n\r\n    return this._columnsByPin[2].columns[index - leftColumnCount - centerColumnCount];\r\n  }\r\n\r\n  onSort({ column, prevValue, newValue }: any): void {\r\n    // if we are dragging don't sort!\r\n    if (column.dragging) {\r\n      return;\r\n    }\r\n\r\n    const sorts = this.calcNewSorts(column, prevValue, newValue);\r\n    this.sort.emit({\r\n      sorts,\r\n      column,\r\n      prevValue,\r\n      newValue\r\n    });\r\n  }\r\n\r\n  calcNewSorts(column: any, prevValue: number, newValue: number): any[] {\r\n    let idx = 0;\r\n\r\n    if (!this.sorts) {\r\n      this.sorts = [];\r\n    }\r\n\r\n    const sorts = this.sorts.map((s, i) => {\r\n      s = { ...s };\r\n      if (s.prop === column.prop) {\r\n        idx = i;\r\n      }\r\n      return s;\r\n    });\r\n\r\n    if (newValue === undefined) {\r\n      sorts.splice(idx, 1);\r\n    } else if (prevValue) {\r\n      sorts[idx].dir = newValue;\r\n    } else {\r\n      if (this.sortType === SortType.single) {\r\n        sorts.splice(0, this.sorts.length);\r\n      }\r\n\r\n      sorts.push({ dir: newValue, prop: column.prop });\r\n    }\r\n\r\n    return sorts;\r\n  }\r\n\r\n  setStylesByGroup() {\r\n    this._styleByGroup.left = this.calcStylesByGroup('left');\r\n    this._styleByGroup.center = this.calcStylesByGroup('center');\r\n    this._styleByGroup.right = this.calcStylesByGroup('right');\r\n    if (!this.destroyed) {\r\n      this.cd.detectChanges();\r\n    }\r\n  }\r\n\r\n  calcStylesByGroup(group: string): any {\r\n    const widths = this._columnGroupWidths;\r\n    const offsetX = this.offsetX;\r\n\r\n    const styles = {\r\n      width: `${widths[group]}px`\r\n    };\r\n\r\n    if (group === 'center') {\r\n      translateXY(styles, offsetX * -1, 0);\r\n    } else if (group === 'right') {\r\n      const totalDiff = widths.total - this.innerWidth;\r\n      const offset = totalDiff * -1;\r\n      translateXY(styles, offset, 0);\r\n    }\r\n\r\n    return styles;\r\n  }\r\n}\r\n","/**\r\n * Throttle a function\r\n */\r\nexport function throttle(func: any, wait: number, options?: any) {\r\n  options = options || {};\r\n  let context: any;\r\n  let args: any;\r\n  let result: any;\r\n  let timeout: any = null;\r\n  let previous = 0;\r\n\r\n  function later() {\r\n    previous = options.leading === false ? 0 : +new Date();\r\n    timeout = null;\r\n    result = func.apply(context, args);\r\n  }\r\n\r\n  return function (this: any) {\r\n    const now = +new Date();\r\n\r\n    if (!previous && options.leading === false) {\r\n      previous = now;\r\n    }\r\n\r\n    const remaining = wait - (now - previous);\r\n    context = this;\r\n    args = arguments;\r\n\r\n    if (remaining <= 0) {\r\n      clearTimeout(timeout);\r\n      timeout = null;\r\n      previous = now;\r\n      result = func.apply(context, args);\r\n    } else if (!timeout && options.trailing !== false) {\r\n      timeout = setTimeout(later, remaining);\r\n    }\r\n\r\n    return result;\r\n  };\r\n}\r\n\r\n/**\r\n * Throttle decorator\r\n *\r\n *  class MyClass {\r\n *    throttleable(10)\r\n *    myFn() { ... }\r\n *  }\r\n */\r\nexport function throttleable(duration: number, options?: any) {\r\n  return function innerDecorator(target: any, key: PropertyKey, descriptor: PropertyDescriptor) {\r\n    return {\r\n      configurable: true,\r\n      enumerable: descriptor.enumerable,\r\n      get: function getter() {\r\n        Object.defineProperty(this, key, {\r\n          configurable: true,\r\n          enumerable: descriptor.enumerable,\r\n          value: throttle(descriptor.value, duration, options)\r\n        });\r\n\r\n        return this[key];\r\n      }\r\n    };\r\n  };\r\n}\r\n","import { columnsByPin, columnsTotalWidth } from './column';\r\n\r\n/**\r\n * Calculates the Total Flex Grow\r\n */\r\nexport function getTotalFlexGrow(columns: any[]) {\r\n  let totalFlexGrow = 0;\r\n\r\n  for (const c of columns) {\r\n    totalFlexGrow += c.flexGrow || 0;\r\n  }\r\n\r\n  return totalFlexGrow;\r\n}\r\n\r\n/**\r\n * Adjusts the column widths.\r\n * Inspired by: https://github.com/facebook/fixed-data-table/blob/master/src/FixedDataTableWidthHelper.js\r\n */\r\nexport function adjustColumnWidths(allColumns: any, expectedWidth: any) {\r\n  const columnsWidth = columnsTotalWidth(allColumns);\r\n  const totalFlexGrow = getTotalFlexGrow(allColumns);\r\n  const colsByGroup = columnsByPin(allColumns);\r\n\r\n  if (columnsWidth !== expectedWidth) {\r\n    scaleColumns(colsByGroup, expectedWidth, totalFlexGrow);\r\n  }\r\n}\r\n\r\n/**\r\n * Resizes columns based on the flexGrow property, while respecting manually set widths\r\n */\r\nfunction scaleColumns(colsByGroup: any, maxWidth: any, totalFlexGrow: any) {\r\n  // calculate total width and flexgrow points for coulumns that can be resized\r\n  for (const attr in colsByGroup) {\r\n    for (const column of colsByGroup[attr]) {\r\n      if (!column.canAutoResize) {\r\n        maxWidth -= column.width;\r\n        totalFlexGrow -= column.flexGrow ? column.flexGrow : 0;\r\n      } else {\r\n        column.width = 0;\r\n      }\r\n    }\r\n  }\r\n\r\n  const hasMinWidth = {};\r\n  let remainingWidth = maxWidth;\r\n\r\n  // resize columns until no width is left to be distributed\r\n  do {\r\n    const widthPerFlexPoint = remainingWidth / totalFlexGrow;\r\n    remainingWidth = 0;\r\n\r\n    for (const attr in colsByGroup) {\r\n      for (const column of colsByGroup[attr]) {\r\n        // if the column can be resize and it hasn't reached its minimum width yet\r\n        if (column.canAutoResize && !hasMinWidth[column.prop]) {\r\n          const newWidth = column.width + column.flexGrow * widthPerFlexPoint;\r\n          if (column.minWidth !== undefined && newWidth < column.minWidth) {\r\n            remainingWidth += newWidth - column.minWidth;\r\n            column.width = column.minWidth;\r\n            hasMinWidth[column.prop] = true;\r\n          } else {\r\n            column.width = newWidth;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  } while (remainingWidth !== 0);\r\n}\r\n\r\n/**\r\n * Forces the width of the columns to\r\n * distribute equally but overflowing when necessary\r\n *\r\n * Rules:\r\n *\r\n *  - If combined withs are less than the total width of the grid,\r\n *    proportion the widths given the min / max / normal widths to fill the width.\r\n *\r\n *  - If the combined widths, exceed the total width of the grid,\r\n *    use the standard widths.\r\n *\r\n *  - If a column is resized, it should always use that width\r\n *\r\n *  - The proportional widths should never fall below min size if specified.\r\n *\r\n *  - If the grid starts off small but then becomes greater than the size ( + / - )\r\n *    the width should use the original width; not the newly proportioned widths.\r\n */\r\nexport function forceFillColumnWidths(\r\n  allColumns: any[],\r\n  expectedWidth: number,\r\n  startIdx: number,\r\n  allowBleed: boolean,\r\n  defaultColWidth: number = 300\r\n) {\r\n  const columnsToResize = allColumns.slice(startIdx + 1, allColumns.length).filter(c => {\r\n    return c.canAutoResize !== false;\r\n  });\r\n\r\n  for (const column of columnsToResize) {\r\n    if (!column.$$oldWidth) {\r\n      column.$$oldWidth = column.width;\r\n    }\r\n  }\r\n\r\n  let additionWidthPerColumn = 0;\r\n  let exceedsWindow = false;\r\n  let contentWidth = getContentWidth(allColumns, defaultColWidth);\r\n  let remainingWidth = expectedWidth - contentWidth;\r\n  const columnsProcessed: any[] = [];\r\n  const remainingWidthLimit = 1; // when to stop\r\n\r\n  // This loop takes care of the\r\n  do {\r\n    additionWidthPerColumn = remainingWidth / columnsToResize.length;\r\n    exceedsWindow = contentWidth >= expectedWidth;\r\n\r\n    for (const column of columnsToResize) {\r\n      if (exceedsWindow && allowBleed) {\r\n        column.width = column.$$oldWidth || column.width || defaultColWidth;\r\n      } else {\r\n        const newSize = (column.width || defaultColWidth) + additionWidthPerColumn;\r\n\r\n        if (column.minWidth && newSize < column.minWidth) {\r\n          column.width = column.minWidth;\r\n          columnsProcessed.push(column);\r\n        } else if (column.maxWidth && newSize > column.maxWidth) {\r\n          column.width = column.maxWidth;\r\n          columnsProcessed.push(column);\r\n        } else {\r\n          column.width = newSize;\r\n        }\r\n      }\r\n\r\n      column.width = Math.max(0, column.width);\r\n    }\r\n\r\n    contentWidth = getContentWidth(allColumns);\r\n    remainingWidth = expectedWidth - contentWidth;\r\n    removeProcessedColumns(columnsToResize, columnsProcessed);\r\n  } while (remainingWidth > remainingWidthLimit && columnsToResize.length !== 0);\r\n}\r\n\r\n/**\r\n * Remove the processed columns from the current active columns.\r\n */\r\nfunction removeProcessedColumns(columnsToResize: any[], columnsProcessed: any[]) {\r\n  for (const column of columnsProcessed) {\r\n    const index = columnsToResize.indexOf(column);\r\n    columnsToResize.splice(index, 1);\r\n  }\r\n}\r\n\r\n/**\r\n * Gets the width of the columns\r\n */\r\nfunction getContentWidth(allColumns: any, defaultColWidth: number = 300): number {\r\n  let contentWidth = 0;\r\n\r\n  for (const column of allColumns) {\r\n    contentWidth += column.width || defaultColWidth;\r\n  }\r\n\r\n  return contentWidth;\r\n}\r\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'datatable-pager',\r\n  template: `\r\n    <ul class=\"pager\">\r\n      <li [class.disabled]=\"!canPrevious()\">\r\n        <a role=\"button\" aria-label=\"go to first page\" href=\"javascript:void(0)\" (click)=\"selectPage(1)\">\r\n          <i class=\"{{ pagerPreviousIcon }}\"></i>\r\n        </a>\r\n      </li>\r\n      <li [class.disabled]=\"!canPrevious()\">\r\n        <a role=\"button\" aria-label=\"go to previous page\" href=\"javascript:void(0)\" (click)=\"prevPage()\">\r\n          <i class=\"{{ pagerLeftArrowIcon }}\"></i>\r\n        </a>\r\n      </li>\r\n      <li\r\n        role=\"button\"\r\n        [attr.aria-label]=\"'page ' + pg.number\"\r\n        class=\"pages\"\r\n        *ngFor=\"let pg of pages\"\r\n        [class.active]=\"pg.number === page\"\r\n      >\r\n        <a href=\"javascript:void(0)\" (click)=\"selectPage(pg.number)\">\r\n          {{ pg.text }}\r\n        </a>\r\n      </li>\r\n      <li [class.disabled]=\"!canNext()\">\r\n        <a role=\"button\" aria-label=\"go to next page\" href=\"javascript:void(0)\" (click)=\"nextPage()\">\r\n          <i class=\"{{ pagerRightArrowIcon }}\"></i>\r\n        </a>\r\n      </li>\r\n      <li [class.disabled]=\"!canNext()\">\r\n        <a role=\"button\" aria-label=\"go to last page\" href=\"javascript:void(0)\" (click)=\"selectPage(totalPages)\">\r\n          <i class=\"{{ pagerNextIcon }}\"></i>\r\n        </a>\r\n      </li>\r\n    </ul>\r\n  `,\r\n  host: {\r\n    class: 'datatable-pager'\r\n  },\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DataTablePagerComponent {\r\n  @Input() pagerLeftArrowIcon: string;\r\n  @Input() pagerRightArrowIcon: string;\r\n  @Input() pagerPreviousIcon: string;\r\n  @Input() pagerNextIcon: string;\r\n\r\n  @Input()\r\n  set size(val: number) {\r\n    this._size = val;\r\n    this.pages = this.calcPages();\r\n  }\r\n\r\n  get size(): number {\r\n    return this._size;\r\n  }\r\n\r\n  @Input()\r\n  set count(val: number) {\r\n    this._count = val;\r\n    this.pages = this.calcPages();\r\n  }\r\n\r\n  get count(): number {\r\n    return this._count;\r\n  }\r\n\r\n  @Input()\r\n  set page(val: number) {\r\n    this._page = val;\r\n    this.pages = this.calcPages();\r\n  }\r\n\r\n  get page(): number {\r\n    return this._page;\r\n  }\r\n\r\n  get totalPages(): number {\r\n    const count = this.size < 1 ? 1 : Math.ceil(this.count / this.size);\r\n    return Math.max(count || 0, 1);\r\n  }\r\n\r\n  @Output() change: EventEmitter<any> = new EventEmitter();\r\n\r\n  _count: number = 0;\r\n  _page: number = 1;\r\n  _size: number = 0;\r\n  pages: any;\r\n\r\n  canPrevious(): boolean {\r\n    return this.page > 1;\r\n  }\r\n\r\n  canNext(): boolean {\r\n    return this.page < this.totalPages;\r\n  }\r\n\r\n  prevPage(): void {\r\n    this.selectPage(this.page - 1);\r\n  }\r\n\r\n  nextPage(): void {\r\n    this.selectPage(this.page + 1);\r\n  }\r\n\r\n  selectPage(page: number): void {\r\n    if (page > 0 && page <= this.totalPages && page !== this.page) {\r\n      this.page = page;\r\n\r\n      this.change.emit({\r\n        page\r\n      });\r\n    }\r\n  }\r\n\r\n  calcPages(page?: number): any[] {\r\n    const pages = [];\r\n    let startPage = 1;\r\n    let endPage = this.totalPages;\r\n    const maxSize = 5;\r\n    const isMaxSized = maxSize < this.totalPages;\r\n\r\n    page = page || this.page;\r\n\r\n    if (isMaxSized) {\r\n      startPage = page - Math.floor(maxSize / 2);\r\n      endPage = page + Math.floor(maxSize / 2);\r\n\r\n      if (startPage < 1) {\r\n        startPage = 1;\r\n        endPage = Math.min(startPage + maxSize - 1, this.totalPages);\r\n      } else if (endPage > this.totalPages) {\r\n        startPage = Math.max(this.totalPages - maxSize + 1, 1);\r\n        endPage = this.totalPages;\r\n      }\r\n    }\r\n\r\n    for (let num = startPage; num <= endPage; num++) {\r\n      pages.push({\r\n        number: num,\r\n        text: <string>(<any>num)\r\n      });\r\n    }\r\n\r\n    return pages;\r\n  }\r\n}\r\n","import { Component, Output, EventEmitter, ChangeDetectionStrategy, Input } from '@angular/core';\r\nimport { DatatableFooterDirective } from './footer.directive';\r\n@Component({\r\n  selector: 'datatable-footer',\r\n  template: `\r\n    <div\r\n      class=\"datatable-footer-inner\"\r\n      [ngClass]=\"{ 'selected-count': selectedMessage }\"\r\n      [style.height.px]=\"footerHeight\"\r\n    >\r\n      <ng-template\r\n        *ngIf=\"footerTemplate\"\r\n        [ngTemplateOutlet]=\"footerTemplate.template\"\r\n        [ngTemplateOutletContext]=\"{\r\n          rowCount: rowCount,\r\n          pageSize: pageSize,\r\n          selectedCount: selectedCount,\r\n          curPage: curPage,\r\n          offset: offset\r\n        }\"\r\n      >\r\n      </ng-template>\r\n      <div class=\"page-count\" *ngIf=\"!footerTemplate\">\r\n        <span *ngIf=\"selectedMessage\"> {{ selectedCount?.toLocaleString() }} {{ selectedMessage }} / </span>\r\n        {{ rowCount?.toLocaleString() }} {{ totalMessage }}\r\n      </div>\r\n      <datatable-pager\r\n        *ngIf=\"!footerTemplate\"\r\n        [pagerLeftArrowIcon]=\"pagerLeftArrowIcon\"\r\n        [pagerRightArrowIcon]=\"pagerRightArrowIcon\"\r\n        [pagerPreviousIcon]=\"pagerPreviousIcon\"\r\n        [pagerNextIcon]=\"pagerNextIcon\"\r\n        [page]=\"curPage\"\r\n        [size]=\"pageSize\"\r\n        [count]=\"rowCount\"\r\n        [hidden]=\"!isVisible\"\r\n        (change)=\"page.emit($event)\"\r\n      >\r\n      </datatable-pager>\r\n    </div>\r\n  `,\r\n  host: {\r\n    class: 'datatable-footer'\r\n  },\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DataTableFooterComponent {\r\n  @Input() footerHeight: number;\r\n  @Input() rowCount: number;\r\n  @Input() pageSize: number;\r\n  @Input() offset: number;\r\n  @Input() pagerLeftArrowIcon: string;\r\n  @Input() pagerRightArrowIcon: string;\r\n  @Input() pagerPreviousIcon: string;\r\n  @Input() pagerNextIcon: string;\r\n  @Input() totalMessage: string;\r\n  @Input() footerTemplate: DatatableFooterDirective;\r\n\r\n  @Input() selectedCount: number = 0;\r\n  @Input() selectedMessage: string | boolean;\r\n\r\n  @Output() page: EventEmitter<any> = new EventEmitter();\r\n\r\n  get isVisible(): boolean {\r\n    return this.rowCount / this.pageSize > 1;\r\n  }\r\n\r\n  get curPage(): number {\r\n    return this.offset + 1;\r\n  }\r\n}\r\n","import {\r\n  Component,\r\n  Input,\r\n  Output,\r\n  ElementRef,\r\n  EventEmitter,\r\n  ViewChild,\r\n  HostListener,\r\n  ContentChildren,\r\n  OnInit,\r\n  QueryList,\r\n  AfterViewInit,\r\n  HostBinding,\r\n  ContentChild,\r\n  DoCheck,\r\n  KeyValueDiffers,\r\n  KeyValueDiffer,\r\n  ViewEncapsulation,\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  SkipSelf,\r\n  Optional,\r\n  Inject\r\n} from '@angular/core';\r\n\r\nimport { DatatableGroupHeaderDirective } from './body/body-group-header.directive';\r\n\r\nimport { BehaviorSubject, Subscription } from 'rxjs';\r\nimport { INgxDatatableConfig } from '../ngx-datatable.module';\r\nimport { groupRowsByParents, optionalGetterForProp } from '../utils/tree';\r\nimport { TableColumn } from '../types/table-column.type';\r\nimport { setColumnDefaults, translateTemplates } from '../utils/column-helper';\r\nimport { ColumnMode } from '../types/column-mode.type';\r\nimport { SelectionType } from '../types/selection.type';\r\nimport { SortType } from '../types/sort.type';\r\nimport { ContextmenuType } from '../types/contextmenu.type';\r\nimport { DataTableColumnDirective } from './columns/column.directive';\r\nimport { DatatableRowDetailDirective } from './row-detail/row-detail.directive';\r\nimport { DatatableFooterDirective } from './footer/footer.directive';\r\nimport { DataTableBodyComponent } from './body/body.component';\r\nimport { DataTableHeaderComponent } from './header/header.component';\r\nimport { ScrollbarHelper } from '../services/scrollbar-helper.service';\r\nimport { ColumnChangesService } from '../services/column-changes.service';\r\nimport { DimensionsHelper } from '../services/dimensions-helper.service';\r\nimport { throttleable } from '../utils/throttle';\r\nimport { forceFillColumnWidths, adjustColumnWidths } from '../utils/math';\r\nimport { sortRows } from '../utils/sort';\r\n\r\n@Component({\r\n  selector: 'ngx-datatable',\r\n  templateUrl: './datatable.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  encapsulation: ViewEncapsulation.None,\r\n  styleUrls: ['./datatable.component.scss'],\r\n  host: {\r\n    class: 'ngx-datatable'\r\n  }\r\n})\r\nexport class DatatableComponent implements OnInit, DoCheck, AfterViewInit {\r\n  /**\r\n   * Template for the target marker of drag target columns.\r\n   */\r\n  @Input() targetMarkerTemplate: any;\r\n\r\n  /**\r\n   * Rows that are displayed in the table.\r\n   */\r\n  @Input() set rows(val: any) {\r\n    this._rows = val;\r\n\r\n    if (val) {\r\n      this._internalRows = [...val];\r\n    }\r\n\r\n    // auto sort on new updates\r\n    if (!this.externalSorting) {\r\n      this.sortInternalRows();\r\n    }\r\n\r\n    // auto group by parent on new update\r\n    this._internalRows = groupRowsByParents(\r\n      this._internalRows,\r\n      optionalGetterForProp(this.treeFromRelation),\r\n      optionalGetterForProp(this.treeToRelation)\r\n    );\r\n\r\n    // recalculate sizes/etc\r\n    this.recalculate();\r\n\r\n    if (this._rows && this._groupRowsBy) {\r\n      // If a column has been specified in _groupRowsBy created a new array with the data grouped by that row\r\n      this.groupedRows = this.groupArrayBy(this._rows, this._groupRowsBy);\r\n    }\r\n\r\n    this.cd.markForCheck();\r\n  }\r\n\r\n  /**\r\n   * Gets the rows.\r\n   */\r\n  get rows(): any {\r\n    return this._rows;\r\n  }\r\n\r\n  /**\r\n   * This attribute allows the user to set the name of the column to group the data with\r\n   */\r\n  @Input() set groupRowsBy(val: string) {\r\n    if (val) {\r\n      this._groupRowsBy = val;\r\n      if (this._rows && this._groupRowsBy) {\r\n        // cretes a new array with the data grouped\r\n        this.groupedRows = this.groupArrayBy(this._rows, this._groupRowsBy);\r\n      }\r\n    }\r\n  }\r\n\r\n  get groupRowsBy() {\r\n    return this._groupRowsBy;\r\n  }\r\n\r\n  /**\r\n   * This attribute allows the user to set a grouped array in the following format:\r\n   *  [\r\n   *    {groupid=1} [\r\n   *      {id=1 name=\"test1\"},\r\n   *      {id=2 name=\"test2\"},\r\n   *      {id=3 name=\"test3\"}\r\n   *    ]},\r\n   *    {groupid=2>[\r\n   *      {id=4 name=\"test4\"},\r\n   *      {id=5 name=\"test5\"},\r\n   *      {id=6 name=\"test6\"}\r\n   *    ]}\r\n   *  ]\r\n   */\r\n  @Input() groupedRows: any[];\r\n\r\n  /**\r\n   * Columns to be displayed.\r\n   */\r\n  @Input() set columns(val: TableColumn[]) {\r\n    if (val) {\r\n      this._internalColumns = [...val];\r\n      setColumnDefaults(this._internalColumns);\r\n      this.recalculateColumns();\r\n    }\r\n\r\n    this._columns = val;\r\n  }\r\n\r\n  /**\r\n   * Get the columns.\r\n   */\r\n  get columns(): TableColumn[] {\r\n    return this._columns;\r\n  }\r\n\r\n  /**\r\n   * List of row objects that should be\r\n   * represented as selected in the grid.\r\n   * Default value: `[]`\r\n   */\r\n  @Input() selected: any[] = [];\r\n\r\n  /**\r\n   * Enable vertical scrollbars\r\n   */\r\n  @Input() scrollbarV: boolean = false;\r\n\r\n  /**\r\n   * Enable horz scrollbars\r\n   */\r\n  @Input() scrollbarH: boolean = false;\r\n\r\n  /**\r\n   * The row height; which is necessary\r\n   * to calculate the height for the lazy rendering.\r\n   */\r\n  @Input() rowHeight: number | 'auto' | ((row?: any) => number) = 30;\r\n\r\n  /**\r\n   * Type of column width distribution formula.\r\n   * Example: flex, force, standard\r\n   */\r\n  @Input() columnMode: ColumnMode | keyof typeof ColumnMode = ColumnMode.standard;\r\n\r\n  /**\r\n   * The minimum header height in pixels.\r\n   * Pass a falsey for no header\r\n   */\r\n  @Input() headerHeight: number = 30;\r\n\r\n  /**\r\n   * The minimum footer height in pixels.\r\n   * Pass falsey for no footer\r\n   */\r\n  @Input() footerHeight: number = 0;\r\n\r\n  /**\r\n   * If the table should use external paging\r\n   * otherwise its assumed that all data is preloaded.\r\n   */\r\n  @Input() externalPaging: boolean = false;\r\n\r\n  /**\r\n   * If the table should use external sorting or\r\n   * the built-in basic sorting.\r\n   */\r\n  @Input() externalSorting: boolean = false;\r\n\r\n  /**\r\n   * The page size to be shown.\r\n   * Default value: `undefined`\r\n   */\r\n  @Input() set limit(val: number | undefined) {\r\n    this._limit = val;\r\n\r\n    // recalculate sizes/etc\r\n    this.recalculate();\r\n  }\r\n\r\n  /**\r\n   * Gets the limit.\r\n   */\r\n  get limit(): number | undefined {\r\n    return this._limit;\r\n  }\r\n\r\n  /**\r\n   * The total count of all rows.\r\n   * Default value: `0`\r\n   */\r\n  @Input() set count(val: number) {\r\n    this._count = val;\r\n\r\n    // recalculate sizes/etc\r\n    this.recalculate();\r\n  }\r\n\r\n  /**\r\n   * Gets the count.\r\n   */\r\n  get count(): number {\r\n    return this._count;\r\n  }\r\n\r\n  /**\r\n   * The current offset ( page - 1 ) shown.\r\n   * Default value: `0`\r\n   */\r\n  @Input() set offset(val: number) {\r\n    this._offset = val;\r\n  }\r\n  get offset(): number {\r\n    return Math.max(Math.min(this._offset, Math.ceil(this.rowCount / this.pageSize) - 1), 0);\r\n  }\r\n\r\n  /**\r\n   * Show the linear loading bar.\r\n   * Default value: `false`\r\n   */\r\n  @Input() loadingIndicator: boolean = false;\r\n\r\n  /**\r\n   * Type of row selection. Options are:\r\n   *\r\n   *  - `single`\r\n   *  - `multi`\r\n   *  - `checkbox`\r\n   *  - `multiClick`\r\n   *  - `cell`\r\n   *\r\n   * For no selection pass a `falsey`.\r\n   * Default value: `undefined`\r\n   */\r\n  @Input() selectionType: SelectionType;\r\n\r\n  /**\r\n   * Enable/Disable ability to re-order columns\r\n   * by dragging them.\r\n   */\r\n  @Input() reorderable: boolean = true;\r\n\r\n  /**\r\n   * Swap columns on re-order columns or\r\n   * move them.\r\n   */\r\n  @Input() swapColumns: boolean = true;\r\n\r\n  /**\r\n   * The type of sorting\r\n   */\r\n  @Input() sortType: SortType = SortType.single;\r\n\r\n  /**\r\n   * Array of sorted columns by property and type.\r\n   * Default value: `[]`\r\n   */\r\n  @Input() sorts: any[] = [];\r\n\r\n  /**\r\n   * Css class overrides\r\n   */\r\n  @Input() cssClasses: any = {\r\n    sortAscending: 'datatable-icon-up',\r\n    sortDescending: 'datatable-icon-down',\r\n    sortUnset: 'datatable-icon-sort-unset',\r\n    pagerLeftArrow: 'datatable-icon-left',\r\n    pagerRightArrow: 'datatable-icon-right',\r\n    pagerPrevious: 'datatable-icon-prev',\r\n    pagerNext: 'datatable-icon-skip'\r\n  };\r\n\r\n  /**\r\n   * Message overrides for localization\r\n   *\r\n   * emptyMessage     [default] = 'No data to display'\r\n   * totalMessage     [default] = 'total'\r\n   * selectedMessage  [default] = 'selected'\r\n   */\r\n  @Input() messages: any = {\r\n    // Message to show when array is presented\r\n    // but contains no values\r\n    emptyMessage: 'No data to display',\r\n\r\n    // Footer total message\r\n    totalMessage: 'total',\r\n\r\n    // Footer selected message\r\n    selectedMessage: 'selected'\r\n  };\r\n\r\n  /**\r\n   * Row specific classes.\r\n   * Similar implementation to ngClass.\r\n   *\r\n   *  [rowClass]=\"'first second'\"\r\n   *  [rowClass]=\"{ 'first': true, 'second': true, 'third': false }\"\r\n   */\r\n  @Input() rowClass: any;\r\n\r\n  /**\r\n   * A boolean/function you can use to check whether you want\r\n   * to select a particular row based on a criteria. Example:\r\n   *\r\n   *    (selection) => {\r\n   *      return selection !== 'Ethel Price';\r\n   *    }\r\n   */\r\n  @Input() selectCheck: any;\r\n\r\n  /**\r\n   * A function you can use to check whether you want\r\n   * to show the checkbox for a particular row based on a criteria. Example:\r\n   *\r\n   *    (row, column, value) => {\r\n   *      return row.name !== 'Ethel Price';\r\n   *    }\r\n   */\r\n  @Input() displayCheck: (row: any, column?: any, value?: any) => boolean;\r\n\r\n  /**\r\n   * A boolean you can use to set the detault behaviour of rows and groups\r\n   * whether they will start expanded or not. If ommited the default is NOT expanded.\r\n   *\r\n   */\r\n  @Input() groupExpansionDefault: boolean = false;\r\n\r\n  /**\r\n   * Property to which you can use for custom tracking of rows.\r\n   * Example: 'name'\r\n   */\r\n  @Input() trackByProp: string;\r\n\r\n  /**\r\n   * Property to which you can use for determining select all\r\n   * rows on current page or not.\r\n   *\r\n   * @memberOf DatatableComponent\r\n   */\r\n  @Input() selectAllRowsOnPage = false;\r\n\r\n  /**\r\n   * A flag for row virtualization on / off\r\n   */\r\n  @Input() virtualization: boolean = true;\r\n\r\n  /**\r\n   * Tree from relation\r\n   */\r\n  @Input() treeFromRelation: string;\r\n\r\n  /**\r\n   * Tree to relation\r\n   */\r\n  @Input() treeToRelation: string;\r\n\r\n  /**\r\n   * A flag for switching summary row on / off\r\n   */\r\n  @Input() summaryRow: boolean = false;\r\n\r\n  /**\r\n   * A height of summary row\r\n   */\r\n  @Input() summaryHeight: number = 30;\r\n\r\n  /**\r\n   * A property holds a summary row position: top/bottom\r\n   */\r\n  @Input() summaryPosition: string = 'top';\r\n\r\n  /**\r\n   * Body was scrolled typically in a `scrollbarV:true` scenario.\r\n   */\r\n  @Output() scroll: EventEmitter<any> = new EventEmitter();\r\n\r\n  /**\r\n   * A cell or row was focused via keyboard or mouse click.\r\n   */\r\n  @Output() activate: EventEmitter<any> = new EventEmitter();\r\n\r\n  /**\r\n   * A cell or row was selected.\r\n   */\r\n  @Output() select: EventEmitter<any> = new EventEmitter();\r\n\r\n  /**\r\n   * Column sort was invoked.\r\n   */\r\n  @Output() sort: EventEmitter<any> = new EventEmitter();\r\n\r\n  /**\r\n   * The table was paged either triggered by the pager or the body scroll.\r\n   */\r\n  @Output() page: EventEmitter<any> = new EventEmitter();\r\n\r\n  /**\r\n   * Columns were re-ordered.\r\n   */\r\n  @Output() reorder: EventEmitter<any> = new EventEmitter();\r\n\r\n  /**\r\n   * Column was resized.\r\n   */\r\n  @Output() resize: EventEmitter<any> = new EventEmitter();\r\n\r\n  /**\r\n   * The context menu was invoked on the table.\r\n   * type indicates whether the header or the body was clicked.\r\n   * content contains either the column or the row that was clicked.\r\n   */\r\n  @Output() tableContextmenu = new EventEmitter<{ event: MouseEvent; type: ContextmenuType; content: any }>(false);\r\n\r\n  /**\r\n   * A row was expanded ot collapsed for tree\r\n   */\r\n  @Output() treeAction: EventEmitter<any> = new EventEmitter();\r\n\r\n  /**\r\n   * CSS class applied if the header height if fixed height.\r\n   */\r\n  @HostBinding('class.fixed-header')\r\n  get isFixedHeader(): boolean {\r\n    const headerHeight: number | string = this.headerHeight;\r\n    return typeof headerHeight === 'string' ? <string>headerHeight !== 'auto' : true;\r\n  }\r\n\r\n  /**\r\n   * CSS class applied to the root element if\r\n   * the row heights are fixed heights.\r\n   */\r\n  @HostBinding('class.fixed-row')\r\n  get isFixedRow(): boolean {\r\n    return this.rowHeight !== 'auto';\r\n  }\r\n\r\n  /**\r\n   * CSS class applied to root element if\r\n   * vertical scrolling is enabled.\r\n   */\r\n  @HostBinding('class.scroll-vertical')\r\n  get isVertScroll(): boolean {\r\n    return this.scrollbarV;\r\n  }\r\n\r\n  /**\r\n   * CSS class applied to root element if\r\n   * virtualization is enabled.\r\n   */\r\n  @HostBinding('class.virtualized')\r\n  get isVirtualized(): boolean {\r\n    return this.virtualization;\r\n  }\r\n\r\n  /**\r\n   * CSS class applied to the root element\r\n   * if the horziontal scrolling is enabled.\r\n   */\r\n  @HostBinding('class.scroll-horz')\r\n  get isHorScroll(): boolean {\r\n    return this.scrollbarH;\r\n  }\r\n\r\n  /**\r\n   * CSS class applied to root element is selectable.\r\n   */\r\n  @HostBinding('class.selectable')\r\n  get isSelectable(): boolean {\r\n    return this.selectionType !== undefined;\r\n  }\r\n\r\n  /**\r\n   * CSS class applied to root is checkbox selection.\r\n   */\r\n  @HostBinding('class.checkbox-selection')\r\n  get isCheckboxSelection(): boolean {\r\n    return this.selectionType === SelectionType.checkbox;\r\n  }\r\n\r\n  /**\r\n   * CSS class applied to root if cell selection.\r\n   */\r\n  @HostBinding('class.cell-selection')\r\n  get isCellSelection(): boolean {\r\n    return this.selectionType === SelectionType.cell;\r\n  }\r\n\r\n  /**\r\n   * CSS class applied to root if single select.\r\n   */\r\n  @HostBinding('class.single-selection')\r\n  get isSingleSelection(): boolean {\r\n    return this.selectionType === SelectionType.single;\r\n  }\r\n\r\n  /**\r\n   * CSS class added to root element if mulit select\r\n   */\r\n  @HostBinding('class.multi-selection')\r\n  get isMultiSelection(): boolean {\r\n    return this.selectionType === SelectionType.multi;\r\n  }\r\n\r\n  /**\r\n   * CSS class added to root element if mulit click select\r\n   */\r\n  @HostBinding('class.multi-click-selection')\r\n  get isMultiClickSelection(): boolean {\r\n    return this.selectionType === SelectionType.multiClick;\r\n  }\r\n\r\n  /**\r\n   * Column templates gathered from `ContentChildren`\r\n   * if described in your markup.\r\n   */\r\n  @ContentChildren(DataTableColumnDirective)\r\n  set columnTemplates(val: QueryList<DataTableColumnDirective>) {\r\n    this._columnTemplates = val;\r\n    this.translateColumns(val);\r\n  }\r\n\r\n  /**\r\n   * Returns the column templates.\r\n   */\r\n  get columnTemplates(): QueryList<DataTableColumnDirective> {\r\n    return this._columnTemplates;\r\n  }\r\n\r\n  /**\r\n   * Row Detail templates gathered from the ContentChild\r\n   */\r\n  @ContentChild(DatatableRowDetailDirective)\r\n  rowDetail: DatatableRowDetailDirective;\r\n\r\n  /**\r\n   * Group Header templates gathered from the ContentChild\r\n   */\r\n  @ContentChild(DatatableGroupHeaderDirective)\r\n  groupHeader: DatatableGroupHeaderDirective;\r\n\r\n  /**\r\n   * Footer template gathered from the ContentChild\r\n   */\r\n  @ContentChild(DatatableFooterDirective)\r\n  footer: DatatableFooterDirective;\r\n\r\n  /**\r\n   * Reference to the body component for manually\r\n   * invoking functions on the body.\r\n   */\r\n  @ViewChild(DataTableBodyComponent)\r\n  bodyComponent: DataTableBodyComponent;\r\n\r\n  /**\r\n   * Reference to the header component for manually\r\n   * invoking functions on the header.\r\n   *\r\n   * @memberOf DatatableComponent\r\n   */\r\n  @ViewChild(DataTableHeaderComponent)\r\n  headerComponent: DataTableHeaderComponent;\r\n\r\n  /**\r\n   * Returns if all rows are selected.\r\n   */\r\n  get allRowsSelected(): boolean {\r\n    let allRowsSelected = this.rows && this.selected && this.selected.length === this.rows.length;\r\n\r\n    if (this.bodyComponent && this.selectAllRowsOnPage) {\r\n      const indexes = this.bodyComponent.indexes;\r\n      const rowsOnPage = indexes.last - indexes.first;\r\n      allRowsSelected = this.selected.length === rowsOnPage;\r\n    }\r\n\r\n    return this.selected && this.rows && this.rows.length !== 0 && allRowsSelected;\r\n  }\r\n\r\n  element: HTMLElement;\r\n  _innerWidth: number;\r\n  pageSize: number;\r\n  bodyHeight: number;\r\n  rowCount: number = 0;\r\n  rowDiffer: KeyValueDiffer<{}, {}>;\r\n\r\n  _offsetX = new BehaviorSubject(0);\r\n  _limit: number | undefined;\r\n  _count: number = 0;\r\n  _offset: number = 0;\r\n  _rows: any[];\r\n  _groupRowsBy: string;\r\n  _internalRows: any[];\r\n  _internalColumns: TableColumn[];\r\n  _columns: TableColumn[];\r\n  _columnTemplates: QueryList<DataTableColumnDirective>;\r\n  _subscriptions: Subscription[] = [];\r\n\r\n  constructor(\r\n    @SkipSelf() private scrollbarHelper: ScrollbarHelper,\r\n    @SkipSelf() private dimensionsHelper: DimensionsHelper,\r\n    private cd: ChangeDetectorRef,\r\n    element: ElementRef,\r\n    differs: KeyValueDiffers,\r\n    private columnChangesService: ColumnChangesService,\r\n    @Optional() @Inject('configuration') private configuration: INgxDatatableConfig\r\n  ) {\r\n    // get ref to elm for measuring\r\n    this.element = element.nativeElement;\r\n    this.rowDiffer = differs.find({}).create();\r\n\r\n    // apply global settings from Module.forRoot\r\n    if (this.configuration && this.configuration.messages) {\r\n      this.messages = { ...this.configuration.messages };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Lifecycle hook that is called after data-bound\r\n   * properties of a directive are initialized.\r\n   */\r\n  ngOnInit(): void {\r\n    // need to call this immediatly to size\r\n    // if the table is hidden the visibility\r\n    // listener will invoke this itself upon show\r\n    this.recalculate();\r\n  }\r\n\r\n  /**\r\n   * Lifecycle hook that is called after a component's\r\n   * view has been fully initialized.\r\n   */\r\n  ngAfterViewInit(): void {\r\n    if (!this.externalSorting) {\r\n      this.sortInternalRows();\r\n    }\r\n\r\n    // this has to be done to prevent the change detection\r\n    // tree from freaking out because we are readjusting\r\n    if (typeof requestAnimationFrame === 'undefined') {\r\n      return;\r\n    }\r\n\r\n    requestAnimationFrame(() => {\r\n      this.recalculate();\r\n\r\n      // emit page for virtual server-side kickoff\r\n      if (this.externalPaging && this.scrollbarV) {\r\n        this.page.emit({\r\n          count: this.count,\r\n          pageSize: this.pageSize,\r\n          limit: this.limit,\r\n          offset: 0\r\n        });\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Lifecycle hook that is called after a component's\r\n   * content has been fully initialized.\r\n   */\r\n  ngAfterContentInit() {\r\n    this.columnTemplates.changes.subscribe(v => this.translateColumns(v));\r\n    this.listenForColumnInputChanges();\r\n  }\r\n\r\n  /**\r\n   * This will be used when displaying or selecting rows.\r\n   * when tracking/comparing them, we'll use the value of this fn,\r\n   *\r\n   * (`fn(x) === fn(y)` instead of `x === y`)\r\n   */\r\n  @Input() rowIdentity: (x: any) => any = (x: any) => {\r\n    if (this._groupRowsBy) {\r\n      // each group in groupedRows are stored as {key, value: [rows]},\r\n      // where key is the groupRowsBy index\r\n      return x.key;\r\n    } else {\r\n      return x;\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Translates the templates to the column objects\r\n   */\r\n  translateColumns(val: any) {\r\n    if (val) {\r\n      const arr = val.toArray();\r\n      if (arr.length) {\r\n        this._internalColumns = translateTemplates(arr);\r\n        setColumnDefaults(this._internalColumns);\r\n        this.recalculateColumns();\r\n        this.sortInternalRows();\r\n        this.cd.markForCheck();\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Creates a map with the data grouped by the user choice of grouping index\r\n   *\r\n   * @param originalArray the original array passed via parameter\r\n   * @param groupByIndex  the index of the column to group the data by\r\n   */\r\n  groupArrayBy(originalArray: any, groupBy: any) {\r\n    // create a map to hold groups with their corresponding results\r\n    const map = new Map();\r\n    let i: number = 0;\r\n\r\n    originalArray.forEach((item: any) => {\r\n      const key = item[groupBy];\r\n      if (!map.has(key)) {\r\n        map.set(key, [item]);\r\n      } else {\r\n        map.get(key).push(item);\r\n      }\r\n      i++;\r\n    });\r\n\r\n    const addGroup = (key: any, value: any) => {\r\n      return { key, value };\r\n    };\r\n\r\n    // convert map back to a simple array of objects\r\n    return Array.from(map, x => addGroup(x[0], x[1]));\r\n  }\r\n\r\n  /*\r\n   * Lifecycle hook that is called when Angular dirty checks a directive.\r\n   */\r\n  ngDoCheck(): void {\r\n    if (this.rowDiffer.diff(this.rows)) {\r\n      if (!this.externalSorting) {\r\n        this.sortInternalRows();\r\n      } else {\r\n        this._internalRows = [...this.rows];\r\n      }\r\n\r\n      // auto group by parent on new update\r\n      this._internalRows = groupRowsByParents(\r\n        this._internalRows,\r\n        optionalGetterForProp(this.treeFromRelation),\r\n        optionalGetterForProp(this.treeToRelation)\r\n      );\r\n\r\n      this.recalculatePages();\r\n      this.cd.markForCheck();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Recalc's the sizes of the grid.\r\n   *\r\n   * Updated automatically on changes to:\r\n   *\r\n   *  - Columns\r\n   *  - Rows\r\n   *  - Paging related\r\n   *\r\n   * Also can be manually invoked or upon window resize.\r\n   */\r\n  recalculate(): void {\r\n    this.recalculateDims();\r\n    this.recalculateColumns();\r\n    this.cd.markForCheck();\r\n  }\r\n\r\n  /**\r\n   * Window resize handler to update sizes.\r\n   */\r\n  @HostListener('window:resize')\r\n  @throttleable(5)\r\n  onWindowResize(): void {\r\n    this.recalculate();\r\n  }\r\n\r\n  /**\r\n   * Recalulcates the column widths based on column width\r\n   * distribution mode and scrollbar offsets.\r\n   */\r\n  recalculateColumns(\r\n    columns: any[] = this._internalColumns,\r\n    forceIdx: number = -1,\r\n    allowBleed: boolean = this.scrollbarH\r\n  ): any[] | undefined {\r\n    if (!columns) return undefined;\r\n\r\n    let width = this._innerWidth;\r\n    if (this.scrollbarV) {\r\n      width = width - this.scrollbarHelper.width;\r\n    }\r\n\r\n    if (this.columnMode === ColumnMode.force) {\r\n      forceFillColumnWidths(columns, width, forceIdx, allowBleed);\r\n    } else if (this.columnMode === ColumnMode.flex) {\r\n      adjustColumnWidths(columns, width);\r\n    }\r\n\r\n    return columns;\r\n  }\r\n\r\n  /**\r\n   * Recalculates the dimensions of the table size.\r\n   * Internally calls the page size and row count calcs too.\r\n   *\r\n   */\r\n  recalculateDims(): void {\r\n    const dims = this.dimensionsHelper.getDimensions(this.element);\r\n    this._innerWidth = Math.floor(dims.width);\r\n\r\n    if (this.scrollbarV) {\r\n      let height = dims.height;\r\n      if (this.headerHeight) height = height - this.headerHeight;\r\n      if (this.footerHeight) height = height - this.footerHeight;\r\n      this.bodyHeight = height;\r\n    }\r\n\r\n    this.recalculatePages();\r\n  }\r\n\r\n  /**\r\n   * Recalculates the pages after a update.\r\n   */\r\n  recalculatePages(): void {\r\n    this.pageSize = this.calcPageSize();\r\n    this.rowCount = this.calcRowCount();\r\n  }\r\n\r\n  /**\r\n   * Body triggered a page event.\r\n   */\r\n  onBodyPage({ offset }: any): void {\r\n    // Avoid pagination caming from body events like scroll when the table\r\n    // has no virtualization and the external paging is enable.\r\n    // This means, let's the developer handle pagination by my him(her) self\r\n    if (this.externalPaging && !this.virtualization) {\r\n      return;\r\n    }\r\n\r\n    this.offset = offset;\r\n\r\n    this.page.emit({\r\n      count: this.count,\r\n      pageSize: this.pageSize,\r\n      limit: this.limit,\r\n      offset: this.offset\r\n    });\r\n  }\r\n\r\n  /**\r\n   * The body triggered a scroll event.\r\n   */\r\n  onBodyScroll(event: MouseEvent): void {\r\n    this._offsetX.next(event.offsetX);\r\n    this.scroll.emit(event);\r\n    this.cd.detectChanges();\r\n  }\r\n\r\n  /**\r\n   * The footer triggered a page event.\r\n   */\r\n  onFooterPage(event: any) {\r\n    this.offset = event.page - 1;\r\n    this.bodyComponent.updateOffsetY(this.offset);\r\n\r\n    this.page.emit({\r\n      count: this.count,\r\n      pageSize: this.pageSize,\r\n      limit: this.limit,\r\n      offset: this.offset\r\n    });\r\n\r\n    if (this.selectAllRowsOnPage) {\r\n      this.selected = [];\r\n      this.select.emit({\r\n        selected: this.selected\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Recalculates the sizes of the page\r\n   */\r\n  calcPageSize(val: any[] = this.rows): number {\r\n    // Keep the page size constant even if the row has been expanded.\r\n    // This is because an expanded row is still considered to be a child of\r\n    // the original row.  Hence calculation would use rowHeight only.\r\n    if (this.scrollbarV && this.virtualization) {\r\n      const size = Math.ceil(this.bodyHeight / (this.rowHeight as number));\r\n      return Math.max(size, 0);\r\n    }\r\n\r\n    // if limit is passed, we are paging\r\n    if (this.limit !== undefined) {\r\n      return this.limit;\r\n    }\r\n\r\n    // otherwise use row length\r\n    if (val) {\r\n      return val.length;\r\n    }\r\n\r\n    // other empty :(\r\n    return 0;\r\n  }\r\n\r\n  /**\r\n   * Calculates the row count.\r\n   */\r\n  calcRowCount(val: any[] = this.rows): number {\r\n    if (!this.externalPaging) {\r\n      if (!val) return 0;\r\n\r\n      if (this.groupedRows) {\r\n        return this.groupedRows.length;\r\n      } else if (this.treeFromRelation != null && this.treeToRelation != null) {\r\n        return this._internalRows.length;\r\n      } else {\r\n        return val.length;\r\n      }\r\n    }\r\n\r\n    return this.count;\r\n  }\r\n\r\n  /**\r\n   * The header triggered a contextmenu event.\r\n   */\r\n  onColumnContextmenu({ event, column }: any): void {\r\n    this.tableContextmenu.emit({ event, type: ContextmenuType.header, content: column });\r\n  }\r\n\r\n  /**\r\n   * The body triggered a contextmenu event.\r\n   */\r\n  onRowContextmenu({ event, row }: any): void {\r\n    this.tableContextmenu.emit({ event, type: ContextmenuType.body, content: row });\r\n  }\r\n\r\n  /**\r\n   * The header triggered a column resize event.\r\n   */\r\n  onColumnResize({ column, newValue }: any): void {\r\n    /* Safari/iOS 10.2 workaround */\r\n    if (column === undefined) {\r\n      return;\r\n    }\r\n\r\n    let idx: number;\r\n    const cols = this._internalColumns.map((c, i) => {\r\n      c = { ...c };\r\n\r\n      if (c.$$id === column.$$id) {\r\n        idx = i;\r\n        c.width = newValue;\r\n\r\n        // set this so we can force the column\r\n        // width distribution to be to this value\r\n        c.$$oldWidth = newValue;\r\n      }\r\n\r\n      return c;\r\n    });\r\n\r\n    this.recalculateColumns(cols, idx);\r\n    this._internalColumns = cols;\r\n\r\n    this.resize.emit({\r\n      column,\r\n      newValue\r\n    });\r\n  }\r\n\r\n  /**\r\n   * The header triggered a column re-order event.\r\n   */\r\n  onColumnReorder({ column, newValue, prevValue }: any): void {\r\n    const cols = this._internalColumns.map(c => {\r\n      return { ...c };\r\n    });\r\n\r\n    if (this.swapColumns) {\r\n      const prevCol = cols[newValue];\r\n      cols[newValue] = column;\r\n      cols[prevValue] = prevCol;\r\n    } else {\r\n      if (newValue > prevValue) {\r\n        const movedCol = cols[prevValue];\r\n        for (let i = prevValue; i < newValue; i++) {\r\n          cols[i] = cols[i + 1];\r\n        }\r\n        cols[newValue] = movedCol;\r\n      } else {\r\n        const movedCol = cols[prevValue];\r\n        for (let i = prevValue; i > newValue; i--) {\r\n          cols[i] = cols[i - 1];\r\n        }\r\n        cols[newValue] = movedCol;\r\n      }\r\n    }\r\n\r\n    this._internalColumns = cols;\r\n\r\n    this.reorder.emit({\r\n      column,\r\n      newValue,\r\n      prevValue\r\n    });\r\n  }\r\n\r\n  /**\r\n   * The header triggered a column sort event.\r\n   */\r\n  onColumnSort(event: any): void {\r\n    // clean selected rows\r\n    if (this.selectAllRowsOnPage) {\r\n      this.selected = [];\r\n      this.select.emit({\r\n        selected: this.selected\r\n      });\r\n    }\r\n\r\n    this.sorts = event.sorts;\r\n\r\n    // this could be optimized better since it will resort\r\n    // the rows again on the 'push' detection...\r\n    if (this.externalSorting === false) {\r\n      // don't use normal setter so we don't resort\r\n      this.sortInternalRows();\r\n    }\r\n\r\n    // auto group by parent on new update\r\n    this._internalRows = groupRowsByParents(\r\n      this._internalRows,\r\n      optionalGetterForProp(this.treeFromRelation),\r\n      optionalGetterForProp(this.treeToRelation)\r\n    );\r\n\r\n    // Always go to first page when sorting to see the newly sorted data\r\n    this.offset = 0;\r\n    this.bodyComponent.updateOffsetY(this.offset);\r\n    this.sort.emit(event);\r\n  }\r\n\r\n  /**\r\n   * Toggle all row selection\r\n   */\r\n  onHeaderSelect(event: any): void {\r\n    if (this.bodyComponent && this.selectAllRowsOnPage) {\r\n      // before we splice, chk if we currently have all selected\r\n      const first = this.bodyComponent.indexes.first;\r\n      const last = this.bodyComponent.indexes.last;\r\n      const allSelected = this.selected.length === last - first;\r\n\r\n      // remove all existing either way\r\n      this.selected = [];\r\n\r\n      // do the opposite here\r\n      if (!allSelected) {\r\n        this.selected.push(...this._internalRows.slice(first, last));\r\n      }\r\n    } else {\r\n      // before we splice, chk if we currently have all selected\r\n      const allSelected = this.selected.length === this.rows.length;\r\n      // remove all existing either way\r\n      this.selected = [];\r\n      // do the opposite here\r\n      if (!allSelected) {\r\n        this.selected.push(...this.rows);\r\n      }\r\n    }\r\n\r\n    this.select.emit({\r\n      selected: this.selected\r\n    });\r\n  }\r\n\r\n  /**\r\n   * A row was selected from body\r\n   */\r\n  onBodySelect(event: any): void {\r\n    this.select.emit(event);\r\n  }\r\n\r\n  /**\r\n   * A row was expanded or collapsed for tree\r\n   */\r\n  onTreeAction(event: any) {\r\n    const row = event.row;\r\n    // TODO: For duplicated items this will not work\r\n    const rowIndex = this._rows.findIndex(r => r[this.treeToRelation] === event.row[this.treeToRelation]);\r\n    this.treeAction.emit({ row, rowIndex });\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._subscriptions.forEach(subscription => subscription.unsubscribe());\r\n  }\r\n\r\n  /**\r\n   * listen for changes to input bindings of all DataTableColumnDirective and\r\n   * trigger the columnTemplates.changes observable to emit\r\n   */\r\n  private listenForColumnInputChanges(): void {\r\n    this._subscriptions.push(\r\n      this.columnChangesService.columnInputChanges$.subscribe(() => {\r\n        if (this.columnTemplates) {\r\n          this.columnTemplates.notifyOnChanges();\r\n        }\r\n      })\r\n    );\r\n  }\r\n\r\n  private sortInternalRows(): void {\r\n    this._internalRows = sortRows(this._internalRows, this._internalColumns, this.sorts);\r\n  }\r\n}\r\n","<div role=\"table\" visibilityObserver (visible)=\"recalculate()\">\r\n  <datatable-header\r\n    role=\"rowgroup\"\r\n    *ngIf=\"headerHeight\"\r\n    [sorts]=\"sorts\"\r\n    [sortType]=\"sortType\"\r\n    [scrollbarH]=\"scrollbarH\"\r\n    [innerWidth]=\"_innerWidth\"\r\n    [offsetX]=\"_offsetX | async\"\r\n    [dealsWithGroup]=\"groupedRows !== undefined\"\r\n    [columns]=\"_internalColumns\"\r\n    [headerHeight]=\"headerHeight\"\r\n    [reorderable]=\"reorderable\"\r\n    [targetMarkerTemplate]=\"targetMarkerTemplate\"\r\n    [sortAscendingIcon]=\"cssClasses.sortAscending\"\r\n    [sortDescendingIcon]=\"cssClasses.sortDescending\"\r\n    [sortUnsetIcon]=\"cssClasses.sortUnset\"\r\n    [allRowsSelected]=\"allRowsSelected\"\r\n    [selectionType]=\"selectionType\"\r\n    (sort)=\"onColumnSort($event)\"\r\n    (resize)=\"onColumnResize($event)\"\r\n    (reorder)=\"onColumnReorder($event)\"\r\n    (select)=\"onHeaderSelect($event)\"\r\n    (columnContextmenu)=\"onColumnContextmenu($event)\"\r\n  >\r\n  </datatable-header>\r\n  <datatable-body\r\n    role=\"rowgroup\"\r\n    [groupRowsBy]=\"groupRowsBy\"\r\n    [groupedRows]=\"groupedRows\"\r\n    [rows]=\"_internalRows\"\r\n    [groupExpansionDefault]=\"groupExpansionDefault\"\r\n    [scrollbarV]=\"scrollbarV\"\r\n    [scrollbarH]=\"scrollbarH\"\r\n    [virtualization]=\"virtualization\"\r\n    [loadingIndicator]=\"loadingIndicator\"\r\n    [externalPaging]=\"externalPaging\"\r\n    [rowHeight]=\"rowHeight\"\r\n    [rowCount]=\"rowCount\"\r\n    [offset]=\"offset\"\r\n    [trackByProp]=\"trackByProp\"\r\n    [columns]=\"_internalColumns\"\r\n    [pageSize]=\"pageSize\"\r\n    [offsetX]=\"_offsetX | async\"\r\n    [rowDetail]=\"rowDetail\"\r\n    [groupHeader]=\"groupHeader\"\r\n    [selected]=\"selected\"\r\n    [innerWidth]=\"_innerWidth\"\r\n    [bodyHeight]=\"bodyHeight\"\r\n    [selectionType]=\"selectionType\"\r\n    [emptyMessage]=\"messages.emptyMessage\"\r\n    [rowIdentity]=\"rowIdentity\"\r\n    [rowClass]=\"rowClass\"\r\n    [selectCheck]=\"selectCheck\"\r\n    [displayCheck]=\"displayCheck\"\r\n    [summaryRow]=\"summaryRow\"\r\n    [summaryHeight]=\"summaryHeight\"\r\n    [summaryPosition]=\"summaryPosition\"\r\n    (page)=\"onBodyPage($event)\"\r\n    (activate)=\"activate.emit($event)\"\r\n    (rowContextmenu)=\"onRowContextmenu($event)\"\r\n    (select)=\"onBodySelect($event)\"\r\n    (scroll)=\"onBodyScroll($event)\"\r\n    (treeAction)=\"onTreeAction($event)\"\r\n  >\r\n  </datatable-body>\r\n  <datatable-footer\r\n    *ngIf=\"footerHeight\"\r\n    [rowCount]=\"rowCount\"\r\n    [pageSize]=\"pageSize\"\r\n    [offset]=\"offset\"\r\n    [footerHeight]=\"footerHeight\"\r\n    [footerTemplate]=\"footer\"\r\n    [totalMessage]=\"messages.totalMessage\"\r\n    [pagerLeftArrowIcon]=\"cssClasses.pagerLeftArrow\"\r\n    [pagerRightArrowIcon]=\"cssClasses.pagerRightArrow\"\r\n    [pagerPreviousIcon]=\"cssClasses.pagerPrevious\"\r\n    [selectedCount]=\"selected.length\"\r\n    [selectedMessage]=\"!!selectionType && messages.selectedMessage\"\r\n    [pagerNextIcon]=\"cssClasses.pagerNext\"\r\n    (page)=\"onFooterPage($event)\"\r\n  >\r\n  </datatable-footer>\r\n</div>\r\n","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ScrollbarHelper } from './services/scrollbar-helper.service';\r\nimport { DimensionsHelper } from './services/dimensions-helper.service';\r\nimport { ColumnChangesService } from './services/column-changes.service';\r\nimport { DataTableFooterTemplateDirective } from './components/footer/footer-template.directive';\r\nimport { VisibilityDirective } from './directives/visibility.directive';\r\nimport { DraggableDirective } from './directives/draggable.directive';\r\nimport { ResizeableDirective } from './directives/resizeable.directive';\r\nimport { OrderableDirective } from './directives/orderable.directive';\r\nimport { LongPressDirective } from './directives/long-press.directive';\r\nimport { ScrollerComponent } from './components/body/scroller.component';\r\nimport { DatatableComponent } from './components/datatable.component';\r\nimport { DataTableColumnDirective } from './components/columns/column.directive';\r\nimport { DataTableHeaderComponent } from './components/header/header.component';\r\nimport { DataTableHeaderCellComponent } from './components/header/header-cell.component';\r\nimport { DataTableBodyComponent } from './components/body/body.component';\r\nimport { DataTableFooterComponent } from './components/footer/footer.component';\r\nimport { DataTablePagerComponent } from './components/footer/pager.component';\r\nimport { ProgressBarComponent } from './components/body/progress-bar.component';\r\nimport { DataTableBodyRowComponent } from './components/body/body-row.component';\r\nimport { DataTableRowWrapperComponent } from './components/body/body-row-wrapper.component';\r\nimport { DatatableRowDetailDirective } from './components/row-detail/row-detail.directive';\r\nimport { DatatableGroupHeaderDirective } from './components/body/body-group-header.directive';\r\nimport { DatatableRowDetailTemplateDirective } from './components/row-detail/row-detail-template.directive';\r\nimport { DataTableBodyCellComponent } from './components/body/body-cell.component';\r\nimport { DataTableSelectionComponent } from './components/body/selection.component';\r\nimport { DataTableColumnHeaderDirective } from './components/columns/column-header.directive';\r\nimport { DataTableColumnCellDirective } from './components/columns/column-cell.directive';\r\nimport { DataTableColumnCellTreeToggle } from './components/columns/tree.directive';\r\nimport { DatatableFooterDirective } from './components/footer/footer.directive';\r\nimport { DatatableGroupHeaderTemplateDirective } from './components/body/body-group-header-template.directive';\r\nimport { DataTableSummaryRowComponent } from './components/body/summary/summary-row.component';\r\n\r\n@NgModule({\r\n  imports: [CommonModule],\r\n  providers: [ScrollbarHelper, DimensionsHelper, ColumnChangesService],\r\n  declarations: [\r\n    DataTableFooterTemplateDirective,\r\n    VisibilityDirective,\r\n    DraggableDirective,\r\n    ResizeableDirective,\r\n    OrderableDirective,\r\n    LongPressDirective,\r\n    ScrollerComponent,\r\n    DatatableComponent,\r\n    DataTableColumnDirective,\r\n    DataTableHeaderComponent,\r\n    DataTableHeaderCellComponent,\r\n    DataTableBodyComponent,\r\n    DataTableFooterComponent,\r\n    DataTablePagerComponent,\r\n    ProgressBarComponent,\r\n    DataTableBodyRowComponent,\r\n    DataTableRowWrapperComponent,\r\n    DatatableRowDetailDirective,\r\n    DatatableGroupHeaderDirective,\r\n    DatatableRowDetailTemplateDirective,\r\n    DataTableBodyCellComponent,\r\n    DataTableSelectionComponent,\r\n    DataTableColumnHeaderDirective,\r\n    DataTableColumnCellDirective,\r\n    DataTableColumnCellTreeToggle,\r\n    DatatableFooterDirective,\r\n    DatatableGroupHeaderTemplateDirective,\r\n    DataTableSummaryRowComponent\r\n  ],\r\n  exports: [\r\n    DatatableComponent,\r\n    DatatableRowDetailDirective,\r\n    DatatableGroupHeaderDirective,\r\n    DatatableRowDetailTemplateDirective,\r\n    DataTableColumnDirective,\r\n    DataTableColumnHeaderDirective,\r\n    DataTableColumnCellDirective,\r\n    DataTableColumnCellTreeToggle,\r\n    DataTableFooterTemplateDirective,\r\n    DatatableFooterDirective,\r\n    DataTablePagerComponent,\r\n    DatatableGroupHeaderTemplateDirective\r\n  ]\r\n})\r\nexport class NgxDatatableModule {\r\n  /**\r\n   * Configure global configuration via INgxDatatableConfig\r\n   * @param configuration\r\n   */\r\n  static forRoot(configuration: INgxDatatableConfig): ModuleWithProviders<NgxDatatableModule> {\r\n    return {\r\n      ngModule: NgxDatatableModule,\r\n      providers: [{ provide: 'configuration', useValue: configuration }]\r\n    };\r\n  }\r\n}\r\n\r\n/**\r\n * Interface definition for INgxDatatableConfig global configuration\r\n */\r\nexport interface INgxDatatableConfig {\r\n  messages: {\r\n    emptyMessage: string; // Message to show when array is presented, but contains no values\r\n    totalMessage: string; // Footer total message\r\n    selectedMessage: string; // Footer selected message\r\n  };\r\n}\r\n","export enum ClickType {\r\n  single = 'single',\r\n  double = 'double'\r\n}\r\n","if (typeof document !== 'undefined' && !document.elementsFromPoint) {\r\n  document.elementsFromPoint = elementsFromPoint;\r\n}\r\n\r\n/*tslint:disable*/\r\n/**\r\n * Polyfill for `elementsFromPoint`\r\n *\r\n * https://developer.mozilla.org/en-US/docs/Web/API/Document/elementsFromPoint\r\n * https://gist.github.com/iddan/54d5d9e58311b0495a91bf06de661380\r\n * https://gist.github.com/oslego/7265412\r\n */\r\nexport function elementsFromPoint(x: number, y: number) {\r\n  const elements = [];\r\n  const previousPointerEvents = [];\r\n  let current: any; // TODO: window.getComputedStyle should be used with inferred type (Element)\r\n  let i;\r\n  let d;\r\n\r\n  //if (document === undefined) return elements;\r\n\r\n  // get all elements via elementFromPoint, and remove them from hit-testing in order\r\n  while ((current = document.elementFromPoint(x, y)) && elements.indexOf(current) === -1 && current != null) {\r\n    // push the element and its current style\r\n    elements.push(current);\r\n    previousPointerEvents.push({\r\n      value: current.style.getPropertyValue('pointer-events'),\r\n      priority: current.style.getPropertyPriority('pointer-events')\r\n    });\r\n\r\n    // add \"pointer-events: none\", to get to the underlying element\r\n    current.style.setProperty('pointer-events', 'none', 'important');\r\n  }\r\n\r\n  // restore the previous pointer-events values\r\n  for (i = previousPointerEvents.length; (d = previousPointerEvents[--i]); ) {\r\n    elements[i].style.setProperty('pointer-events', d.value ? d.value : '', d.priority);\r\n  }\r\n\r\n  // return our results\r\n  return elements;\r\n}\r\n/*tslint:enable*/\r\n","/*\r\n * Public API Surface of ngx-datatable\r\n */\r\n\r\n// components\r\nexport * from './lib/ngx-datatable.module';\r\nexport * from './lib/components/datatable.component';\r\nexport * from './lib/components/header/header.component';\r\nexport * from './lib/components/header/header-cell.component';\r\nexport * from './lib/components/body/body.component';\r\nexport * from './lib/components/body/body-cell.component';\r\nexport * from './lib/components/body/body-row.component';\r\nexport * from './lib/components/body/progress-bar.component';\r\nexport * from './lib/components/body/scroller.component';\r\nexport * from './lib/components/body/body-row-wrapper.component';\r\nexport * from './lib/components/body/selection.component';\r\nexport * from './lib/components/body/body-group-header.directive';\r\nexport * from './lib/components/body/body-group-header-template.directive';\r\nexport * from './lib/components/body/summary/summary-row.component';\r\nexport * from './lib/components/footer/footer.component';\r\nexport * from './lib/components/footer/pager.component';\r\nexport * from './lib/components/footer/footer.directive';\r\nexport * from './lib/components/footer/footer-template.directive';\r\nexport * from './lib/components/columns/column.directive';\r\nexport * from './lib/components/columns/column-header.directive';\r\nexport * from './lib/components/columns/column-cell.directive';\r\nexport * from './lib/components/columns/tree.directive';\r\nexport * from './lib/components/row-detail/row-detail.directive';\r\nexport * from './lib/components/row-detail/row-detail-template.directive';\r\n\r\n// directives\r\nexport * from './lib/directives/draggable.directive';\r\nexport * from './lib/directives/long-press.directive';\r\nexport * from './lib/directives/orderable.directive';\r\nexport * from './lib/directives/resizeable.directive';\r\nexport * from './lib/directives/visibility.directive';\r\n\r\n// services\r\nexport * from './lib/services/scrollbar-helper.service';\r\nexport * from './lib/services/dimensions-helper.service';\r\nexport * from './lib/services/column-changes.service';\r\n\r\n// types\r\nexport * from './lib/types/column-mode.type';\r\nexport * from './lib/types/sort.type';\r\nexport * from './lib/types/sort-direction.type';\r\nexport * from './lib/types/selection.type';\r\nexport * from './lib/types/click.type';\r\nexport * from './lib/types/table-column.type';\r\nexport * from './lib/types/sort-prop-dir.type';\r\nexport * from './lib/types/contextmenu.type';\r\n\r\n// utils\r\nexport * from './lib/utils/id';\r\nexport * from './lib/utils/column';\r\nexport * from './lib/utils/column-prop-getters';\r\nexport * from './lib/utils/camel-case';\r\nexport * from './lib/utils/keys';\r\nexport * from './lib/utils/math';\r\nexport * from './lib/utils/prefixes';\r\nexport * from './lib/utils/selection';\r\nexport * from './lib/utils/translate';\r\nexport * from './lib/utils/throttle';\r\nexport * from './lib/utils/sort';\r\nexport * from './lib/utils/row-height-cache';\r\nexport * from './lib/utils/column-helper';\r\nexport * from './lib/utils/elm-from-point';\r\nexport * from './lib/utils/tree';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;AAGA;;;;MAKa,eAAe;IAG1B,YAAsC,QAAa;QAAb,aAAQ,GAAR,QAAQ,CAAK;QAFnD,UAAK,GAAW,IAAI,CAAC,QAAQ,EAAE,CAAC;KAEuB;IAEvD,QAAQ;QACN,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACjD,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;QAClC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;QAC5B,KAAK,CAAC,KAAK,CAAC,eAAe,GAAG,WAAW,CAAC;QAC1C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEtC,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC;QACxC,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEhC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACjD,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;QAC3B,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEzB,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CAAC;QAC1C,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEpC,OAAO,aAAa,GAAG,eAAe,CAAC;KACxC;;4GAvBU,eAAe,kBAGN,QAAQ;gHAHjB,eAAe;2FAAf,eAAe;kBAD3B,UAAU;;;8BAII,MAAM;+BAAC,QAAQ;;;;ACT9B;;;;MAKa,gBAAgB;IAC3B,aAAa,CAAC,OAAgB;QAC5B,OAAO,OAAO,CAAC,qBAAqB,EAAE,CAAC;KACxC;;6GAHU,gBAAgB;iHAAhB,gBAAgB;2FAAhB,gBAAgB;kBAD5B,UAAU;;;ACFX;;;;MAKa,oBAAoB;IADjC;QAEU,uBAAkB,GAAG,IAAI,OAAO,EAAQ,CAAC;KASlD;IAPC,IAAI,mBAAmB;QACrB,OAAO,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;KAC/C;IAED,aAAa;QACX,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;KAChC;;iHATU,oBAAoB;qHAApB,oBAAoB;2FAApB,oBAAoB;kBADhC,UAAU;;;MCLE,gCAAgC;IAC3C,YAAmB,QAA0B;QAA1B,aAAQ,GAAR,QAAQ,CAAkB;KAAI;;6HADtC,gCAAgC;iHAAhC,gCAAgC;2FAAhC,gCAAgC;kBAD5C,SAAS;mBAAC,EAAE,QAAQ,EAAE,iCAAiC,EAAE;;;ACA1D;;;;;;;;;;;MAYa,mBAAmB;IAQ9B,YAAoB,OAAmB,EAAU,IAAY;QAAzC,YAAO,GAAP,OAAO,CAAY;QAAU,SAAI,GAAJ,IAAI,CAAQ;QAN7D,cAAS,GAAY,KAAK,CAAC;QAEjB,YAAO,GAAsB,IAAI,YAAY,EAAE,CAAC;KAIO;IAEjE,QAAQ;QACN,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;IAED,WAAW;QACT,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAC5B;IAED,kBAAkB;;QAEhB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YACZ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACzB,CAAC,CAAC;KACJ;IAED,QAAQ;QACN,MAAM,KAAK,GAAG;;YAEZ,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;YAEjE,IAAI,YAAY,IAAI,WAAW,EAAE;gBAC/B,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC3B,IAAI,CAAC,kBAAkB,EAAE,CAAC;aAC3B;iBAAM;gBACL,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC3B,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;oBAC1B,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,MAAM,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;iBAC9C,CAAC,CAAC;aACJ;SACF,CAAC;QAEF,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC;KAC1C;;gHA3CU,mBAAmB;oGAAnB,mBAAmB;2FAAnB,mBAAmB;kBAD/B,SAAS;mBAAC,EAAE,QAAQ,EAAE,sBAAsB,EAAE;sHAG7C,SAAS;sBADR,WAAW;uBAAC,eAAe;gBAGlB,OAAO;sBAAhB,MAAM;;;ACdT;;;;;;;;MASa,kBAAkB;IAc7B,YAAY,OAAmB;QAXtB,UAAK,GAAY,IAAI,CAAC;QACtB,UAAK,GAAY,IAAI,CAAC;QAErB,cAAS,GAAsB,IAAI,YAAY,EAAE,CAAC;QAClD,aAAQ,GAAsB,IAAI,YAAY,EAAE,CAAC;QACjD,YAAO,GAAsB,IAAI,YAAY,EAAE,CAAC;QAG1D,eAAU,GAAY,KAAK,CAAC;QAI1B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;KACtC;IAED,WAAW,CAAC,OAAsB;QAChC,IAAI,OAAO,CAAC,iBAAiB,CAAC,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;YACpG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,YAAY,CAAC,CAAC;SAC3D;KACF;IAED,WAAW;QACT,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC7B;IAED,SAAS,CAAC,KAAiB;QACzB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAE7B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAE1C,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBAChB,KAAK;gBACL,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,KAAK,EAAE,IAAI,CAAC,SAAS;aACtB,CAAC,CAAC;SACJ;KACF;IAED,WAAW,CAAC,KAAiB;;QAE3B,MAAM,SAAS,GAAiB,KAAK,CAAC,MAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAE9E,IAAI,SAAS,KAAK,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE;YAC3C,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YAEvB,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;YAE5D,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC/C,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAc,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;YAE9E,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC;iBAClD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;iBACxB,SAAS,CAAC,CAAC,EAAc,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;YAE9D,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAEpC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAClB,KAAK;gBACL,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,KAAK,EAAE,IAAI,CAAC,SAAS;aACtB,CAAC,CAAC;SACJ;KACF;IAED,IAAI,CAAC,KAAiB,EAAE,YAAsC;QAC5D,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAE7B,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC;QAEzC,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACnD,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC;QAElD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAEvC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,KAAK;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,SAAS;SACtB,CAAC,CAAC;KACJ;IAEO,oBAAoB;QAC1B,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;YAChC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;SAC/B;KACF;;+GA9FU,kBAAkB;mGAAlB,kBAAkB;2FAAlB,kBAAkB;kBAD9B,SAAS;mBAAC,EAAE,QAAQ,EAAE,aAAa,EAAE;iGAE3B,eAAe;sBAAvB,KAAK;gBACG,SAAS;sBAAjB,KAAK;gBACG,KAAK;sBAAb,KAAK;gBACG,KAAK;sBAAb,KAAK;gBAEI,SAAS;sBAAlB,MAAM;gBACG,QAAQ;sBAAjB,MAAM;gBACG,OAAO;sBAAhB,MAAM;;;MCDI,mBAAmB;IAY9B,YAAY,OAAmB,EAAU,QAAmB;QAAnB,aAAQ,GAAR,QAAQ,CAAW;QAXnD,kBAAa,GAAY,IAAI,CAAC;QAI7B,WAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;QAIzD,aAAQ,GAAY,KAAK,CAAC;QAIxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;KACtC;IAED,eAAe;QACb,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;SACxD;aAAM;YACL,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,8BAA8B,CAAC,CAAC;SACvE;QACD,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;KACxD;IAED,WAAW;QACT,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;YAC7B,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SAC9C;aAAM,IAAI,IAAI,CAAC,YAAY,EAAE;YAC5B,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;SAC3F;KACF;IAED,SAAS;QACP,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAEtB,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YAClD,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;SAC5C;KACF;IAGD,WAAW,CAAC,KAAiB;QAC3B,MAAM,QAAQ,GAAiB,KAAK,CAAC,MAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QACjF,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;QAC9C,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC;QAEvC,IAAI,QAAQ,EAAE;YACZ,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YAErB,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC/C,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAc,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAE5E,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC;iBAClD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;iBACxB,SAAS,CAAC,CAAC,CAAa,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC;YAE9E,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;SACrC;KACF;IAED,IAAI,CAAC,KAAiB,EAAE,YAAoB,EAAE,gBAAwB;QACpE,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,GAAG,gBAAgB,CAAC;QACnD,MAAM,QAAQ,GAAG,YAAY,GAAG,SAAS,CAAC;QAE1C,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;QACjE,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;QAElE,IAAI,YAAY,IAAI,aAAa,EAAE;YACjC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,QAAQ,IAAI,CAAC;SAC5C;KACF;IAEO,oBAAoB;QAC1B,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;YAChC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;SAC/B;KACF;;gHAnFU,mBAAmB;oGAAnB,mBAAmB;2FAAnB,mBAAmB;kBAN/B,SAAS;mBAAC;oBACT,QAAQ,EAAE,cAAc;oBACxB,IAAI,EAAE;wBACJ,oBAAoB,EAAE,eAAe;qBACtC;iBACF;yHAEU,aAAa;sBAArB,KAAK;gBACG,QAAQ;sBAAhB,KAAK;gBACG,QAAQ;sBAAhB,KAAK;gBAEI,MAAM;sBAAf,MAAM;gBAyCP,WAAW;sBADV,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;;;MClD1B,kBAAkB;IAW7B,YAAY,OAAwB,EAA4B,QAAa;QAAb,aAAQ,GAAR,QAAQ,CAAK;QAVnE,YAAO,GAAsB,IAAI,YAAY,EAAE,CAAC;QAChD,kBAAa,GAAsB,IAAI,YAAY,EAAE,CAAC;QAU9D,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;KACzC;IAED,kBAAkB;;QAEhB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;KACxE;IAED,WAAW;QACT,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;YAC1B,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YACzB,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;SACzB,CAAC,CAAC;KACJ;IAED,mBAAmB;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QAEtD,IAAI,KAAK,EAAE;YACT,MAAM,SAAS,GAAG,CAAC,EAAE,YAAY,EAAE,aAAa,EAAO;gBACrD,WAAW,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC;gBAE/B,IAAI,YAAY,EAAE;oBAChB,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC9D,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC5D,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;iBAC3D;aACF,CAAC;YAEF,MAAM,WAAW,GAAG,CAAC,EAAE,aAAa,EAAO;gBACzC,IAAI,aAAa,EAAE;oBACjB,aAAa,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;oBACtC,aAAa,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;oBACrC,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;iBACrC;aACF,CAAC;YAEF,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;;YAElC,KAAK,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;SACvC;KACF;IAED,WAAW;QACT,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QAEpB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE;YAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;YAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;YACpD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG;gBACvC,IAAI;gBACJ,KAAK,EAAE,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACrD,KAAK,EAAE,CAAC,EAAE;gBACV,OAAO,EAAE,GAAG;aACb,CAAC;SACH;KACF;IAED,UAAU,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAO;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAE3C,IAAI,MAAM,EAAE;YACV,IAAI,IAAI,CAAC,iBAAiB,KAAK,MAAM,CAAC,CAAC,EAAE;gBACvC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;oBACtB,SAAS,EAAE,IAAI,CAAC,iBAAiB;oBACjC,QAAQ,EAAE,MAAM,CAAC,CAAC;oBAClB,YAAY,EAAE,OAAO,CAAC,KAAK;iBAC5B,CAAC,CAAC;gBACH,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,CAAC,CAAC;aACnC;SACF;aAAM,IAAI,IAAI,CAAC,iBAAiB,KAAK,OAAO,CAAC,KAAK,EAAE;YACnD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;gBACtB,SAAS,EAAE,IAAI,CAAC,iBAAiB;gBACjC,YAAY,EAAE,OAAO,CAAC,KAAK;aAC5B,CAAC,CAAC;YACH,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC;SACxC;KACF;IAED,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAO;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE3C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3C,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBAChB,SAAS,EAAE,OAAO,CAAC,KAAK;gBACxB,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAClB,KAAK;aACN,CAAC,CAAC;SACJ;QAED,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACnC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC;KAC7B;IAED,QAAQ,CAAC,KAAU,EAAE,KAAU;QAC7B,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC;QACnC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEtD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE;;YAEjC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;;YAGjC,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,EAAO,KAAK,EAAE,KAAK,GAAG,CAAC,OAAO,CAAC,EAAE;gBACxE,OAAO;oBACL,GAAG;oBACH,CAAC;iBACF,CAAC;aACH;YAED,CAAC,EAAE,CAAC;SACL;KACF;IAEO,cAAc;QACpB,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI;YAChD,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YAChC,OAAO,GAAG,CAAC;SACZ,EAAE,EAAE,CAAC,CAAC;KACR;;+GA1IU,kBAAkB,iDAWiB,QAAQ;mGAX3C,kBAAkB,+IAIZ,kBAAkB;2FAJxB,kBAAkB;kBAD9B,SAAS;mBAAC,EAAE,QAAQ,EAAE,aAAa,EAAE;;;8BAYG,MAAM;+BAAC,QAAQ;;yBAV5C,OAAO;sBAAhB,MAAM;gBACG,aAAa;sBAAtB,MAAM;gBAGP,UAAU;sBADT,eAAe;uBAAC,kBAAkB,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;;;MCb/C,kBAAkB;IAD/B;QAEW,iBAAY,GAAY,IAAI,CAAC;QAE7B,aAAQ,GAAW,GAAG,CAAC;QAEtB,mBAAc,GAAsB,IAAI,YAAY,EAAE,CAAC;QACvD,iBAAY,GAAsB,IAAI,YAAY,EAAE,CAAC;QACrD,iBAAY,GAAsB,IAAI,YAAY,EAAE,CAAC;QAK/D,WAAM,GAAW,CAAC,CAAC;QACnB,WAAM,GAAW,CAAC,CAAC;KAmGpB;IA/FC,IACI,KAAK;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;IAED,IACI,WAAW;QACb,OAAO,IAAI,CAAC,cAAc,CAAC;KAC5B;IAGD,WAAW,CAAC,KAAiB;;QAE3B,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;;QAGpD,MAAM,MAAM,GAAgB,KAAK,CAAC,MAAM,CAAC;QACzC,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC;YAAE,OAAO;QAEvD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC;QAE5B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAE5B,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAc,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAE5E,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC;YACxB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;gBACvB,KAAK;gBACL,KAAK,EAAE,IAAI,CAAC,UAAU;aACvB,CAAC,CAAC;YAEH,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC;iBAC7B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;iBACxB,SAAS,CAAC,CAAC,UAAsB,KAAK,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CACvE,CAAC;YAEF,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAClB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAElB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAClB;IAED,WAAW,CAAC,KAAiB;QAC3B,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACzC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YAE1D,IAAI,MAAM,IAAI,MAAM,EAAE;gBACpB,IAAI,CAAC,QAAQ,EAAE,CAAC;aACjB;SACF;KACF;IAED,IAAI,CAAC,KAAiB;QACpB,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC;gBACxB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;oBACrB,KAAK;oBACL,KAAK,EAAE,IAAI,CAAC,UAAU;iBACvB,CAAC,CAAC;gBACH,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAClB,EAAE,EAAE,CAAC,CAAC;SACR;KACF;IAED,QAAQ;QACN,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YACrB,KAAK,EAAE,IAAI,CAAC,UAAU;SACvB,CAAC,CAAC;KACJ;IAED,SAAS;QACP,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;IAED,WAAW;QACT,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC7B;IAEO,oBAAoB;QAC1B,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;YAChC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;SAC/B;KACF;;+GA/GU,kBAAkB;mGAAlB,kBAAkB;2FAAlB,kBAAkB;kBAD9B,SAAS;mBAAC,EAAE,QAAQ,EAAE,cAAc,EAAE;8BAE5B,YAAY;sBAApB,KAAK;gBACG,UAAU;sBAAlB,KAAK;gBACG,QAAQ;sBAAhB,KAAK;gBAEI,cAAc;sBAAvB,MAAM;gBACG,YAAY;sBAArB,MAAM;gBACG,YAAY;sBAArB,MAAM;gBAWH,KAAK;sBADR,WAAW;uBAAC,aAAa;gBAMtB,WAAW;sBADd,WAAW;uBAAC,iBAAiB;gBAM9B,WAAW;sBADV,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;;;MCT1B,iBAAiB;IAwB5B,YAAoB,MAAc,EAAE,OAAmB,EAAU,QAAmB;QAAhE,WAAM,GAAN,MAAM,CAAQ;QAA+B,aAAQ,GAAR,QAAQ,CAAW;QAvB3E,eAAU,GAAY,KAAK,CAAC;QAC5B,eAAU,GAAY,KAAK,CAAC;QAU3B,WAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEzD,eAAU,GAAW,CAAC,CAAC;QACvB,eAAU,GAAW,CAAC,CAAC;QACvB,mBAAc,GAAW,CAAC,CAAC;QAC3B,mBAAc,GAAW,CAAC,CAAC;QAKnB,yBAAoB,GAAQ,IAAI,CAAC;QAGvC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;KACtC;IAED,QAAQ;;QAEN,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC/B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5E,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvD,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;SAC1E;KACF;IAED,WAAW;QACT,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7B,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;YAC5E,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;SAClC;KACF;IAED,SAAS,CAAC,OAAe;QACvB,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,OAAO,CAAC;SACxC;KACF;IAED,UAAU,CAAC,KAAiB;QAC1B,MAAM,GAAG,GAAqB,KAAK,CAAC,aAAa,CAAC;QAClD,qBAAqB,CAAC;YACpB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC;YAChC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;YACjC,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB,CAAC,CAAC;KACJ;IAED,YAAY;QACV,IAAI,SAAiB,CAAC;QACtB,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE;YACzC,SAAS,GAAG,MAAM,CAAC;SACpB;aAAM,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE;YAChD,SAAS,GAAG,IAAI,CAAC;SAClB;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACf,SAAS;YACT,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC;QACtC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC;KACvC;;8GA5EU,iBAAiB;kGAAjB,iBAAiB,+VANlB,6BAA6B;2FAM5B,iBAAiB;kBAR7B,SAAS;mBAAC;oBACT,QAAQ,EAAE,oBAAoB;oBAC9B,QAAQ,EAAE,6BAA6B;oBACvC,IAAI,EAAE;wBACJ,KAAK,EAAE,kBAAkB;qBAC1B;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;iBAChD;8IAEU,UAAU;sBAAlB,KAAK;gBACG,UAAU;sBAAlB,KAAK;gBAIN,YAAY;sBAFX,WAAW;uBAAC,iBAAiB;;sBAC7B,KAAK;gBAKN,WAAW;sBAFV,WAAW;uBAAC,gBAAgB;;sBAC5B,KAAK;gBAGI,MAAM;sBAAf,MAAM;;;MC/BI,qCAAqC;IAChD,YAAmB,QAA0B;QAA1B,aAAQ,GAAR,QAAQ,CAAkB;KAAI;;kIADtC,qCAAqC;sHAArC,qCAAqC;2FAArC,qCAAqC;kBAHjD,SAAS;mBAAC;oBACT,QAAQ,EAAE,uCAAuC;iBAClD;;;MCAY,6BAA6B;IAD1C;;;;QAKW,cAAS,GAAuD,CAAC,CAAC;;;;QAejE,WAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;KA+B1D;IAtCC,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC;KACnD;;;;IAUD,iBAAiB,CAAC,KAAU;QAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;KACJ;;;;IAKD,eAAe;QACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;KACJ;;;;IAKD,iBAAiB;QACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;KACJ;;0HAjDU,6BAA6B;8GAA7B,6BAA6B,iOAS1B,qCAAqC,2BAAU,WAAW;2FAT7D,6BAA6B;kBADzC,SAAS;mBAAC,EAAE,QAAQ,EAAE,4BAA4B,EAAE;8BAK1C,SAAS;sBAAjB,KAAK;gBAGN,cAAc;sBADb,KAAK;uBAAC,UAAU;gBAIjB,cAAc;sBADb,YAAY;uBAAC,qCAAqC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE;gBAU9E,MAAM;sBAAf,MAAM;;;ACjBT;;;SAGgB,iBAAiB;IAC/B,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;SAIgB,aAAa,CAAC,IAAqB;IACjD,IAAI,IAAI,IAAI,IAAI,EAAE;QAChB,OAAO,iBAAiB,CAAC;KAC1B;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC5B,OAAO,kBAAkB,CAAC;KAC3B;SAAM;;QAEL,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;YAC5B,OAAO,eAAe,CAAC;SACxB;aAAM;YACL,OAAO,kBAAkB,CAAC;SAC3B;KACF;AACH,CAAC;AAED;;;;;;SAMgB,kBAAkB,CAAC,GAAU,EAAE,KAAa;IAC1D,IAAI,GAAG,IAAI,IAAI,EAAE;QACf,OAAO,EAAE,CAAC;KACX;;IAED,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,IAAI,EAAE;QACzB,OAAO,GAAG,CAAC;KACZ;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;IACzB,IAAI,KAAK,IAAI,IAAI,EAAE;QACjB,OAAO,EAAE,CAAC;KACX;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;SAMgB,kBAAkB,CAAC,GAAQ,EAAE,SAAiB;IAC5D,IAAI,GAAG,IAAI,IAAI,EAAE;QACf,OAAO,EAAE,CAAC;KACX;IACD,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE;QACtB,OAAO,GAAG,CAAC;KACZ;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7B,IAAI,KAAK,IAAI,IAAI,EAAE;QACjB,OAAO,EAAE,CAAC;KACX;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;SAGgB,eAAe,CAAC,GAAQ,EAAE,IAAY;IACpD,IAAI,GAAG,IAAI,IAAI,EAAE;QACf,OAAO,EAAE,CAAC;KACX;IACD,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;QACjB,OAAO,GAAG,CAAC;KACZ;;;IAID,IAAI,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;IACxB,IAAI,OAAO,KAAK,SAAS,EAAE;QACzB,OAAO,OAAO,CAAC;KAChB;IAED,OAAO,GAAG,GAAG,CAAC;IACd,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE9B,IAAI,KAAK,CAAC,MAAM,EAAE;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;;YAG5B,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,EAAE;gBAC7C,OAAO,EAAE,CAAC;aACX;SACF;KACF;IAED,OAAO,OAAO,CAAC;AACjB;;SC1GgB,qBAAqB,CAAC,IAAqB;IACzD,OAAO,IAAI,KAAK,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AACzD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAoCgB,kBAAkB,CAAC,IAAW,EAAE,IAA0B,EAAE,EAAwB;IAClG,IAAI,IAAI,IAAI,EAAE,EAAE;QACd,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACtB,IAAI,IAAI,GAAoB,IAAI,CAAC;QAEjC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE7B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI;YACpC,MAAM,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE;gBAC/B,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACnB;YACD,OAAO,GAAG,CAAC;SACZ,EAAE,EAAE,CAAC,CAAC;QAEP,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;;YAE1B,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;SAC/C;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;;YAE1B,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,MAAM,GAAG,CAAC,CAAC;YACf,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,CAAC,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE;gBAClD,MAAM,GAAG,SAAS,CAAC;aACpB;YACD,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC/B,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACjC;QAED,IAAI,YAAY,GAAU,EAAE,CAAC;QAC7B,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAClB,YAAY,GAAG,CAAC,GAAG,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;SAC5C,EAAE,IAAI,CAAC,CAAC;QAET,OAAO,YAAY,CAAC;KACrB;SAAM;QACL,OAAO,IAAI,CAAC;KACb;AACH,CAAC;AAED,MAAM,QAAQ;IAKZ,YAAY,MAAkB,IAAI;QAChC,IAAI,CAAC,GAAG,EAAE;YACR,GAAG,GAAG;gBACJ,KAAK,EAAE,CAAC,CAAC;gBACT,UAAU,EAAE,UAAU;aACvB,CAAC;SACH;QACD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;IAED,OAAO,CAAC,CAAM,EAAE,SAAkB;QAChC,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,UAAU,EAAE;YACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBACpD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC/B,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;gBACzD,IAAI,SAAS;oBAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;aACtD;SACF;KACF;;;AClHH;;;;SAIgB,SAAS,CAAC,GAAW;;IAEnC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;;IAEzC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;;IAG9C,GAAG,GAAG,GAAG;SACN,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC;SACvC,IAAI,EAAE;SACN,WAAW,EAAE,CAAC;;IAGjB,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,sBAAsB,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;QACzD,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;KACnC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;SAIgB,WAAW,CAAC,GAAW;IACrC,OAAO,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;AACnG;;AC9BA;;;;SAIgB,EAAE;IAChB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACpF;;ACAA;;;SAGgB,iBAAiB,CAAC,OAAsB;IACtD,IAAI,CAAC,OAAO;QAAE,OAAO;;;;IAKrB,IAAI,eAAe,GAAY,KAAK,CAAC;IAErC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAC5B,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YAChB,MAAM,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;SACpB;;;QAID,IAAI,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE;YACjD,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACtC;QAED,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;YACzB,MAAM,CAAC,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACnD;;QAGD,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YACrE,MAAM,CAAC,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;SAChD;QAED,IAAI,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YACpE,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;SAClB;QAED,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE;YACxC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;SAC1B;QAED,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;YACtC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;SACxB;QAED,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;YACvC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;SACzB;QAED,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE;YAC3C,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC;SAC7B;QAED,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;YACnC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC;SACpB;QAED,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE;YAC1C,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC;SAC7B;aAAM;YACL,IAAI,MAAM,CAAC,YAAY,IAAI,CAAC,eAAe,EAAE;;;gBAG3C,eAAe,GAAG,IAAI,CAAC;aACxB;iBAAM;;;gBAGL,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC;aAC7B;SACF;KACF;AACH,CAAC;SAEe,iBAAiB,CAAI,KAA2B;IAC9D,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC;AAC/C,CAAC;AAED;;;SAGgB,kBAAkB,CAAC,SAAqC;IACtE,MAAM,MAAM,GAAU,EAAE,CAAC;IACzB,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE;QAC5B,MAAM,GAAG,GAAQ,EAAE,CAAC;QAEpB,MAAM,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC/C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;SACxB;QAED,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;SAC1C;QAED,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;SACtC;QAED,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;SACpC;QAED,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;SAC5C;QAED,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAClB;IAED,OAAO,MAAM,CAAC;AAChB;;IClHY;AAAZ,WAAY,UAAU;IACpB,mCAAqB,CAAA;IACrB,2BAAa,CAAA;IACb,6BAAe,CAAA;AACjB,CAAC,EAJW,UAAU,KAAV,UAAU;;ICAV;AAAZ,WAAY,aAAa;IACvB,kCAAiB,CAAA;IACjB,gCAAe,CAAA;IACf,0CAAyB,CAAA;IACzB,8BAAa,CAAA;IACb,sCAAqB,CAAA;AACvB,CAAC,EANW,aAAa,KAAb,aAAa;;ICAb;AAAZ,WAAY,QAAQ;IAClB,6BAAiB,CAAA;IACjB,2BAAe,CAAA;AACjB,CAAC,EAHW,QAAQ,KAAR,QAAQ;;ICAR;AAAZ,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,gCAAa,CAAA;AACf,CAAC,EAHW,eAAe,KAAf,eAAe;;MCGd,8BAA8B;IACzC,YAAmB,QAA0B;QAA1B,aAAQ,GAAR,QAAQ,CAAkB;KAAI;;2HADtC,8BAA8B;+GAA9B,8BAA8B;2FAA9B,8BAA8B;kBAD1C,SAAS;mBAAC,EAAE,QAAQ,EAAE,iCAAiC,EAAE;;;MCC7C,4BAA4B;IACvC,YAAmB,QAA0B;QAA1B,aAAQ,GAAR,QAAQ,CAAkB;KAAI;;yHADtC,4BAA4B;6GAA5B,4BAA4B;2FAA5B,4BAA4B;kBADxC,SAAS;mBAAC,EAAE,QAAQ,EAAE,+BAA+B,EAAE;;;MCC3C,6BAA6B;IACxC,YAAmB,QAA0B;QAA1B,aAAQ,GAAR,QAAQ,CAAkB;KAAI;;0HADtC,6BAA6B;8GAA7B,6BAA6B;2FAA7B,6BAA6B;kBADzC,SAAS;mBAAC,EAAE,QAAQ,EAAE,6BAA6B,EAAE;;;MCMzC,wBAAwB;IAwDnC,YAAoB,oBAA0C;QAA1C,yBAAoB,GAApB,oBAAoB,CAAsB;QAFtD,kBAAa,GAAG,IAAI,CAAC;KAEqC;IA1BlE,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAC;KAC3D;IAQD,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,oBAAoB,CAAC;KAC/D;IAQD,IAAI,kBAAkB;QACpB,OAAO,IAAI,CAAC,wBAAwB,IAAI,IAAI,CAAC,wBAAwB,CAAC;KACvE;IAMD,WAAW;QACT,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;SAC5B;aAAM;YACL,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,CAAC;SAC3C;KACF;;qHAhEU,wBAAwB;yGAAxB,wBAAwB,s3BA2BrB,4BAA4B,2BAAU,WAAW,kFAUjD,8BAA8B,2BAAU,WAAW,sFAUnD,6BAA6B,2BAAU,WAAW;2FA/CrD,wBAAwB;kBADpC,SAAS;mBAAC,EAAE,QAAQ,EAAE,sBAAsB,EAAE;wGAEpC,IAAI;sBAAZ,KAAK;gBACG,IAAI;sBAAZ,KAAK;gBACG,UAAU;sBAAlB,KAAK;gBACG,WAAW;sBAAnB,KAAK;gBACG,QAAQ;sBAAhB,KAAK;gBACG,UAAU;sBAAlB,KAAK;gBACG,UAAU;sBAAlB,KAAK;gBACG,IAAI;sBAAZ,KAAK;gBACG,QAAQ;sBAAhB,KAAK;gBACG,SAAS;sBAAjB,KAAK;gBACG,aAAa;sBAArB,KAAK;gBACG,QAAQ;sBAAhB,KAAK;gBACG,KAAK;sBAAb,KAAK;gBACG,QAAQ;sBAAhB,KAAK;gBACG,YAAY;sBAApB,KAAK;gBACG,kBAAkB;sBAA1B,KAAK;gBACG,WAAW;sBAAnB,KAAK;gBACG,SAAS;sBAAjB,KAAK;gBACG,YAAY;sBAApB,KAAK;gBACG,eAAe;sBAAvB,KAAK;gBACG,WAAW;sBAAnB,KAAK;gBACG,eAAe;sBAAvB,KAAK;gBAGN,kBAAkB;sBADjB,KAAK;uBAAC,cAAc;gBAIrB,kBAAkB;sBADjB,YAAY;uBAAC,4BAA4B,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE;gBAQ/E,oBAAoB;sBADnB,KAAK;uBAAC,gBAAgB;gBAIvB,oBAAoB;sBADnB,YAAY;uBAAC,8BAA8B,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE;gBAQjF,wBAAwB;sBADvB,KAAK;uBAAC,oBAAoB;gBAI3B,wBAAwB;sBADvB,YAAY;uBAAC,6BAA6B,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE;;;MClDrE,mCAAmC;IAC9C,YAAmB,QAA0B;QAA1B,aAAQ,GAAR,QAAQ,CAAkB;KAAI;;gIADtC,mCAAmC;oHAAnC,mCAAmC;2FAAnC,mCAAmC;kBAH/C,SAAS;mBAAC;oBACT,QAAQ,EAAE,qCAAqC;iBAChD;;;MCAY,2BAA2B;IADxC;;;;;QAMW,cAAS,GAAqD,CAAC,CAAC;;;;QAe/D,WAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;KA+B1D;IAtCC,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC;KACnD;;;;IAUD,eAAe,CAAC,GAAQ;QACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;KACJ;;;;IAKD,aAAa;QACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;KACJ;;;;IAKD,eAAe;QACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;KACJ;;wHAlDU,2BAA2B;4GAA3B,2BAA2B,+NAUxB,mCAAmC,2BAAU,WAAW;2FAV3D,2BAA2B;kBADvC,SAAS;mBAAC,EAAE,QAAQ,EAAE,0BAA0B,EAAE;8BAMxC,SAAS;sBAAjB,KAAK;gBAGN,cAAc;sBADb,KAAK;uBAAC,UAAU;gBAIjB,cAAc;sBADb,YAAY;uBAAC,mCAAmC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE;gBAU5E,MAAM;sBAAf,MAAM;;;MCpBI,wBAAwB;IAenC,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC;KACnD;;qHAjBU,wBAAwB;yGAAxB,wBAAwB,kaAYrB,gCAAgC,2BAAU,WAAW;2FAZxD,wBAAwB;kBADpC,SAAS;mBAAC,EAAE,QAAQ,EAAE,sBAAsB,EAAE;8BAEpC,YAAY;sBAApB,KAAK;gBACG,YAAY;sBAApB,KAAK;gBACG,eAAe;sBAAvB,KAAK;gBACG,kBAAkB;sBAA1B,KAAK;gBACG,mBAAmB;sBAA3B,KAAK;gBACG,iBAAiB;sBAAzB,KAAK;gBACG,aAAa;sBAArB,KAAK;gBAGN,cAAc;sBADb,KAAK;uBAAC,UAAU;gBAIjB,cAAc;sBADb,YAAY;uBAAC,gCAAgC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;;;AChBvE;;;SAGgB,YAAY,CAAC,IAAW;IACtC,MAAM,GAAG,GAA2C;QAClD,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,EAAE;QACV,KAAK,EAAE,EAAE;KACV,CAAC;IAEF,IAAI,IAAI,EAAE;QACR,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,IAAI,GAAG,CAAC,UAAU,EAAE;gBAClB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACpB;iBAAM,IAAI,GAAG,CAAC,WAAW,EAAE;gBAC1B,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACrB;iBAAM;gBACL,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACtB;SACF;KACF;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;SAGgB,iBAAiB,CAAC,MAAW,EAAE,GAAQ;IACrD,OAAO;QACL,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC;QACnC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;QACvC,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC;QACrC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;KACzC,CAAC;AACJ,CAAC;AAED;;;SAGgB,gBAAgB,CAAC,OAAc,EAAE,IAAa;IAC5D,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,IAAI,OAAO,EAAE;QACX,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;YACvB,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YAC5B,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;YACtC,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;SAC7C;KACF;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;SAGgB,iBAAiB,CAAC,OAAY,EAAE,IAAU;IACxD,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAC5B,MAAM,GAAG,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;QACjC,UAAU,GAAG,UAAU,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;KAC/D;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;SAEe,eAAe,CAAC,GAAQ;IACtC,MAAM,YAAY,GAAG,EAAE,CAAC;IACxB,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAEpC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAChE,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACpE,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAElE,OAAO,YAAY,CAAC;AACtB;;AC7EA;;;;;;;;;MASa,cAAc;IAA3B;;;;;;QAMU,cAAS,GAAa,EAAE,CAAC;KA2IlC;;;;IAtIC,UAAU;QACR,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;;;;;;;;IASD,SAAS,CAAC,OAAY;QACpB,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;QAC3G,MAAM,IAAI,GAAG,OAAO,SAAS,KAAK,UAAU,CAAC;QAC7C,MAAM,UAAU,GAAG,OAAO,eAAe,KAAK,UAAU,CAAC;QAEzD,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE;YAC7B,MAAM,IAAI,KAAK,CAAC;2CACqB,SAAS,iCAAiC,CAAC,CAAC;SAClF;;QAGD,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,eAAe,CAAC,EAAE;YACzC,MAAM,IAAI,KAAK,CAAC;2CACqB,eAAe,iCAAiC,CAAC,CAAC;SACxF;QAED,MAAM,CAAC,GAAG,eAAe,GAAG,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;QACnD,IAAI,CAAC,SAAS,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;QAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;YAC1B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SACvB;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,gBAAgB,GAAG,SAAS,CAAC;YACjC,IAAI,IAAI,EAAE;gBACR,gBAAgB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;aACnC;;;YAID,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,GAAG,IAAI,QAAQ,EAAE;gBACnB,IAAI,UAAU,EAAE;oBACd,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAClC,gBAAgB,IAAI,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;iBACjD;qBAAM;oBACL,gBAAgB,IAAI,eAAe,CAAC;iBACrC;aACF;YAED,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;SAClC;KACF;;;;;IAMD,WAAW,CAAC,OAAe;QACzB,IAAI,OAAO,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;KACnC;;;;;IAMD,MAAM,CAAC,UAAkB,EAAE,WAAmB;QAC5C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YAC1B,MAAM,IAAI,KAAK,CAAC,mBAAmB,UAAU,eAAe,WAAW;0CACnC,CAAC,CAAC;SACvC;QAED,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QAChC,UAAU,IAAI,CAAC,CAAC;QAEhB,OAAO,UAAU,GAAG,CAAC,EAAE;YACrB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,WAAW,CAAC;YAC1C,UAAU,IAAI,UAAU,GAAG,CAAC,CAAC;SAC9B;KACF;;;;IAKD,KAAK,CAAC,OAAe;QACnB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YAC1B,MAAM,IAAI,KAAK,CAAC,kBAAkB,OAAO,8CAA8C,CAAC,CAAC;SAC1F;QAED,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,OAAO,IAAI,CAAC,CAAC;QAEb,OAAO,OAAO,IAAI,CAAC,EAAE;YACnB,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC/B,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;SACzC;QAED,OAAO,GAAG,CAAC;KACZ;;;;IAKD,YAAY,CAAC,QAAgB,EAAE,QAAgB;QAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;KACxD;;;;;IAMO,YAAY,CAAC,GAAW;QAC9B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC;QAErC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;QACb,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;;QAGzC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAElE,KAAK,IAAI,SAAS,GAAG,UAAU,EAAE,SAAS,KAAK,CAAC,EAAE,SAAS,KAAK,CAAC,EAAE;YACjE,MAAM,OAAO,GAAG,GAAG,GAAG,SAAS,CAAC;YAChC,IAAI,OAAO,GAAG,UAAU,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;gBAC1D,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAC/B,GAAG,GAAG,OAAO,CAAC;aACf;SACF;QAED,OAAO,GAAG,GAAG,CAAC,CAAC;KAChB;;;ACvJH,MAAM,KAAK,GAAG,EAAE,CAAC;AACjB,MAAM,SAAS,GAAG,OAAO,QAAQ,KAAK,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC;AAEpG;AACA;AACA,MAAM,MAAM,GAAG,CAAC;IACd,MAAM,MAAM,GAAG,OAAO,MAAM,KAAK,WAAW,GAAG,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC;IACjH,MAAM,KAAK,GACT,OAAO,MAAM,KAAK,WAAW;UACzB,KAAK,CAAC,SAAS,CAAC,KAAK;aAClB,IAAI,CAAC,MAAM,CAAC;aACZ,IAAI,CAAC,EAAE,CAAC;aACR,KAAK,CAAC,mBAAmB,CAAC;UAC7B,IAAI,CAAC;IACX,MAAM,GAAG,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;;IAElD,MAAM,GAAG,GAAG,OAAO,GAAG,KAAK,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAElH,OAAO,GAAG;UACN;YACE,GAAG;YACH,SAAS,EAAE,GAAG;YACd,GAAG,EAAE,IAAI,GAAG,GAAG;YACf,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;SACzC;UACD,SAAS,CAAC;AAChB,CAAC,GAAG,CAAC;SAEW,qBAAqB,CAAC,QAAgB;IACpD,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAEjC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;QAChB,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE;YACrC,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;SACxB;aAAM,IAAI,MAAM,KAAK,SAAS,IAAI,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,QAAQ,CAAC,KAAK,SAAS,EAAE;YACjF,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,QAAQ,CAAC;SACrC;KACF;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;AACrB;;ACvCA;AACA,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,WAAW,GAAG,qBAAqB,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;AACjG,MAAM,kBAAkB,GAAG,OAAO,MAAM,KAAK,WAAW,GAAG,qBAAqB,CAAC,oBAAoB,CAAC,GAAG,SAAS,CAAC;AACnH,MAAM,gBAAgB,GAAG,OAAO,MAAM,KAAK,WAAW,GAAG,CAAC,CAAC,qBAAqB,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;AAC1G,MAAM,kBAAkB,GAAG,OAAO,MAAM,KAAK,WAAW,GAAG,CAAC,CAAC,qBAAqB,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;AAC9G,MAAM,EAAE,GAAG,OAAO,MAAM,KAAK,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG,QAAQ,CAAC;AACjF,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAE7C,WAAW,CAAC,MAAW,EAAE,CAAS,EAAE,CAAS;IAC3D,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,gBAAgB,EAAE;QACxD,IAAI,CAAC,QAAQ,IAAI,kBAAkB,EAAE;YACnC,MAAM,CAAC,SAAS,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC;YACrD,MAAM,CAAC,kBAAkB,CAAC,GAAG,QAAQ,CAAC;SACvC;aAAM;YACL,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC;SAC5D;KACF;SAAM;QACL,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC;QACtB,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;KACxB;AACH;;MCVa,oBAAoB;;iHAApB,oBAAoB;qGAApB,oBAAoB,0DATrB;;;;;;GAMT;2FAGU,oBAAoB;kBAXhC,SAAS;mBAAC;oBACT,QAAQ,EAAE,oBAAoB;oBAC9B,QAAQ,EAAE;;;;;;GAMT;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;iBAChD;;;SCZe,UAAU,CAAC,QAAe,EAAE,GAAQ,EAAE,SAAc;IAClE,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAE/C,IAAI,aAAa,GAAG,CAAC,CAAC,EAAE;QACtB,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;KACnC;SAAM;QACL,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACpB;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;SAEe,iBAAiB,CAC/B,QAAe,EACf,IAAW,EACX,KAAa,EACb,SAAiB,EACjB,SAAc;IAEd,MAAM,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,OAAO,GAAG,CAAC,IAAI,SAAS,IAAI,CAAC,IAAI,KAAK,CAAC;QAC7C,MAAM,MAAM,GAAG,CAAC,IAAI,SAAS,IAAI,CAAC,IAAI,KAAK,CAAC;QAE5C,IAAI,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QACjC,IAAI,OAAO,EAAE;YACX,KAAK,GAAG;gBACN,KAAK,EAAE,KAAK;gBACZ,GAAG,EAAE,SAAS;aACf,CAAC;SACH;aAAM;YACL,KAAK,GAAG;gBACN,KAAK,EAAE,SAAS;gBAChB,GAAG,EAAE,KAAK,GAAG,CAAC;aACf,CAAC;SACH;QAED,IAAI,CAAC,OAAO,IAAI,MAAM,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,EAAE;;;YAGhD,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,EAAE;gBACtC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACpB;SACF;KACF;IAED,OAAO,QAAQ,CAAC;AAClB;;ICjDY;AAAZ,WAAY,IAAI;IACd,4BAAO,CAAA;IACP,gCAAS,CAAA;IACT,oCAAW,CAAA;IACX,oCAAW,CAAA;IACX,gCAAS,CAAA;IACT,kCAAU,CAAA;AACZ,CAAC,EAPW,IAAI,KAAJ,IAAI;;MCmBH,2BAA2B;IALxC;QAaY,aAAQ,GAAsB,IAAI,YAAY,EAAE,CAAC;QACjD,WAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;KA2H1D;IAvHC,SAAS,CAAC,KAAiC,EAAE,KAAa,EAAE,GAAQ;QAClE,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO;QAEhC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,KAAK,aAAa,CAAC,QAAQ,CAAC;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,KAAK,aAAa,CAAC,KAAK,CAAC;QACzD,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,KAAK,aAAa,CAAC,UAAU,CAAC;QACnE,IAAI,QAAQ,GAAU,EAAE,CAAC;QAEzB,IAAI,KAAK,IAAI,MAAM,IAAI,UAAU,EAAE;YACjC,IAAI,KAAK,CAAC,QAAQ,EAAE;gBAClB,QAAQ,GAAG,iBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;aACvG;iBAAM,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,UAAU,IAAI,MAAM,EAAE;gBACjE,QAAQ,GAAG,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;aACnF;iBAAM;gBACL,QAAQ,GAAG,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;aACnE;SACF;aAAM;YACL,QAAQ,GAAG,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;SACnE;QAED,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,UAAU,EAAE;YAC1C,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;SACzD;QAED,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QAEhC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAEvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACf,QAAQ;SACT,CAAC,CAAC;KACJ;IAED,UAAU,CAAC,KAAY,EAAE,KAAa;QACpC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,KAAK,aAAa,CAAC,QAAQ,CAAC;QAC7D,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,UAAU,CAAC,MAAM,MAAM,IAAI,IAAI,KAAK,UAAU,CAAC,CAAC;QAEzG,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;SACnC;aAAM,IAAI,IAAI,KAAK,SAAS,EAAE;YAC7B,IAAoB,KAAM,CAAC,OAAO,KAAK,IAAI,CAAC,MAAM,EAAE;gBAClD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;aACnC;iBAAM;gBACL,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;aAC7B;SACF;QACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3B;IAED,eAAe,CAAC,KAAY;QAC1B,MAAM,EAAE,OAAO,EAAE,GAAkB,KAAK,CAAC,KAAK,CAAC;QAC/C,MAAM,WAAW,GAAG,OAAO,KAAK,IAAI,CAAC,EAAE,IAAI,OAAO,KAAK,IAAI,CAAC,IAAI,IAAI,OAAO,KAAK,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,IAAI,CAAC,IAAI,CAAC;QAEpH,IAAI,WAAW,EAAE;YACf,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,KAAK,aAAa,CAAC,IAAI,CAAC;YAElE,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,eAAe,EAAE;gBAC1C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;aAC1C;iBAAM,IAAI,eAAe,EAAE;gBAC1B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;aAC/E;SACF;KACF;IAED,QAAQ,CAAC,UAAe,EAAE,OAAe;QACvC,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAChE,IAAI,cAAc;YAAE,cAAc,CAAC,KAAK,EAAE,CAAC;KAC5C;IAED,cAAc,CAAC,UAAe,EAAE,OAAe;QAC7C,MAAM,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC;QAE/C,IAAI,aAAa,EAAE;YACjB,IAAI,YAAyB,CAAC;YAC9B,IAAI,OAAO,KAAK,IAAI,CAAC,EAAE,EAAE;gBACvB,YAAY,GAAG,aAAa,CAAC,sBAAsB,CAAC;aACrD;iBAAM,IAAI,OAAO,KAAK,IAAI,CAAC,IAAI,EAAE;gBAChC,YAAY,GAAG,aAAa,CAAC,kBAAkB,CAAC;aACjD;YAED,IAAI,YAAY,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE;gBAChD,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;aACjC;SACF;KACF;IAED,SAAS,CAAC,WAAgB,EAAE,UAAe,EAAE,OAAe,EAAE,SAAiB;QAC7E,IAAI,eAA4B,CAAC;QAEjC,IAAI,OAAO,KAAK,IAAI,CAAC,IAAI,EAAE;YACzB,eAAe,GAAG,WAAW,CAAC,sBAAsB,CAAC;SACtD;aAAM,IAAI,OAAO,KAAK,IAAI,CAAC,KAAK,EAAE;YACjC,eAAe,GAAG,WAAW,CAAC,kBAAkB,CAAC;SAClD;aAAM,IAAI,OAAO,KAAK,IAAI,CAAC,EAAE,IAAI,OAAO,KAAK,IAAI,CAAC,IAAI,EAAE;YACvD,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAChE,IAAI,cAAc,EAAE;gBAClB,MAAM,QAAQ,GAAG,cAAc,CAAC,sBAAsB,CAAC,qBAAqB,CAAC,CAAC;gBAC9E,IAAI,QAAQ,CAAC,MAAM;oBAAE,eAAe,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;aAC5D;SACF;QAED,IAAI,eAAe;YAAE,eAAe,CAAC,KAAK,EAAE,CAAC;KAC9C;IAED,cAAc,CAAC,GAAQ;QACrB,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;KACxD;IAED,iBAAiB,CAAC,GAAQ,EAAE,QAAe;QACzC,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC,CAAC;QAE7C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC;YACzB,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC/B,OAAO,EAAE,KAAK,KAAK,CAAC;SACrB,CAAC,CAAC;KACJ;;wHAnIU,2BAA2B;4GAA3B,2BAA2B,wRAH5B,6BAA6B;2FAG5B,2BAA2B;kBALvC,SAAS;mBAAC;oBACT,QAAQ,EAAE,qBAAqB;oBAC/B,QAAQ,EAAE,6BAA6B;oBACvC,eAAe,EAAE,uBAAuB,CAAC,MAAM;iBAChD;8BAEU,IAAI;sBAAZ,KAAK;gBACG,QAAQ;sBAAhB,KAAK;gBACG,aAAa;sBAArB,KAAK;gBACG,aAAa;sBAArB,KAAK;gBACG,WAAW;sBAAnB,KAAK;gBACG,WAAW;sBAAnB,KAAK;gBAEI,QAAQ;sBAAjB,MAAM;gBACG,MAAM;sBAAf,MAAM;;;IC5BG;AAAZ,WAAY,aAAa;IACvB,4BAAW,CAAA;IACX,8BAAa,CAAA;AACf,CAAC,EAHW,aAAa,KAAb,aAAa;;MCkEZ,0BAA0B;IAoMrC,YAAY,OAAmB,EAAU,EAAqB;QAArB,OAAE,GAAF,EAAE,CAAmB;QA9FpD,aAAQ,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEjD,eAAU,GAAsB,IAAI,YAAY,EAAE,CAAC;QA2E7D,cAAS,GAAG,KAAK,CAAC;QAClB,uBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,eAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAgBlD,IAAI,CAAC,WAAW,GAAG;YACjB,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;SAC3C,CAAC;QAEF,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC;KACvC;IAjND,IAAa,KAAK,CAAC,KAAU;QAC3B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KACxB;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IAED,IAAa,SAAS,CAAC,GAAW;QAChC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;QACtB,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,GAAG,CAAC;QACjC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KACxB;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;KACxB;IAED,IAAa,UAAU,CAAC,GAAY;QAClC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;QACvB,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,GAAG,CAAC;QAClC,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KACxB;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IAED,IAAa,QAAQ,CAAC,GAAY;QAChC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QACrB,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,GAAG,CAAC;QAChC,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KACxB;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAED,IAAa,QAAQ,CAAC,GAAW;QAC/B,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QACrB,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,GAAG,CAAC;QAChC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KACxB;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAED,IAAa,MAAM,CAAC,MAAmB;QACrC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;QACjC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KACxB;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;IAED,IAAa,GAAG,CAAC,GAAQ;QACvB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,GAAG,CAAC;QAC3B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KACxB;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;KAClB;IAED,IAAa,KAAK,CAAC,GAAU;QAC3B,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;QAClB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;KAC1C;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IAED,IAAa,UAAU,CAAC,MAAkB;QACxC,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,UAAU,EAAE;YACpG,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;SAChC;aAAM;YACL,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;SAC3B;QACD,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QAC/C,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KACxB;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IASD,IACI,gBAAgB;QAClB,IAAI,GAAG,GAAG,qBAAqB,CAAC;QAChC,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;YACzB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,QAAQ,EAAE;gBAC7C,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;aACpC;iBAAM,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,UAAU,EAAE;gBACtD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;oBAChC,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,SAAS,EAAE,IAAI,CAAC,SAAS;iBAC1B,CAAC,CAAC;gBAEH,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;oBAC3B,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC;iBAClB;qBAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;oBAClC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC9B,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;wBACpB,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;4BACnB,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC;yBAChB;qBACF;iBACF;aACF;SACF;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,GAAG,IAAI,cAAc,CAAC;SACvB;QACD,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,GAAG,IAAI,SAAS,CAAC;SAClB;QACD,IAAI,IAAI,CAAC,OAAO,KAAK,aAAa,CAAC,GAAG,EAAE;YACtC,GAAG,IAAI,WAAW,CAAC;SACpB;QACD,IAAI,IAAI,CAAC,OAAO,KAAK,aAAa,CAAC,IAAI,EAAE;YACvC,GAAG,IAAI,YAAY,CAAC;SACrB;QAED,OAAO,GAAG,CAAC;KACZ;IAED,IACI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;KAC1B;IAED,IACI,QAAQ;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;KAC7B;IAED,IACI,QAAQ;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;KAC7B;IAED,IACI,MAAM;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;QAC9B,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE;YACjB,OAAO,MAAM,CAAC;SACf;QACD,OAAO,MAAM,GAAG,IAAI,CAAC;KACtB;IAwCD,SAAS;QACP,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1B;IAED,WAAW;QACT,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;SAC3B;KACF;IAED,iBAAiB;QACf,IAAI,KAAK,GAAG,EAAE,CAAC;QAEf,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAC7B,KAAK,GAAG,EAAE,CAAC;SACZ;aAAM;YACL,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAClE,MAAM,QAAQ,GAAkB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YAEjD,IAAI,QAAQ,EAAE;gBACZ,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;aACjC;iBAAM,IAAI,KAAK,KAAK,SAAS,EAAE;gBAC9B,KAAK,GAAG,GAAG,CAAC;aACb;SACF;QAED,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE;YACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC;YAC/B,IAAI,CAAC,cAAc,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;YAC5F,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;SACxB;KACF;IAGD,OAAO;QACL,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;KACvB;IAGD,MAAM;QACJ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;KACxB;IAGD,OAAO,CAAC,KAAiB;QACvB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,OAAO;YACb,KAAK;YACL,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,QAAQ;SAC3B,CAAC,CAAC;KACJ;IAGD,UAAU,CAAC,KAAiB;QAC1B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,UAAU;YAChB,KAAK;YACL,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,QAAQ;SAC3B,CAAC,CAAC;KACJ;IAGD,SAAS,CAAC,KAAoB;QAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9B,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC;QAEpD,MAAM,QAAQ,GACZ,OAAO,KAAK,IAAI,CAAC,MAAM;YACvB,OAAO,KAAK,IAAI,CAAC,IAAI;YACrB,OAAO,KAAK,IAAI,CAAC,EAAE;YACnB,OAAO,KAAK,IAAI,CAAC,IAAI;YACrB,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC;QAEzB,IAAI,QAAQ,IAAI,YAAY,EAAE;YAC5B,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,KAAK,CAAC,eAAe,EAAE,CAAC;YAExB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACjB,IAAI,EAAE,SAAS;gBACf,KAAK;gBACL,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW,EAAE,IAAI,CAAC,QAAQ;aAC3B,CAAC,CAAC;SACJ;KACF;IAED,gBAAgB,CAAC,KAAU;QACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,UAAU;YAChB,KAAK;YACL,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,QAAQ;YAC1B,UAAU,EAAE,WAAW;SACxB,CAAC,CAAC;KACJ;IAED,WAAW,CAAC,KAAY;QACtB,IAAI,CAAC,KAAK,EAAE;YACV,OAAO;SACR;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAM;YAC7B,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;SACpC,CAAC,CAAC;QAEH,IAAI,IAAI,EAAE;YACR,OAAO,IAAI,CAAC,GAAG,CAAC;SACjB;KACF;IAED,SAAS,CAAC,IAAY;QACpB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,OAAO,IAAI,CAAC;SACb;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;KAC5C;IAED,YAAY;QACV,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAChC;IAED,cAAc,CAAC,MAAW,EAAE,GAAQ;QAClC,MAAM,WAAW,GAAG,MAAM,CAAC,eAAe,IAAI,IAAI,GAAG,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC;QACjF,OAAO,MAAM,CAAC,YAAY,GAAG,GAAG,CAAC,KAAK,GAAG,WAAW,GAAG,CAAC,CAAC;KAC1D;;uHArWU,0BAA0B;2GAA1B,0BAA0B,+wBA0GF,gBAAgB,2CAlJzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCT;2FAEU,0BAA0B;kBA3CtC,SAAS;mBAAC;oBACT,QAAQ,EAAE,qBAAqB;oBAC/B,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCT;iBACF;iIAEU,YAAY;sBAApB,KAAK;gBAEO,KAAK;sBAAjB,KAAK;gBAWO,SAAS;sBAArB,KAAK;gBAWO,UAAU;sBAAtB,KAAK;gBAUO,QAAQ;sBAApB,KAAK;gBAUO,QAAQ;sBAApB,KAAK;gBAWO,MAAM;sBAAlB,KAAK;gBAWO,GAAG;sBAAf,KAAK;gBAWO,KAAK;sBAAjB,KAAK;gBASO,UAAU;sBAAtB,KAAK;gBAeI,QAAQ;sBAAjB,MAAM;gBAEG,UAAU;sBAAnB,MAAM;gBAGP,YAAY;sBADX,SAAS;uBAAC,cAAc,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE;gBAI/D,gBAAgB;sBADnB,WAAW;uBAAC,OAAO;gBA4ChB,KAAK;sBADR,WAAW;uBAAC,gBAAgB;gBAMzB,QAAQ;sBADX,WAAW;uBAAC,mBAAmB;gBAM5B,QAAQ;sBADX,WAAW;uBAAC,mBAAmB;gBAM5B,MAAM;sBADT,WAAW;uBAAC,cAAc;gBAkF3B,OAAO;sBADN,YAAY;uBAAC,OAAO;gBAMrB,MAAM;sBADL,YAAY;uBAAC,MAAM;gBAMpB,OAAO;sBADN,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;gBAejC,UAAU;sBADT,YAAY;uBAAC,UAAU,EAAE,CAAC,QAAQ,CAAC;gBAepC,SAAS;sBADR,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;;MC7SxB,yBAAyB;IAoGpC,YACU,OAAwB,EACZ,eAAgC,EAC5C,EAAqB,EAC7B,OAAmB;QAHX,YAAO,GAAP,OAAO,CAAiB;QACZ,oBAAe,GAAf,eAAe,CAAiB;QAC5C,OAAE,GAAF,EAAE,CAAmB;QAtEtB,eAAU,GAAe,WAAW,CAAC;QAkDpC,aAAQ,GAAsB,IAAI,YAAY,EAAE,CAAC;QACjD,eAAU,GAAsB,IAAI,YAAY,EAAE,CAAC;QAQ7D,iBAAY,GAA2B;YACrC,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,EAAE;YACV,KAAK,EAAE,EAAE;SACV,CAAC;QAUA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC;QACtC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;KAC7C;IA3GD,IAAa,OAAO,CAAC,GAAU;QAC7B,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QACpB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;IAED,IAAa,UAAU,CAAC,GAAW;QACjC,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7C,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SACtE;QAED,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;QACvB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IAWD,IACI,OAAO,CAAC,GAAW;QACrB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QACpB,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;IACD,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;IAED,IACI,QAAQ;QACV,IAAI,GAAG,GAAG,oBAAoB,CAAC;QAC/B,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,GAAG,IAAI,SAAS,CAAC;SAClB;QACD,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,EAAE;YAC3B,GAAG,IAAI,oBAAoB,CAAC;SAC7B;QACD,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,EAAE;YAC3B,GAAG,IAAI,qBAAqB,CAAC;SAC9B;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;gBAC3B,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC;aAClB;iBAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;gBAClC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC9B,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;oBACpB,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;wBACnB,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC;qBAChB;iBACF;aACF;SACF;QAED,OAAO,GAAG,CAAC;KACZ;IAMD,IACI,kBAAkB;QACpB,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;KACtC;IA6BD,SAAS;QACP,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAClC,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;SACxB;KACF;IAED,aAAa,CAAC,KAAa,EAAE,QAAa;QACxC,OAAO,QAAQ,CAAC,IAAI,CAAC;KACtB;IAED,gBAAgB,CAAC,KAAa,EAAE,MAAW;QACzC,OAAO,MAAM,CAAC,IAAI,CAAC;KACpB;IAED,kBAAkB;QAChB,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC5D,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KACxB;IAED,iBAAiB,CAAC,KAAa;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAE7B,MAAM,MAAM,GAAG;YACb,KAAK,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI;SAC5B,CAAC;QAEF,IAAI,KAAK,KAAK,MAAM,EAAE;YACpB,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;SACjC;aAAM,IAAI,KAAK,KAAK,OAAO,EAAE;YAC5B,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YACpD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;YAC3C,MAAM,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;YACvC,MAAM,MAAM,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;YAC9D,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;SAChC;QAED,OAAO,MAAM,CAAC;KACf;IAED,UAAU,CAAC,KAAU,EAAE,KAAa;QAClC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;QACxB,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3B;IAGD,SAAS,CAAC,KAAoB;QAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9B,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC;QAEnD,MAAM,QAAQ,GACZ,OAAO,KAAK,IAAI,CAAC,MAAM;YACvB,OAAO,KAAK,IAAI,CAAC,IAAI;YACrB,OAAO,KAAK,IAAI,CAAC,EAAE;YACnB,OAAO,KAAK,IAAI,CAAC,IAAI;YACrB,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC;QAEzB,IAAI,QAAQ,IAAI,WAAW,EAAE;YAC3B,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,KAAK,CAAC,eAAe,EAAE,CAAC;YAExB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACjB,IAAI,EAAE,SAAS;gBACf,KAAK;gBACL,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,UAAU,EAAE,IAAI,CAAC,QAAQ;aAC1B,CAAC,CAAC;SACJ;KACF;IAGD,YAAY,CAAC,KAAU;QACrB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,YAAY;YAClB,KAAK;YACL,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,UAAU,EAAE,IAAI,CAAC,QAAQ;SAC1B,CAAC,CAAC;KACJ;IAED,kBAAkB,CAAC,MAAa,IAAI,CAAC,OAAO;QAC1C,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QACpB,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,CAAC,aAAa,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;KACvE;IAED,YAAY;QACV,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;;sHA1MU,yBAAyB;0GAAzB,yBAAyB,wmBA1B1B;;;;;;;;;;;;;;;;;;;;;;;;GAwBT;2FAEU,yBAAyB;kBA7BrC,SAAS;mBAAC;oBACT,QAAQ,EAAE,oBAAoB;oBAC9B,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;GAwBT;iBACF;;;8BAuGI,QAAQ;;yBArGE,OAAO;sBAAnB,KAAK;gBAUO,UAAU;sBAAtB,KAAK;gBAeG,QAAQ;sBAAhB,KAAK;gBACG,QAAQ;sBAAhB,KAAK;gBACG,GAAG;sBAAX,KAAK;gBACG,KAAK;sBAAb,KAAK;gBACG,UAAU;sBAAlB,KAAK;gBACG,QAAQ;sBAAhB,KAAK;gBACG,YAAY;sBAApB,KAAK;gBACG,UAAU;sBAAlB,KAAK;gBAGF,OAAO;sBADV,KAAK;gBAUF,QAAQ;sBADX,WAAW;uBAAC,OAAO;gBAgCpB,SAAS;sBAFR,WAAW;uBAAC,iBAAiB;;sBAC7B,KAAK;gBAIF,kBAAkB;sBADrB,WAAW;uBAAC,gBAAgB;gBAKnB,QAAQ;sBAAjB,MAAM;gBACG,UAAU;sBAAnB,MAAM;gBA2EP,SAAS;sBADR,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;gBA0BnC,YAAY;sBADX,YAAY;uBAAC,YAAY,EAAE,CAAC,QAAQ,CAAC;;;AChOxC,SAAS,cAAc,CAAC,KAAY;IAClC,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;IAErD,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;QAC3B,OAAO,IAAI,CAAC;KACb;IACD,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,EAAE;QAC1D,OAAO,IAAI,CAAC;KACb;IAED,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,WAAW,CAAC,KAAY;IAC/B,OAAO,IAAI,CAAC;AACd,CAAC;MAqBY,4BAA4B;IAnBzC;QA4BE,eAAU,GAAQ,EAAE,CAAC;KAyCtB;IAvCC,WAAW;QACT,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAC/B,OAAO;SACR;QACD,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;IAEO,qBAAqB;QAC3B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,qCACvC,GAAG,KACN,YAAY,EAAE,GAAG,CAAC,eAAe,IACjC,CAAC,CAAC;KACL;IAEO,YAAY;QAClB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QAErB,IAAI,CAAC,OAAO;aACT,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC;aACnC,OAAO,CAAC,GAAG;YACV,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YAClE,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;YAE7C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI;kBAChC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;kBAClD,OAAO,CAAC,qBAAqB,CAAC,CAAC;SACpC,CAAC,CAAC;KACN;IAEO,kBAAkB,CAAC,MAAsB;QAC/C,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE;YACpC,OAAO,cAAc,CAAC;SACvB;aAAM,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,EAAE;YACtC,OAAO,WAAW,CAAC;SACpB;aAAM;YACL,OAAO,MAAM,CAAC,WAAW,CAAC;SAC3B;KACF;;yHAjDU,4BAA4B;6GAA5B,4BAA4B,yPAjB7B;;;;;;;;;;;;GAYT;2FAKU,4BAA4B;kBAnBxC,SAAS;mBAAC;oBACT,QAAQ,EAAE,uBAAuB;oBACjC,QAAQ,EAAE;;;;;;;;;;;;GAYT;oBACD,IAAI,EAAE;wBACJ,KAAK,EAAE,uBAAuB;qBAC/B;iBACF;8BAEU,IAAI;sBAAZ,KAAK;gBACG,OAAO;sBAAf,KAAK;gBAEG,SAAS;sBAAjB,KAAK;gBACG,OAAO;sBAAf,KAAK;gBACG,UAAU;sBAAlB,KAAK;;;MCRK,4BAA4B;IAuCvC,YAAoB,EAAqB,EAAU,OAAwB;QAAvD,OAAE,GAAF,EAAE,CAAmB;QAAU,YAAO,GAAP,OAAO,CAAiB;QA/BjE,mBAAc,GAAG,IAAI,YAAY,CAAkC,KAAK,CAAC,CAAC;QA4B5E,cAAS,GAAY,KAAK,CAAC;QAIjC,IAAI,CAAC,YAAY,GAAG;YAClB,KAAK,EAAE,IAAI,CAAC,GAAG;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC;QAEF,IAAI,CAAC,UAAU,GAAG;YAChB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC;QAEF,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;KAC5C;IA3CD,IAAa,QAAQ,CAAC,GAAW;QAC/B,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QACrB,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,GAAG,CAAC;QAC/B,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,GAAG,CAAC;QACjC,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KACxB;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAED,IAAa,QAAQ,CAAC,GAAY;QAChC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QACrB,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,GAAG,CAAC;QACjC,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,GAAG,CAAC;QAC/B,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KACxB;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAyBD,SAAS;QACP,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACjC,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YAC/B,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;YACnC,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;SACxB;KACF;IAGD,aAAa,CAAC,MAAkB;QAC9B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;KAC5D;IAED,mBAAmB;QACjB,MAAM,MAAM,GAAG,EAAE,CAAC;QAElB,MAAM,CAAC,WAAW,CAAC,GAAG,cAAc,GAAG,IAAI,CAAC,OAAO,GAAG,eAAe,CAAC;QACtE,MAAM,CAAC,qBAAqB,CAAC,GAAG,QAAQ,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;QAElC,OAAO,MAAM,CAAC;KACf;;yHA5EU,4BAA4B;6GAA5B,4BAA4B,4bA5B7B;;;;;;;;;;;;;;;;;;;;;;;GAuBT;2FAKU,4BAA4B;kBA/BxC,SAAS;mBAAC;oBACT,QAAQ,EAAE,uBAAuB;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;GAuBT;oBACD,IAAI,EAAE;wBACJ,KAAK,EAAE,uBAAuB;qBAC/B;iBACF;sIAEU,UAAU;sBAAlB,KAAK;gBACG,SAAS;sBAAjB,KAAK;gBACG,WAAW;sBAAnB,KAAK;gBACG,OAAO;sBAAf,KAAK;gBACG,eAAe;sBAAvB,KAAK;gBACG,GAAG;sBAAX,KAAK;gBACG,WAAW;sBAAnB,KAAK;gBACI,cAAc;sBAAvB,MAAM;gBAEM,QAAQ;sBAApB,KAAK;gBAWO,QAAQ;sBAApB,KAAK;gBA2CN,aAAa;sBADZ,YAAY;uBAAC,aAAa,EAAE,CAAC,QAAQ,CAAC;;;MCgB5B,sBAAsB;;;;IAoJjC,YAAoB,EAAqB;QAArB,OAAE,GAAF,EAAE,CAAmB;QA3IhC,aAAQ,GAAU,EAAE,CAAC;QAwFpB,WAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;QAC/C,SAAI,GAAsB,IAAI,YAAY,EAAE,CAAC;QAC7C,aAAQ,GAAsB,IAAI,YAAY,EAAE,CAAC;QACjD,WAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;QAC/C,iBAAY,GAAsB,IAAI,YAAY,EAAE,CAAC;QACrD,mBAAc,GAAG,IAAI,YAAY,CAAkC,KAAK,CAAC,CAAC;QAC1E,eAAU,GAAsB,IAAI,YAAY,EAAE,CAAC;QAwB7D,oBAAe,GAAmB,IAAI,cAAc,EAAE,CAAC;QACvD,SAAI,GAAU,EAAE,CAAC;QACjB,YAAO,GAAG,CAAC,CAAC;QACZ,YAAO,GAAQ,EAAE,CAAC;QAKlB,eAAU,GAAQ,IAAI,OAAO,EAAe,CAAC;QAC7C,kBAAa,GAAU,EAAE,CAAC;;;;QA2O1B,uBAAkB,GAAG,CAAC,GAAS,EAAE,KAAW;YAC1C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACnB,OAAO,CAAC,CAAC;aACV;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;YAC3C,OAAO,OAAO,SAAS,KAAK,UAAU,GAAG,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,GAAI,SAAoB,CAAC;SACxF,CAAC;;QAnOA,IAAI,CAAC,aAAa,GAAG,CAAC,KAAa,EAAE,GAAQ;YAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,OAAO,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aAC9B;iBAAM;gBACL,OAAO,GAAG,CAAC;aACZ;SACF,CAAC;KACH;IApID,IAAa,QAAQ,CAAC,GAAW;QAC/B,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QACrB,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAED,IAAa,IAAI,CAAC,GAAU;QAC1B,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;QACjB,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IAED,IAAa,OAAO,CAAC,GAAU;QAC7B,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QACpB,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;KAC5D;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;IAED,IAAa,MAAM,CAAC,GAAW;QAC7B,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;YAAE,IAAI,CAAC,YAAY,EAAE,CAAC;KACxF;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;IAED,IAAa,QAAQ,CAAC,GAAW;QAC/B,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QACrB,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAED,IACI,SAAS;QACX,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,OAAO,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;SAC/B;aAAM;YACL,OAAO,MAAM,CAAC;SACf;KACF;IAED,IAEI,UAAU,CAAC,GAAG;QAChB,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,WAAW,GAAG,GAAG,GAAG,IAAI,CAAC;SAC/B;aAAM;YACL,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;SAC3B;QAED,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;;;;IAeD,IAAI,aAAa;QACf,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;KAC7B;;;;;;IAOD,IAAI,YAAY;QACd,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC3D,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;SACtD;;QAED,OAAO,SAAS,CAAC;KAClB;;;;IAsCD,QAAQ;QACN,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAgC;gBAC5F,IAAI,IAAI,KAAK,KAAK,EAAE;oBAClB,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;iBAChC;gBACD,IAAI,IAAI,KAAK,KAAK,EAAE;oBAClB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;iBAC3B;;;gBAID,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;aACxB,CAAC,CAAC;SACJ;QAED,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAgC;gBAC9F,IAAI,IAAI,KAAK,OAAO,EAAE;oBACpB,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;iBAChC;gBACD,IAAI,IAAI,KAAK,KAAK,EAAE;oBAClB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;iBAC3B;;;gBAID,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;aACxB,CAAC,CAAC;SACJ;KACF;;;;IAKD,WAAW;QACT,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE;YACtC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;SAC7B;KACF;;;;IAKD,aAAa,CAAC,MAAe;;QAE3B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,OAAO;SACR;QAED,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,cAAc,IAAI,MAAM,EAAE;;YAEpD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;YACxC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;SACnD;aAAM,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YAClD,MAAM,GAAG,CAAC,CAAC;SACZ;QAED,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;KACtC;;;;;IAMD,YAAY,CAAC,KAAU;QACrB,MAAM,UAAU,GAAW,KAAK,CAAC,UAAU,CAAC;QAC5C,MAAM,UAAU,GAAW,KAAK,CAAC,UAAU,CAAC;;;QAI5C,IAAI,IAAI,CAAC,OAAO,KAAK,UAAU,IAAI,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE;YAC9D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACf,OAAO,EAAE,UAAU;gBACnB,OAAO,EAAE,UAAU;aACpB,CAAC,CAAC;SACJ;QAED,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC;QAE1B,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACjC,IAAI,CAAC,UAAU,EAAE,CAAC;KACnB;;;;IAKD,UAAU,CAAC,SAAiB;QAC1B,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;QAEhD,IAAI,SAAS,KAAK,IAAI,EAAE;YACtB,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC5B;aAAM,IAAI,SAAS,KAAK,MAAM,EAAE;YAC/B,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SAC7B;QAED,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YAC7C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;SAC5B;KACF;;;;IAKD,UAAU;QACR,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACrC,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,MAAM,IAAI,GAAU,EAAE,CAAC;;;;QAKvB,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,eAAe,GAAG,CAAC,CAAC;;;YAGxB,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;gBACjC,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;aACpD;YAED,OAAO,QAAQ,GAAG,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;;gBAE5D,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBACzC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAErC,IAAI,KAAK,CAAC,KAAK,EAAE;;oBAEf,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAM,EAAE,CAAS;wBACpC,MAAM,IAAI,GAAG,GAAG,QAAQ,IAAI,CAAC,EAAE,CAAC;wBAChC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;qBAC9B,CAAC,CAAC;iBACJ;gBACD,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBAClB,GAAG,EAAE,CAAC;;gBAGN,QAAQ,EAAE,CAAC;aACZ;SACF;aAAM;YACL,OAAO,QAAQ,GAAG,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;gBAClD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAEhC,IAAI,GAAG,EAAE;;oBAEP,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;oBACnC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;iBACjB;gBAED,GAAG,EAAE,CAAC;gBACN,QAAQ,EAAE,CAAC;aACZ;SACF;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;;;;IAKD,YAAY,CAAC,GAAQ;;QAEnB,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,UAAU,EAAE;YACxC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;SAC5B;QAED,OAAO,IAAI,CAAC,SAAmB,CAAC;KACjC;;;;IAKD,cAAc,CAAC,KAAU;QACvB,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,IAAI,KAAK,CAAC,KAAK,EAAE;YACf,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBACvD,SAAS,IAAI,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;aAC7D;SACF;QAED,OAAO,SAAS,CAAC;KAClB;;;;IAKD,qBAAqB,CAAC,GAAQ;QAC5B,IAAI,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;;QAG1C,IAAI,QAAQ,EAAE;YACZ,SAAS,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;SAC3C;QAED,OAAO,SAAS,CAAC;KAClB;;;;;;;;;;;;;;;;;;;;;IAiCD,aAAa,CAAC,IAAS;QACrB,MAAM,MAAM,GAAQ,EAAE,CAAC;;QAGvB,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;SAC7C;QAED,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,cAAc,EAAE;YAC1C,IAAI,GAAG,GAAG,CAAC,CAAC;YAEZ,IAAI,IAAI,CAAC,WAAW,EAAE;;gBAEpB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAClC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aACvC;iBAAM;gBACL,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aAC9B;;;;YAKD,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAEhD,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;SAC7B;QAED,OAAO,MAAM,CAAC;KACf;;;;;;;;;;IAWD,yBAAyB;QACvB,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACvD,OAAO,IAAI,CAAC;SACb;QAED,MAAM,MAAM,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE7D,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QAE5B,OAAO,MAAM,CAAC;KACf;;;;IAKD,aAAa;QACX,UAAU,CAAC,OAAO,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;KACxD;;;;IAKD,aAAa;QACX,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,IAAI,GAAG,CAAC,CAAC;QAEb,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,IAAI,CAAC,cAAc,EAAE;;;;gBAIvB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;gBAC5C,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvD,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;aACpE;iBAAM;;;gBAGL,KAAK,GAAG,CAAC,CAAC;gBACV,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;aACtB;SACF;aAAM;;;YAGL,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBACxB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;aAClD;YACD,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SACvD;QAED,IAAI,CAAC,OAAO,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;KAChC;;;;;IAMD,qBAAqB;QACnB,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;YACjE,OAAO;SACR;;;;QAKD,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;;QAGlC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACjC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;YAChC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE;gBAC3B,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;oBAC5B,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;iBACxB;aACF;YAED,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;gBAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,eAAe,EAAE,IAAI,CAAC,kBAAkB;gBACxC,eAAe,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,cAAc;gBACvD,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,aAAa;aACd,CAAC,CAAC;SACJ;KACF;;;;IAKD,wBAAwB;;;;QAItB,MAAM,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAEjD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,cAAc,EAAE;YAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,qBAAqB,GAAG,CAAC,CAAC,CAAC;YAC3E,OAAO,YAAY,IAAI,IAAI,CAAC,OAAO,GAAG,qBAAqB,GAAG,CAAC,GAAG,qBAAqB,CAAC;SACzF;QAED,OAAO,qBAAqB,CAAC;KAC9B;;;;;;;IAQD,kBAAkB,CAAC,GAAQ;;QAEzB,MAAM,qBAAqB,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAC9D,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,cAAc,GAAG,CAAC,CAAC,CAAC;;QAGrC,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,cAAc,EAAE;YAC1C,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;;YAE3E,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;SACnD;;QAGD,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;SAC9C;aAAM;YACL,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC9B;QAED,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YACrB,IAAI,EAAE,CAAC,GAAG,CAAC;YACX,YAAY,EAAE,qBAAqB;SACpC,CAAC,CAAC;KACJ;;;;IAKD,aAAa,CAAC,QAAiB;;QAE7B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;;QAGxB,MAAM,qBAAqB,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAE9D,IAAI,QAAQ,EAAE;YACZ,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE;gBAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC9B;SACF;QAED,IAAI,IAAI,CAAC,UAAU,EAAE;;YAEnB,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB;;QAGD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,YAAY,EAAE,qBAAqB;SACpC,CAAC,CAAC;KACJ;;;;IAKD,YAAY;QACV,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,UAAU,EAAE,CAAC;KACnB;;;;IAKD,gBAAgB,CAAC,KAAa,EAAE,MAAW;QACzC,OAAO,MAAM,CAAC,IAAI,CAAC;KACpB;;;;IAKD,aAAa,CAAC,KAAa;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAE7B,MAAM,MAAM,GAAG;YACb,KAAK,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI;SAC5B,CAAC;QAEF,IAAI,KAAK,KAAK,MAAM,EAAE;YACpB,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;SACjC;aAAM,IAAI,KAAK,KAAK,OAAO,EAAE;YAC5B,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YACpD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;YAC3C,MAAM,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;YACvC,MAAM,MAAM,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC;YAC/B,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;SAChC;QAED,OAAO,MAAM,CAAC;KACf;;;;IAKD,cAAc,CAAC,GAAQ;QACrB,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,qBAAqB,EAAE;YACjE,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAChC;SACF;QAED,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;KAC7D;IAED,iBAAiB,CAAC,GAAQ,EAAE,QAAe;QACzC,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC,CAAC;QAE7C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC;YACzB,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC/B,OAAO,EAAE,KAAK,KAAK,CAAC;SACrB,CAAC,CAAC;KACJ;;;;IAKD,WAAW,CAAC,GAAQ;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KACtC;IAED,YAAY,CAAC,GAAQ;QACnB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;KAC/B;;mHApqBU,sBAAsB;uGAAtB,sBAAsB,+sCAyGtB,iBAAiB,gDAhNlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiGT;2FAMU,sBAAsB;kBAzGlC,SAAS;mBAAC;oBACT,QAAQ,EAAE,gBAAgB;oBAC1B,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiGT;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,IAAI,EAAE;wBACJ,KAAK,EAAE,gBAAgB;qBACxB;iBACF;wGAEU,UAAU;sBAAlB,KAAK;gBACG,UAAU;sBAAlB,KAAK;gBACG,gBAAgB;sBAAxB,KAAK;gBACG,cAAc;sBAAtB,KAAK;gBACG,SAAS;sBAAjB,KAAK;gBACG,OAAO;sBAAf,KAAK;gBACG,YAAY;sBAApB,KAAK;gBACG,aAAa;sBAArB,KAAK;gBACG,QAAQ;sBAAhB,KAAK;gBACG,WAAW;sBAAnB,KAAK;gBACG,SAAS;sBAAjB,KAAK;gBACG,WAAW;sBAAnB,KAAK;gBACG,WAAW;sBAAnB,KAAK;gBACG,YAAY;sBAApB,KAAK;gBACG,WAAW;sBAAnB,KAAK;gBACG,QAAQ;sBAAhB,KAAK;gBACG,WAAW;sBAAnB,KAAK;gBACG,qBAAqB;sBAA7B,KAAK;gBACG,UAAU;sBAAlB,KAAK;gBACG,WAAW;sBAAnB,KAAK;gBACG,cAAc;sBAAtB,KAAK;gBACG,UAAU;sBAAlB,KAAK;gBACG,eAAe;sBAAvB,KAAK;gBACG,aAAa;sBAArB,KAAK;gBAEO,QAAQ;sBAApB,KAAK;gBASO,IAAI;sBAAhB,KAAK;gBASO,OAAO;sBAAnB,KAAK;gBAUO,MAAM;sBAAlB,KAAK;gBASO,QAAQ;sBAApB,KAAK;gBAUF,SAAS;sBADZ,WAAW;uBAAC,aAAa;gBAWtB,UAAU;sBAFb,KAAK;;sBACL,WAAW;uBAAC,cAAc;gBAejB,MAAM;sBAAf,MAAM;gBACG,IAAI;sBAAb,MAAM;gBACG,QAAQ;sBAAjB,MAAM;gBACG,MAAM;sBAAf,MAAM;gBACG,YAAY;sBAArB,MAAM;gBACG,cAAc;sBAAvB,MAAM;gBACG,UAAU;sBAAnB,MAAM;gBAEuB,QAAQ;sBAArC,SAAS;uBAAC,iBAAiB;;;AChO9B;;;SAGgB,WAAW,CAAC,QAAkB,EAAE,OAAsB;IACpE,IAAI,QAAQ,KAAK,QAAQ,CAAC,MAAM,EAAE;QAChC,IAAI,OAAO,KAAK,aAAa,CAAC,GAAG,EAAE;YACjC,OAAO,aAAa,CAAC,IAAI,CAAC;SAC3B;aAAM;YACL,OAAO,aAAa,CAAC,GAAG,CAAC;SAC1B;KACF;SAAM;QACL,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,aAAa,CAAC,GAAG,CAAC;SAC1B;aAAM,IAAI,OAAO,KAAK,aAAa,CAAC,GAAG,EAAE;YACxC,OAAO,aAAa,CAAC,IAAI,CAAC;SAC3B;aAAM,IAAI,OAAO,KAAK,aAAa,CAAC,IAAI,EAAE;YACzC,OAAO,SAAS,CAAC;SAClB;;QAED,OAAO,SAAS,CAAC;KAClB;AACH,CAAC;AAED;;;;SAIgB,iBAAiB,CAAC,CAAM,EAAE,CAAM;IAC9C,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,WAAW;QAAE,CAAC,GAAG,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,WAAW;QAAE,CAAC,GAAG,CAAC,CAAC;IAClD,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE;QAC1C,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;KACrB;SAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;;QAEvF,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACd,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;;QAEd,IAAI,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE;YAAE,OAAO,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE;YAAE,OAAO,CAAC,CAAC;KACjD;SAAM;;QAEL,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC;QAC7C,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;KAC7C;;IAGD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;SAIgB,QAAQ,CAAC,IAAW,EAAE,OAAc,EAAE,IAAmB;IACvE,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO;QAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;;;;;IAMxD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAe,CAAC;IAC7C,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAE5D,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG;QACnC,IAAI,GAAG,CAAC,UAAU,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,UAAU,EAAE;YAC1D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC;SAChC;QACD,OAAO,GAAG,CAAC;KACZ,EAAE,EAAE,CAAC,CAAC;;;IAIP,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG;QAC7B,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACtB,OAAO;YACL,IAAI;YACJ,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,WAAW,EAAE,aAAa,CAAC,IAAI,CAAC;YAChC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,iBAAiB;SAC3C,CAAC;KACH,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,IAAS,EAAE,IAAS;QAC7C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;;YAElC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC;;YAExC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACtC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;;;;;;;;YAStC,MAAM,UAAU,GACd,SAAS,CAAC,GAAG,KAAK,aAAa,CAAC,IAAI;kBAChC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC;kBAC5D,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;;YAGpE,IAAI,UAAU,KAAK,CAAC;gBAAE,OAAO,UAAU,CAAC;SACzC;QAED,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;;;;QAKpE,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;KACnE,CAAC,CAAC;AACL;;MC1Ea,4BAA4B;IAwHvC,YAAoB,EAAqB;QAArB,OAAE,GAAF,EAAE,CAAmB;QAxE/B,SAAI,GAAsB,IAAI,YAAY,EAAE,CAAC;QAC7C,WAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;QAC/C,sBAAiB,GAAG,IAAI,YAAY,CAAqC,KAAK,CAAC,CAAC;QA4D1F,WAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAGhC,aAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAQ5C,IAAI,CAAC,WAAW,GAAG;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC;KACH;IApHD,IAAa,eAAe,CAAC,KAAK;QAChC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,WAAW,CAAC,eAAe,GAAG,KAAK,CAAC;KAC1C;IACD,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC;KAC9B;IAID,IAAa,MAAM,CAAC,MAAmB;QACrC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;QACjC,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KACxB;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;IAMD,IAAa,KAAK,CAAC,GAAU;QAC3B,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;QAClB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QACxC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KACxB;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IAMD,IACI,gBAAgB;QAClB,IAAI,GAAG,GAAG,uBAAuB,CAAC;QAElC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE,GAAG,IAAI,WAAW,CAAC;QAC7C,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU;YAAE,GAAG,IAAI,aAAa,CAAC;QACjD,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;YAC3B,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;gBAC/C,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;aACtC;iBAAM,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,UAAU,EAAE;gBACxD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;oBAClC,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB,CAAC,CAAC;gBAEH,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;oBAC3B,GAAG,IAAI,GAAG,CAAC;iBACZ;qBAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;oBAClC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC9B,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;wBACpB,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI;4BAAE,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC;qBACrC;iBACF;aACF;SACF;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,OAAO,EAAE;YACX,GAAG,IAAI,qBAAqB,OAAO,EAAE,CAAC;SACvC;QAED,OAAO,GAAG,CAAC;KACZ;IAED,IACI,IAAI;;QAEN,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,KAAK,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC;KAChF;IAED,IACI,QAAQ;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;KAC7B;IAED,IACI,QAAQ;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;KAC7B;IAED,IACI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;KAC1B;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,IAAI,IAAI,CAAC,aAAa,KAAK,aAAa,CAAC,QAAQ,CAAC;KACpH;IAuBD,aAAa,CAAC,MAAkB;QAC9B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;KACrE;IAED,QAAQ;QACN,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACnD;IAED,WAAW,CAAC,KAAY;QACtB,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;YACxB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAM;gBAC7B,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;aACpC,CAAC,CAAC;YAEH,IAAI,IAAI;gBAAE,OAAO,IAAI,CAAC,GAAG,CAAC;SAC3B;KACF;IAED,MAAM;QACJ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE,OAAO;QAElC,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACb,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,OAAO;YACvB,QAAQ;SACT,CAAC,CAAC;KACJ;IAED,aAAa,CAAC,OAAsB;QAClC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ;YAAE,OAAO;QAC9C,IAAI,OAAO,KAAK,aAAa,CAAC,GAAG,EAAE;YACjC,OAAO,qBAAqB,IAAI,CAAC,iBAAiB,EAAE,CAAC;SACtD;aAAM,IAAI,OAAO,KAAK,aAAa,CAAC,IAAI,EAAE;YACzC,OAAO,sBAAsB,IAAI,CAAC,kBAAkB,EAAE,CAAC;SACxD;aAAM;YACL,OAAO,YAAY,IAAI,CAAC,aAAa,EAAE,CAAC;SACzC;KACF;;yHAzKU,4BAA4B;6GAA5B,4BAA4B,q2BA5B7B;;;;;;;;;;;;;;;;;;;;;;GAsBT;2FAMU,4BAA4B;kBA9BxC,SAAS;mBAAC;oBACT,QAAQ,EAAE,uBAAuB;oBACjC,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;GAsBT;oBACD,IAAI,EAAE;wBACJ,KAAK,EAAE,uBAAuB;qBAC/B;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;iBAChD;wGAEU,QAAQ;sBAAhB,KAAK;gBACG,iBAAiB;sBAAzB,KAAK;gBACG,kBAAkB;sBAA1B,KAAK;gBACG,aAAa;sBAArB,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBACG,oBAAoB;sBAA5B,KAAK;gBACG,mBAAmB;sBAA3B,KAAK;gBAIO,eAAe;sBAA3B,KAAK;gBAQG,aAAa;sBAArB,KAAK;gBAEO,MAAM;sBAAlB,KAAK;gBAYN,YAAY;sBAFX,WAAW;uBAAC,iBAAiB;;sBAC7B,KAAK;gBAGO,KAAK;sBAAjB,KAAK;gBAYI,IAAI;sBAAb,MAAM;gBACG,MAAM;sBAAf,MAAM;gBACG,iBAAiB;sBAA1B,MAAM;gBAGH,gBAAgB;sBADnB,WAAW;uBAAC,OAAO;gBAkChB,IAAI;sBADP,WAAW;uBAAC,YAAY;gBAOrB,QAAQ;sBADX,WAAW;uBAAC,mBAAmB;gBAM5B,QAAQ;sBADX,WAAW;uBAAC,mBAAmB;gBAM5B,KAAK;sBADR,WAAW;uBAAC,gBAAgB;gBA8B7B,aAAa;sBADZ,YAAY;uBAAC,aAAa,EAAE,CAAC,QAAQ,CAAC;;;MCvG5B,wBAAwB;IA6FnC,YAAoB,EAAqB;QAArB,OAAE,GAAF,EAAE,CAAmB;QAtB/B,SAAI,GAAsB,IAAI,YAAY,EAAE,CAAC;QAC7C,YAAO,GAAsB,IAAI,YAAY,EAAE,CAAC;QAChD,WAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;QAC/C,WAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;QAC/C,sBAAiB,GAAG,IAAI,YAAY,CAAqC,KAAK,CAAC,CAAC;QAG1F,uBAAkB,GAAQ;YACxB,KAAK,EAAE,GAAG;SACX,CAAC;QAKF,kBAAa,GAA2B;YACtC,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,EAAE;YACV,KAAK,EAAE,EAAE;SACV,CAAC;QAEM,cAAS,GAAG,KAAK,CAAC;KAEmB;IAnF7C,IAAa,UAAU,CAAC,GAAW;QACjC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;QACvB,UAAU,CAAC;YACT,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC7C,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACrE,IAAI,CAAC,gBAAgB,EAAE,CAAC;aACzB;SACF,CAAC,CAAC;KACJ;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IAUD,IAEI,YAAY,CAAC,GAAQ;QACvB,IAAI,GAAG,KAAK,MAAM,EAAE;YAClB,IAAI,CAAC,aAAa,GAAG,GAAG,GAAG,IAAI,CAAC;SACjC;aAAM;YACL,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;SAC1B;KACF;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;KAC3B;IAED,IAAa,OAAO,CAAC,GAAU;QAC7B,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QAEpB,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC1C,UAAU,CAAC;YACT,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAC5D,IAAI,CAAC,gBAAgB,EAAE,CAAC;SACzB,CAAC,CAAC;KACJ;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;IAED,IACI,OAAO,CAAC,GAAW;QACrB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QACpB,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;IACD,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;IA0BD,WAAW;QACT,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;KACvB;IAED,gBAAgB,CAAC,EAAE,KAAK,EAAE,KAAK,EAA8B;QAC3D,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;KAC9B;IAED,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAA8B;QACzD,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;;;QAI7B,UAAU,CAAC;;;YAGT,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9D,IAAI,MAAM,EAAE;gBACV,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;aACzB;SACF,EAAE,CAAC,CAAC,CAAC;KACP;IAED,IACI,WAAW;QACb,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,OAAO,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;SAC/B;QAED,OAAO,MAAM,CAAC;KACf;IAED,aAAa,CAAC,KAAa,EAAE,QAAa;QACxC,OAAO,QAAQ,CAAC,IAAI,CAAC;KACtB;IAED,gBAAgB,CAAC,KAAa,EAAE,MAAW;QACzC,OAAO,MAAM,CAAC,IAAI,CAAC;KACpB;IAED,eAAe,CAAC,KAAa,EAAE,MAAgC;QAC7D,IAAI,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE;YAC5B,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC;SACzB;aAAM,IAAI,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE;YACnC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC;SACzB;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACf,MAAM;YACN,SAAS,EAAE,MAAM,CAAC,KAAK;YACvB,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;KACJ;IAED,iBAAiB,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAO;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;QACxB,MAAM,CAAC,mBAAmB,GAAG,SAAS,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAChB,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,SAAS;YACpB,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAC;KACJ;IAED,eAAe,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAO;QACxD,IAAI,SAAS,IAAI,SAAS,KAAK,CAAC,EAAE;YAChC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAC5C,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC;YAC3B,SAAS,CAAC,mBAAmB,GAAG,SAAS,CAAC;SAC3C;QACD,IAAI,QAAQ,IAAI,QAAQ,KAAK,CAAC,EAAE;YAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC3C,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC;YAE1B,IAAI,YAAY,KAAK,QAAQ,EAAE;gBAC7B,SAAS,CAAC,mBAAmB,GAAG;oBAC9B,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,YAAY,GAAG,QAAQ,GAAG,eAAe,GAAG,cAAc,CAAC;iBAC1F,CAAC;aACH;SACF;KACF;IAED,SAAS,CAAC,KAAa;QACrB,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QAC7D,IAAI,KAAK,GAAG,eAAe,EAAE;YAC3B,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC7C;QAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QAC/D,IAAI,KAAK,GAAG,eAAe,GAAG,iBAAiB,EAAE;YAC/C,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC;SAC/D;QAED,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,eAAe,GAAG,iBAAiB,CAAC,CAAC;KACnF;IAED,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAO;;QAEzC,IAAI,MAAM,CAAC,QAAQ,EAAE;YACnB,OAAO;SACR;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACb,KAAK;YACL,MAAM;YACN,SAAS;YACT,QAAQ;SACT,CAAC,CAAC;KACJ;IAED,YAAY,CAAC,MAAW,EAAE,SAAiB,EAAE,QAAgB;QAC3D,IAAI,GAAG,GAAG,CAAC,CAAC;QAEZ,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACf,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;SACjB;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAChC,CAAC,qBAAQ,CAAC,CAAE,CAAC;YACb,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE;gBAC1B,GAAG,GAAG,CAAC,CAAC;aACT;YACD,OAAO,CAAC,CAAC;SACV,CAAC,CAAC;QAEH,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;SACtB;aAAM,IAAI,SAAS,EAAE;YACpB,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC;SAC3B;aAAM;YACL,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,MAAM,EAAE;gBACrC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;aACpC;YAED,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;SAClD;QAED,OAAO,KAAK,CAAC;KACd;IAED,gBAAgB;QACd,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC7D,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;SACzB;KACF;IAED,iBAAiB,CAAC,KAAa;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAE7B,MAAM,MAAM,GAAG;YACb,KAAK,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI;SAC5B,CAAC;QAEF,IAAI,KAAK,KAAK,QAAQ,EAAE;YACtB,WAAW,CAAC,MAAM,EAAE,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACtC;aAAM,IAAI,KAAK,KAAK,OAAO,EAAE;YAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;YACjD,MAAM,MAAM,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC;YAC9B,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;SAChC;QAED,OAAO,MAAM,CAAC;KACf;;qHAxQU,wBAAwB;yGAAxB,wBAAwB,uwBAvDzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDT;2FAMU,wBAAwB;kBAzDpC,SAAS;mBAAC;oBACT,QAAQ,EAAE,kBAAkB;oBAC5B,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDT;oBACD,IAAI,EAAE;wBACJ,KAAK,EAAE,kBAAkB;qBAC1B;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;iBAChD;wGAEU,iBAAiB;sBAAzB,KAAK;gBACG,kBAAkB;sBAA1B,KAAK;gBACG,aAAa;sBAArB,KAAK;gBACG,UAAU;sBAAlB,KAAK;gBACG,cAAc;sBAAtB,KAAK;gBACG,oBAAoB;sBAA5B,KAAK;gBAIO,UAAU;sBAAtB,KAAK;gBAeG,KAAK;sBAAb,KAAK;gBACG,QAAQ;sBAAhB,KAAK;gBACG,eAAe;sBAAvB,KAAK;gBACG,aAAa;sBAArB,KAAK;gBACG,WAAW;sBAAnB,KAAK;gBAMF,YAAY;sBAFf,WAAW;uBAAC,cAAc;;sBAC1B,KAAK;gBAaO,OAAO;sBAAnB,KAAK;gBAgBF,OAAO;sBADV,KAAK;gBASI,IAAI;sBAAb,MAAM;gBACG,OAAO;sBAAhB,MAAM;gBACG,MAAM;sBAAf,MAAM;gBACG,MAAM;sBAAf,MAAM;gBACG,iBAAiB;sBAA1B,MAAM;gBA6CH,WAAW;sBADd,WAAW;uBAAC,aAAa;;;AChM5B;;;SAGgB,QAAQ,CAAC,IAAS,EAAE,IAAY,EAAE,OAAa;IAC7D,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;IACxB,IAAI,OAAY,CAAC;IACjB,IAAI,IAAS,CAAC;IACd,IAAI,MAAW,CAAC;IAChB,IAAI,OAAO,GAAQ,IAAI,CAAC;IACxB,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,SAAS,KAAK;QACZ,QAAQ,GAAG,OAAO,CAAC,OAAO,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QACvD,OAAO,GAAG,IAAI,CAAC;QACf,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;KACpC;IAED,OAAO;QACL,MAAM,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QAExB,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK,EAAE;YAC1C,QAAQ,GAAG,GAAG,CAAC;SAChB;QAED,MAAM,SAAS,GAAG,IAAI,IAAI,GAAG,GAAG,QAAQ,CAAC,CAAC;QAC1C,OAAO,GAAG,IAAI,CAAC;QACf,IAAI,GAAG,SAAS,CAAC;QAEjB,IAAI,SAAS,IAAI,CAAC,EAAE;YAClB,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,GAAG,IAAI,CAAC;YACf,QAAQ,GAAG,GAAG,CAAC;YACf,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;SACpC;aAAM,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE;YACjD,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;SACxC;QAED,OAAO,MAAM,CAAC;KACf,CAAC;AACJ,CAAC;AAED;;;;;;;;SAQgB,YAAY,CAAC,QAAgB,EAAE,OAAa;IAC1D,OAAO,SAAS,cAAc,CAAC,MAAW,EAAE,GAAgB,EAAE,UAA8B;QAC1F,OAAO;YACL,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,UAAU,CAAC,UAAU;YACjC,GAAG,EAAE,SAAS,MAAM;gBAClB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE;oBAC/B,YAAY,EAAE,IAAI;oBAClB,UAAU,EAAE,UAAU,CAAC,UAAU;oBACjC,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC;iBACrD,CAAC,CAAC;gBAEH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;aAClB;SACF,CAAC;KACH,CAAC;AACJ;;AC/DA;;;SAGgB,gBAAgB,CAAC,OAAc;IAC7C,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;QACvB,aAAa,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;KAClC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;;;SAIgB,kBAAkB,CAAC,UAAe,EAAE,aAAkB;IACpE,MAAM,YAAY,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACnD,MAAM,aAAa,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IAE7C,IAAI,YAAY,KAAK,aAAa,EAAE;QAClC,YAAY,CAAC,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;KACzD;AACH,CAAC;AAED;;;AAGA,SAAS,YAAY,CAAC,WAAgB,EAAE,QAAa,EAAE,aAAkB;;IAEvE,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;QAC9B,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE;YACtC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;gBACzB,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC;gBACzB,aAAa,IAAI,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;aACxD;iBAAM;gBACL,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;aAClB;SACF;KACF;IAED,MAAM,WAAW,GAAG,EAAE,CAAC;IACvB,IAAI,cAAc,GAAG,QAAQ,CAAC;;IAG9B,GAAG;QACD,MAAM,iBAAiB,GAAG,cAAc,GAAG,aAAa,CAAC;QACzD,cAAc,GAAG,CAAC,CAAC;QAEnB,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;YAC9B,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE;;gBAEtC,IAAI,MAAM,CAAC,aAAa,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;oBACrD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,GAAG,iBAAiB,CAAC;oBACpE,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE;wBAC/D,cAAc,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;wBAC7C,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC;wBAC/B,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;qBACjC;yBAAM;wBACL,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC;qBACzB;iBACF;aACF;SACF;KACF,QAAQ,cAAc,KAAK,CAAC,EAAE;AACjC,CAAC;AAED;;;;;;;;;;;;;;;;;;;SAmBgB,qBAAqB,CACnC,UAAiB,EACjB,aAAqB,EACrB,QAAgB,EAChB,UAAmB,EACnB,kBAA0B,GAAG;IAE7B,MAAM,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;QAChF,OAAO,CAAC,CAAC,aAAa,KAAK,KAAK,CAAC;KAClC,CAAC,CAAC;IAEH,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE;QACpC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;YACtB,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC;SAClC;KACF;IAED,IAAI,sBAAsB,GAAG,CAAC,CAAC;IAC/B,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,YAAY,GAAG,eAAe,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IAChE,IAAI,cAAc,GAAG,aAAa,GAAG,YAAY,CAAC;IAClD,MAAM,gBAAgB,GAAU,EAAE,CAAC;IACnC,MAAM,mBAAmB,GAAG,CAAC,CAAC;;IAG9B,GAAG;QACD,sBAAsB,GAAG,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC;QACjE,aAAa,GAAG,YAAY,IAAI,aAAa,CAAC;QAE9C,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE;YACpC,IAAI,aAAa,IAAI,UAAU,EAAE;gBAC/B,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,IAAI,eAAe,CAAC;aACrE;iBAAM;gBACL,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,eAAe,IAAI,sBAAsB,CAAC;gBAE3E,IAAI,MAAM,CAAC,QAAQ,IAAI,OAAO,GAAG,MAAM,CAAC,QAAQ,EAAE;oBAChD,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC;oBAC/B,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBAC/B;qBAAM,IAAI,MAAM,CAAC,QAAQ,IAAI,OAAO,GAAG,MAAM,CAAC,QAAQ,EAAE;oBACvD,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC;oBAC/B,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBAC/B;qBAAM;oBACL,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC;iBACxB;aACF;YAED,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;SAC1C;QAED,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;QAC3C,cAAc,GAAG,aAAa,GAAG,YAAY,CAAC;QAC9C,sBAAsB,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;KAC3D,QAAQ,cAAc,GAAG,mBAAmB,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;AACjF,CAAC;AAED;;;AAGA,SAAS,sBAAsB,CAAC,eAAsB,EAAE,gBAAuB;IAC7E,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE;QACrC,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9C,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;KAClC;AACH,CAAC;AAED;;;AAGA,SAAS,eAAe,CAAC,UAAe,EAAE,kBAA0B,GAAG;IACrE,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE;QAC/B,YAAY,IAAI,MAAM,CAAC,KAAK,IAAI,eAAe,CAAC;KACjD;IAED,OAAO,YAAY,CAAC;AACtB;;MC1Ha,uBAAuB;IA1CpC;QAmFY,WAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEzD,WAAM,GAAW,CAAC,CAAC;QACnB,UAAK,GAAW,CAAC,CAAC;QAClB,UAAK,GAAW,CAAC,CAAC;KA4DnB;IAnGC,IACI,IAAI,CAAC,GAAW;QAClB,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;KAC/B;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IAED,IACI,KAAK,CAAC,GAAW;QACnB,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;KAC/B;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IAED,IACI,IAAI,CAAC,GAAW;QAClB,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;KAC/B;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IAED,IAAI,UAAU;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;KAChC;IASD,WAAW;QACT,OAAO,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;KACtB;IAED,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;KACpC;IAED,QAAQ;QACN,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;KAChC;IAED,QAAQ;QACN,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;KAChC;IAED,UAAU,CAAC,IAAY;QACrB,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE;YAC7D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YAEjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACf,IAAI;aACL,CAAC,CAAC;SACJ;KACF;IAED,SAAS,CAAC,IAAa;QACrB,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC;QAC9B,MAAM,OAAO,GAAG,CAAC,CAAC;QAClB,MAAM,UAAU,GAAG,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC;QAE7C,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;QAEzB,IAAI,UAAU,EAAE;YACd,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YAC3C,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YAEzC,IAAI,SAAS,GAAG,CAAC,EAAE;gBACjB,SAAS,GAAG,CAAC,CAAC;gBACd,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;aAC9D;iBAAM,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;gBACpC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBACvD,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC;aAC3B;SACF;QAED,KAAK,IAAI,GAAG,GAAG,SAAS,EAAE,GAAG,IAAI,OAAO,EAAE,GAAG,EAAE,EAAE;YAC/C,KAAK,CAAC,IAAI,CAAC;gBACT,MAAM,EAAE,GAAG;gBACX,IAAI,EAAgB,GAAI;aACzB,CAAC,CAAC;SACJ;QAED,OAAO,KAAK,CAAC;KACd;;oHAxGU,uBAAuB;wGAAvB,uBAAuB,yVAxCxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCT;2FAMU,uBAAuB;kBA1CnC,SAAS;mBAAC;oBACT,QAAQ,EAAE,iBAAiB;oBAC3B,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCT;oBACD,IAAI,EAAE;wBACJ,KAAK,EAAE,iBAAiB;qBACzB;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;iBAChD;8BAEU,kBAAkB;sBAA1B,KAAK;gBACG,mBAAmB;sBAA3B,KAAK;gBACG,iBAAiB;sBAAzB,KAAK;gBACG,aAAa;sBAArB,KAAK;gBAGF,IAAI;sBADP,KAAK;gBAWF,KAAK;sBADR,KAAK;gBAWF,IAAI;sBADP,KAAK;gBAeI,MAAM;sBAAf,MAAM;;;MCvCI,wBAAwB;IA5CrC;QAwDW,kBAAa,GAAW,CAAC,CAAC;QAGzB,SAAI,GAAsB,IAAI,YAAY,EAAE,CAAC;KASxD;IAPC,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;KAC1C;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;KACxB;;qHAvBU,wBAAwB;yGAAxB,wBAAwB,2gBA1CzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCT;2FAMU,wBAAwB;kBA5CpC,SAAS;mBAAC;oBACT,QAAQ,EAAE,kBAAkB;oBAC5B,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCT;oBACD,IAAI,EAAE;wBACJ,KAAK,EAAE,kBAAkB;qBAC1B;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;iBAChD;8BAEU,YAAY;sBAApB,KAAK;gBACG,QAAQ;sBAAhB,KAAK;gBACG,QAAQ;sBAAhB,KAAK;gBACG,MAAM;sBAAd,KAAK;gBACG,kBAAkB;sBAA1B,KAAK;gBACG,mBAAmB;sBAA3B,KAAK;gBACG,iBAAiB;sBAAzB,KAAK;gBACG,aAAa;sBAArB,KAAK;gBACG,YAAY;sBAApB,KAAK;gBACG,cAAc;sBAAtB,KAAK;gBAEG,aAAa;sBAArB,KAAK;gBACG,eAAe;sBAAvB,KAAK;gBAEI,IAAI;sBAAb,MAAM;;;MCHI,kBAAkB;IAokB7B,YACsB,eAAgC,EAChC,gBAAkC,EAC9C,EAAqB,EAC7B,OAAmB,EACnB,OAAwB,EAChB,oBAA0C,EACL,aAAkC;QAN3D,oBAAe,GAAf,eAAe,CAAiB;QAChC,qBAAgB,GAAhB,gBAAgB,CAAkB;QAC9C,OAAE,GAAF,EAAE,CAAmB;QAGrB,yBAAoB,GAApB,oBAAoB,CAAsB;QACL,kBAAa,GAAb,aAAa,CAAqB;;;;;;QAlexE,aAAQ,GAAU,EAAE,CAAC;;;;QAKrB,eAAU,GAAY,KAAK,CAAC;;;;QAK5B,eAAU,GAAY,KAAK,CAAC;;;;;QAM5B,cAAS,GAA8C,EAAE,CAAC;;;;;QAM1D,eAAU,GAAyC,UAAU,CAAC,QAAQ,CAAC;;;;;QAMvE,iBAAY,GAAW,EAAE,CAAC;;;;;QAM1B,iBAAY,GAAW,CAAC,CAAC;;;;;QAMzB,mBAAc,GAAY,KAAK,CAAC;;;;;QAMhC,oBAAe,GAAY,KAAK,CAAC;;;;;QAqDjC,qBAAgB,GAAY,KAAK,CAAC;;;;;QAoBlC,gBAAW,GAAY,IAAI,CAAC;;;;;QAM5B,gBAAW,GAAY,IAAI,CAAC;;;;QAK5B,aAAQ,GAAa,QAAQ,CAAC,MAAM,CAAC;;;;;QAMrC,UAAK,GAAU,EAAE,CAAC;;;;QAKlB,eAAU,GAAQ;YACzB,aAAa,EAAE,mBAAmB;YAClC,cAAc,EAAE,qBAAqB;YACrC,SAAS,EAAE,2BAA2B;YACtC,cAAc,EAAE,qBAAqB;YACrC,eAAe,EAAE,sBAAsB;YACvC,aAAa,EAAE,qBAAqB;YACpC,SAAS,EAAE,qBAAqB;SACjC,CAAC;;;;;;;;QASO,aAAQ,GAAQ;;;YAGvB,YAAY,EAAE,oBAAoB;;YAGlC,YAAY,EAAE,OAAO;;YAGrB,eAAe,EAAE,UAAU;SAC5B,CAAC;;;;;;QAoCO,0BAAqB,GAAY,KAAK,CAAC;;;;;;;QAcvC,wBAAmB,GAAG,KAAK,CAAC;;;;QAK5B,mBAAc,GAAY,IAAI,CAAC;;;;QAe/B,eAAU,GAAY,KAAK,CAAC;;;;QAK5B,kBAAa,GAAW,EAAE,CAAC;;;;QAK3B,oBAAe,GAAW,KAAK,CAAC;;;;QAK/B,WAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;;;;QAK/C,aAAQ,GAAsB,IAAI,YAAY,EAAE,CAAC;;;;QAKjD,WAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;;;;QAK/C,SAAI,GAAsB,IAAI,YAAY,EAAE,CAAC;;;;QAK7C,SAAI,GAAsB,IAAI,YAAY,EAAE,CAAC;;;;QAK7C,YAAO,GAAsB,IAAI,YAAY,EAAE,CAAC;;;;QAKhD,WAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;;;;;;QAO/C,qBAAgB,GAAG,IAAI,YAAY,CAA6D,KAAK,CAAC,CAAC;;;;QAKvG,eAAU,GAAsB,IAAI,YAAY,EAAE,CAAC;QAqK7D,aAAQ,GAAW,CAAC,CAAC;QAGrB,aAAQ,GAAG,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;QAElC,WAAM,GAAW,CAAC,CAAC;QACnB,YAAO,GAAW,CAAC,CAAC;QAOpB,mBAAc,GAAmB,EAAE,CAAC;;;;;;;QA6E3B,gBAAW,GAAoB,CAAC,CAAM;YAC7C,IAAI,IAAI,CAAC,YAAY,EAAE;;;gBAGrB,OAAO,CAAC,CAAC,GAAG,CAAC;aACd;iBAAM;gBACL,OAAO,CAAC,CAAC;aACV;SACF,CAAC;;QAzEA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;;QAG3C,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;YACrD,IAAI,CAAC,QAAQ,qBAAQ,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAE,CAAC;SACpD;KACF;;;;IA5kBD,IAAa,IAAI,CAAC,GAAQ;QACxB,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;QAEjB,IAAI,GAAG,EAAE;YACP,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;SAC/B;;QAGD,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB,IAAI,CAAC,gBAAgB,EAAE,CAAC;SACzB;;QAGD,IAAI,CAAC,aAAa,GAAG,kBAAkB,CACrC,IAAI,CAAC,aAAa,EAClB,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAC5C,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,CAC3C,CAAC;;QAGF,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE;;YAEnC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;SACrE;QAED,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KACxB;;;;IAKD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;;;;IAKD,IAAa,WAAW,CAAC,GAAW;QAClC,IAAI,GAAG,EAAE;YACP,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;YACxB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE;;gBAEnC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;aACrE;SACF;KACF;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;KAC1B;;;;IAsBD,IAAa,OAAO,CAAC,GAAkB;QACrC,IAAI,GAAG,EAAE;YACP,IAAI,CAAC,gBAAgB,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;YACjC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACzC,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC3B;QAED,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;KACrB;;;;IAKD,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;;;;;IA2DD,IAAa,KAAK,CAAC,GAAuB;QACxC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;;QAGlB,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;;;;IAKD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;;;;;IAMD,IAAa,KAAK,CAAC,GAAW;QAC5B,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;;QAGlB,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;;;;IAKD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;;;;;IAMD,IAAa,MAAM,CAAC,GAAW;QAC7B,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;KACpB;IACD,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KAC1F;;;;IA+MD,IACI,aAAa;QACf,MAAM,YAAY,GAAoB,IAAI,CAAC,YAAY,CAAC;QACxD,OAAO,OAAO,YAAY,KAAK,QAAQ,GAAW,YAAY,KAAK,MAAM,GAAG,IAAI,CAAC;KAClF;;;;;IAMD,IACI,UAAU;QACZ,OAAO,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC;KAClC;;;;;IAMD,IACI,YAAY;QACd,OAAO,IAAI,CAAC,UAAU,CAAC;KACxB;;;;;IAMD,IACI,aAAa;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;KAC5B;;;;;IAMD,IACI,WAAW;QACb,OAAO,IAAI,CAAC,UAAU,CAAC;KACxB;;;;IAKD,IACI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,KAAK,SAAS,CAAC;KACzC;;;;IAKD,IACI,mBAAmB;QACrB,OAAO,IAAI,CAAC,aAAa,KAAK,aAAa,CAAC,QAAQ,CAAC;KACtD;;;;IAKD,IACI,eAAe;QACjB,OAAO,IAAI,CAAC,aAAa,KAAK,aAAa,CAAC,IAAI,CAAC;KAClD;;;;IAKD,IACI,iBAAiB;QACnB,OAAO,IAAI,CAAC,aAAa,KAAK,aAAa,CAAC,MAAM,CAAC;KACpD;;;;IAKD,IACI,gBAAgB;QAClB,OAAO,IAAI,CAAC,aAAa,KAAK,aAAa,CAAC,KAAK,CAAC;KACnD;;;;IAKD,IACI,qBAAqB;QACvB,OAAO,IAAI,CAAC,aAAa,KAAK,aAAa,CAAC,UAAU,CAAC;KACxD;;;;;IAMD,IACI,eAAe,CAAC,GAAwC;QAC1D,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC;QAC5B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;KAC5B;;;;IAKD,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC;KAC9B;;;;IAuCD,IAAI,eAAe;QACjB,IAAI,eAAe,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAE9F,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAClD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;YAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;YAChD,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,UAAU,CAAC;SACvD;QAED,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,eAAe,CAAC;KAChF;;;;;IA4CD,QAAQ;;;;QAIN,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;;;;;IAMD,eAAe;QACb,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB,IAAI,CAAC,gBAAgB,EAAE,CAAC;SACzB;;;QAID,IAAI,OAAO,qBAAqB,KAAK,WAAW,EAAE;YAChD,OAAO;SACR;QAED,qBAAqB,CAAC;YACpB,IAAI,CAAC,WAAW,EAAE,CAAC;;YAGnB,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU,EAAE;gBAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;oBACb,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,MAAM,EAAE,CAAC;iBACV,CAAC,CAAC;aACJ;SACF,CAAC,CAAC;KACJ;;;;;IAMD,kBAAkB;QAChB,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,IAAI,CAAC,2BAA2B,EAAE,CAAC;KACpC;;;;IAqBD,gBAAgB,CAAC,GAAQ;QACvB,IAAI,GAAG,EAAE;YACP,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;YAC1B,IAAI,GAAG,CAAC,MAAM,EAAE;gBACd,IAAI,CAAC,gBAAgB,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;gBAChD,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBACzC,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;aACxB;SACF;KACF;;;;;;;IAQD,YAAY,CAAC,aAAkB,EAAE,OAAY;;QAE3C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,GAAW,CAAC,CAAC;QAElB,aAAa,CAAC,OAAO,CAAC,CAAC,IAAS;YAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACjB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;aACtB;iBAAM;gBACL,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACzB;YACD,CAAC,EAAE,CAAC;SACL,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,CAAC,GAAQ,EAAE,KAAU;YACpC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;SACvB,CAAC;;QAGF,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACnD;;;;IAKD,SAAS;QACP,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAClC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;gBACzB,IAAI,CAAC,gBAAgB,EAAE,CAAC;aACzB;iBAAM;gBACL,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;aACrC;;YAGD,IAAI,CAAC,aAAa,GAAG,kBAAkB,CACrC,IAAI,CAAC,aAAa,EAClB,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAC5C,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,CAC3C,CAAC;YAEF,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;SACxB;KACF;;;;;;;;;;;;IAaD,WAAW;QACT,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KACxB;;;;IAOD,cAAc;QACZ,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;;;;;IAMD,kBAAkB,CAChB,UAAiB,IAAI,CAAC,gBAAgB,EACtC,WAAmB,CAAC,CAAC,EACrB,aAAsB,IAAI,CAAC,UAAU;QAErC,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAE/B,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;QAC7B,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;SAC5C;QAED,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,CAAC,KAAK,EAAE;YACxC,qBAAqB,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;SAC7D;aAAM,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,CAAC,IAAI,EAAE;YAC9C,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;SACpC;QAED,OAAO,OAAO,CAAC;KAChB;;;;;;IAOD,eAAe;QACb,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE1C,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YACzB,IAAI,IAAI,CAAC,YAAY;gBAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;YAC3D,IAAI,IAAI,CAAC,YAAY;gBAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;YAC3D,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;SAC1B;QAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;;;;IAKD,gBAAgB;QACd,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;KACrC;;;;IAKD,UAAU,CAAC,EAAE,MAAM,EAAO;;;;QAIxB,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YAC/C,OAAO;SACR;QAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;KACJ;;;;IAKD,YAAY,CAAC,KAAiB;QAC5B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;KACzB;;;;IAKD,YAAY,CAAC,KAAU;QACrB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE9C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,CAAC,CAAC;SACJ;KACF;;;;IAKD,YAAY,CAAC,MAAa,IAAI,CAAC,IAAI;;;;QAIjC,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,cAAc,EAAE;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAI,IAAI,CAAC,SAAoB,CAAC,CAAC;YACrE,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;SAC1B;;QAGD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;YAC5B,OAAO,IAAI,CAAC,KAAK,CAAC;SACnB;;QAGD,IAAI,GAAG,EAAE;YACP,OAAO,GAAG,CAAC,MAAM,CAAC;SACnB;;QAGD,OAAO,CAAC,CAAC;KACV;;;;IAKD,YAAY,CAAC,MAAa,IAAI,CAAC,IAAI;QACjC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,IAAI,CAAC,GAAG;gBAAE,OAAO,CAAC,CAAC;YAEnB,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;aAChC;iBAAM,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE;gBACvE,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;aAClC;iBAAM;gBACL,OAAO,GAAG,CAAC,MAAM,CAAC;aACnB;SACF;QAED,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;;;;IAKD,mBAAmB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAO;QACxC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;KACtF;;;;IAKD,gBAAgB,CAAC,EAAE,KAAK,EAAE,GAAG,EAAO;QAClC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;KACjF;;;;IAKD,cAAc,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAO;;QAEtC,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,OAAO;SACR;QAED,IAAI,GAAW,CAAC;QAChB,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1C,CAAC,qBAAQ,CAAC,CAAE,CAAC;YAEb,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE;gBAC1B,GAAG,GAAG,CAAC,CAAC;gBACR,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC;;;gBAInB,CAAC,CAAC,UAAU,GAAG,QAAQ,CAAC;aACzB;YAED,OAAO,CAAC,CAAC;SACV,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAE7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACf,MAAM;YACN,QAAQ;SACT,CAAC,CAAC;KACJ;;;;IAKD,eAAe,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAO;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;YACtC,yBAAY,CAAC,EAAG;SACjB,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;YACxB,IAAI,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;SAC3B;aAAM;YACL,IAAI,QAAQ,GAAG,SAAS,EAAE;gBACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;gBACjC,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;oBACzC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;iBACvB;gBACD,IAAI,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;aAC3B;iBAAM;gBACL,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;gBACjC,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;oBACzC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;iBACvB;gBACD,IAAI,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;aAC3B;SACF;QAED,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAE7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAChB,MAAM;YACN,QAAQ;YACR,SAAS;SACV,CAAC,CAAC;KACJ;;;;IAKD,YAAY,CAAC,KAAU;;QAErB,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,CAAC,CAAC;SACJ;QAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;;;QAIzB,IAAI,IAAI,CAAC,eAAe,KAAK,KAAK,EAAE;;YAElC,IAAI,CAAC,gBAAgB,EAAE,CAAC;SACzB;;QAGD,IAAI,CAAC,aAAa,GAAG,kBAAkB,CACrC,IAAI,CAAC,aAAa,EAClB,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAC5C,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,CAC3C,CAAC;;QAGF,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACvB;;;;IAKD,cAAc,CAAC,KAAU;QACvB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,mBAAmB,EAAE;;YAElD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC;YAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC;YAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,IAAI,GAAG,KAAK,CAAC;;YAG1D,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;;YAGnB,IAAI,CAAC,WAAW,EAAE;gBAChB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;aAC9D;SACF;aAAM;;YAEL,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;YAE9D,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;;YAEnB,IAAI,CAAC,WAAW,EAAE;gBAChB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;aAClC;SACF;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC,CAAC;KACJ;;;;IAKD,YAAY,CAAC,KAAU;QACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACzB;;;;IAKD,YAAY,CAAC,KAAU;QACrB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;;QAEtB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QACtG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;KACzC;IAED,WAAW;QACT,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;KACzE;;;;;IAMO,2BAA2B;QACjC,IAAI,CAAC,cAAc,CAAC,IAAI,CACtB,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,SAAS,CAAC;YACtD,IAAI,IAAI,CAAC,eAAe,EAAE;gBACxB,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC;aACxC;SACF,CAAC,CACH,CAAC;KACH;IAEO,gBAAgB;QACtB,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;KACtF;;+GAzkCU,kBAAkB,sOA2kBP,eAAe;mGA3kB1B,kBAAkB,g+DAmgBf,2BAA2B,8EAM3B,6BAA6B,yEAM7B,wBAAwB,qEA5BrB,wBAAwB,4EAmC9B,sBAAsB,kFAStB,wBAAwB,gDCzlBrC,2nGAoFA;ADytBE;IADC,YAAY,CAAC,CAAC,CAAC;wDAGf;2FArvBU,kBAAkB;kBAV9B,SAAS;+BACE,eAAe,mBAER,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,QAE/B;wBACJ,KAAK,EAAE,eAAe;qBACvB;;;8BAukBE,QAAQ;;8BACR,QAAQ;;8BAKR,QAAQ;;8BAAI,MAAM;+BAAC,eAAe;;yBAvkB5B,oBAAoB;sBAA5B,KAAK;gBAKO,IAAI;sBAAhB,KAAK;gBAwCO,WAAW;sBAAvB,KAAK;gBA6BG,WAAW;sBAAnB,KAAK;gBAKO,OAAO;sBAAnB,KAAK;gBAsBG,QAAQ;sBAAhB,KAAK;gBAKG,UAAU;sBAAlB,KAAK;gBAKG,UAAU;sBAAlB,KAAK;gBAMG,SAAS;sBAAjB,KAAK;gBAMG,UAAU;sBAAlB,KAAK;gBAMG,YAAY;sBAApB,KAAK;gBAMG,YAAY;sBAApB,KAAK;gBAMG,cAAc;sBAAtB,KAAK;gBAMG,eAAe;sBAAvB,KAAK;gBAMO,KAAK;sBAAjB,KAAK;gBAkBO,KAAK;sBAAjB,KAAK;gBAkBO,MAAM;sBAAlB,KAAK;gBAWG,gBAAgB;sBAAxB,KAAK;gBAcG,aAAa;sBAArB,KAAK;gBAMG,WAAW;sBAAnB,KAAK;gBAMG,WAAW;sBAAnB,KAAK;gBAKG,QAAQ;sBAAhB,KAAK;gBAMG,KAAK;sBAAb,KAAK;gBAKG,UAAU;sBAAlB,KAAK;gBAiBG,QAAQ;sBAAhB,KAAK;gBAmBG,QAAQ;sBAAhB,KAAK;gBAUG,WAAW;sBAAnB,KAAK;gBAUG,YAAY;sBAApB,KAAK;gBAOG,qBAAqB;sBAA7B,KAAK;gBAMG,WAAW;sBAAnB,KAAK;gBAQG,mBAAmB;sBAA3B,KAAK;gBAKG,cAAc;sBAAtB,KAAK;gBAKG,gBAAgB;sBAAxB,KAAK;gBAKG,cAAc;sBAAtB,KAAK;gBAKG,UAAU;sBAAlB,KAAK;gBAKG,aAAa;sBAArB,KAAK;gBAKG,eAAe;sBAAvB,KAAK;gBAKI,MAAM;sBAAf,MAAM;gBAKG,QAAQ;sBAAjB,MAAM;gBAKG,MAAM;sBAAf,MAAM;gBAKG,IAAI;sBAAb,MAAM;gBAKG,IAAI;sBAAb,MAAM;gBAKG,OAAO;sBAAhB,MAAM;gBAKG,MAAM;sBAAf,MAAM;gBAOG,gBAAgB;sBAAzB,MAAM;gBAKG,UAAU;sBAAnB,MAAM;gBAMH,aAAa;sBADhB,WAAW;uBAAC,oBAAoB;gBAW7B,UAAU;sBADb,WAAW;uBAAC,iBAAiB;gBAU1B,YAAY;sBADf,WAAW;uBAAC,uBAAuB;gBAUhC,aAAa;sBADhB,WAAW;uBAAC,mBAAmB;gBAU5B,WAAW;sBADd,WAAW;uBAAC,mBAAmB;gBAS5B,YAAY;sBADf,WAAW;uBAAC,kBAAkB;gBAS3B,mBAAmB;sBADtB,WAAW;uBAAC,0BAA0B;gBASnC,eAAe;sBADlB,WAAW;uBAAC,sBAAsB;gBAS/B,iBAAiB;sBADpB,WAAW;uBAAC,wBAAwB;gBASjC,gBAAgB;sBADnB,WAAW;uBAAC,uBAAuB;gBAShC,qBAAqB;sBADxB,WAAW;uBAAC,6BAA6B;gBAUtC,eAAe;sBADlB,eAAe;uBAAC,wBAAwB;gBAiBzC,SAAS;sBADR,YAAY;uBAAC,2BAA2B;gBAOzC,WAAW;sBADV,YAAY;uBAAC,6BAA6B;gBAO3C,MAAM;sBADL,YAAY;uBAAC,wBAAwB;gBAQtC,aAAa;sBADZ,SAAS;uBAAC,sBAAsB;gBAUjC,eAAe;sBADd,SAAS;uBAAC,wBAAwB;gBAgH1B,WAAW;sBAAnB,KAAK;gBAoGN,cAAc;sBAFb,YAAY;uBAAC,eAAe;;;MEztBlB,kBAAkB;;;;;IAK7B,OAAO,OAAO,CAAC,aAAkC;QAC/C,OAAO;YACL,QAAQ,EAAE,kBAAkB;YAC5B,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;SACnE,CAAC;KACH;;+GAVU,kBAAkB;gHAAlB,kBAAkB,iBA5C3B,gCAAgC;QAChC,mBAAmB;QACnB,kBAAkB;QAClB,mBAAmB;QACnB,kBAAkB;QAClB,kBAAkB;QAClB,iBAAiB;QACjB,kBAAkB;QAClB,wBAAwB;QACxB,wBAAwB;QACxB,4BAA4B;QAC5B,sBAAsB;QACtB,wBAAwB;QACxB,uBAAuB;QACvB,oBAAoB;QACpB,yBAAyB;QACzB,4BAA4B;QAC5B,2BAA2B;QAC3B,6BAA6B;QAC7B,mCAAmC;QACnC,0BAA0B;QAC1B,2BAA2B;QAC3B,8BAA8B;QAC9B,4BAA4B;QAC5B,6BAA6B;QAC7B,wBAAwB;QACxB,qCAAqC;QACrC,4BAA4B,aA9BpB,YAAY,aAiCpB,kBAAkB;QAClB,2BAA2B;QAC3B,6BAA6B;QAC7B,mCAAmC;QACnC,wBAAwB;QACxB,8BAA8B;QAC9B,4BAA4B;QAC5B,6BAA6B;QAC7B,gCAAgC;QAChC,wBAAwB;QACxB,uBAAuB;QACvB,qCAAqC;gHAG5B,kBAAkB,aA9ClB,CAAC,eAAe,EAAE,gBAAgB,EAAE,oBAAoB,CAAC,YAD3D,CAAC,YAAY,CAAC;2FA+CZ,kBAAkB;kBAhD9B,QAAQ;mBAAC;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,SAAS,EAAE,CAAC,eAAe,EAAE,gBAAgB,EAAE,oBAAoB,CAAC;oBACpE,YAAY,EAAE;wBACZ,gCAAgC;wBAChC,mBAAmB;wBACnB,kBAAkB;wBAClB,mBAAmB;wBACnB,kBAAkB;wBAClB,kBAAkB;wBAClB,iBAAiB;wBACjB,kBAAkB;wBAClB,wBAAwB;wBACxB,wBAAwB;wBACxB,4BAA4B;wBAC5B,sBAAsB;wBACtB,wBAAwB;wBACxB,uBAAuB;wBACvB,oBAAoB;wBACpB,yBAAyB;wBACzB,4BAA4B;wBAC5B,2BAA2B;wBAC3B,6BAA6B;wBAC7B,mCAAmC;wBACnC,0BAA0B;wBAC1B,2BAA2B;wBAC3B,8BAA8B;wBAC9B,4BAA4B;wBAC5B,6BAA6B;wBAC7B,wBAAwB;wBACxB,qCAAqC;wBACrC,4BAA4B;qBAC7B;oBACD,OAAO,EAAE;wBACP,kBAAkB;wBAClB,2BAA2B;wBAC3B,6BAA6B;wBAC7B,mCAAmC;wBACnC,wBAAwB;wBACxB,8BAA8B;wBAC9B,4BAA4B;wBAC5B,6BAA6B;wBAC7B,gCAAgC;wBAChC,wBAAwB;wBACxB,uBAAuB;wBACvB,qCAAqC;qBACtC;iBACF;;;ICjFW;AAAZ,WAAY,SAAS;IACnB,8BAAiB,CAAA;IACjB,8BAAiB,CAAA;AACnB,CAAC,EAHW,SAAS,KAAT,SAAS;;ACArB,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;IAClE,QAAQ,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;CAChD;AAED;AACA;;;;;;;SAOgB,iBAAiB,CAAC,CAAS,EAAE,CAAS;IACpD,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,MAAM,qBAAqB,GAAG,EAAE,CAAC;IACjC,IAAI,OAAY,CAAC;IACjB,IAAI,CAAC,CAAC;IACN,IAAI,CAAC,CAAC;;;IAKN,OAAO,CAAC,OAAO,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,OAAO,IAAI,IAAI,EAAE;;QAEzG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,qBAAqB,CAAC,IAAI,CAAC;YACzB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,gBAAgB,CAAC;YACvD,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC;SAC9D,CAAC,CAAC;;QAGH,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;KAClE;;IAGD,KAAK,CAAC,GAAG,qBAAqB,CAAC,MAAM,GAAG,CAAC,GAAG,qBAAqB,CAAC,EAAE,CAAC,CAAC,IAAK;QACzE,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;KACrF;;IAGD,OAAO,QAAQ,CAAC;AAClB,CAAC;AACD;;AC1CA;;;;ACAA;;;;;;"}