{"version":3,"file":"bimeister-pupakit.tree.mjs","sources":["../../src/declarations/constants/tree-node-offset.const.ts","../../src/components/tree-layout/components/tree-node-skeleton/tree-node-skeleton.component.ts","../../src/components/tree-layout/components/tree-node-skeleton/tree-node-skeleton.component.html","../../src/components/tree-layout/directives/tree-node-actions.directive.ts","../../src/components/tree-layout/components/tree-node/tree-node.component.ts","../../src/components/tree-layout/components/tree-node/tree-node.component.html","../../src/components/tree-layout/tree-layout.module.ts","../../src/declarations/classes/flat-tree-item.class.ts","../../src/declarations/classes/tree-ranged-data-source.class.ts","../../src/declarations/events/tree.events.ts","../../src/components/tree-new/directives/tree-item-template.directive.ts","../../src/components/tree-new/components/tree-new/tree-new.component.ts","../../src/components/tree-new/components/tree-new/tree-new.component.html","../../src/components/tree-new/tree-new.module.ts","../../src/tree.module.ts","../../src/declarations/constants/default-tree-item-size-px.const.ts","../../src/declarations/classes/tree-data-display-collection.class.ts","../../src/declarations/classes/default-tree-event-handler.class.ts","../../src/declarations/classes/tree-controller.class.ts","../../src/declarations/classes/tree-drag-and-drop.class.ts"],"sourcesContent":["export const TREE_NODE_OFFSET: number = 16;\n","import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';\nimport { TREE_NODE_OFFSET } from '../../../../declarations/constants/tree-node-offset.const';\n\n@Component({\n  selector: 'pupa-tree-node-skeleton',\n  templateUrl: './tree-node-skeleton.component.html',\n  styleUrls: ['./tree-node-skeleton.component.scss'],\n  encapsulation: ViewEncapsulation.Emulated,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TreeNodeSkeletonComponent {\n  @Input() public level: number;\n\n  public get offset(): string {\n    return `${this.level * TREE_NODE_OFFSET}px`;\n  }\n}\n","<div class=\"tree-node-skeleton\">\n  <div [style.margin-left]=\"offset\" class=\"tree-node-skeleton__left\"></div>\n  <div class=\"tree-node-skeleton__center\"></div>\n  <div class=\"tree-node-skeleton__right\"></div>\n</div>\n","import { Directive, Input, OnChanges, TemplateRef } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Directive({\n  selector: '[pupaTreeNodeActions]',\n})\nexport class TreeNodeActionsDirective implements OnChanges {\n  @Input() public pupaTreeNodeActions: boolean | string;\n\n  public readonly isDisplayed$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(true);\n\n  constructor(public readonly templateRef: TemplateRef<unknown>) {}\n\n  public ngOnChanges(): void {\n    this.isDisplayed$.next(Boolean(this.pupaTreeNodeActions));\n  }\n}\n","import { ChangeDetectionStrategy, Component, ContentChild, Input, ViewEncapsulation } from '@angular/core';\nimport { TreeNodeActionsDirective } from '../../directives/tree-node-actions.directive';\nimport { TreeNodeProperties } from '../../../../declarations/interfaces/tree-node-properties.interface';\nimport { isNil } from '@bimeister/utilities';\nimport { TREE_NODE_OFFSET } from '../../../../declarations/constants/tree-node-offset.const';\n\n@Component({\n  selector: 'pupa-tree-node',\n  templateUrl: './tree-node.component.html',\n  styleUrls: ['./tree-node.component.scss'],\n  encapsulation: ViewEncapsulation.Emulated,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TreeNodeComponent {\n  @Input() public treeNodeProperties: TreeNodeProperties;\n  @ContentChild(TreeNodeActionsDirective) public readonly treeNodeActionsTemplate: TreeNodeActionsDirective;\n\n  public get arrowIcon(): string {\n    if (this.treeNodeProperties.isExpanded) {\n      return 'app-chevron-down';\n    }\n    return 'app-chevron-right';\n  }\n\n  public get arrowOffset(): string {\n    return `${this.treeNodeProperties.level * TREE_NODE_OFFSET}px`;\n  }\n\n  public get isSelected(): boolean {\n    return this.treeNodeProperties.isSelected || this.treeNodeProperties.isHighlighted;\n  }\n\n  public expand(event: Event): void {\n    event.stopPropagation();\n    if (isNil(this.treeNodeProperties.expand)) {\n      return;\n    }\n    this.treeNodeProperties.expand();\n  }\n}\n","<div\n  class=\"tree-node\"\n  [class.tree-node--selected]=\"isSelected\"\n  [class.tree-node--disabled]=\"treeNodeProperties.isDisabled\"\n  [class.tree-node--expanded]=\"treeNodeProperties.isExpanded\"\n>\n  <svg\n    class=\"tree-node__selection\"\n    width=\"2\"\n    height=\"31\"\n    viewBox=\"0 0 2 31\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path d=\"M2 31V0C0.4 0 0 2 0 3V28C0 30.4 1.33333 31 2 31Z\" fill=\"currentColor\" />\n  </svg>\n  <div class=\"tree-node__left\">\n    <div [style.margin-left]=\"arrowOffset\" class=\"tree-node__arrow-container\">\n      <ng-container *ngIf=\"treeNodeProperties.isDirectory\">\n        <pupa-button-icon\n          (click)=\"expand($event)\"\n          *ngIf=\"treeNodeProperties.hasChildren\"\n          [icon]=\"arrowIcon\"\n          [disabled]=\"treeNodeProperties.isDisabled\"\n          [loading]=\"treeNodeProperties.isLoading\"\n          size=\"s\"\n          kind=\"secondary\"\n        ></pupa-button-icon>\n        <pupa-icon\n          *ngIf=\"!treeNodeProperties.hasChildren\"\n          class=\"tree-node__without-children\"\n          name=\"app-circle\"\n        ></pupa-icon>\n      </ng-container>\n    </div>\n    <div class=\"tree-node__text\">\n      <ng-content></ng-content>\n    </div>\n  </div>\n  <div class=\"tree-node__right\">\n    <div\n      *ngIf=\"treeNodeActionsTemplate?.isDisplayed$ | async\"\n      (click)=\"$event.stopPropagation()\"\n      class=\"tree-node__right-container\"\n    >\n      <ng-container [ngTemplateOutlet]=\"treeNodeActionsTemplate?.templateRef\"></ng-container>\n    </div>\n  </div>\n</div>\n","import { CdkTreeModule } from '@angular/cdk/tree';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { appChevronDownIcon, appChevronRightIcon, appCircle, PupaIconsModule } from '@bimeister/pupakit.icons';\nimport { PupaButtonsModule, PupaCheckboxModule, PupaSpinnerModule } from '@bimeister/pupakit.kit';\nimport { TreeNodeSkeletonComponent } from './components/tree-node-skeleton/tree-node-skeleton.component';\nimport { TreeNodeComponent } from './components/tree-node/tree-node.component';\nimport { TreeNodeActionsDirective } from './directives/tree-node-actions.directive';\n\n@NgModule({\n  declarations: [TreeNodeComponent, TreeNodeActionsDirective, TreeNodeSkeletonComponent],\n  imports: [\n    CdkTreeModule,\n    CommonModule,\n    PupaButtonsModule,\n    PupaIconsModule.forFeature([appCircle, appChevronDownIcon, appChevronRightIcon]),\n    PupaCheckboxModule,\n    PupaSpinnerModule,\n  ],\n  exports: [TreeNodeActionsDirective, TreeNodeComponent, TreeNodeSkeletonComponent],\n})\nexport class PupaTreeLayoutModule {}\n","import { FlatTreeItemInterface } from '../interfaces/flat-tree-item.interface';\n\n/**\n * todo: maybe drop one property – isExpandable or isElement\n * */\nexport class FlatTreeItem<T = any> implements FlatTreeItemInterface<T> {\n  constructor(\n    public readonly isExpandable: boolean,\n    public name: string,\n    public level: number,\n    public id: string,\n    public originalData: T = null,\n    public isElement: boolean = false\n  ) {}\n}\n","import { DataSource, ListRange } from '@angular/cdk/collections';\nimport { isNil, shareReplayWithRefCount } from '@bimeister/utilities';\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport { FlatTreeItem } from './flat-tree-item.class';\n\nexport class TreeRangedDataSource extends DataSource<FlatTreeItem> {\n  private readonly range$: BehaviorSubject<ListRange> = new BehaviorSubject(null);\n\n  constructor(private readonly data$: Observable<FlatTreeItem[]>) {\n    super();\n  }\n\n  public setRange(range: ListRange): void {\n    this.range$.next(range);\n  }\n\n  public connect(): Observable<FlatTreeItem[]> {\n    return combineLatest([this.data$, this.range$]).pipe(\n      filter(([data, range]: [FlatTreeItem[], ListRange]) => Array.isArray(data) && !isNil(range)),\n      map(([data, range]: [FlatTreeItem[], ListRange]) => {\n        const { start, end }: ListRange = range;\n        return data.slice(start, end);\n      }),\n      shareReplayWithRefCount()\n    );\n  }\n\n  public disconnect(): void {\n    return;\n  }\n}\n","import { BusEventBase } from '@bimeister/pupakit.common';\nimport { getUuid, Nullable } from '@bimeister/utilities';\nimport { FlatTreeItem } from '../classes/flat-tree-item.class';\nimport { DropEventInterface } from '../interfaces/drop-event.interface';\n\ninterface SetChildrenEventPayload {\n  treeItemId: Nullable<string>;\n  children: FlatTreeItem[];\n}\n\nexport namespace TreeEvents {\n  export class TreeEventBase<T = unknown> extends BusEventBase<T> {\n    public readonly scope: Nullable<string> = null;\n    public readonly id: string = getUuid();\n    public readonly type: Nullable<string> = null;\n\n    constructor(public readonly payload: T = null, public readonly fromId: Nullable<string> = null) {\n      super();\n    }\n  }\n\n  export class Click extends TreeEventBase<FlatTreeItem> {}\n  export class RemoveItem extends TreeEventBase<string> {}\n  export class UpdateItem extends TreeEventBase<FlatTreeItem> {}\n  export class ScrollById extends TreeEventBase<string> {}\n  export class Drop extends TreeEventBase<DropEventInterface<FlatTreeItem>> {}\n  export class ScrollByIndex extends TreeEventBase<number> {}\n  export class ScrollViewport extends TreeEventBase<number> {}\n  export class SetData extends TreeEventBase<FlatTreeItem[]> {}\n  export class SetLoading extends TreeEventBase<boolean> {}\n  export class SetSelected extends TreeEventBase<string[]> {}\n  export class Collapse extends TreeEventBase<string> {}\n  export class Expand extends TreeEventBase<string> {}\n  export class ExpandWhileDragging extends TreeEventBase<string> {}\n  export class RemoveChildren extends TreeEventBase<string> {}\n  export class SetExpanded extends TreeEventBase<string[]> {}\n  export class SetChildren extends TreeEventBase<SetChildrenEventPayload> {}\n}\n","import { Directive, TemplateRef } from '@angular/core';\nimport { TreeItemTemplateContext } from '../../../declarations/interfaces/tree-item-template-context.interface';\n\n@Directive({\n  selector: '[pupaTreeItemTemplate]',\n})\nexport class TreeItemTemplateDirective<T> {\n  constructor(public readonly templateRef: TemplateRef<TreeItemTemplateContext<T>>) {}\n}\n","import { ListRange } from '@angular/cdk/collections';\nimport { FlatTreeControl } from '@angular/cdk/tree';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  ElementRef,\n  HostListener,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Renderer2,\n  TrackByFunction,\n  Type,\n  ViewChild,\n} from '@angular/core';\nimport { EventBus } from '@bimeister/event-bus/rxjs';\nimport { filterNotNil, filterTruthy, getClampedValue, isNil, Nullable } from '@bimeister/utilities';\nimport {\n  animationFrameScheduler,\n  BehaviorSubject,\n  combineLatest,\n  interval,\n  NEVER,\n  Observable,\n  Subject,\n  Subscription,\n  timer,\n} from 'rxjs';\nimport { debounce, filter, map, observeOn, switchMap, take, withLatestFrom } from 'rxjs/operators';\nimport { FlatTreeItem } from '../../../../declarations/classes/flat-tree-item.class';\nimport { TreeRangedDataSource } from '../../../../declarations/classes/tree-ranged-data-source.class';\nimport { TreeController } from '../../../../declarations/classes/tree-controller.class';\nimport { TreeEvents } from '../../../../declarations/events/tree.events';\nimport { DropEventInterface } from '../../../../declarations/interfaces/drop-event.interface';\nimport { TreeDataDisplayCollectionRef } from '../../../../declarations/interfaces/tree-data-display-collection-ref.interface';\nimport { TreeItemTemplateDirective } from '../../directives/tree-item-template.directive';\nimport { TreeNodeProperties } from '../../../../declarations/interfaces/tree-node-properties.interface';\nimport { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { ComponentChange, ComponentChanges, QueueEvents } from '@bimeister/pupakit.common';\n\ninterface Position {\n  top: number;\n  left: number;\n}\ntype ScrollDirection = null | 'up' | 'down';\n\nconst EXPAND_WHILE_DRAGGING_DELAY: number = 1000;\n\ninterface DragAndDropMeta {\n  dragTreeItem: FlatTreeItem;\n  dropTreeItem?: FlatTreeItem;\n  dragTreeItemLeft?: number;\n  dragTreeItemTop?: number;\n  dragTreeItemWidth?: number;\n  mouseDownPosition?: Position;\n  scrollDirection?: ScrollDirection;\n  draggableElementBoundingBox?: DOMRect;\n  dragTreeItemIsDisplayed: boolean;\n}\n\n@Component({\n  selector: 'pupa-tree-new',\n  templateUrl: './tree-new.component.html',\n  styleUrls: ['./tree-new.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TreeNewComponent<T> implements AfterViewInit, OnChanges, OnDestroy {\n  @Input() public controller: TreeController;\n  @ViewChild('skeletonViewPort', { static: true }) public readonly skeletonViewPort: CdkVirtualScrollViewport;\n  @ViewChild('viewPort', { static: true }) public readonly viewPort: CdkVirtualScrollViewport;\n  @ContentChild(TreeItemTemplateDirective) public readonly treeItemTemplate: TreeItemTemplateDirective<T>;\n\n  public dataSource: TreeRangedDataSource;\n  public dataDisplayCollection: TreeDataDisplayCollectionRef;\n  public data$: Observable<FlatTreeItem[]>;\n  public expandedIdsList$: Observable<string[]>;\n  public selectedIdsList$: Observable<string[]>;\n  public isLoading$: Observable<boolean>;\n  public hasDragAndDrop$: Observable<boolean>;\n  public trackBy$: Observable<TrackByFunction<FlatTreeItem>>;\n  public treeItemSizePx$: Observable<number>;\n  private scrollBehavior$: Observable<ScrollBehavior>;\n  private eventBus: EventBus;\n\n  public readonly treeControl: FlatTreeControl<FlatTreeItem> = new FlatTreeControl<FlatTreeItem>(\n    TreeNewComponent.getLevel,\n    TreeNewComponent.isExpandable\n  );\n  public readonly listRange$: BehaviorSubject<ListRange> = new BehaviorSubject(null);\n  public readonly dragAndDropMeta$: BehaviorSubject<Nullable<DragAndDropMeta>> = new BehaviorSubject(null);\n  private readonly expandWithDelay$: Subject<Nullable<FlatTreeItem>> = new Subject<Nullable<FlatTreeItem>>();\n  private readonly subscription: Subscription = new Subscription();\n\n  constructor(\n    public readonly renderer: Renderer2,\n    public readonly host: ElementRef<HTMLElement>,\n    private readonly changeDetectorRef: ChangeDetectorRef\n  ) {}\n\n  public ngAfterViewInit(): void {\n    this.subscription.add(this.getSubscriptionToSetLoading());\n    this.subscription.add(this.getSubscriptionToScrollToIndex());\n    this.subscription.add(this.getSubscriptionToSetExpanded());\n    this.subscription.add(this.getSubscriptionToSetSelected());\n    this.subscription.add(this.getSubscriptionForScrollWithDrag());\n    this.subscription.add(this.getSubscriptionForRangeChanges());\n    this.subscription.add(this.getSubscriptionToExpandWhileDragging());\n    this.eventBus.dispatch(new QueueEvents.StartQueue());\n  }\n\n  public ngOnChanges(changes: ComponentChanges<this>): void {\n    this.setupController(changes?.controller);\n  }\n\n  public ngOnDestroy(): void {\n    this.subscription.unsubscribe();\n  }\n\n  public isExpanded(expandedIdsList: string[], treeItem: FlatTreeItem): boolean {\n    return !isNil(treeItem) && treeItem.isExpandable && !treeItem.isElement && expandedIdsList.includes(treeItem.id);\n  }\n\n  public hasChild(_: number, treeItem: FlatTreeItem): boolean {\n    return !isNil(treeItem) && treeItem.isExpandable && !treeItem.isElement;\n  }\n\n  public hasNoChild(_: number, treeItem: FlatTreeItem): boolean {\n    return !isNil(treeItem) && !treeItem.isExpandable && !treeItem.isElement;\n  }\n\n  public isElement(_: number, treeItem: FlatTreeItem): boolean {\n    return !isNil(treeItem) && !treeItem.isExpandable && treeItem.isElement;\n  }\n\n  public idsIncludesNodeId(idsList: string[], treeItem: FlatTreeItem): boolean {\n    return idsList.includes(treeItem.id);\n  }\n\n  public mouseDown(dragTreeItem: FlatTreeItem, event: MouseEvent): void {\n    this.hasDragAndDrop$.pipe(take(1), filterTruthy()).subscribe(() => {\n      const mouseDownPosition: Position = { left: event?.screenX, top: event?.screenY };\n      const target: EventTarget = event.target;\n      const draggableElementBoundingBox: DOMRect =\n        target instanceof HTMLElement ? target.getBoundingClientRect() : null;\n      const dragTreeItemWidth: number = draggableElementBoundingBox?.width;\n      this.dragAndDropMeta$.next({\n        mouseDownPosition,\n        dragTreeItem,\n        dropTreeItem: dragTreeItem,\n        draggableElementBoundingBox,\n        dragTreeItemWidth,\n        dragTreeItemIsDisplayed: false,\n      });\n    });\n  }\n\n  public mouseEnter(treeItem: FlatTreeItem): void {\n    this.dragAndDropMeta$.pipe(take(1), filterNotNil()).subscribe((dragAndDropMeta: DragAndDropMeta) => {\n      this.dragAndDropMeta$.next({ ...dragAndDropMeta, dropTreeItem: treeItem });\n      this.expandWithDelay$.next(treeItem);\n    });\n  }\n\n  public mouseLeave(): void {\n    this.dragAndDropMeta$.pipe(take(1), filterNotNil()).subscribe((dragAndDropMeta: DragAndDropMeta) => {\n      this.dragAndDropMeta$.next({ ...dragAndDropMeta, dropTreeItem: null });\n    });\n  }\n\n  @HostListener('window:mousemove', ['$event'])\n  public mouseMove(event: MouseEvent): void {\n    this.dragAndDropMeta$.pipe(take(1), filterNotNil()).subscribe((dragAndDropMeta: DragAndDropMeta) => {\n      this.processDragMoving(dragAndDropMeta, event.screenX, event.screenY);\n    });\n  }\n\n  @HostListener('window:mouseup')\n  public mouseUp(): void {\n    this.dragAndDropMeta$.pipe(take(1), filterNotNil()).subscribe((dragAndDropMeta: DragAndDropMeta) => {\n      if (!dragAndDropMeta.dragTreeItemIsDisplayed) {\n        return;\n      }\n      const dropEventData: DropEventInterface<FlatTreeItem> = {\n        draggedElement: dragAndDropMeta.dragTreeItem,\n        droppedElement: dragAndDropMeta.dropTreeItem,\n      };\n      this.eventBus.dispatch(new TreeEvents.Drop(dropEventData));\n    });\n    this.expandWithDelay$.next(null);\n    this.dragAndDropMeta$.next(null);\n  }\n\n  public click(treeItem: FlatTreeItem): void {\n    this.eventBus.dispatch(new TreeEvents.Click(treeItem));\n  }\n\n  public toggleExpansion(expandedIdsList: string[], treeItem: FlatTreeItem): void {\n    this.isExpanded(expandedIdsList, treeItem) ? this.collapseClick(treeItem) : this.expandClick(treeItem);\n  }\n\n  public getTreeNodeProperties(node: FlatTreeItem): Observable<TreeNodeProperties> {\n    return combineLatest([this.expandedIdsList$, this.selectedIdsList$]).pipe(\n      map(\n        ([expandedIdsList, selectedIdsList]: [string[], string[]]): TreeNodeProperties => ({\n          level: node.level,\n          isDirectory: !node.isElement,\n          hasChildren: node.isExpandable,\n          isLoading: false,\n          isExpanded: this.isExpanded(expandedIdsList, node),\n          isSelected: this.idsIncludesNodeId(selectedIdsList, node),\n          isHighlighted: this.idsIncludesNodeId(selectedIdsList, node),\n          isDisabled: false,\n          expand: () => {\n            this.toggleExpansion(expandedIdsList, node);\n          },\n        })\n      )\n    );\n  }\n\n  private setupController(change: ComponentChange<this, TreeController>): void {\n    const value: Nullable<TreeController> = change?.currentValue;\n    if (isNil(value)) {\n      return;\n    }\n    this.controller = value;\n\n    this.dataDisplayCollection = this.controller.getDataDisplayCollectionRef();\n    this.eventBus = this.controller.eventBus;\n    this.scrollBehavior$ = this.dataDisplayCollection.scrollBehavior$;\n    this.trackBy$ = this.dataDisplayCollection.trackBy$;\n    this.treeItemSizePx$ = this.dataDisplayCollection.treeItemSizePx$;\n    this.data$ = this.dataDisplayCollection.data$;\n    this.isLoading$ = this.dataDisplayCollection.isLoading$;\n    this.selectedIdsList$ = this.dataDisplayCollection.selectedIdsList$;\n    this.expandedIdsList$ = this.dataDisplayCollection.expandedIdsList$;\n    this.hasDragAndDrop$ = this.dataDisplayCollection.hasDragAndDrop$;\n\n    this.dataSource = new TreeRangedDataSource(this.data$);\n  }\n\n  private expandClick(treeItem: FlatTreeItem): void {\n    this.controller.expand(treeItem.id);\n  }\n\n  private collapseClick(treeItem: FlatTreeItem): void {\n    this.eventBus.dispatch(new TreeEvents.Collapse(treeItem.id));\n  }\n\n  private getSubscriptionToExpandWhileDragging(): Subscription {\n    return this.expandWithDelay$\n      .pipe(\n        debounce((node: FlatTreeItem) => (isNil(node) ? NEVER : timer(EXPAND_WHILE_DRAGGING_DELAY))),\n        filter((treeItem: FlatTreeItem) => treeItem.isExpandable && !treeItem.isElement)\n      )\n      .subscribe((treeItem: FlatTreeItem) => {\n        this.eventBus.dispatch(new TreeEvents.ExpandWhileDragging(treeItem.id));\n      });\n  }\n\n  private getSubscriptionToSetLoading(): Subscription {\n    return this.getEvents(TreeEvents.SetLoading).subscribe((event: TreeEvents.SetLoading) => {\n      this.dataDisplayCollection.setIsLoading(event.payload);\n      this.changeDetectorRef.detectChanges();\n      this.eventBus.dispatch(new QueueEvents.RemoveFromQueue(event.id));\n    });\n  }\n\n  private getSubscriptionToSetExpanded(): Subscription {\n    return this.getEvents(TreeEvents.SetExpanded).subscribe((event: TreeEvents.SetExpanded) => {\n      this.setExpandedIdsList(event.payload);\n      this.eventBus.dispatch(new QueueEvents.RemoveFromQueue(event.id));\n    });\n  }\n\n  private setExpandedIdsList(list: string[]): void {\n    this.dataDisplayCollection.setExpandedIdsList(list);\n    this.data$\n      .pipe(\n        take(1),\n        map((data: FlatTreeItem[]) => data.filter((treeItem: FlatTreeItem) => list.includes(treeItem.id)))\n      )\n      .subscribe((data: FlatTreeItem[]) => {\n        data.forEach((treeItem: FlatTreeItem) => this.treeControl.expand(treeItem));\n      });\n    this.changeDetectorRef.markForCheck();\n  }\n\n  private getSubscriptionToSetSelected(): Subscription {\n    return this.getEvents(TreeEvents.SetSelected).subscribe((event: TreeEvents.SetSelected) => {\n      this.setSelectedIdsList(event.payload);\n      this.eventBus.dispatch(new QueueEvents.RemoveFromQueue(event.id));\n    });\n  }\n\n  private setSelectedIdsList(list: string[]): void {\n    this.dataDisplayCollection.setSelectedIdsList(list);\n    this.changeDetectorRef.detectChanges();\n  }\n\n  private getSubscriptionToScrollToIndex(): Subscription {\n    return this.getEvents(TreeEvents.ScrollByIndex).subscribe((event: TreeEvents.ScrollByIndex) => {\n      this.scrollToIndex(event.payload);\n      this.eventBus.dispatch(new QueueEvents.RemoveFromQueue(event.id));\n    });\n  }\n\n  private scrollToIndex(index: number): void {\n    this.scrollBehavior$.pipe(take(1)).subscribe((scrollBehavior: ScrollBehavior) => {\n      this.viewPort.scrollToIndex(index, scrollBehavior);\n      this.skeletonViewPort.scrollToIndex(index, scrollBehavior);\n    });\n  }\n\n  private getSubscriptionForScrollWithDrag(): Subscription {\n    return interval(0)\n      .pipe(\n        observeOn(animationFrameScheduler),\n        switchMap(() => this.dragAndDropMeta$.pipe(take(1))),\n        filterNotNil(),\n        map((dragAndDropMeta: DragAndDropMeta) => dragAndDropMeta.scrollDirection),\n        filterNotNil(),\n        withLatestFrom(this.scrollBehavior$)\n      )\n      .subscribe(([scrollDirection, scrollBehavior]: [ScrollDirection, ScrollBehavior]) => {\n        const scrollingSpeed: number = 5;\n        const offsetDelta: number = scrollDirection === 'up' ? -scrollingSpeed : scrollingSpeed;\n        const currentOffset: number = this.viewPort.measureScrollOffset();\n        this.viewPort.scrollToOffset(currentOffset + offsetDelta, scrollBehavior);\n      });\n  }\n\n  private getSubscriptionForRangeChanges(): Subscription {\n    return this.viewPort.renderedRangeStream.subscribe((range: ListRange) => {\n      this.dataSource.setRange(range);\n    });\n  }\n\n  private getEvents<E extends TreeEvents.TreeEventBase>(eventType: Type<E>): Observable<E> {\n    return this.eventBus\n      .listen()\n      .pipe(filter((event: TreeEvents.TreeEventBase): event is E => event instanceof eventType));\n  }\n\n  private processDragMoving(dragAndDropMeta: DragAndDropMeta, x: number, y: number): void {\n    const draggableElementBoundingBox: DOMRect = dragAndDropMeta.draggableElementBoundingBox;\n    const mouseDownPosition: Position = dragAndDropMeta.mouseDownPosition;\n    const draggableElementPositionShift: Position = {\n      left: mouseDownPosition?.left - draggableElementBoundingBox?.left,\n      top: mouseDownPosition?.top - draggableElementBoundingBox?.top,\n    };\n    const bottomBorderPositionY: number = this.host.nativeElement.clientHeight - draggableElementBoundingBox?.height;\n    const newMeta: DragAndDropMeta = {\n      ...dragAndDropMeta,\n      dragTreeItemLeft: x - draggableElementBoundingBox?.left - draggableElementPositionShift.left,\n      dragTreeItemTop: getClampedValue(y - draggableElementPositionShift.top, 0, bottomBorderPositionY),\n    };\n    const isTopBorderReached: boolean = newMeta.dragTreeItemTop <= draggableElementBoundingBox?.height;\n    const isBottomBorderReached: boolean = newMeta.dragTreeItemTop >= bottomBorderPositionY;\n    newMeta.scrollDirection = isTopBorderReached ? 'up' : isBottomBorderReached ? 'down' : null;\n    newMeta.dragTreeItemIsDisplayed = true;\n\n    this.dragAndDropMeta$.next(newMeta);\n  }\n\n  private static getLevel(treeItem: FlatTreeItem): number {\n    return treeItem.level;\n  }\n\n  private static isExpandable(treeItem: FlatTreeItem): boolean {\n    return treeItem.isExpandable;\n  }\n}\n","<section class=\"tree\">\n  <div class=\"tree__loader\" *ngIf=\"isLoading$ | async\">\n    <pupa-spinner size=\"40px\"></pupa-spinner>\n  </div>\n\n  <pupa-scrollable [invisibleScrollbars]=\"['vertical', 'horizontal']\" class=\"skeleton-scrollable\">\n    <cdk-virtual-scroll-viewport\n      pupaScrollableContent\n      #skeletonViewPort\n      [itemSize]=\"treeItemSizePx$ | async\"\n      class=\"viewport viewport_skeleton\"\n    >\n      <pupa-skeleton>\n        <pupa-skeleton-group *cdkVirtualFor=\"let item of data$ | async\">\n          <pupa-tree-node-skeleton [level]=\"item.level\"></pupa-tree-node-skeleton>\n        </pupa-skeleton-group>\n      </pupa-skeleton>\n    </cdk-virtual-scroll-viewport>\n  </pupa-scrollable>\n\n  <pupa-scrollable>\n    <cdk-virtual-scroll-viewport pupaScrollableContent #viewPort [itemSize]=\"treeItemSizePx$ | async\" class=\"viewport\">\n      <ng-container *cdkVirtualFor=\"let treeItem of data$ | async\"> </ng-container>\n      <cdk-tree\n        [dataSource]=\"dataSource\"\n        [treeControl]=\"treeControl\"\n        [trackBy]=\"trackBy$ | async\"\n        (mouseleave)=\"mouseLeave()\"\n        class=\"scrollable-box__container\"\n      >\n        <cdk-tree-node\n          *cdkTreeNodeDef=\"let node; when: isElement\"\n          (mousedown)=\"mouseDown(node, $event)\"\n          (mouseenter)=\"mouseEnter(node)\"\n        >\n          <ng-container\n            [ngTemplateOutlet]=\"treeItemTemplate?.templateRef || defaultTemplate\"\n            [ngTemplateOutletContext]=\"{\n              $implicit: node\n            }\"\n          ></ng-container>\n        </cdk-tree-node>\n\n        <cdk-tree-node\n          *cdkTreeNodeDef=\"let node; when: hasNoChild\"\n          (mousedown)=\"mouseDown(node, $event)\"\n          (mouseenter)=\"mouseEnter(node)\"\n        >\n          <ng-container\n            [ngTemplateOutlet]=\"treeItemTemplate?.templateRef || defaultTemplate\"\n            [ngTemplateOutletContext]=\"{\n              $implicit: node\n            }\"\n          ></ng-container>\n        </cdk-tree-node>\n\n        <cdk-tree-node\n          *cdkTreeNodeDef=\"let node; when: hasChild\"\n          (mousedown)=\"mouseDown(node, $event)\"\n          (mouseenter)=\"mouseEnter(node)\"\n        >\n          <ng-container\n            [ngTemplateOutlet]=\"treeItemTemplate?.templateRef || defaultTemplate\"\n            [ngTemplateOutletContext]=\"{\n              $implicit: node\n            }\"\n          ></ng-container>\n        </cdk-tree-node>\n      </cdk-tree>\n    </cdk-virtual-scroll-viewport>\n  </pupa-scrollable>\n\n  <ng-container *ngIf=\"dragAndDropMeta$ | async as dragAndDropMeta\">\n    <ng-container\n      [ngTemplateOutlet]=\"dragTreeItemTemplate\"\n      [ngTemplateOutletContext]=\"{\n        treeItem: dragAndDropMeta.dragTreeItem,\n        top: dragAndDropMeta.dragTreeItemTop,\n        left: dragAndDropMeta.dragTreeItemLeft,\n        width: dragAndDropMeta.dragTreeItemWidth,\n        isVisible: dragAndDropMeta.dragTreeItemIsDisplayed\n      }\"\n    ></ng-container>\n  </ng-container>\n</section>\n\n<ng-template\n  let-left=\"left\"\n  let-width=\"width\"\n  let-top=\"top\"\n  let-treeItem=\"treeItem\"\n  let-isVisible=\"isVisible\"\n  #dragTreeItemTemplate\n>\n  <div *ngIf=\"isVisible\" class=\"draggable\" [style.left.px]=\"left\" [style.top.px]=\"top\" [style.width.px]=\"width\">\n    <ng-container\n      [ngTemplateOutlet]=\"treeItemTemplate?.templateRef || defaultTemplate\"\n      [ngTemplateOutletContext]=\"{\n        $implicit: treeItem\n      }\"\n    ></ng-container>\n  </div>\n</ng-template>\n\n<ng-template #defaultTemplate let-node>\n  <pupa-tree-node (click)=\"click(node)\" [treeNodeProperties]=\"getTreeNodeProperties(node) | async\">{{\n    node?.name\n  }}</pupa-tree-node>\n</ng-template>\n\n<ng-content></ng-content>\n","import { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CdkTreeModule } from '@angular/cdk/tree';\nimport { NgModule } from '@angular/core';\n\nimport { CommonModule } from '@angular/common';\nimport { iosArrowDownIcon, iosArrowForwardIcon, PupaIconsModule } from '@bimeister/pupakit.icons';\nimport { PupaScrollableModule, PupaSkeletonModule, PupaSpinnerModule } from '@bimeister/pupakit.kit';\nimport { PupaTreeLayoutModule } from '../tree-layout/tree-layout.module';\nimport { TreeNewComponent } from './components/tree-new/tree-new.component';\nimport { TreeItemTemplateDirective } from './directives/tree-item-template.directive';\n\n@NgModule({\n  declarations: [TreeNewComponent, TreeItemTemplateDirective],\n  imports: [\n    CommonModule,\n    PupaSkeletonModule,\n    PupaSpinnerModule,\n    ScrollingModule,\n    CdkTreeModule,\n    PupaIconsModule.forFeature([iosArrowDownIcon, iosArrowForwardIcon]),\n    PupaTreeLayoutModule,\n    PupaScrollableModule,\n  ],\n  providers: [],\n  exports: [TreeNewComponent, TreeItemTemplateDirective],\n})\nexport class PupaTreeNewModule {}\n","import { NgModule, Type } from '@angular/core';\nimport { PupaTreeLayoutModule } from './components/tree-layout/tree-layout.module';\nimport { PupaTreeNewModule } from './components/tree-new/tree-new.module';\n\nconst MODULES: Type<unknown>[] = [PupaTreeLayoutModule, PupaTreeNewModule];\n\n@NgModule({\n  declarations: [],\n  imports: MODULES,\n  exports: MODULES,\n})\nexport class PupaTreeModule {}\n","export const DEFAULT_TREE_ITEM_SIZE_PX: number = 32;\n","import { TrackByFunction } from '@angular/core';\nimport { isNil } from '@bimeister/utilities';\nimport { DEFAULT_TREE_ITEM_SIZE_PX } from '../constants/default-tree-item-size-px.const';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { TreeDataDisplayCollectionRef } from '../interfaces/tree-data-display-collection-ref.interface';\nimport { FlatTreeItem } from './flat-tree-item.class';\n\nexport class TreeDataDisplayCollection implements TreeDataDisplayCollectionRef {\n  public readonly data$: BehaviorSubject<FlatTreeItem[]> = new BehaviorSubject<FlatTreeItem[]>([]);\n  public readonly selectedIdsList$: BehaviorSubject<string[]> = new BehaviorSubject([]);\n\n  public readonly trackBy$: Subject<TrackByFunction<FlatTreeItem>> = new BehaviorSubject<TrackByFunction<FlatTreeItem>>(\n    TreeDataDisplayCollection.trackBy\n  );\n  public readonly scrollBehavior$: BehaviorSubject<ScrollBehavior> = new BehaviorSubject('smooth');\n  public readonly expandedIdsList$: BehaviorSubject<string[]> = new BehaviorSubject([]);\n  public readonly hasDragAndDrop$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n  public readonly treeItemSizePx$: BehaviorSubject<number> = new BehaviorSubject(DEFAULT_TREE_ITEM_SIZE_PX);\n  public readonly isLoading$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n\n  public setExpandedIdsList(value: string[]): void {\n    this.expandedIdsList$.next(value);\n  }\n\n  public setIsLoading(value: boolean): void {\n    this.isLoading$.next(value);\n  }\n\n  public setData(data: FlatTreeItem[]): Observable<FlatTreeItem[]> {\n    this.data$.next(data);\n    return this.data$.pipe(take(1));\n  }\n\n  public setSelectedIdsList(value: string[]): void {\n    this.selectedIdsList$.next(value);\n  }\n\n  public static readonly trackBy: TrackByFunction<any> = <T>(index: number, dataItem: T): string => {\n    if (isNil(dataItem)) {\n      return `${index}__null`;\n    }\n    return `${index}__${JSON.stringify(dataItem)}`;\n  };\n}\n","import { Type } from '@angular/core';\nimport { EventBus } from '@bimeister/event-bus/rxjs';\nimport { QueueEvents } from '@bimeister/pupakit.common';\nimport { isNil } from '@bimeister/utilities';\nimport { Observable, Subscription } from 'rxjs';\nimport { filter, mapTo, switchMap, withLatestFrom } from 'rxjs/operators';\nimport { TreeEvents } from '../events/tree.events';\nimport { FlatTreeItem } from './flat-tree-item.class';\nimport { TreeDataDisplayCollection } from './tree-data-display-collection.class';\n\nexport class DefaultTreeEventHandler {\n  protected subscription: Subscription = new Subscription();\n\n  constructor(\n    protected readonly eventBus: EventBus,\n    protected readonly dataDisplayCollection: TreeDataDisplayCollection\n  ) {\n    this.reconnect();\n  }\n\n  protected subscribeToEvents(): void {\n    this.subscription.add(this.getSubscriptionToSetData());\n    this.subscription.add(this.getSubscriptionForUpdateItem());\n    this.subscription.add(this.getSubscriptionForRemoveItem());\n    this.subscription.add(this.getSubscriptionForScrollTo());\n    this.subscription.add(this.getSubscriptionForRemoveChildren());\n    this.subscription.add(this.getSubscriptionForSetChildren());\n  }\n\n  protected getSubscriptionToSetData(): Subscription {\n    return this.getEvents(TreeEvents.SetData)\n      .pipe(\n        switchMap((event: TreeEvents.SetData) => this.dataDisplayCollection.setData(event.payload).pipe(mapTo(event)))\n      )\n      .subscribe((event: TreeEvents.SetData) => this.eventBus.dispatch(new QueueEvents.RemoveFromQueue(event.id)));\n  }\n\n  protected getSubscriptionForScrollTo(): Subscription {\n    return this.getEvents(TreeEvents.ScrollById)\n      .pipe(withLatestFrom(this.dataDisplayCollection.data$))\n      .subscribe(([event, data]: [TreeEvents.ScrollById, FlatTreeItem[]]) => {\n        const treeItem: FlatTreeItem = DefaultTreeEventHandler.getTreeItem(event.payload, data);\n        if (isNil(treeItem)) {\n          return this.eventBus.dispatch(new QueueEvents.RemoveFromQueue(event.id));\n        }\n        const index: number = data.indexOf(treeItem);\n        this.eventBus.dispatch(new TreeEvents.ScrollByIndex(index));\n        this.eventBus.dispatch(new QueueEvents.RemoveFromQueue(event.id));\n      });\n  }\n\n  protected getSubscriptionForRemoveItem(): Subscription {\n    return this.getEvents(TreeEvents.RemoveItem)\n      .pipe(withLatestFrom(this.dataDisplayCollection.data$, this.dataDisplayCollection.expandedIdsList$))\n      .subscribe(([event, data, expandedIdsList]: [TreeEvents.RemoveItem, FlatTreeItem[], string[]]) => {\n        this.removeItemWithChildren(event.payload, data, expandedIdsList);\n        this.eventBus.dispatch(new QueueEvents.RemoveFromQueue(event.id));\n      });\n  }\n\n  protected getSubscriptionForUpdateItem(): Subscription {\n    return this.getEvents(TreeEvents.UpdateItem)\n      .pipe(withLatestFrom(this.dataDisplayCollection.data$))\n      .subscribe(([event, data]: [TreeEvents.UpdateItem, FlatTreeItem[]]) => {\n        this.updateItem(event.payload, data);\n        this.eventBus.dispatch(new QueueEvents.RemoveFromQueue(event.id));\n      });\n  }\n\n  protected updateItem(updatedItem: FlatTreeItem, data: FlatTreeItem[]): void {\n    const treeItemExists: boolean = DefaultTreeEventHandler.treeItemExists(updatedItem.id, data);\n    if (!treeItemExists) {\n      return;\n    }\n    const updatedData: FlatTreeItem[] = data.map((treeItem: FlatTreeItem) => {\n      if (treeItem.id === updatedItem.id) {\n        return new FlatTreeItem(\n          treeItem.isExpandable,\n          updatedItem.name,\n          treeItem.level,\n          treeItem.id,\n          updatedItem.originalData,\n          treeItem.isElement\n        );\n      }\n      return treeItem;\n    });\n    this.eventBus.dispatch(new TreeEvents.SetData(updatedData));\n  }\n\n  protected removeItem(removeItemId: string, data: FlatTreeItem[]): void {\n    const treeItemExists: boolean = DefaultTreeEventHandler.treeItemExists(removeItemId, data);\n    if (!treeItemExists) {\n      return;\n    }\n    const updatedData: FlatTreeItem[] = data.filter((treeItem: FlatTreeItem) => treeItem.id !== removeItemId);\n    this.eventBus.dispatch(new TreeEvents.SetData(updatedData));\n  }\n\n  public reconnect(): void {\n    this.disconnect();\n    this.subscribeToEvents();\n  }\n\n  public disconnect(): void {\n    this.subscription.unsubscribe();\n    this.subscription = new Subscription();\n  }\n\n  public getEvents<E extends TreeEvents.TreeEventBase>(eventType: Type<E>): Observable<E> {\n    return this.eventBus\n      .listen()\n      .pipe(filter((event: TreeEvents.TreeEventBase): event is E => event instanceof eventType));\n  }\n\n  private getSubscriptionForSetChildren(): Subscription {\n    return this.getEvents(TreeEvents.SetChildren)\n      .pipe(withLatestFrom(this.dataDisplayCollection.data$, this.dataDisplayCollection.expandedIdsList$))\n      .subscribe(([event, data, expandedIdsList]: [TreeEvents.SetChildren, FlatTreeItem[], string[]]) => {\n        this.setChildren(event.payload.treeItemId, event.payload.children, data, expandedIdsList);\n        this.eventBus.dispatch(new QueueEvents.RemoveFromQueue(event.id));\n      });\n  }\n\n  private getSubscriptionForRemoveChildren(): Subscription {\n    return this.getEvents(TreeEvents.RemoveChildren)\n      .pipe(withLatestFrom(this.dataDisplayCollection.data$, this.dataDisplayCollection.expandedIdsList$))\n      .subscribe(([event, data, expandedIdsList]: [TreeEvents.RemoveChildren, FlatTreeItem[], string[]]) => {\n        this.removeChildren(event.payload, data, expandedIdsList);\n        this.eventBus.dispatch(new QueueEvents.RemoveFromQueue(event.id));\n      });\n  }\n\n  private setChildren(\n    parentId: string,\n    children: FlatTreeItem[],\n    data: FlatTreeItem[],\n    expandedIdsList: string[]\n  ): void {\n    if (isNil(parentId)) {\n      const newData: FlatTreeItem[] = children.map((treeItem: FlatTreeItem) => ({ ...treeItem, level: 0 }));\n      this.eventBus.dispatch(new TreeEvents.SetData(newData));\n      this.eventBus.dispatch(new TreeEvents.SetExpanded([]));\n      return;\n    }\n    const parentIsExpanded: boolean = expandedIdsList.includes(parentId);\n    if (parentIsExpanded) {\n      return;\n    }\n    const parent: FlatTreeItem = DefaultTreeEventHandler.getTreeItem(parentId, data);\n    const isExpanded: boolean = expandedIdsList.includes(parentId);\n    if (isNil(parent) || isExpanded) {\n      return;\n    }\n    const childrenIdsSet: Set<string> = new Set();\n    const childrenWithLevel: FlatTreeItem[] = children.map((childItem: FlatTreeItem) => {\n      childrenIdsSet.add(childItem.id);\n      return {\n        ...childItem,\n        level: Number(parent.level) + 1,\n      };\n    });\n    const parentIndex: number = data.indexOf(parent);\n    const dataWithChildren: FlatTreeItem[] = [\n      ...data.slice(0, parentIndex),\n      parent,\n      ...childrenWithLevel,\n      ...data.slice(parentIndex + 1),\n    ];\n    const noExpandedChildrenList: string[] = expandedIdsList.filter(\n      (expandedTreeItemId: string) => !childrenIdsSet.has(expandedTreeItemId)\n    );\n    const newExpandedList: string[] = [...noExpandedChildrenList, parent.id];\n    this.eventBus.dispatch(new TreeEvents.SetData(dataWithChildren));\n    this.eventBus.dispatch(new TreeEvents.SetExpanded(newExpandedList));\n  }\n\n  private removeItemWithChildren(removeItemId: string, data: FlatTreeItem[], expanded: string[]): void {\n    const treeItemExists: boolean = DefaultTreeEventHandler.treeItemExists(removeItemId, data);\n    if (!treeItemExists) {\n      this.eventBus.dispatch(new TreeEvents.SetData(data));\n      this.eventBus.dispatch(new TreeEvents.SetExpanded(expanded));\n      return;\n    }\n    const [dataWithoutChildren, expandedWithoutChildren]: [FlatTreeItem[], string[]] = this.getRemovedChildren(\n      removeItemId,\n      data,\n      expanded\n    );\n    const dataWithoutRemovedItem: FlatTreeItem[] = dataWithoutChildren.filter(\n      (treeItem: FlatTreeItem) => treeItem.id !== removeItemId\n    );\n    this.eventBus.dispatch(new TreeEvents.SetData(dataWithoutRemovedItem));\n    this.eventBus.dispatch(new TreeEvents.SetExpanded(expandedWithoutChildren));\n  }\n\n  private removeChildren(parentId: string, data: FlatTreeItem[], expanded: string[]): void {\n    const [dataWithoutChildren, expandedWithoutChildren]: [FlatTreeItem[], string[]] = this.getRemovedChildren(\n      parentId,\n      data,\n      expanded\n    );\n    this.eventBus.dispatch(new TreeEvents.SetData(dataWithoutChildren));\n    this.eventBus.dispatch(new TreeEvents.SetExpanded(expandedWithoutChildren));\n  }\n\n  private getRemovedChildren(parentId: string, data: FlatTreeItem[], expanded: string[]): [FlatTreeItem[], string[]] {\n    const parent: FlatTreeItem = DefaultTreeEventHandler.getTreeItem(parentId, data);\n    if (isNil(parent)) {\n      return [data, expanded];\n    }\n    const parentIndex: number = data.indexOf(parent);\n    const dataBeforeParent: FlatTreeItem[] = parentIndex === 0 ? [] : data.slice(0, parentIndex);\n    const dataAfterParent: FlatTreeItem[] = data.slice(parentIndex + 1);\n    const nextNonChildIndex: number = dataAfterParent.findIndex(\n      (dataItem: FlatTreeItem) => dataItem.level <= parent.level\n    );\n    const isLastParent: boolean = nextNonChildIndex === -1;\n    const children: FlatTreeItem[] = dataAfterParent.slice(0, nextNonChildIndex);\n    const childrenIdsList: string[] = children.map((child: FlatTreeItem) => child.id);\n    const expandedWithoutChildren: string[] = expanded.filter(\n      (expandedItemId: string) => !childrenIdsList.includes(expandedItemId) && expandedItemId !== parentId\n    );\n    const dataAfterLastChild: FlatTreeItem[] = isLastParent ? [] : dataAfterParent.slice(nextNonChildIndex);\n    const dataWithoutChildren: FlatTreeItem[] = [...dataBeforeParent, parent, ...dataAfterLastChild];\n    return [dataWithoutChildren, expandedWithoutChildren];\n  }\n\n  protected static treeItemExists(treeItemId: string, data: FlatTreeItem[]): boolean {\n    const treeItem: FlatTreeItem = DefaultTreeEventHandler.getTreeItem(treeItemId, data);\n    return !isNil(treeItem);\n  }\n\n  protected static getTreeItem(treeItemId: string, data: FlatTreeItem[]): FlatTreeItem {\n    return data.find((treeItem: FlatTreeItem) => treeItem.id === treeItemId);\n  }\n}\n","import { TrackByFunction, Type } from '@angular/core';\nimport { EventBus } from '@bimeister/event-bus/rxjs';\nimport { Nullable } from '@bimeister/utilities';\nimport { Observable } from 'rxjs';\nimport { TreeEvents } from '../events/tree.events';\nimport { TreeControllerOptions } from '../interfaces/tree-controller-options.interface';\nimport { TreeDataDisplayCollectionRef } from '../interfaces/tree-data-display-collection-ref.interface';\nimport { DefaultTreeEventHandler } from './default-tree-event-handler.class';\nimport { FlatTreeItem } from './flat-tree-item.class';\nimport { TreeDataDisplayCollection } from './tree-data-display-collection.class';\nimport { DEFAULT_TREE_ITEM_SIZE_PX } from '../constants/default-tree-item-size-px.const';\nimport { EventsQueue, QueueEvents } from '@bimeister/pupakit.common';\n\nexport class TreeController {\n  public readonly eventBus: EventBus = new EventBus();\n\n  protected readonly queue: EventsQueue = new EventsQueue(this.eventBus);\n  protected readonly dataDisplayCollection: TreeDataDisplayCollection = new TreeDataDisplayCollection();\n  protected readonly handler: DefaultTreeEventHandler = new DefaultTreeEventHandler(\n    this.eventBus,\n    this.dataDisplayCollection\n  );\n\n  constructor(protected readonly options?: Nullable<TreeControllerOptions>) {\n    this.setScrollBehavior(options?.scrollBehavior);\n    this.setTrackBy(options?.trackBy);\n    this.setHasDragAndDrop(options?.hasDragAndDrop);\n    this.setTreeItemSizePx(options?.treeItemSizePx);\n  }\n\n  protected dispatchInQueue(event: TreeEvents.TreeEventBase): void {\n    const queueEvent: QueueEvents.AddToQueue = new QueueEvents.AddToQueue(event);\n    this.eventBus.dispatch(queueEvent);\n  }\n\n  public getOptions(): Nullable<TreeControllerOptions> {\n    return this.options;\n  }\n\n  public setData(data: FlatTreeItem[]): void {\n    this.dispatchInQueue(new TreeEvents.SetData(data));\n  }\n\n  public setSelected(...selectedIds: string[]): void {\n    this.dispatchInQueue(new TreeEvents.SetSelected(selectedIds));\n  }\n\n  public setLoading(isLoading: boolean): void {\n    this.eventBus.dispatch(new TreeEvents.SetLoading(isLoading));\n  }\n\n  public setHasDragAndDrop(hasDragAndDrop: boolean = false): void {\n    this.dataDisplayCollection.hasDragAndDrop$.next(hasDragAndDrop);\n  }\n\n  public getEvents<E extends TreeEvents.TreeEventBase>(eventType: Type<E>): Observable<E> {\n    return this.queue.getEvents(eventType);\n  }\n\n  public getDataDisplayCollectionRef(): TreeDataDisplayCollectionRef {\n    return this.dataDisplayCollection;\n  }\n\n  public expand(treeItemId: string): void {\n    this.eventBus.dispatch(new TreeEvents.Expand(treeItemId));\n  }\n\n  public setChildren(treeItemId: string, children: FlatTreeItem[]): void {\n    this.dispatchInQueue(new TreeEvents.SetChildren({ treeItemId, children }));\n  }\n\n  public removeChildren(treeItemId: string): void {\n    this.dispatchInQueue(new TreeEvents.RemoveChildren(treeItemId));\n  }\n\n  public removeTreeItem(treeItemId: string): void {\n    this.dispatchInQueue(new TreeEvents.RemoveItem(treeItemId));\n  }\n\n  public setTreeItem(treeItem: FlatTreeItem): void {\n    this.dispatchInQueue(new TreeEvents.UpdateItem(treeItem));\n  }\n\n  public scrollTo(treeItemId: string): void {\n    this.dispatchInQueue(new TreeEvents.ScrollById(treeItemId));\n  }\n\n  private setScrollBehavior(scrollBehavior: ScrollBehavior = 'smooth'): void {\n    this.dataDisplayCollection.scrollBehavior$.next(scrollBehavior);\n  }\n\n  private setTrackBy(trackBy: TrackByFunction<FlatTreeItem> = TreeDataDisplayCollection.trackBy): void {\n    this.dataDisplayCollection.trackBy$.next(trackBy);\n  }\n\n  private setTreeItemSizePx(treeItemSizePx: number = DEFAULT_TREE_ITEM_SIZE_PX): void {\n    this.dataDisplayCollection.treeItemSizePx$.next(treeItemSizePx);\n  }\n}\n","import { ElementRef, Injectable, Renderer2 } from '@angular/core';\nimport { Uuid } from '@bimeister/pupakit.common';\nimport { getClampedValue, isNil, Nullable } from '@bimeister/utilities';\nimport { BehaviorSubject, Observable, Subject, timer } from 'rxjs';\nimport { take, withLatestFrom } from 'rxjs/operators';\nimport { DropEventInterface } from '../interfaces/drop-event.interface';\nimport { FlatTreeItem } from './flat-tree-item.class';\n\ninterface Position {\n  top: number;\n  left: number;\n}\n\n/**\n * @deprecated\n */\n@Injectable()\nexport class TreeDragAndDropControl {\n  public readonly draggingHasStarted$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n  public readonly droppedSubject$: Subject<DropEventInterface<FlatTreeItem>> = new Subject();\n  public readonly draggableNode$: BehaviorSubject<Nullable<FlatTreeItem>> = new BehaviorSubject<Nullable<FlatTreeItem>>(\n    null\n  );\n  public readonly scrollDirection$: BehaviorSubject<Nullable<'up' | 'down'>> = new BehaviorSubject<\n    Nullable<'up' | 'down'>\n  >(null);\n  public readonly expandNodeWithDelay$: Subject<FlatTreeItem | null> = new Subject<FlatTreeItem | null>();\n\n  private readonly hasDragAndDrop$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n  /** @deprecated mutable object */\n  private dropNode: FlatTreeItem | null;\n  /** @deprecated mutable object */\n  private mouseDownPosition: Position | null = null;\n  /** @deprecated mutable object */\n  private draggableElementBoundingBox: DOMRect | null = null;\n  private draggableExpandableDescendants: Uuid[] = [];\n  private renderer: Renderer2;\n  private host: ElementRef<HTMLElement>;\n\n  public setHostAndRenderer(host: ElementRef<HTMLElement>, renderer: Renderer2): void {\n    this.host = host;\n    this.renderer = renderer;\n  }\n\n  public setHasDragAndDrop(hasDragAndDrop: boolean): void {\n    this.hasDragAndDrop$.next(hasDragAndDrop);\n  }\n\n  public mouseDown(treeNode: FlatTreeItem, event: MouseEvent): void {\n    this.hasDragAndDrop$.pipe(take(1)).subscribe((hasDragAndDrop: boolean) => {\n      if (!hasDragAndDrop) {\n        return;\n      }\n\n      this.draggableNode$.next(treeNode);\n      this.mouseDownPosition = {\n        left: event.screenX,\n        top: event.screenY,\n      };\n      if (event.target instanceof HTMLElement) {\n        this.draggableElementBoundingBox = event.target.getBoundingClientRect();\n      }\n    });\n  }\n\n  public mouseMove(\n    { screenX, screenY }: MouseEvent,\n    draggableElement: ElementRef<HTMLElement>,\n    data$: Observable<FlatTreeItem[]>\n  ): void {\n    if (isNil(this.mouseDownPosition)) {\n      return;\n    }\n\n    this.draggingHasStarted$.pipe(take(1)).subscribe((draggingHasStarted: boolean) => {\n      const dragDistanceSqr: number =\n        Math.pow(this.mouseDownPosition.left - screenX, 2) + Math.pow(this.mouseDownPosition.top - screenY, 2);\n\n      const druggingMustBeStarted: boolean = dragDistanceSqr > this.draggableElementBoundingBox?.height / 2;\n      if (!draggingHasStarted && druggingMustBeStarted) {\n        this.startDragging(draggableElement, data$);\n        this.draggingHasStarted$.next(true);\n        this.updateDraggablePosition(screenX, screenY, draggableElement);\n      }\n\n      if (draggingHasStarted) {\n        this.updateDraggablePosition(screenX, screenY, draggableElement);\n      }\n    });\n  }\n\n  public mouseUp(): void {\n    this.draggingHasStarted$\n      .pipe(take(1), withLatestFrom(this.draggableNode$))\n      .subscribe(([draggingHasStarted, draggableNode]: [boolean, FlatTreeItem]) => {\n        if (draggingHasStarted && !isNil(this.dropNode)) {\n          this.droppedSubject$.next({\n            draggedElement: draggableNode,\n            droppedElement: this.dropNode,\n          });\n        }\n\n        this.draggingHasStarted$.next(false);\n        this.draggableNode$.next(null);\n        this.dropNode = null;\n        this.mouseDownPosition = null;\n        this.draggableElementBoundingBox = null;\n        this.scrollDirection$.next(null);\n        this.draggableExpandableDescendants = [];\n      });\n  }\n\n  public mouseEnter(node: FlatTreeItem): void {\n    this.draggingHasStarted$.pipe(take(1)).subscribe((draggingHasStarted: boolean) => {\n      if (!draggingHasStarted) {\n        return;\n      }\n\n      if (!node.isElement) {\n        this.dropNode = node;\n      }\n\n      if (this.canDrop(node)) {\n        this.expandNodeWithDelay$.next(node);\n      }\n    });\n  }\n\n  public canDrop(node: FlatTreeItem): boolean {\n    if (isNil(node)) {\n      return false;\n    }\n    return node.isExpandable && !this.draggableExpandableDescendants.includes(node.id);\n  }\n\n  public mouseLeave(): void {\n    this.draggingHasStarted$.pipe(take(1)).subscribe((draggingHasStarted: boolean) => {\n      if (!draggingHasStarted) {\n        return;\n      }\n\n      this.dropNode = null;\n      this.expandNodeWithDelay$.next(null);\n    });\n  }\n\n  private startDragging(draggableElement: ElementRef<HTMLElement>, data$: Observable<FlatTreeItem[]>): void {\n    this.setupWidthForDraggableElement(draggableElement);\n    this.setupDraggableExpandableDescendants(data$);\n  }\n\n  private setupWidthForDraggableElement(draggableElement: ElementRef<HTMLElement>): void {\n    timer(0)\n      .pipe(take(1))\n      .subscribe(() => {\n        this.renderer.setStyle(draggableElement.nativeElement, 'width', `${this.draggableElementBoundingBox.width}px`);\n      });\n  }\n\n  private setupDraggableExpandableDescendants(data$: Observable<FlatTreeItem[]>): void {\n    data$\n      .pipe(take(1), withLatestFrom(this.draggableNode$))\n      .subscribe(([treeItems, draggableNode]: [FlatTreeItem[], FlatTreeItem]) => {\n        const targetLevel: number = draggableNode?.level ?? 0;\n\n        let currentIndex: number =\n          treeItems.findIndex((dataPoint: FlatTreeItem) => dataPoint.id === draggableNode?.id) + 1;\n        const endOfListNotReached = (): boolean => treeItems.length !== currentIndex;\n        const targetLevelNotReached = (): boolean => treeItems[currentIndex].level !== targetLevel;\n        const result: Uuid[] = [draggableNode?.id];\n\n        while (endOfListNotReached() && targetLevelNotReached()) {\n          const currentNode: FlatTreeItem = treeItems[currentIndex];\n          if (currentNode.isExpandable) {\n            result.push(currentNode.id);\n          }\n          currentIndex++;\n        }\n\n        this.draggableExpandableDescendants = result;\n      });\n  }\n\n  private updateDraggablePosition(screenX: number, screenY: number, draggableElement: ElementRef<HTMLElement>): void {\n    const draggableElementPositionShift: Position = {\n      left: this.mouseDownPosition.left - this.draggableElementBoundingBox.left,\n      top: this.mouseDownPosition.top - this.draggableElementBoundingBox.top,\n    };\n\n    const bottomBorderPositionY: number =\n      this.host.nativeElement.clientHeight - this.draggableElementBoundingBox.height;\n    const draggableElementPosition: Position = {\n      left: screenX - this.draggableElementBoundingBox.left - draggableElementPositionShift.left,\n      top: getClampedValue(screenY - draggableElementPositionShift.top, 0, bottomBorderPositionY),\n    };\n\n    const isTopBorderReached: boolean = draggableElementPosition.top <= this.draggableElementBoundingBox.height;\n    const isBottomBorderReached: boolean = draggableElementPosition.top >= bottomBorderPositionY;\n\n    this.scrollDirection$.next(isTopBorderReached ? 'up' : isBottomBorderReached ? 'down' : null);\n\n    if (!isNil(draggableElement)) {\n      this.renderer.setStyle(draggableElement.nativeElement, 'left', `${draggableElementPosition.left}px`);\n      this.renderer.setStyle(draggableElement.nativeElement, 'top', `${draggableElementPosition.top}px`);\n    }\n  }\n}\n"],"names":["i3","i5.TreeNodeComponent","i6.TreeNodeSkeletonComponent"],"mappings":";;;;;;;;;;;;;;;;;;;AAAO,MAAM,gBAAgB,GAAW;;MCU3B,yBAAyB,CAAA;AAGpC,IAAA,IAAW,MAAM,GAAA;AACf,QAAA,OAAO,GAAG,IAAI,CAAC,KAAK,GAAG,gBAAgB,IAAI,CAAC;KAC7C;;uHALU,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,yBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,2FCVtC,sOAKA,EAAA,MAAA,EAAA,CAAA,irBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;4FDKa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAPrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,iBAGpB,iBAAiB,CAAC,QAAQ,EACxB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,sOAAA,EAAA,MAAA,EAAA,CAAA,irBAAA,CAAA,EAAA,CAAA;8BAG/B,KAAK,EAAA,CAAA;sBAApB,KAAK;;;MELK,wBAAwB,CAAA;AAKnC,IAAA,WAAA,CAA4B,WAAiC,EAAA;AAAjC,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAsB;QAF7C,IAAA,CAAA,YAAY,GAA6B,IAAI,eAAe,CAAU,IAAI,CAAC,CAAC;KAE3B;IAE1D,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;KAC3D;;sHATU,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;0GAAxB,wBAAwB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;iBAClC,CAAA;kGAEiB,mBAAmB,EAAA,CAAA;sBAAlC,KAAK;;;MCMK,iBAAiB,CAAA;AAI5B,IAAA,IAAW,SAAS,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE;AACtC,YAAA,OAAO,kBAAkB,CAAC;AAC3B,SAAA;AACD,QAAA,OAAO,mBAAmB,CAAC;KAC5B;AAED,IAAA,IAAW,WAAW,GAAA;QACpB,OAAO,CAAA,EAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,GAAG,gBAAgB,CAAA,EAAA,CAAI,CAAC;KAChE;AAED,IAAA,IAAW,UAAU,GAAA;QACnB,OAAO,IAAI,CAAC,kBAAkB,CAAC,UAAU,IAAI,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC;KACpF;AAEM,IAAA,MAAM,CAAC,KAAY,EAAA;QACxB,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE;YACzC,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC;KAClC;;+GAzBU,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAjB,iBAAiB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,yBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAEd,wBAAwB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECfxC,wmDAiDA,EAAA,MAAA,EAAA,CAAA,qlMAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;4FDpCa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,iBAGX,iBAAiB,CAAC,QAAQ,EACxB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,wmDAAA,EAAA,MAAA,EAAA,CAAA,qlMAAA,CAAA,EAAA,CAAA;8BAG/B,kBAAkB,EAAA,CAAA;sBAAjC,KAAK;gBACkD,uBAAuB,EAAA,CAAA;sBAA9E,YAAY;uBAAC,wBAAwB,CAAA;;;MEM3B,oBAAoB,CAAA;;kHAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAApB,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,iBAXhB,iBAAiB,EAAE,wBAAwB,EAAE,yBAAyB,aAEnF,aAAa;QACb,YAAY;AACZ,QAAA,iBAAiB,wBAEjB,kBAAkB;AAClB,QAAA,iBAAiB,CAET,EAAA,OAAA,EAAA,CAAA,wBAAwB,EAAE,iBAAiB,EAAE,yBAAyB,CAAA,EAAA,CAAA,CAAA;AAErE,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,YAT7B,aAAa;QACb,YAAY;QACZ,iBAAiB;QACjB,eAAe,CAAC,UAAU,CAAC,CAAC,SAAS,EAAE,kBAAkB,EAAE,mBAAmB,CAAC,CAAC;QAChF,kBAAkB;QAClB,iBAAiB,CAAA,EAAA,CAAA,CAAA;4FAIR,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAZhC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,CAAC,iBAAiB,EAAE,wBAAwB,EAAE,yBAAyB,CAAC;AACtF,oBAAA,OAAO,EAAE;wBACP,aAAa;wBACb,YAAY;wBACZ,iBAAiB;wBACjB,eAAe,CAAC,UAAU,CAAC,CAAC,SAAS,EAAE,kBAAkB,EAAE,mBAAmB,CAAC,CAAC;wBAChF,kBAAkB;wBAClB,iBAAiB;AAClB,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,wBAAwB,EAAE,iBAAiB,EAAE,yBAAyB,CAAC;iBAClF,CAAA;;;MCfY,YAAY,CAAA;AACvB,IAAA,WAAA,CACkB,YAAqB,EAC9B,IAAY,EACZ,KAAa,EACb,EAAU,EACV,YAAkB,GAAA,IAAI,EACtB,SAAA,GAAqB,KAAK,EAAA;AALjB,QAAA,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAS;AAC9B,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;AACZ,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAQ;AACb,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAQ;AACV,QAAA,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAU;AACtB,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAiB;KAC/B;AACL;;ACRK,MAAO,oBAAqB,SAAQ,UAAwB,CAAA;AAGhE,IAAA,WAAA,CAA6B,KAAiC,EAAA;AAC5D,QAAA,KAAK,EAAE,CAAC;AADmB,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAA4B;QAF7C,IAAA,CAAA,MAAM,GAA+B,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;KAI/E;AAEM,IAAA,QAAQ,CAAC,KAAgB,EAAA;AAC9B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACzB;IAEM,OAAO,GAAA;QACZ,OAAO,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAClD,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAA8B,KAAK,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAC5F,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAA8B,KAAI;AACjD,YAAA,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAc,KAAK,CAAC;YACxC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAChC,SAAC,CAAC,EACF,uBAAuB,EAAE,CAC1B,CAAC;KACH;IAEM,UAAU,GAAA;QACf,OAAO;KACR;AACF;;ACrBgB,IAAA,WA2BhB;AA3BD,CAAA,UAAiB,UAAU,EAAA;IACzB,MAAa,sBAAmC,YAAe,CAAA;AAK7D,QAAA,WAAA,CAA4B,OAAa,GAAA,IAAI,EAAkB,MAAA,GAA2B,IAAI,EAAA;AAC5F,YAAA,KAAK,EAAE,CAAC;AADkB,YAAA,IAAO,CAAA,OAAA,GAAP,OAAO,CAAU;AAAkB,YAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAyB;AAJ9E,YAAA,IAAK,CAAA,KAAA,GAAqB,IAAI,CAAC;AAC/B,YAAA,IAAE,CAAA,EAAA,GAAW,OAAO,EAAE,CAAC;AACvB,YAAA,IAAI,CAAA,IAAA,GAAqB,IAAI,CAAC;SAI7C;AACF,KAAA;AARY,IAAA,UAAA,CAAA,aAAa,gBAQzB,CAAA;IAED,MAAa,cAAc,aAA2B,CAAA;AAAG,KAAA;AAA5C,IAAA,UAAA,CAAA,KAAK,QAAuC,CAAA;IACzD,MAAa,mBAAmB,aAAqB,CAAA;AAAG,KAAA;AAA3C,IAAA,UAAA,CAAA,UAAU,aAAiC,CAAA;IACxD,MAAa,mBAAmB,aAA2B,CAAA;AAAG,KAAA;AAAjD,IAAA,UAAA,CAAA,UAAU,aAAuC,CAAA;IAC9D,MAAa,mBAAmB,aAAqB,CAAA;AAAG,KAAA;AAA3C,IAAA,UAAA,CAAA,UAAU,aAAiC,CAAA;IACxD,MAAa,aAAa,aAA+C,CAAA;AAAG,KAAA;AAA/D,IAAA,UAAA,CAAA,IAAI,OAA2D,CAAA;IAC5E,MAAa,sBAAsB,aAAqB,CAAA;AAAG,KAAA;AAA9C,IAAA,UAAA,CAAA,aAAa,gBAAiC,CAAA;IAC3D,MAAa,uBAAuB,aAAqB,CAAA;AAAG,KAAA;AAA/C,IAAA,UAAA,CAAA,cAAc,iBAAiC,CAAA;IAC5D,MAAa,gBAAgB,aAA6B,CAAA;AAAG,KAAA;AAAhD,IAAA,UAAA,CAAA,OAAO,UAAyC,CAAA;IAC7D,MAAa,mBAAmB,aAAsB,CAAA;AAAG,KAAA;AAA5C,IAAA,UAAA,CAAA,UAAU,aAAkC,CAAA;IACzD,MAAa,oBAAoB,aAAuB,CAAA;AAAG,KAAA;AAA9C,IAAA,UAAA,CAAA,WAAW,cAAmC,CAAA;IAC3D,MAAa,iBAAiB,aAAqB,CAAA;AAAG,KAAA;AAAzC,IAAA,UAAA,CAAA,QAAQ,WAAiC,CAAA;IACtD,MAAa,eAAe,aAAqB,CAAA;AAAG,KAAA;AAAvC,IAAA,UAAA,CAAA,MAAM,SAAiC,CAAA;IACpD,MAAa,4BAA4B,aAAqB,CAAA;AAAG,KAAA;AAApD,IAAA,UAAA,CAAA,mBAAmB,sBAAiC,CAAA;IACjE,MAAa,uBAAuB,aAAqB,CAAA;AAAG,KAAA;AAA/C,IAAA,UAAA,CAAA,cAAc,iBAAiC,CAAA;IAC5D,MAAa,oBAAoB,aAAuB,CAAA;AAAG,KAAA;AAA9C,IAAA,UAAA,CAAA,WAAW,cAAmC,CAAA;IAC3D,MAAa,oBAAoB,aAAsC,CAAA;AAAG,KAAA;AAA7D,IAAA,UAAA,CAAA,WAAW,cAAkD,CAAA;AAC5E,CAAC,EA3BgB,UAAU,KAAV,UAAU,GA2B1B,EAAA,CAAA,CAAA;;MC/BY,yBAAyB,CAAA;AACpC,IAAA,WAAA,CAA4B,WAAoD,EAAA;AAApD,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAyC;KAAI;;uHADzE,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;2GAAzB,yBAAyB,EAAA,QAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;4FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;iBACnC,CAAA;;;AC4CD,MAAM,2BAA2B,GAAW,IAAI,CAAC;MAoBpC,gBAAgB,CAAA;AA2B3B,IAAA,WAAA,CACkB,QAAmB,EACnB,IAA6B,EAC5B,iBAAoC,EAAA;AAFrC,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAW;AACnB,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAyB;AAC5B,QAAA,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;AAZvC,QAAA,IAAA,CAAA,WAAW,GAAkC,IAAI,eAAe,CAC9E,gBAAgB,CAAC,QAAQ,EACzB,gBAAgB,CAAC,YAAY,CAC9B,CAAC;QACc,IAAA,CAAA,UAAU,GAA+B,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QACnE,IAAA,CAAA,gBAAgB,GAA+C,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;AACxF,QAAA,IAAA,CAAA,gBAAgB,GAAoC,IAAI,OAAO,EAA0B,CAAC;AAC1F,QAAA,IAAA,CAAA,YAAY,GAAiB,IAAI,YAAY,EAAE,CAAC;KAM7D;IAEG,eAAe,GAAA;QACpB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,8BAA8B,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,4BAA4B,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,4BAA4B,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,gCAAgC,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,8BAA8B,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,oCAAoC,EAAE,CAAC,CAAC;QACnE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC;KACtD;AAEM,IAAA,WAAW,CAAC,OAA+B,EAAA;QAChD,IAAI,CAAC,eAAe,CAAC,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,UAAU,CAAC,CAAC;KAC3C;IAEM,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;KACjC;IAEM,UAAU,CAAC,eAAyB,EAAE,QAAsB,EAAA;QACjE,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,YAAY,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;KAClH;IAEM,QAAQ,CAAC,CAAS,EAAE,QAAsB,EAAA;AAC/C,QAAA,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,YAAY,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;KACzE;IAEM,UAAU,CAAC,CAAS,EAAE,QAAsB,EAAA;AACjD,QAAA,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;KAC1E;IAEM,SAAS,CAAC,CAAS,EAAE,QAAsB,EAAA;AAChD,QAAA,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,SAAS,CAAC;KACzE;IAEM,iBAAiB,CAAC,OAAiB,EAAE,QAAsB,EAAA;QAChE,OAAO,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;KACtC;IAEM,SAAS,CAAC,YAA0B,EAAE,KAAiB,EAAA;AAC5D,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,MAAK;YAChE,MAAM,iBAAiB,GAAa,EAAE,IAAI,EAAE,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,OAAO,EAAE,GAAG,EAAE,KAAK,KAAL,IAAA,IAAA,KAAK,uBAAL,KAAK,CAAE,OAAO,EAAE,CAAC;AAClF,YAAA,MAAM,MAAM,GAAgB,KAAK,CAAC,MAAM,CAAC;AACzC,YAAA,MAAM,2BAA2B,GAC/B,MAAM,YAAY,WAAW,GAAG,MAAM,CAAC,qBAAqB,EAAE,GAAG,IAAI,CAAC;YACxE,MAAM,iBAAiB,GAAW,2BAA2B,KAAA,IAAA,IAA3B,2BAA2B,KAA3B,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,2BAA2B,CAAE,KAAK,CAAC;AACrE,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;gBACzB,iBAAiB;gBACjB,YAAY;AACZ,gBAAA,YAAY,EAAE,YAAY;gBAC1B,2BAA2B;gBAC3B,iBAAiB;AACjB,gBAAA,uBAAuB,EAAE,KAAK;AAC/B,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACJ;AAEM,IAAA,UAAU,CAAC,QAAsB,EAAA;AACtC,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,eAAgC,KAAI;YACjG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,eAAe,CAAA,EAAA,EAAE,YAAY,EAAE,QAAQ,EAAA,CAAA,CAAG,CAAC;AAC3E,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACvC,SAAC,CAAC,CAAC;KACJ;IAEM,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,eAAgC,KAAI;YACjG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,eAAe,CAAA,EAAA,EAAE,YAAY,EAAE,IAAI,EAAA,CAAA,CAAG,CAAC;AACzE,SAAC,CAAC,CAAC;KACJ;AAGM,IAAA,SAAS,CAAC,KAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,eAAgC,KAAI;AACjG,YAAA,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;AACxE,SAAC,CAAC,CAAC;KACJ;IAGM,OAAO,GAAA;AACZ,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,eAAgC,KAAI;AACjG,YAAA,IAAI,CAAC,eAAe,CAAC,uBAAuB,EAAE;gBAC5C,OAAO;AACR,aAAA;AACD,YAAA,MAAM,aAAa,GAAqC;gBACtD,cAAc,EAAE,eAAe,CAAC,YAAY;gBAC5C,cAAc,EAAE,eAAe,CAAC,YAAY;aAC7C,CAAC;AACF,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAC7D,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAClC;AAEM,IAAA,KAAK,CAAC,QAAsB,EAAA;AACjC,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;KACxD;IAEM,eAAe,CAAC,eAAyB,EAAE,QAAsB,EAAA;QACtE,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;KACxG;AAEM,IAAA,qBAAqB,CAAC,IAAkB,EAAA;QAC7C,OAAO,aAAa,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CACvE,GAAG,CACD,CAAC,CAAC,eAAe,EAAE,eAAe,CAAuB,MAA0B;YACjF,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,WAAW,EAAE,CAAC,IAAI,CAAC,SAAS;YAC5B,WAAW,EAAE,IAAI,CAAC,YAAY;AAC9B,YAAA,SAAS,EAAE,KAAK;YAChB,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC;YAClD,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,IAAI,CAAC;YACzD,aAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,IAAI,CAAC;AAC5D,YAAA,UAAU,EAAE,KAAK;YACjB,MAAM,EAAE,MAAK;AACX,gBAAA,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;aAC7C;SACF,CAAC,CACH,CACF,CAAC;KACH;AAEO,IAAA,eAAe,CAAC,MAA6C,EAAA;QACnE,MAAM,KAAK,GAA6B,MAAM,KAAA,IAAA,IAAN,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,YAAY,CAAC;AAC7D,QAAA,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;YAChB,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAExB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,UAAU,CAAC,2BAA2B,EAAE,CAAC;QAC3E,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QACzC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC;QAClE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC;QACpD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC;QAClE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;QAC9C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC;QACxD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC;QACpE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC;QACpE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC;QAElE,IAAI,CAAC,UAAU,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACxD;AAEO,IAAA,WAAW,CAAC,QAAsB,EAAA;QACxC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;KACrC;AAEO,IAAA,aAAa,CAAC,QAAsB,EAAA;AAC1C,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;KAC9D;IAEO,oCAAoC,GAAA;QAC1C,OAAO,IAAI,CAAC,gBAAgB;AACzB,aAAA,IAAI,CACH,QAAQ,CAAC,CAAC,IAAkB,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAC5F,MAAM,CAAC,CAAC,QAAsB,KAAK,QAAQ,CAAC,YAAY,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CACjF;AACA,aAAA,SAAS,CAAC,CAAC,QAAsB,KAAI;AACpC,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1E,SAAC,CAAC,CAAC;KACN;IAEO,2BAA2B,GAAA;AACjC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,KAA4B,KAAI;YACtF,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACvD,YAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;AACvC,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACpE,SAAC,CAAC,CAAC;KACJ;IAEO,4BAA4B,GAAA;AAClC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,KAA6B,KAAI;AACxF,YAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACvC,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACpE,SAAC,CAAC,CAAC;KACJ;AAEO,IAAA,kBAAkB,CAAC,IAAc,EAAA;AACvC,QAAA,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;AACpD,QAAA,IAAI,CAAC,KAAK;AACP,aAAA,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,CAAC,IAAoB,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,QAAsB,KAAK,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CACnG;AACA,aAAA,SAAS,CAAC,CAAC,IAAoB,KAAI;AAClC,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,QAAsB,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC9E,SAAC,CAAC,CAAC;AACL,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;KACvC;IAEO,4BAA4B,GAAA;AAClC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,KAA6B,KAAI;AACxF,YAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACvC,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACpE,SAAC,CAAC,CAAC;KACJ;AAEO,IAAA,kBAAkB,CAAC,IAAc,EAAA;AACvC,QAAA,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;AACpD,QAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;KACxC;IAEO,8BAA8B,GAAA;AACpC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,KAA+B,KAAI;AAC5F,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAClC,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACpE,SAAC,CAAC,CAAC;KACJ;AAEO,IAAA,aAAa,CAAC,KAAa,EAAA;AACjC,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,cAA8B,KAAI;YAC9E,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;YACnD,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AAC7D,SAAC,CAAC,CAAC;KACJ;IAEO,gCAAgC,GAAA;QACtC,OAAO,QAAQ,CAAC,CAAC,CAAC;aACf,IAAI,CACH,SAAS,CAAC,uBAAuB,CAAC,EAClC,SAAS,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EACpD,YAAY,EAAE,EACd,GAAG,CAAC,CAAC,eAAgC,KAAK,eAAe,CAAC,eAAe,CAAC,EAC1E,YAAY,EAAE,EACd,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,CACrC;aACA,SAAS,CAAC,CAAC,CAAC,eAAe,EAAE,cAAc,CAAoC,KAAI;YAClF,MAAM,cAAc,GAAW,CAAC,CAAC;AACjC,YAAA,MAAM,WAAW,GAAW,eAAe,KAAK,IAAI,GAAG,CAAC,cAAc,GAAG,cAAc,CAAC;YACxF,MAAM,aAAa,GAAW,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;YAClE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,aAAa,GAAG,WAAW,EAAE,cAAc,CAAC,CAAC;AAC5E,SAAC,CAAC,CAAC;KACN;IAEO,8BAA8B,GAAA;QACpC,OAAO,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,KAAgB,KAAI;AACtE,YAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAClC,SAAC,CAAC,CAAC;KACJ;AAEO,IAAA,SAAS,CAAqC,SAAkB,EAAA;QACtE,OAAO,IAAI,CAAC,QAAQ;AACjB,aAAA,MAAM,EAAE;AACR,aAAA,IAAI,CAAC,MAAM,CAAC,CAAC,KAA+B,KAAiB,KAAK,YAAY,SAAS,CAAC,CAAC,CAAC;KAC9F;AAEO,IAAA,iBAAiB,CAAC,eAAgC,EAAE,CAAS,EAAE,CAAS,EAAA;AAC9E,QAAA,MAAM,2BAA2B,GAAY,eAAe,CAAC,2BAA2B,CAAC;AACzF,QAAA,MAAM,iBAAiB,GAAa,eAAe,CAAC,iBAAiB,CAAC;AACtE,QAAA,MAAM,6BAA6B,GAAa;AAC9C,YAAA,IAAI,EAAE,CAAA,iBAAiB,KAAjB,IAAA,IAAA,iBAAiB,uBAAjB,iBAAiB,CAAE,IAAI,KAAG,2BAA2B,KAA3B,IAAA,IAAA,2BAA2B,uBAA3B,2BAA2B,CAAE,IAAI,CAAA;AACjE,YAAA,GAAG,EAAE,CAAA,iBAAiB,KAAjB,IAAA,IAAA,iBAAiB,uBAAjB,iBAAiB,CAAE,GAAG,KAAG,2BAA2B,KAA3B,IAAA,IAAA,2BAA2B,uBAA3B,2BAA2B,CAAE,GAAG,CAAA;SAC/D,CAAC;AACF,QAAA,MAAM,qBAAqB,GAAW,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,IAAG,2BAA2B,aAA3B,2BAA2B,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAA3B,2BAA2B,CAAE,MAAM,CAAA,CAAC;AACjH,QAAA,MAAM,OAAO,GACR,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,eAAe,CAClB,EAAA,EAAA,gBAAgB,EAAE,CAAC,IAAG,2BAA2B,KAAA,IAAA,IAA3B,2BAA2B,KAA3B,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,2BAA2B,CAAE,IAAI,CAAA,GAAG,6BAA6B,CAAC,IAAI,EAC5F,eAAe,EAAE,eAAe,CAAC,CAAC,GAAG,6BAA6B,CAAC,GAAG,EAAE,CAAC,EAAE,qBAAqB,CAAC,GAClG,CAAC;AACF,QAAA,MAAM,kBAAkB,GAAY,OAAO,CAAC,eAAe,KAAI,2BAA2B,KAA3B,IAAA,IAAA,2BAA2B,KAA3B,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,2BAA2B,CAAE,MAAM,CAAA,CAAC;AACnG,QAAA,MAAM,qBAAqB,GAAY,OAAO,CAAC,eAAe,IAAI,qBAAqB,CAAC;QACxF,OAAO,CAAC,eAAe,GAAG,kBAAkB,GAAG,IAAI,GAAG,qBAAqB,GAAG,MAAM,GAAG,IAAI,CAAC;AAC5F,QAAA,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC;AAEvC,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACrC;IAEO,OAAO,QAAQ,CAAC,QAAsB,EAAA;QAC5C,OAAO,QAAQ,CAAC,KAAK,CAAC;KACvB;IAEO,OAAO,YAAY,CAAC,QAAsB,EAAA;QAChD,OAAO,QAAQ,CAAC,YAAY,CAAC;KAC9B;;8GAjTU,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAhB,gBAAgB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAIb,yBAAyB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzEzC,kxHA+GA,EAAA,MAAA,EAAA,CAAA,m1BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,gCAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,aAAA,EAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,yBAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,mBAAA,EAAA,iCAAA,EAAA,mCAAA,EAAA,2BAAA,EAAA,yBAAA,EAAA,yBAAA,EAAA,uBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,gCAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;4FD1Ca,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;+BACE,eAAe,EAAA,eAAA,EAGR,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,kxHAAA,EAAA,MAAA,EAAA,CAAA,m1BAAA,CAAA,EAAA,CAAA;yJAG/B,UAAU,EAAA,CAAA;sBAAzB,KAAK;gBAC2D,gBAAgB,EAAA,CAAA;sBAAhF,SAAS;gBAAC,IAAA,EAAA,CAAA,kBAAkB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBACU,QAAQ,EAAA,CAAA;sBAAhE,SAAS;gBAAC,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBACkB,gBAAgB,EAAA,CAAA;sBAAxE,YAAY;uBAAC,yBAAyB,CAAA;gBAoGhC,SAAS,EAAA,CAAA;sBADf,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAQrC,OAAO,EAAA,CAAA;sBADb,YAAY;uBAAC,gBAAgB,CAAA;;;MEzJnB,iBAAiB,CAAA;;+GAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAjB,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,EAdb,YAAA,EAAA,CAAA,gBAAgB,EAAE,yBAAyB,aAExD,YAAY;QACZ,kBAAkB;QAClB,iBAAiB;QACjB,eAAe;AACf,QAAA,aAAa,wBAEb,oBAAoB;QACpB,oBAAoB,CAAA,EAAA,OAAA,EAAA,CAGZ,gBAAgB,EAAE,yBAAyB,CAAA,EAAA,CAAA,CAAA;AAE1C,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,YAZ1B,YAAY;QACZ,kBAAkB;QAClB,iBAAiB;QACjB,eAAe;QACf,aAAa;QACb,eAAe,CAAC,UAAU,CAAC,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;QACnE,oBAAoB;QACpB,oBAAoB,CAAA,EAAA,CAAA,CAAA;4FAKX,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAf7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,CAAC,gBAAgB,EAAE,yBAAyB,CAAC;AAC3D,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,kBAAkB;wBAClB,iBAAiB;wBACjB,eAAe;wBACf,aAAa;wBACb,eAAe,CAAC,UAAU,CAAC,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;wBACnE,oBAAoB;wBACpB,oBAAoB;AACrB,qBAAA;AACD,oBAAA,SAAS,EAAE,EAAE;AACb,oBAAA,OAAO,EAAE,CAAC,gBAAgB,EAAE,yBAAyB,CAAC;iBACvD,CAAA;;;ACrBD,MAAM,OAAO,GAAoB,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;MAO9D,cAAc,CAAA;;4GAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAd,cAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YAPO,oBAAoB,EAAE,iBAAiB,CAAvC,EAAA,OAAA,EAAA,CAAA,oBAAoB,EAAE,iBAAiB,CAAA,EAAA,CAAA,CAAA;AAO5D,cAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,EAHhB,OAAA,EAAA,CAAA,OAAO,EAJgB,oBAAoB,EAAE,iBAAiB,CAAA,EAAA,CAAA,CAAA;4FAO5D,cAAc,EAAA,UAAA,EAAA,CAAA;kBAL1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE,OAAO;AAChB,oBAAA,OAAO,EAAE,OAAO;iBACjB,CAAA;;;ACVM,MAAM,yBAAyB,GAAW;;MCQpC,yBAAyB,CAAA;AAAtC,IAAA,WAAA,GAAA;QACkB,IAAA,CAAA,KAAK,GAAoC,IAAI,eAAe,CAAiB,EAAE,CAAC,CAAC;QACjF,IAAA,CAAA,gBAAgB,GAA8B,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC;QAEtE,IAAQ,CAAA,QAAA,GAA2C,IAAI,eAAe,CACpF,yBAAyB,CAAC,OAAO,CAClC,CAAC;QACc,IAAA,CAAA,eAAe,GAAoC,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC;QACjF,IAAA,CAAA,gBAAgB,GAA8B,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC;QACtE,IAAA,CAAA,eAAe,GAA6B,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;QACvE,IAAA,CAAA,eAAe,GAA4B,IAAI,eAAe,CAAC,yBAAyB,CAAC,CAAC;QAC1F,IAAA,CAAA,UAAU,GAA6B,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;KAyBnF;AAvBQ,IAAA,kBAAkB,CAAC,KAAe,EAAA;AACvC,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACnC;AAEM,IAAA,YAAY,CAAC,KAAc,EAAA;AAChC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC7B;AAEM,IAAA,OAAO,CAAC,IAAoB,EAAA;AACjC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KACjC;AAEM,IAAA,kBAAkB,CAAC,KAAe,EAAA;AACvC,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACnC;;AAEsB,yBAAA,CAAA,OAAO,GAAyB,CAAI,KAAa,EAAE,QAAW,KAAY;AAC/F,IAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE;QACnB,OAAO,CAAA,EAAG,KAAK,CAAA,MAAA,CAAQ,CAAC;AACzB,KAAA;IACD,OAAO,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA,CAAE,CAAC;AACjD,CAAC;;MCjCU,uBAAuB,CAAA;IAGlC,WACqB,CAAA,QAAkB,EAClB,qBAAgD,EAAA;AADhD,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;AAClB,QAAA,IAAqB,CAAA,qBAAA,GAArB,qBAAqB,CAA2B;AAJ3D,QAAA,IAAA,CAAA,YAAY,GAAiB,IAAI,YAAY,EAAE,CAAC;QAMxD,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAES,iBAAiB,GAAA;QACzB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,4BAA4B,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,4BAA4B,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,gCAAgC,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,6BAA6B,EAAE,CAAC,CAAC;KAC7D;IAES,wBAAwB,GAAA;AAChC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC;aACtC,IAAI,CACH,SAAS,CAAC,CAAC,KAAyB,KAAK,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAC/G;aACA,SAAS,CAAC,CAAC,KAAyB,KAAK,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KAChH;IAES,0BAA0B,GAAA;AAClC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC;aACzC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;aACtD,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAA0C,KAAI;AACpE,YAAA,MAAM,QAAQ,GAAiB,uBAAuB,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACxF,YAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE;AACnB,gBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1E,aAAA;YACD,MAAM,KAAK,GAAW,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC7C,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5D,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACpE,SAAC,CAAC,CAAC;KACN;IAES,4BAA4B,GAAA;AACpC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC;AACzC,aAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;aACnG,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,eAAe,CAAoD,KAAI;YAC/F,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;AAClE,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACpE,SAAC,CAAC,CAAC;KACN;IAES,4BAA4B,GAAA;AACpC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC;aACzC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;aACtD,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAA0C,KAAI;YACpE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACrC,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACpE,SAAC,CAAC,CAAC;KACN;IAES,UAAU,CAAC,WAAyB,EAAE,IAAoB,EAAA;AAClE,QAAA,MAAM,cAAc,GAAY,uBAAuB,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC7F,IAAI,CAAC,cAAc,EAAE;YACnB,OAAO;AACR,SAAA;QACD,MAAM,WAAW,GAAmB,IAAI,CAAC,GAAG,CAAC,CAAC,QAAsB,KAAI;AACtE,YAAA,IAAI,QAAQ,CAAC,EAAE,KAAK,WAAW,CAAC,EAAE,EAAE;gBAClC,OAAO,IAAI,YAAY,CACrB,QAAQ,CAAC,YAAY,EACrB,WAAW,CAAC,IAAI,EAChB,QAAQ,CAAC,KAAK,EACd,QAAQ,CAAC,EAAE,EACX,WAAW,CAAC,YAAY,EACxB,QAAQ,CAAC,SAAS,CACnB,CAAC;AACH,aAAA;AACD,YAAA,OAAO,QAAQ,CAAC;AAClB,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;KAC7D;IAES,UAAU,CAAC,YAAoB,EAAE,IAAoB,EAAA;QAC7D,MAAM,cAAc,GAAY,uBAAuB,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC3F,IAAI,CAAC,cAAc,EAAE;YACnB,OAAO;AACR,SAAA;AACD,QAAA,MAAM,WAAW,GAAmB,IAAI,CAAC,MAAM,CAAC,CAAC,QAAsB,KAAK,QAAQ,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC;AAC1G,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;KAC7D;IAEM,SAAS,GAAA;QACd,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1B;IAEM,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;AAChC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;KACxC;AAEM,IAAA,SAAS,CAAqC,SAAkB,EAAA;QACrE,OAAO,IAAI,CAAC,QAAQ;AACjB,aAAA,MAAM,EAAE;AACR,aAAA,IAAI,CAAC,MAAM,CAAC,CAAC,KAA+B,KAAiB,KAAK,YAAY,SAAS,CAAC,CAAC,CAAC;KAC9F;IAEO,6BAA6B,GAAA;AACnC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC;AAC1C,aAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;aACnG,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,eAAe,CAAqD,KAAI;AAChG,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;AAC1F,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACpE,SAAC,CAAC,CAAC;KACN;IAEO,gCAAgC,GAAA;AACtC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,cAAc,CAAC;AAC7C,aAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;aACnG,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,eAAe,CAAwD,KAAI;YACnG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;AAC1D,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACpE,SAAC,CAAC,CAAC;KACN;AAEO,IAAA,WAAW,CACjB,QAAgB,EAChB,QAAwB,EACxB,IAAoB,EACpB,eAAyB,EAAA;AAEzB,QAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE;AACnB,YAAA,MAAM,OAAO,GAAmB,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAsB,MAAK,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,QAAQ,CAAE,EAAA,EAAA,KAAK,EAAE,CAAC,EAAA,CAAA,CAAG,CAAC,CAAC;AACtG,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AACxD,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;YACvD,OAAO;AACR,SAAA;QACD,MAAM,gBAAgB,GAAY,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACrE,QAAA,IAAI,gBAAgB,EAAE;YACpB,OAAO;AACR,SAAA;QACD,MAAM,MAAM,GAAiB,uBAAuB,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACjF,MAAM,UAAU,GAAY,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC/D,QAAA,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,UAAU,EAAE;YAC/B,OAAO;AACR,SAAA;AACD,QAAA,MAAM,cAAc,GAAgB,IAAI,GAAG,EAAE,CAAC;QAC9C,MAAM,iBAAiB,GAAmB,QAAQ,CAAC,GAAG,CAAC,CAAC,SAAuB,KAAI;AACjF,YAAA,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACjC,YAAA,OAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,SAAS,CAAA,EAAA,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAC/B,CAAA,CAAA;AACJ,SAAC,CAAC,CAAC;QACH,MAAM,WAAW,GAAW,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACjD,QAAA,MAAM,gBAAgB,GAAmB;AACvC,YAAA,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC;YAC7B,MAAM;AACN,YAAA,GAAG,iBAAiB;AACpB,YAAA,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;SAC/B,CAAC;AACF,QAAA,MAAM,sBAAsB,GAAa,eAAe,CAAC,MAAM,CAC7D,CAAC,kBAA0B,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,kBAAkB,CAAC,CACxE,CAAC;QACF,MAAM,eAAe,GAAa,CAAC,GAAG,sBAAsB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AACzE,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC;KACrE;AAEO,IAAA,sBAAsB,CAAC,YAAoB,EAAE,IAAoB,EAAE,QAAkB,EAAA;QAC3F,MAAM,cAAc,GAAY,uBAAuB,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC3F,IAAI,CAAC,cAAc,EAAE;AACnB,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACrD,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC7D,OAAO;AACR,SAAA;AACD,QAAA,MAAM,CAAC,mBAAmB,EAAE,uBAAuB,CAAC,GAA+B,IAAI,CAAC,kBAAkB,CACxG,YAAY,EACZ,IAAI,EACJ,QAAQ,CACT,CAAC;AACF,QAAA,MAAM,sBAAsB,GAAmB,mBAAmB,CAAC,MAAM,CACvE,CAAC,QAAsB,KAAK,QAAQ,CAAC,EAAE,KAAK,YAAY,CACzD,CAAC;AACF,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC;AACvE,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,CAAC;KAC7E;AAEO,IAAA,cAAc,CAAC,QAAgB,EAAE,IAAoB,EAAE,QAAkB,EAAA;AAC/E,QAAA,MAAM,CAAC,mBAAmB,EAAE,uBAAuB,CAAC,GAA+B,IAAI,CAAC,kBAAkB,CACxG,QAAQ,EACR,IAAI,EACJ,QAAQ,CACT,CAAC;AACF,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC;AACpE,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,CAAC;KAC7E;AAEO,IAAA,kBAAkB,CAAC,QAAgB,EAAE,IAAoB,EAAE,QAAkB,EAAA;QACnF,MAAM,MAAM,GAAiB,uBAAuB,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACjF,QAAA,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE;AACjB,YAAA,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACzB,SAAA;QACD,MAAM,WAAW,GAAW,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,gBAAgB,GAAmB,WAAW,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;QAC7F,MAAM,eAAe,GAAmB,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;AACpE,QAAA,MAAM,iBAAiB,GAAW,eAAe,CAAC,SAAS,CACzD,CAAC,QAAsB,KAAK,QAAQ,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAC3D,CAAC;AACF,QAAA,MAAM,YAAY,GAAY,iBAAiB,KAAK,CAAC,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAmB,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAC7E,QAAA,MAAM,eAAe,GAAa,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAmB,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;QAClF,MAAM,uBAAuB,GAAa,QAAQ,CAAC,MAAM,CACvD,CAAC,cAAsB,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,cAAc,KAAK,QAAQ,CACrG,CAAC;AACF,QAAA,MAAM,kBAAkB,GAAmB,YAAY,GAAG,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACxG,MAAM,mBAAmB,GAAmB,CAAC,GAAG,gBAAgB,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAAC,CAAC;AACjG,QAAA,OAAO,CAAC,mBAAmB,EAAE,uBAAuB,CAAC,CAAC;KACvD;AAES,IAAA,OAAO,cAAc,CAAC,UAAkB,EAAE,IAAoB,EAAA;QACtE,MAAM,QAAQ,GAAiB,uBAAuB,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AACrF,QAAA,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;KACzB;AAES,IAAA,OAAO,WAAW,CAAC,UAAkB,EAAE,IAAoB,EAAA;AACnE,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,QAAsB,KAAK,QAAQ,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;KAC1E;AACF;;MC/NY,cAAc,CAAA;AAUzB,IAAA,WAAA,CAA+B,OAAyC,EAAA;AAAzC,QAAA,IAAO,CAAA,OAAA,GAAP,OAAO,CAAkC;AATxD,QAAA,IAAA,CAAA,QAAQ,GAAa,IAAI,QAAQ,EAAE,CAAC;QAEjC,IAAK,CAAA,KAAA,GAAgB,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACpD,QAAA,IAAA,CAAA,qBAAqB,GAA8B,IAAI,yBAAyB,EAAE,CAAC;AACnF,QAAA,IAAA,CAAA,OAAO,GAA4B,IAAI,uBAAuB,CAC/E,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,qBAAqB,CAC3B,CAAC;QAGA,IAAI,CAAC,iBAAiB,CAAC,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,cAAc,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,iBAAiB,CAAC,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,cAAc,CAAC,CAAC;QAChD,IAAI,CAAC,iBAAiB,CAAC,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,cAAc,CAAC,CAAC;KACjD;AAES,IAAA,eAAe,CAAC,KAA+B,EAAA;QACvD,MAAM,UAAU,GAA2B,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAC7E,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;KACpC;IAEM,UAAU,GAAA;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;AAEM,IAAA,OAAO,CAAC,IAAoB,EAAA;QACjC,IAAI,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;KACpD;IAEM,WAAW,CAAC,GAAG,WAAqB,EAAA;QACzC,IAAI,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;KAC/D;AAEM,IAAA,UAAU,CAAC,SAAkB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;KAC9D;IAEM,iBAAiB,CAAC,iBAA0B,KAAK,EAAA;QACtD,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KACjE;AAEM,IAAA,SAAS,CAAqC,SAAkB,EAAA;QACrE,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;KACxC;IAEM,2BAA2B,GAAA;QAChC,OAAO,IAAI,CAAC,qBAAqB,CAAC;KACnC;AAEM,IAAA,MAAM,CAAC,UAAkB,EAAA;AAC9B,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;KAC3D;IAEM,WAAW,CAAC,UAAkB,EAAE,QAAwB,EAAA;AAC7D,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;KAC5E;AAEM,IAAA,cAAc,CAAC,UAAkB,EAAA;QACtC,IAAI,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;KACjE;AAEM,IAAA,cAAc,CAAC,UAAkB,EAAA;QACtC,IAAI,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;KAC7D;AAEM,IAAA,WAAW,CAAC,QAAsB,EAAA;QACvC,IAAI,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;KAC3D;AAEM,IAAA,QAAQ,CAAC,UAAkB,EAAA;QAChC,IAAI,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;KAC7D;IAEO,iBAAiB,CAAC,iBAAiC,QAAQ,EAAA;QACjE,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KACjE;AAEO,IAAA,UAAU,CAAC,OAAA,GAAyC,yBAAyB,CAAC,OAAO,EAAA;QAC3F,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACnD;IAEO,iBAAiB,CAAC,iBAAyB,yBAAyB,EAAA;QAC1E,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KACjE;AACF;;MCjFY,sBAAsB,CAAA;AADnC,IAAA,WAAA,GAAA;QAEkB,IAAA,CAAA,mBAAmB,GAA6B,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AACpF,QAAA,IAAA,CAAA,eAAe,GAA8C,IAAI,OAAO,EAAE,CAAC;QAC3E,IAAA,CAAA,cAAc,GAA4C,IAAI,eAAe,CAC3F,IAAI,CACL,CAAC;QACc,IAAA,CAAA,gBAAgB,GAA6C,IAAI,eAAe,CAE9F,IAAI,CAAC,CAAC;AACQ,QAAA,IAAA,CAAA,oBAAoB,GAAiC,IAAI,OAAO,EAAuB,CAAC;QAEvF,IAAA,CAAA,eAAe,GAA6B,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;AAIhF,QAAA,IAAiB,CAAA,iBAAA,GAAoB,IAAI,CAAC;AAE1C,QAAA,IAA2B,CAAA,2BAAA,GAAmB,IAAI,CAAC;AACnD,QAAA,IAA8B,CAAA,8BAAA,GAAW,EAAE,CAAC;KA2KrD;IAvKQ,kBAAkB,CAAC,IAA6B,EAAE,QAAmB,EAAA;AAC1E,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;AAEM,IAAA,iBAAiB,CAAC,cAAuB,EAAA;AAC9C,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KAC3C;IAEM,SAAS,CAAC,QAAsB,EAAE,KAAiB,EAAA;AACxD,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,cAAuB,KAAI;YACvE,IAAI,CAAC,cAAc,EAAE;gBACnB,OAAO;AACR,aAAA;AAED,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,CAAC,iBAAiB,GAAG;gBACvB,IAAI,EAAE,KAAK,CAAC,OAAO;gBACnB,GAAG,EAAE,KAAK,CAAC,OAAO;aACnB,CAAC;AACF,YAAA,IAAI,KAAK,CAAC,MAAM,YAAY,WAAW,EAAE;gBACvC,IAAI,CAAC,2BAA2B,GAAG,KAAK,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC;AACzE,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;IAEM,SAAS,CACd,EAAE,OAAO,EAAE,OAAO,EAAc,EAChC,gBAAyC,EACzC,KAAiC,EAAA;AAEjC,QAAA,IAAI,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;YACjC,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,kBAA2B,KAAI;;AAC/E,YAAA,MAAM,eAAe,GACnB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC;AAEzG,YAAA,MAAM,qBAAqB,GAAY,eAAe,GAAG,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,2BAA2B,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,IAAG,CAAC,CAAC;AACtG,YAAA,IAAI,CAAC,kBAAkB,IAAI,qBAAqB,EAAE;AAChD,gBAAA,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;AAC5C,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpC,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC;AAClE,aAAA;AAED,YAAA,IAAI,kBAAkB,EAAE;gBACtB,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC;AAClE,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;IAEM,OAAO,GAAA;AACZ,QAAA,IAAI,CAAC,mBAAmB;AACrB,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;aAClD,SAAS,CAAC,CAAC,CAAC,kBAAkB,EAAE,aAAa,CAA0B,KAAI;YAC1E,IAAI,kBAAkB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AAC/C,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,oBAAA,cAAc,EAAE,aAAa;oBAC7B,cAAc,EAAE,IAAI,CAAC,QAAQ;AAC9B,iBAAA,CAAC,CAAC;AACJ,aAAA;AAED,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrC,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC9B,YAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC;AACxC,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,YAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE,CAAC;AAC3C,SAAC,CAAC,CAAC;KACN;AAEM,IAAA,UAAU,CAAC,IAAkB,EAAA;AAClC,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,kBAA2B,KAAI;YAC/E,IAAI,CAAC,kBAAkB,EAAE;gBACvB,OAAO;AACR,aAAA;AAED,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACtB,aAAA;AAED,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACtB,gBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtC,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;AAEM,IAAA,OAAO,CAAC,IAAkB,EAAA;AAC/B,QAAA,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE;AACf,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,8BAA8B,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACpF;IAEM,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,kBAA2B,KAAI;YAC/E,IAAI,CAAC,kBAAkB,EAAE;gBACvB,OAAO;AACR,aAAA;AAED,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvC,SAAC,CAAC,CAAC;KACJ;IAEO,aAAa,CAAC,gBAAyC,EAAE,KAAiC,EAAA;AAChG,QAAA,IAAI,CAAC,6BAA6B,CAAC,gBAAgB,CAAC,CAAC;AACrD,QAAA,IAAI,CAAC,mCAAmC,CAAC,KAAK,CAAC,CAAC;KACjD;AAEO,IAAA,6BAA6B,CAAC,gBAAyC,EAAA;QAC7E,KAAK,CAAC,CAAC,CAAC;AACL,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACb,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,OAAO,EAAE,CAAA,EAAG,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAA,EAAA,CAAI,CAAC,CAAC;AACjH,SAAC,CAAC,CAAC;KACN;AAEO,IAAA,mCAAmC,CAAC,KAAiC,EAAA;QAC3E,KAAK;AACF,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;aAClD,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,aAAa,CAAiC,KAAI;;AACxE,YAAA,MAAM,WAAW,GAAW,CAAA,EAAA,GAAA,aAAa,KAAb,IAAA,IAAA,aAAa,KAAb,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,aAAa,CAAE,KAAK,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC;YAEtD,IAAI,YAAY,GACd,SAAS,CAAC,SAAS,CAAC,CAAC,SAAuB,KAAK,SAAS,CAAC,EAAE,MAAK,aAAa,KAAb,IAAA,IAAA,aAAa,KAAb,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,aAAa,CAAE,EAAE,CAAA,CAAC,GAAG,CAAC,CAAC;YAC3F,MAAM,mBAAmB,GAAG,MAAe,SAAS,CAAC,MAAM,KAAK,YAAY,CAAC;AAC7E,YAAA,MAAM,qBAAqB,GAAG,MAAe,SAAS,CAAC,YAAY,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC;YAC3F,MAAM,MAAM,GAAW,CAAC,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAb,aAAa,CAAE,EAAE,CAAC,CAAC;AAE3C,YAAA,OAAO,mBAAmB,EAAE,IAAI,qBAAqB,EAAE,EAAE;AACvD,gBAAA,MAAM,WAAW,GAAiB,SAAS,CAAC,YAAY,CAAC,CAAC;gBAC1D,IAAI,WAAW,CAAC,YAAY,EAAE;AAC5B,oBAAA,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAC7B,iBAAA;AACD,gBAAA,YAAY,EAAE,CAAC;AAChB,aAAA;AAED,YAAA,IAAI,CAAC,8BAA8B,GAAG,MAAM,CAAC;AAC/C,SAAC,CAAC,CAAC;KACN;AAEO,IAAA,uBAAuB,CAAC,OAAe,EAAE,OAAe,EAAE,gBAAyC,EAAA;AACzG,QAAA,MAAM,6BAA6B,GAAa;YAC9C,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAI;YACzE,GAAG,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,GAAG,IAAI,CAAC,2BAA2B,CAAC,GAAG;SACvE,CAAC;AAEF,QAAA,MAAM,qBAAqB,GACzB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC;AACjF,QAAA,MAAM,wBAAwB,GAAa;YACzC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAI,GAAG,6BAA6B,CAAC,IAAI;AAC1F,YAAA,GAAG,EAAE,eAAe,CAAC,OAAO,GAAG,6BAA6B,CAAC,GAAG,EAAE,CAAC,EAAE,qBAAqB,CAAC;SAC5F,CAAC;QAEF,MAAM,kBAAkB,GAAY,wBAAwB,CAAC,GAAG,IAAI,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC;AAC5G,QAAA,MAAM,qBAAqB,GAAY,wBAAwB,CAAC,GAAG,IAAI,qBAAqB,CAAC;QAE7F,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,GAAG,IAAI,GAAG,qBAAqB,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;AAE9F,QAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE;AAC5B,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,CAAG,EAAA,wBAAwB,CAAC,IAAI,CAAA,EAAA,CAAI,CAAC,CAAC;AACrG,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,KAAK,EAAE,CAAG,EAAA,wBAAwB,CAAC,GAAG,CAAA,EAAA,CAAI,CAAC,CAAC;AACpG,SAAA;KACF;;oHA5LU,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;wHAAtB,sBAAsB,EAAA,CAAA,CAAA;4FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,UAAU;;;;;"}