{"version":3,"file":"acorex-components-menu.mjs","sources":["../../../../packages/components/menu/src/lib/menu.service.ts","../../../../packages/components/menu/src/lib/menu.types.ts","../../../../packages/components/menu/src/lib/menu-viewport.ts","../../../../packages/components/menu/src/lib/menu-item.component.ts","../../../../packages/components/menu/src/lib/menu-item.component.html","../../../../packages/components/menu/src/lib/context-menu.component.ts","../../../../packages/components/menu/src/lib/menu.component.html","../../../../packages/components/menu/src/lib/menu.component.ts","../../../../packages/components/menu/src/lib/menu.module.ts","../../../../packages/components/menu/src/acorex-components-menu.ts"],"sourcesContent":["import { AXHtmlUtil, AXPoint } from '@acorex/core/utils';\nimport { isPlatformBrowser } from '@angular/common';\nimport { DestroyRef, DOCUMENT, inject, Injectable, PLATFORM_ID } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Subject } from 'rxjs';\nimport { AXMenuItemComponentBase, AXRootMenu } from './menu.types';\n\n@Injectable()\nexport class AXMenuService {\n  public closeAll$: Subject<void> = new Subject();\n  public open$: Subject<AXMenuItemComponentBase> = new Subject();\n  public close$: Subject<AXMenuItemComponentBase> = new Subject();\n\n  public openContextMenu$ = new Subject<{ sender: AXRootMenu; point: AXPoint }>();\n  public closeAllContextMenu$ = new Subject<{ sender: AXRootMenu }>();\n\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly document = inject(DOCUMENT);\n  private readonly platformId = inject(PLATFORM_ID);\n\n  private readonly openItems = new Set<AXMenuItemComponentBase>();\n  private globalListenersBound = false;\n  private rootElement?: HTMLElement;\n  private scrollableParents: HTMLElement[] = [];\n\n  private readonly onDocumentClick = (event: MouseEvent) => {\n    if (this.rootElement && !this.rootElement.contains(event.target as Node)) {\n      this.closeAll$.next();\n    }\n  };\n\n  private readonly onWindowOrScrollEvent = () => {\n    this.closeAll$.next();\n  };\n\n  constructor() {\n    this.closeAll$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n      this.openItems.clear();\n    });\n  }\n\n  /**\n   * Registers a single set of document/window/scroll listeners for the whole menu tree.\n   */\n  initGlobalListeners(rootElement: HTMLElement) {\n    if (!isPlatformBrowser(this.platformId) || this.globalListenersBound) {\n      return;\n    }\n    this.globalListenersBound = true;\n    this.rootElement = rootElement;\n\n    this.document.addEventListener('click', this.onDocumentClick);\n    window.addEventListener('scroll', this.onWindowOrScrollEvent, { capture: true });\n    window.addEventListener('resize', this.onWindowOrScrollEvent);\n\n    this.scrollableParents = AXHtmlUtil.getScrollableParents(rootElement);\n    this.scrollableParents.forEach((parent) => {\n      parent.addEventListener('scroll', this.onWindowOrScrollEvent);\n    });\n\n    this.destroyRef.onDestroy(() => {\n      this.document.removeEventListener('click', this.onDocumentClick);\n      window.removeEventListener('scroll', this.onWindowOrScrollEvent, { capture: true });\n      window.removeEventListener('resize', this.onWindowOrScrollEvent);\n      this.scrollableParents.forEach((parent) => {\n        parent.removeEventListener('scroll', this.onWindowOrScrollEvent);\n      });\n    });\n  }\n\n  /**\n   * Closes open submenus that are not on the ancestor path of the item being opened.\n   */\n  closeExcept(opener: AXMenuItemComponentBase) {\n    const keepOpen = new Set<AXMenuItemComponentBase>();\n    let current: AXMenuItemComponentBase | null | undefined = opener;\n    while (current) {\n      keepOpen.add(current);\n      current = current.getParentMenuItem?.() ?? current.parent ?? null;\n    }\n\n    for (const openItem of [...this.openItems]) {\n      if (!keepOpen.has(openItem)) {\n        this.markClosed(openItem);\n      }\n    }\n  }\n\n  markOpen(item: AXMenuItemComponentBase) {\n    this.openItems.add(item);\n    this.open$.next(item);\n  }\n\n  markClosed(item: AXMenuItemComponentBase) {\n    this.openItems.delete(item);\n    this.close$.next(item);\n  }\n}\n","import { AXOrientation, AXStyleColorType, NXClickEvent, NXComponent } from '@acorex/cdk/common';\nimport { OutputEmitterRef, WritableSignal } from '@angular/core';\nimport { IsActiveMatchOptions, UrlTree } from '@angular/router';\n\nexport type AXMenuOpenTrigger = 'click' | 'hover';\nexport type AXMenuCloseTrigger = 'click' | 'leave';\n\nexport abstract class AXRootMenu {\n  orientation: WritableSignal<AXOrientation>;\n  openOn: WritableSignal<AXMenuOpenTrigger>;\n  closeOn: WritableSignal<AXMenuCloseTrigger>;\n  onItemClick: OutputEmitterRef<AXMenuItemClickBaseEvent>;\n  nativeElement: HTMLDivElement;\n  hasArrow: WritableSignal<boolean>;\n}\n\nexport abstract class AXMenuItemComponentBase {\n  parent?: AXMenuItemComponentBase | null;\n\n  /** Resolves the parent item, including for `ngTemplateOutlet`-created nested items. */\n  getParentMenuItem?(): AXMenuItemComponentBase | null | undefined;\n}\n\n/** Shared tree item shape for `ax-menu`, `ax-context-menu`, and `ax-side-menu`. */\nexport interface AXMenuItem {\n  text: string;\n  name?: string;\n  icon?: string;\n  data?: unknown;\n  disabled?: boolean;\n  items?: AXMenuItem[];\n  color?: AXStyleColorType;\n  suffix?: {\n    text: string;\n  };\n  /** Side-menu alias for `suffix.text`. */\n  suffixText?: string;\n  break?: boolean;\n  group?: {\n    name?: string;\n    title?: string;\n  };\n  title?: string;\n  routerLink?: string | any[] | UrlTree;\n  routerLinkActive?: string | string[];\n  routerLinkActiveOptions?: { exact: boolean } | IsActiveMatchOptions;\n  href?: string;\n  target?: '_blank' | '_self' | '_parent' | '_top';\n  active?: boolean;\n  isLoading?: boolean;\n  isCollapsed?: boolean;\n  toggleOnClick?: boolean;\n}\n\nexport class AXMenuItemClickBaseEvent<T extends NXComponent = NXComponent> extends NXClickEvent<T> {\n  item: {\n    name?: string;\n    text: string;\n    data?: any;\n  };\n  canceled = false;\n}\n","import { Renderer2 } from '@angular/core';\n\n/** Edge padding when clamping floating menu panels to the viewport. */\nexport const AX_MENU_VIEWPORT_MARGIN = 8;\n\n/** Limits a fixed menu panel so it stays within the viewport below `top`. */\nexport function axFitMenuPanelHeight(renderer: Renderer2, el: HTMLElement, top: number): void {\n  renderer.setStyle(el, 'max-height', `${Math.max(0, window.innerHeight - top - AX_MENU_VIEWPORT_MARGIN)}px`);\n}\n\nexport function axClearMenuPanelHeight(renderer: Renderer2, el: HTMLElement): void {\n  renderer.removeStyle(el, 'max-height');\n}\n","import { AXComponent, AXStyleColorType, NXComponent } from '@acorex/cdk/common';\nimport { AXHtmlUtil, AXUnsubscriber } from '@acorex/core/utils';\nimport { AXZIndexService, AXZToken } from '@acorex/core/z-index';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n  afterNextRender,\n  Component,\n  computed,\n  contentChildren,\n  DestroyRef,\n  DOCUMENT,\n  ElementRef,\n  HostBinding,\n  HostListener,\n  inject,\n  Injector,\n  input,\n  OnDestroy,\n  output,\n  PLATFORM_ID,\n  Renderer2,\n  signal,\n  viewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { AXMenuService } from './menu.service';\nimport { AXMenuItemClickBaseEvent, AXMenuItemComponentBase, AXRootMenu } from './menu.types';\nimport { AX_MENU_VIEWPORT_MARGIN, axClearMenuPanelHeight, axFitMenuPanelHeight } from './menu-viewport';\n\nexport type AXMenuItemClickEvent = AXMenuItemClickBaseEvent<AXMenuItemComponent>;\n\ntype AXMenuOwnerHost = HTMLElement & { __axMenuOwner__?: AXMenuItemComponent };\n\n/**\n * Represents a menu item component used within an `ax-menu`.\n * @category Components\n */\n@Component({\n  selector: 'ax-menu-item',\n  templateUrl: './menu-item.component.html',\n  encapsulation: ViewEncapsulation.None,\n\n  providers: [\n    {\n      provide: AXMenuItemComponentBase,\n      useExisting: AXMenuItemComponent,\n    },\n    AXUnsubscriber,\n    {\n      provide: AXComponent,\n      useExisting: AXMenuItemComponent,\n    },\n  ],\n})\nexport class AXMenuItemComponent extends NXComponent implements OnDestroy {\n  protected isOpen = signal(false);\n\n  readonly parent = inject(AXMenuItemComponent, { optional: true, skipSelf: true });\n\n  protected isFirstLevel = computed(() => this.getParentMenuItem() == null);\n\n  private readonly childMenuItems = contentChildren(AXMenuItemComponent, { descendants: false });\n  private readonly discoveredSubmenuNodeCount = signal(0);\n  private readonly submenuSlot = viewChild<ElementRef<HTMLElement>>('submenuSlot');\n  private readonly platformId = inject(PLATFORM_ID);\n  private readonly destroyRef = inject(DestroyRef);\n  private childObserver: MutationObserver | null = null;\n  private childRefreshScheduled = false;\n\n  /**\n   * Nested items from the data model. Required for recursive `ngTemplateOutlet` templates\n   * because `contentChildren` does not traverse those embedded views.\n   */\n  subItems = input<readonly unknown[]>([]);\n\n  protected hasSubItems = computed(\n    () =>\n      (this.subItems()?.length ?? 0) > 0 || this.childMenuItems().length > 0 || this.discoveredSubmenuNodeCount() > 0,\n  );\n\n  protected root = inject(AXRootMenu);\n\n  private service = inject(AXMenuService);\n\n  private unsuscriber = inject(AXUnsubscriber);\n  private renderer = inject(Renderer2);\n  private injector = inject(Injector);\n  private document = inject(DOCUMENT);\n  private zIndexService = inject(AXZIndexService);\n  private zToken: AXZToken | null = null;\n  private submenuPortalParent: HTMLElement | null = null;\n  private submenuPortalNextSibling: ChildNode | null = null;\n  /** Survives submenu portaling when the DOM parent chain is broken. */\n  private linkedParent: AXMenuItemComponent | null = null;\n  private mouseLeaveTimeout: ReturnType<typeof setTimeout> | null = null;\n  private submenuUnlistenEnter: (() => void) | null = null;\n  private submenuUnlistenLeave: (() => void) | null = null;\n\n  protected arrowIcon = computed<string>(() => {\n    const isRtl = AXHtmlUtil.isRtl(this.nativeElement);\n    return this.root.orientation() == 'horizontal' && this.isFirstLevel()\n      ? 'ax-icon-chevron-down'\n      : isRtl\n        ? 'ax-icon-chevron-left'\n        : 'ax-icon-chevron-right';\n  });\n\n  onClick = output<AXMenuItemClickEvent>();\n\n  name = input<string>();\n  data = input<any>();\n  disabled = input<boolean>();\n  color = input<AXStyleColorType>();\n\n  constructor() {\n    super();\n\n    afterNextRender(() => {\n      if (!isPlatformBrowser(this.platformId)) {\n        return;\n      }\n      this.reparentOrphanedChildren();\n      this.linkChildItems();\n      this.updateDiscoveredSubmenuNodeCount();\n      this.childObserver = new MutationObserver((records) => {\n        if (!this.hasRelevantChildMutation(records)) {\n          return;\n        }\n        this.scheduleChildRefresh();\n      });\n      this.childObserver.observe(this.nativeElement, { childList: true, subtree: true });\n      this.destroyRef.onDestroy(() => this.childObserver?.disconnect());\n    });\n\n    this.service.closeAll$.pipe(this.unsuscriber.takeUntilDestroy).subscribe(() => this.close());\n\n    this.service.open$.pipe(this.unsuscriber.takeUntilDestroy).subscribe((item) => {\n      if ((this as any) === item) {\n        this.isOpen.set(true);\n        this.schedulePositionCalculation();\n      }\n    });\n\n    this.service.close$.pipe(this.unsuscriber.takeUntilDestroy).subscribe((item) => {\n      if ((this as any) == item) {\n        this.isOpen.set(false);\n        this.clearCloseTimeout();\n        this.restoreSubmenuPortal();\n        this.zIndexService.release(this.zToken);\n        this.zToken = null;\n      }\n    });\n  }\n\n  private getText(): string {\n    return this.nativeElement.querySelector<HTMLDivElement>('ax-text')?.innerText;\n  }\n\n  /**\n   * Resolves the parent menu item. Prefers an explicit link (survives submenu portaling),\n   * then DI, then the DOM tree.\n   */\n  getParentMenuItem(): AXMenuItemComponent | null {\n    if (this.linkedParent) {\n      return this.linkedParent;\n    }\n    if (this.parent) {\n      return this.parent;\n    }\n\n    const parentHost = this.nativeElement.parentElement?.closest('ax-menu-item');\n    if (!parentHost || parentHost === this.nativeElement) {\n      return null;\n    }\n\n    return this.getInstanceFromElement(parentHost) ?? null;\n  }\n\n  /**\n   * Opens the submenu of this menu item if it has sub-items and is not disabled.\n   */\n  open() {\n    if (this.disabled() || !this.hasSubItems()) {\n      return;\n    }\n\n    this.reparentOrphanedChildren();\n    this.linkChildItems();\n    this.service.closeExcept(this);\n\n    const submenu = this.submenuSlot()?.nativeElement;\n    if (submenu) {\n      // Portal before `isOpen` so ancestor overflow cannot clip the first paint.\n      this.portalSubmenu(submenu);\n    }\n\n    if (!this.zToken) {\n      this.zToken = this.zIndexService.acquire();\n    }\n    this.service.markOpen(this);\n  }\n\n  /**\n   * Closes the submenu of this menu item if open.\n   */\n  close() {\n    this.clearCloseTimeout();\n    this.service.markClosed(this);\n  }\n\n  /**\n   * Positions the submenu after layout so nested levels measure their full height.\n   */\n  private schedulePositionCalculation() {\n    afterNextRender(\n      () => {\n        if (this.isOpen()) {\n          this.calculatePosition();\n          afterNextRender(\n            () => {\n              if (this.isOpen()) {\n                this.calculatePosition();\n              }\n            },\n            { injector: this.injector },\n          );\n        }\n      },\n      { injector: this.injector },\n    );\n  }\n\n  /**\n   * Calculate the position of the submenu to avoid it going out of the viewport.\n   * Tall panels are height-clamped; the panel is portaled so parent overflow cannot clip it.\n   */\n  private calculatePosition() {\n    const submenu = this.submenuSlot()?.nativeElement;\n    if (!submenu) return;\n\n    this.portalSubmenu(submenu);\n    axClearMenuPanelHeight(this.renderer, submenu);\n\n    const submenuRect = this.measureSubmenuRect(submenu);\n    const itemRect = this.nativeElement.getBoundingClientRect();\n    const windowWidth = window.innerWidth;\n    const windowHeight = window.innerHeight;\n    const margin = AX_MENU_VIEWPORT_MARGIN;\n    const isRtl = AXHtmlUtil.isRtl(this.nativeElement);\n    const effectiveHeight = Math.min(submenuRect.height, Math.max(0, windowHeight - margin * 2));\n\n    let finalTop: number;\n    let finalLeft: number;\n\n    const preferredTop =\n      this.isFirstLevel() && this.root.orientation() === 'horizontal' ? itemRect.bottom : itemRect.top;\n    const alternateTop = itemRect.top - effectiveHeight;\n\n    if (preferredTop + effectiveHeight <= windowHeight - margin) {\n      finalTop = preferredTop;\n    } else if (alternateTop >= margin) {\n      finalTop = alternateTop;\n    } else {\n      finalTop = margin;\n    }\n\n    finalTop = this.clampVerticalPosition(finalTop, effectiveHeight, windowHeight, margin);\n\n    if (this.isFirstLevel() && this.root.orientation() === 'horizontal') {\n      const preferredLeft = isRtl ? itemRect.right - submenuRect.width : itemRect.left;\n      const alternateLeft = isRtl ? itemRect.left : itemRect.right - submenuRect.width;\n\n      if (preferredLeft >= 0 && preferredLeft + submenuRect.width <= windowWidth) {\n        finalLeft = preferredLeft;\n      } else {\n        finalLeft = Math.max(0, Math.min(alternateLeft, windowWidth - submenuRect.width));\n      }\n    } else {\n      const preferredLeft = isRtl ? itemRect.left - submenuRect.width : itemRect.right;\n      const alternateLeft = isRtl ? itemRect.right : itemRect.left - submenuRect.width;\n\n      if (isRtl ? preferredLeft >= 0 : preferredLeft + submenuRect.width <= windowWidth) {\n        finalLeft = preferredLeft;\n      } else if (isRtl ? alternateLeft + submenuRect.width <= windowWidth : alternateLeft >= 0) {\n        finalLeft = alternateLeft;\n      } else {\n        finalLeft = isRtl ? 0 : windowWidth - submenuRect.width;\n      }\n    }\n\n    const isNestedMenu = !(this.isFirstLevel() && this.root.orientation() === 'horizontal');\n    if (isNestedMenu) {\n      const overlapsParent = finalLeft < itemRect.right && itemRect.left < finalLeft + submenuRect.width;\n      if (overlapsParent && itemRect.bottom + effectiveHeight <= windowHeight - margin) {\n        finalTop = itemRect.bottom;\n      }\n    }\n\n    finalTop = this.clampVerticalPosition(finalTop, effectiveHeight, windowHeight, margin);\n\n    this.renderer.setStyle(submenu, 'position', 'fixed');\n    this.renderer.setStyle(submenu, 'top', `${finalTop}px`);\n    this.renderer.setStyle(submenu, 'left', `${finalLeft}px`);\n    axFitMenuPanelHeight(this.renderer, submenu, finalTop);\n    if (this.zToken) {\n      this.renderer.setStyle(submenu, 'z-index', String(this.zToken.zIndex));\n    }\n  }\n\n  /** Measures submenu size using the same flex layout as the rendered menu. */\n  private measureSubmenuRect(submenu: HTMLElement): DOMRect {\n    this.renderer.setStyle(submenu, 'visibility', 'hidden');\n    this.renderer.setStyle(submenu, 'display', 'flex');\n    const rect = submenu.getBoundingClientRect();\n    this.renderer.removeStyle(submenu, 'visibility');\n    this.renderer.removeStyle(submenu, 'display');\n    return rect;\n  }\n\n  /** Moves the submenu under the context-menu backdrop (or body) to escape ancestor overflow. */\n  private portalSubmenu(submenu: HTMLElement) {\n    if (!isPlatformBrowser(this.platformId)) {\n      return;\n    }\n\n    (submenu as AXMenuOwnerHost).__axMenuOwner__ = this;\n    this.bindSubmenuPointerListeners(submenu);\n\n    if (this.submenuPortalParent) {\n      return;\n    }\n\n    const parent = submenu.parentElement;\n    if (!parent) {\n      return;\n    }\n\n    this.submenuPortalParent = parent;\n    this.submenuPortalNextSibling = submenu.nextSibling;\n\n    const rootEl = this.root.nativeElement;\n    const rootParent = rootEl.parentElement;\n    const portalHost =\n      rootEl.tagName === 'AX-CONTEXT-MENU' && rootParent && rootParent !== this.document.body\n        ? rootParent\n        : this.document.body;\n\n    if (submenu.parentElement !== portalHost) {\n      portalHost.appendChild(submenu);\n    }\n  }\n\n  private restoreSubmenuPortal() {\n    const submenu = this.submenuSlot()?.nativeElement;\n    this.unbindSubmenuPointerListeners();\n\n    if (submenu) {\n      axClearMenuPanelHeight(this.renderer, submenu);\n      delete (submenu as AXMenuOwnerHost).__axMenuOwner__;\n    }\n\n    if (submenu && this.submenuPortalParent) {\n      try {\n        this.submenuPortalParent.insertBefore(submenu, this.submenuPortalNextSibling);\n      } catch {\n        // Host may already be torn down while the context menu is closing.\n      }\n    }\n\n    this.submenuPortalParent = null;\n    this.submenuPortalNextSibling = null;\n  }\n\n  /** Keep this item open while the pointer is over its portaled submenu panel. */\n  private bindSubmenuPointerListeners(submenu: HTMLElement) {\n    this.unbindSubmenuPointerListeners();\n    this.submenuUnlistenEnter = this.renderer.listen(submenu, 'mouseenter', () => {\n      this.clearCloseTimeout();\n      this.clearAncestorCloseTimeouts();\n    });\n    this.submenuUnlistenLeave = this.renderer.listen(submenu, 'mouseleave', (event: MouseEvent) => {\n      this.handlePointerLeave(event);\n    });\n  }\n\n  private unbindSubmenuPointerListeners() {\n    this.submenuUnlistenEnter?.();\n    this.submenuUnlistenLeave?.();\n    this.submenuUnlistenEnter = null;\n    this.submenuUnlistenLeave = null;\n  }\n\n  /** Links direct children so parent resolution still works after the panel is portaled. */\n  private linkChildItems() {\n    const submenu = this.submenuSlot()?.nativeElement;\n    if (!submenu) {\n      return;\n    }\n\n    submenu.querySelectorAll(':scope > ax-menu-item').forEach((el) => {\n      const child = this.getInstanceFromElement(el);\n      if (child) {\n        child.linkedParent = this;\n      }\n    });\n  }\n\n  private getInstanceFromElement(el: Element): AXMenuItemComponent | undefined {\n    const ctx = (el as HTMLElement & { __axContext__?: unknown }).__axContext__;\n    return ctx instanceof AXMenuItemComponent ? ctx : undefined;\n  }\n\n  /**\n   * Moves nested `ax-menu-item` nodes rendered by recursive `ngTemplateOutlet` templates\n   * into the submenu slot. Angular content queries do not traverse those embedded views.\n   */\n  private reparentOrphanedChildren() {\n    const container = this.submenuSlot()?.nativeElement;\n    if (!container) {\n      return;\n    }\n\n    for (const el of this.getDirectSubmenuNodes()) {\n      if (!container.contains(el)) {\n        try {\n          container.appendChild(el);\n        } catch {\n          // HierarchyRequestError when the node is already being moved.\n        }\n      }\n    }\n  }\n\n  /**\n   * Nested submenu nodes rendered by custom recursive templates (direct children of this item only).\n   */\n  private getDirectSubmenuNodes(): HTMLElement[] {\n    return Array.from(this.nativeElement.querySelectorAll<HTMLElement>('ax-menu-item, ax-title, ax-divider')).filter(\n      (el) => {\n        if (el === this.nativeElement) {\n          return false;\n        }\n\n        if (el.tagName === 'AX-MENU-ITEM') {\n          return el.parentElement?.closest('ax-menu-item') === this.nativeElement;\n        }\n\n        return el.closest('ax-menu-item') === this.nativeElement;\n      },\n    );\n  }\n\n  private updateDiscoveredSubmenuNodeCount() {\n    const fromHost = this.getDirectSubmenuNodes().length;\n    const submenu = this.submenuSlot()?.nativeElement;\n    const fromPanel = submenu\n      ? submenu.querySelectorAll(':scope > ax-menu-item, :scope > ax-title, :scope > ax-divider').length\n      : 0;\n    // After portaling, projected children live in the panel outside this host.\n    this.discoveredSubmenuNodeCount.set(Math.max(fromHost, fromPanel));\n  }\n\n  private scheduleChildRefresh() {\n    if (this.childRefreshScheduled) {\n      return;\n    }\n    this.childRefreshScheduled = true;\n    requestAnimationFrame(() => {\n      this.childRefreshScheduled = false;\n      this.reparentOrphanedChildren();\n      this.linkChildItems();\n      this.updateDiscoveredSubmenuNodeCount();\n    });\n  }\n\n  private hasRelevantChildMutation(records: MutationRecord[]): boolean {\n    for (const record of records) {\n      if (\n        this.nodeListContainsMenuStructuralNode(record.addedNodes) ||\n        this.nodeListContainsMenuStructuralNode(record.removedNodes)\n      ) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  private nodeListContainsMenuStructuralNode(nodes: NodeList): boolean {\n    for (const node of Array.from(nodes)) {\n      if (!(node instanceof Element)) {\n        continue;\n      }\n      const tagName = node.tagName;\n      if (tagName === 'AX-MENU-ITEM' || tagName === 'AX-TITLE' || tagName === 'AX-DIVIDER') {\n        return true;\n      }\n      if (node.querySelector?.('ax-menu-item,ax-title,ax-divider')) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /** Keeps the submenu fully inside the viewport vertically. */\n  private clampVerticalPosition(top: number, height: number, windowHeight: number, margin = 0): number {\n    if (top + height > windowHeight - margin) {\n      top = windowHeight - margin - height;\n    }\n    if (top < margin) {\n      top = margin;\n    }\n    return top;\n  }\n\n  @HostListener('click', ['$event'])\n  handleClick(e: MouseEvent) {\n    e.stopPropagation();\n    if (this.disabled()) return;\n\n    const event = {\n      sender: this,\n      nativeEvent: e,\n      canceled: false,\n      item: {\n        name: this.name(),\n        text: this.getText(),\n        data: this.data(),\n      },\n    } as AXMenuItemClickEvent;\n\n    this.onClick.emit(event);\n    this.root.onItemClick.emit({ ...event, ...{ sender: this.root as any } });\n\n    if (this.hasSubItems() && !event.canceled) {\n      this.open();\n    } else if (!event.canceled) {\n      this.service.closeAll$.next();\n      this.service.closeAllContextMenu$.next({ sender: this.root });\n    }\n  }\n\n  @HostListener('mouseenter', ['$event'])\n  handleMouseEnter(event: MouseEvent) {\n    event.stopPropagation();\n    this.clearCloseTimeout();\n    this.clearAncestorCloseTimeouts();\n    if (!this.isFirstLevel() || this.root.openOn() == 'hover') {\n      this.open();\n    }\n  }\n\n  @HostListener('mouseleave', ['$event'])\n  handleMouseLeave(event: MouseEvent) {\n    event.stopPropagation();\n    this.handlePointerLeave(event);\n  }\n\n  private handlePointerLeave(event: MouseEvent) {\n    if (!this.hasSubItems() || this.root.closeOn() !== 'leave') {\n      return;\n    }\n\n    const relatedTarget = event.relatedTarget;\n    if (relatedTarget instanceof Node && this.containsSubmenuPointer(relatedTarget)) {\n      return;\n    }\n\n    this.scheduleClose();\n  }\n\n  private scheduleClose() {\n    this.clearCloseTimeout();\n    this.mouseLeaveTimeout = setTimeout(() => {\n      this.mouseLeaveTimeout = null;\n      this.close();\n    }, 500);\n  }\n\n  private clearCloseTimeout() {\n    if (this.mouseLeaveTimeout) {\n      clearTimeout(this.mouseLeaveTimeout);\n      this.mouseLeaveTimeout = null;\n    }\n  }\n\n  private clearAncestorCloseTimeouts() {\n    let current = this.getParentMenuItem();\n    while (current) {\n      current.clearCloseTimeout();\n      current = current.getParentMenuItem();\n    }\n  }\n\n  /** True when the pointer is still inside this item's submenu tree (including portaled panels). */\n  private containsSubmenuPointer(node: Node): boolean {\n    if (this.submenuSlot()?.nativeElement?.contains(node) || this.nativeElement.contains(node)) {\n      return true;\n    }\n\n    const el = node instanceof Element ? node : node.parentElement;\n    if (!el) {\n      return false;\n    }\n\n    const item =\n      this.getInstanceFromElement(el.closest('ax-menu-item') ?? el) ??\n      (el.closest('.ax-menu-items') as AXMenuOwnerHost | null)?.__axMenuOwner__;\n\n    return !!item && this.isSelfOrAncestorOf(item);\n  }\n\n  private isSelfOrAncestorOf(item: AXMenuItemComponent): boolean {\n    let current: AXMenuItemComponent | null = item;\n    while (current) {\n      if (current === this) {\n        return true;\n      }\n      current = current.getParentMenuItem();\n    }\n    return false;\n  }\n\n  ngOnDestroy() {\n    this.clearCloseTimeout();\n    this.unbindSubmenuPointerListeners();\n    if (this.isOpen()) {\n      this.close();\n    }\n  }\n\n  /** @ignore */\n  @HostBinding('class')\n  get __hostClass(): string[] {\n    const list: string[] = ['ax-action-item'];\n    if (this.disabled()) {\n      list.push('ax-state-disabled');\n    }\n    list.push(resolveMenuItemColorClass(this.color()));\n\n    return list;\n  }\n}\n\nfunction resolveMenuItemColorClass(color?: AXStyleColorType): string {\n  if (!color || color === 'default') {\n    return 'ax-default';\n  }\n\n  return `ax-${color}`;\n}\n","<div class=\"ax-action-item-prefix\">\n  <ng-content select=\"ax-prefix\"></ng-content>\n  <ng-content select=\"ax-text\"></ng-content>\n</div>\n<div class=\"ax-action-item-suffix\">\n  <ng-content select=\"ax-suffix\"></ng-content>\n  @if (hasSubItems() && (!isFirstLevel() || root.hasArrow())) {\n    <i class=\"ax-icon ax-icon-solid {{ arrowIcon() }} \"></i>\n  }\n</div>\n<div\n  #submenuSlot\n  class=\"ax-menu-items ax-action-list ax-action-list-vertical\"\n  [class.ax-state-open]=\"isOpen()\"\n>\n  <ng-content select=\"ax-menu-item,ax-title,ax-divider,ng-container,[ngTemplateOutlet]\"></ng-content>\n</div>\n","import { AXComponent, AXOrientation, NXComponent, NXEvent } from '@acorex/cdk/common';\nimport { applyVisualContext, resolveVisualContext } from '@acorex/cdk/overlay';\nimport { AXDecoratorGenericComponent, AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { isBrowser } from '@acorex/core/platform';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AXHtmlUtil, AXPoint } from '@acorex/core/utils';\nimport { AXZIndexService, AXZToken } from '@acorex/core/z-index';\nimport { AsyncPipe, isPlatformBrowser, NgTemplateOutlet } from '@angular/common';\nimport {\n  afterNextRender,\n  Component,\n  DestroyRef,\n  DOCUMENT,\n  HostBinding,\n  HostListener,\n  inject,\n  Injector,\n  input,\n  output,\n  PLATFORM_ID,\n  Renderer2,\n  signal,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NavigationStart, Router } from '@angular/router';\nimport { cloneDeep } from 'lodash-es';\nimport { filter } from 'rxjs/operators';\nimport { AXMenuItemComponent } from './menu-item.component';\nimport { AX_MENU_VIEWPORT_MARGIN, axClearMenuPanelHeight, axFitMenuPanelHeight } from './menu-viewport';\nimport { AXMenuService } from './menu.service';\nimport { AXMenuCloseTrigger, AXMenuItem, AXMenuItemClickBaseEvent, AXMenuOpenTrigger, AXRootMenu } from './menu.types';\n\nexport class AXContextMenuOpeningEvent extends NXEvent<AXContextMenuComponent> {\n  items: AXMenuItem[];\n  canceled = false;\n  targetElement: HTMLElement;\n}\nexport type AXContextMenuItemsClickEvent = AXMenuItemClickBaseEvent<AXContextMenuComponent>;\n\n/**\n * Represents a menu component that displays context menu.\n * @category Components\n */\n@Component({\n  selector: 'ax-context-menu',\n  templateUrl: './menu.component.html',\n  styleUrls: ['./menu.component.css'],\n\n  encapsulation: ViewEncapsulation.None,\n  providers: [\n    AXMenuService,\n    {\n      provide: AXRootMenu,\n      useExisting: AXContextMenuComponent,\n    },\n    {\n      provide: AXComponent,\n      useExisting: AXContextMenuComponent,\n    },\n  ],\n  imports: [\n    NgTemplateOutlet,\n    AXDecoratorGenericComponent,\n    AXMenuItemComponent,\n    AXDecoratorIconComponent,\n    AsyncPipe,\n    AXTranslatorPipe,\n  ],\n})\nexport class AXContextMenuComponent extends NXComponent {\n  // Inputs and Outputs\n\n  readonly orientation = input<AXOrientation>('vertical');\n  readonly openOn = input<AXMenuOpenTrigger>('hover');\n  readonly closeOn = input<AXMenuCloseTrigger>('click');\n  /** When true, closes the menu on router navigation (e.g. side-menu route changes). */\n  readonly closeOnRouteChange = input(false);\n  readonly originalItems = input<AXMenuItem[]>([], { alias: 'items' });\n  readonly target = input<HTMLElement | HTMLElement[] | string>();\n\n  onItemClick = output<AXContextMenuItemsClickEvent>();\n  onOpening = output<AXContextMenuOpeningEvent>();\n  /** Emitted when the menu closes (backdrop, item click, scroll, another menu opening, etc.). */\n  onClose = output<void>();\n\n  hasArrow = signal<boolean>(true);\n\n  // Injected Services\n\n  private service = inject(AXMenuService);\n  private renderer = inject(Renderer2);\n  private document = inject(DOCUMENT);\n  private platformID = inject(PLATFORM_ID);\n  private zIndexService = inject(AXZIndexService);\n  private injector = inject(Injector);\n  private zToken: AXZToken | null = null;\n  private lastOpenPoint: AXPoint | null = null;\n  private router = inject(Router, { optional: true });\n  private destroyRef = inject(DestroyRef);\n\n  // Constructor (Dependency Injection)\n\n  /** @ignore */\n  constructor() {\n    super();\n    //\n    afterNextRender(() => {\n      this.bindContextEvent();\n      this.service.initGlobalListeners(this.nativeElement);\n    });\n\n    this.setupCloseOnRouteChange();\n\n    this.service.closeAllContextMenu$.subscribe(() => {\n      this.service.closeAll$.next();\n      this.close();\n    });\n\n    this.service.openContextMenu$.subscribe((e) => {\n      if ((e.sender as any) == this) {\n        this.internalShowAt(e.point);\n      }\n    });\n  }\n\n  // Lifecycle Hooks\n\n  ngOnDestroy() {\n    if (isBrowser()) {\n      this.removeContextEvent();\n    }\n  }\n\n  /**\n   * Refreshes the context menu by rebinding event listeners to target elements.\n   */\n  refresh() {\n    this.bindContextEvent();\n  }\n\n  /**\n   * Shows the context menu at a specific point.\n   * @param point - The coordinates where the menu should appear\n   * @param targetElement - Optional target element for the context menu\n   * @param event - Optional opening event with menu items\n   */\n  showAt(point: AXPoint, targetElement?: HTMLElement, event?: AXContextMenuOpeningEvent) {\n    const sender = this as any as AXRootMenu;\n    this.service.closeAllContextMenu$.next({ sender });\n    if (isPlatformBrowser(this.platformID)) {\n      if (!targetElement) {\n        targetElement = this.document.elementFromPoint(point.x, point.y) as HTMLElement;\n      }\n      if (!event) {\n        event = {\n          sender: this,\n          canceled: false,\n          targetElement: targetElement,\n          items: cloneDeep(this.originalItems()),\n        };\n        if (event.canceled) return;\n      }\n      this.onOpening.emit(event);\n      this.items.set(event.items);\n    }\n    this.service.openContextMenu$.next({ sender, point });\n  }\n\n  /**\n   * Closes the context menu and removes the backdrop.\n   */\n  close() {\n    const wasOpen = this.nativeElement.classList.contains('ax-state-open');\n    this.nativeElement.classList.remove('ax-state-open');\n    this.lastOpenPoint = null;\n    axClearMenuPanelHeight(this.renderer, this.nativeElement);\n    // Drop rendered items before moving DOM nodes back to the original parent.\n    // This prevents a large menu tree from being re-parented/removed as a single heavy DOM operation.\n    if (wasOpen) {\n      this.items.set([]);\n    }\n    this.removeBackdrop();\n    // Release z-index token\n    this.zIndexService.release(this.zToken);\n    this.zToken = null;\n    if (wasOpen) {\n      this.onClose.emit();\n    }\n  }\n\n  // Private Properties\n\n  private backdropElement!: HTMLElement;\n  private originalNextSibling: Node | null = null;\n  private originalParent: HTMLElement | null = null;\n\n  protected items = signal<AXMenuItem[]>([]);\n\n  // Private Methods (Internal Logic)\n\n  /** @ignore */\n  private setupCloseOnRouteChange() {\n    if (!this.router || !isPlatformBrowser(this.platformID)) {\n      return;\n    }\n\n    this.router.events\n      .pipe(\n        filter((event): event is NavigationStart => event instanceof NavigationStart),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe(() => {\n        if (this.closeOnRouteChange()) {\n          this.close();\n        }\n      });\n  }\n\n  /** @ignore */\n  private getTargetElements(): HTMLElement[] {\n    if (isPlatformBrowser(this.platformID)) {\n      const elements: HTMLElement[] =\n        typeof this.target() == 'string'\n          ? Array.from(this.document.querySelectorAll<HTMLElement>(this.target() as string))\n          : Array.isArray(this.target())\n            ? (this.target() as HTMLElement[])\n            : [this.target() as HTMLElement];\n\n      return elements;\n    }\n    return null;\n  }\n\n  /** @ignore */\n  private bindContextEvent() {\n    this.getTargetElements().forEach((e) => {\n      e?.addEventListener('contextmenu', this.handleContextMenu.bind(this));\n    });\n  }\n\n  /** @ignore */\n  private removeContextEvent() {\n    this.getTargetElements().forEach((e) => {\n      e?.removeEventListener('contextmenu', this.handleContextMenu.bind(this));\n    });\n  }\n\n  /** @ignore */\n  private handleContextMenu(e: MouseEvent) {\n    e.preventDefault();\n    e.stopPropagation();\n    //\n    if (isPlatformBrowser(this.platformID)) {\n      const elementsUnderMouse = this.document.elementsFromPoint(e.x, e.y) as HTMLElement[];\n      const targetElements = this.getTargetElements();\n      const targetElement = elementsUnderMouse.find((target) => targetElements.includes(target));\n      //\n      const event: AXContextMenuOpeningEvent = {\n        sender: this,\n        canceled: false,\n        targetElement: targetElement,\n        items: cloneDeep(this.originalItems()),\n      };\n      //\n      if (!event.canceled) {\n        this.showAt({ x: e.clientX, y: e.clientY }, targetElement, event);\n      }\n    }\n  }\n\n  /** @ignore */\n  private internalShowAt(point: AXPoint) {\n    this.lastOpenPoint = point;\n    const elementRef = this.nativeElement;\n    elementRef.classList.add('ax-state-open');\n    this.positionAtPoint(point);\n    this.createBackdrop();\n\n    // Items may render after the signal update (e.g. compact side-menu); reposition once laid out.\n    afterNextRender(\n      () => {\n        if (this.lastOpenPoint && elementRef.classList.contains('ax-state-open')) {\n          this.positionAtPoint(this.lastOpenPoint);\n        }\n      },\n      { injector: this.injector },\n    );\n  }\n\n  /**\n   * Positions the menu at `point`, flipping when it would overflow the viewport.\n   * Uses a temporary visible layout pass so parents that hide the host (e.g. side-menu `display: none`) do not yield a zero-sized rect.\n   */\n  private positionAtPoint(point: AXPoint) {\n    const elementRef = this.nativeElement;\n    const itemRect = this.measureMenuRect(elementRef);\n    const windowWidth = window.innerWidth;\n    const windowHeight = window.innerHeight;\n    const margin = AX_MENU_VIEWPORT_MARGIN;\n    const isRtl = AXHtmlUtil.isRtl(elementRef);\n\n    let left: number;\n    if (isRtl) {\n      left = point.x - itemRect.width;\n      if (left < 0) {\n        left = point.x;\n      }\n    } else {\n      left = point.x;\n      if (left + itemRect.width > windowWidth) {\n        left = point.x - itemRect.width;\n      }\n    }\n\n    const effectiveHeight = Math.min(itemRect.height, Math.max(0, windowHeight - margin * 2));\n    let top = point.y;\n    if (top + effectiveHeight > windowHeight - margin) {\n      top = windowHeight - margin - effectiveHeight;\n    }\n    if (top < margin) {\n      top = margin;\n    }\n\n    this.renderer.setStyle(elementRef, 'left', `${left}px`);\n    this.renderer.setStyle(elementRef, 'top', `${top}px`);\n    this.renderer.setStyle(elementRef, 'position', 'fixed');\n    axFitMenuPanelHeight(this.renderer, elementRef, top);\n  }\n\n  /** Measures menu size even when an ancestor hides the host with `display: none`. */\n  private measureMenuRect(elementRef: HTMLElement): DOMRect {\n    axClearMenuPanelHeight(this.renderer, elementRef);\n    this.renderer.setStyle(elementRef, 'visibility', 'hidden');\n    this.renderer.setStyle(elementRef, 'display', 'flex');\n    const rect = elementRef.getBoundingClientRect();\n    this.renderer.removeStyle(elementRef, 'visibility');\n    this.renderer.removeStyle(elementRef, 'display');\n    return rect;\n  }\n\n  /** @ignore */\n  private createBackdrop() {\n    if (!this.originalParent) {\n      this.originalParent = this.nativeElement.parentElement;\n      this.originalNextSibling = this.nativeElement.nextSibling;\n    }\n\n    // Acquire z-index token\n    this.zToken = this.zIndexService.acquire();\n\n    this.backdropElement = this.renderer.createElement('div');\n    this.renderer.setStyle(this.backdropElement, 'position', 'fixed');\n    this.renderer.setStyle(this.backdropElement, 'top', '0');\n    this.renderer.setStyle(this.backdropElement, 'left', '0');\n    this.renderer.setStyle(this.backdropElement, 'width', '100%');\n    this.renderer.setStyle(this.backdropElement, 'height', '100%');\n    this.renderer.setStyle(this.backdropElement, 'z-index', String(this.zToken.zIndex));\n    this.renderer.setStyle(this.backdropElement, 'background', 'transparent');\n\n    this.createEventListeners(this.backdropElement);\n\n    this.document.body.appendChild(this.backdropElement);\n    this.backdropElement.appendChild(this.nativeElement);\n\n    const contextSource = this.resolveContextMenuTarget();\n    const context = resolveVisualContext(contextSource, this.document.documentElement);\n    applyVisualContext(this.backdropElement, context);\n    applyVisualContext(this.nativeElement, context);\n  }\n\n  /** @ignore */\n  private resolveContextMenuTarget(): HTMLElement {\n    const target = this.target();\n    if (!target) {\n      return this.document.documentElement;\n    }\n    if (typeof target === 'string') {\n      const el = this.document.querySelector(target);\n      return el instanceof HTMLElement ? el : this.document.documentElement;\n    }\n    if (Array.isArray(target)) {\n      const first = target[0];\n      return first instanceof HTMLElement ? first : this.document.documentElement;\n    }\n    return target;\n  }\n\n  /** @ignore */\n  private removeBackdrop() {\n    if (this.backdropElement) {\n      if (this.originalParent) {\n        this.renderer.insertBefore(this.originalParent, this.nativeElement, this.originalNextSibling);\n      }\n      if (this.backdropElement.parentNode) {\n        this.renderer.removeChild(this.backdropElement.parentNode, this.backdropElement);\n      }\n      this.backdropElement = null;\n    }\n  }\n\n  private createEventListeners(el: HTMLElement) {\n    const l1 = this.renderer.listen(el, 'click', () => {\n      this.close();\n      l1();\n    });\n\n    const l2 = this.renderer.listen(el, 'wheel', (e: WheelEvent) => {\n      const target = e.target;\n      if (target instanceof Element && (this.nativeElement.contains(target) || target.closest('.ax-menu-items'))) {\n        return;\n      }\n      this.close();\n      l2();\n    });\n\n    const l3 = this.renderer.listen(el, 'contextmenu', (e: MouseEvent) => {\n      e.preventDefault();\n      e.stopPropagation();\n\n      const x = e.clientX;\n      const y = e.clientY;\n\n      // Close first so the full-screen backdrop is gone; otherwise the next target never\n      // receives contextmenu (conversation list / message list / etc.).\n      this.close();\n\n      if (isPlatformBrowser(this.platformID)) {\n        requestAnimationFrame(() => {\n          const under = this.document.elementFromPoint(x, y) as HTMLElement | null;\n          if (!under || under === this.document.body || under === this.document.documentElement) {\n            return;\n          }\n          const forward = new MouseEvent('contextmenu', {\n            bubbles: true,\n            cancelable: true,\n            view: this.document.defaultView ?? undefined,\n            clientX: x,\n            clientY: y,\n            screenX: e.screenX,\n            screenY: e.screenY,\n            button: 2,\n            buttons: 2,\n          });\n          under.dispatchEvent(forward);\n        });\n      }\n\n      l3();\n    });\n  }\n\n  // Host Listeners (UI Interaction Handling)\n\n  /** @ignore */\n  @HostListener('window:scroll')\n  @HostListener('window:resize')\n  onWindowEvent() {\n    const sender = this as any as AXRootMenu;\n    this.service.closeAllContextMenu$.next({ sender: sender }); // Close all menus on scroll or resize\n  }\n\n  /** @ignore */\n  @HostBinding('class')\n  get __hostClass(): any {\n    return ['ax-menu-container', `ax-orientation-${this.orientation()}`, 'ax-action-list', 'ax-action-list-vertical'];\n  }\n}\n","<ng-content select=\"ax-menu-item,ax-divider,ax-title,ng-container\"></ng-content>\n\n@for (node of items(); track node) {\n  <ng-container [ngTemplateOutlet]=\"Recursion\" [ngTemplateOutletContext]=\"{ $implicit: node }\"> </ng-container>\n}\n\n<ng-template #Recursion let-item>\n  @if (item.group?.title) {\n    <ax-title>{{ item.group?.title }}</ax-title>\n  }\n  <ax-menu-item\n    [name]=\"item.name\"\n    [data]=\"item.data\"\n    [disabled]=\"item.disabled\"\n    [color]=\"item.color\"\n    [subItems]=\"item.items ?? []\"\n  >\n    @if (item.icon) {\n      <ax-prefix>\n        <ax-icon [icon]=\"item.icon\"> </ax-icon>\n      </ax-prefix>\n    }\n    @if (item.text) {\n      <ax-text>{{ item.text | translate | async }}</ax-text>\n    }\n    @if (item.suffix) {\n      <ax-suffix>\n        <ax-text>{{ item.suffix.text | translate | async }}</ax-text>\n      </ax-suffix>\n    }\n    @for (child of item.items; track child) {\n      <ng-container [ngTemplateOutlet]=\"Recursion\" [ngTemplateOutletContext]=\"{ $implicit: child }\"></ng-container>\n    }\n  </ax-menu-item>\n  @if (item.break) {\n    <ax-divider></ax-divider>\n  }\n</ng-template>\n","import { AXComponent, AXOrientation, NXComponent } from '@acorex/cdk/common';\nimport { AXDecoratorGenericComponent, AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { afterNextRender, Component, HostBinding, inject, input, output, ViewEncapsulation } from '@angular/core';\nimport { AXMenuItemComponent } from './menu-item.component';\nimport { AXMenuService } from './menu.service';\nimport { AXMenuCloseTrigger, AXMenuItem, AXMenuItemClickBaseEvent, AXMenuOpenTrigger, AXRootMenu } from './menu.types';\n\nexport type AXMenuItemsClickEvent = AXMenuItemClickBaseEvent<AXMenuComponent>;\n\n/**\n * Represents a menu component that displays menu items.\n * @category Components\n */\n@Component({\n  selector: 'ax-menu',\n  templateUrl: './menu.component.html',\n  styleUrls: ['./menu.component.css'],\n  encapsulation: ViewEncapsulation.None,\n\n  providers: [\n    AXMenuService,\n    {\n      provide: AXRootMenu,\n      useExisting: AXMenuComponent,\n    },\n    {\n      provide: AXComponent,\n      useExisting: AXMenuComponent,\n    },\n  ],\n  imports: [\n    NgTemplateOutlet,\n    AXDecoratorGenericComponent,\n    AXMenuItemComponent,\n    AXDecoratorIconComponent,\n    AsyncPipe,\n    AXTranslatorPipe,\n  ],\n})\nexport class AXMenuComponent extends NXComponent {\n  constructor() {\n    super();\n    afterNextRender(() => {\n      this.service.initGlobalListeners(this.nativeElement);\n    });\n  }\n\n  orientation = input<AXOrientation>('horizontal');\n\n  openOn = input<AXMenuOpenTrigger>('hover');\n\n  closeOn = input<AXMenuCloseTrigger>('leave');\n\n  service = inject(AXMenuService);\n\n  onItemClick = output<AXMenuItemsClickEvent>();\n\n  items = input<AXMenuItem[]>([]);\n\n  hasArrow = input<boolean>(true);\n\n  /** @ignore */\n  @HostBinding('class')\n  get __hostClass(): string[] {\n    return [\n      'ax-root-menu',\n      'ax-action-list',\n      `ax-action-list-${this.orientation()}`,\n      `${!this.hasArrow() ? 'ax-hide-arrow' : ''}`,\n    ];\n  }\n\n  /**\n   * Closes all open menus and submenus for this root menu.\n   *\n   * @returns void - No return value. All open menu overlays are closed and hidden.\n   */\n  public close() {\n    this.service.closeAll$.next();\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { AXContextMenuComponent } from './context-menu.component';\nimport { AXMenuItemComponent } from './menu-item.component';\nimport { AXMenuComponent } from './menu.component';\n\n@NgModule({\n  imports: [AXMenuItemComponent, AXMenuComponent, AXContextMenuComponent],\n  exports: [AXMenuItemComponent, AXMenuComponent, AXContextMenuComponent],\n})\nexport class AXMenuModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;MAQa,aAAa,CAAA;AA2BxB,IAAA,WAAA,GAAA;AA1BO,QAAA,IAAA,CAAA,SAAS,GAAkB,IAAI,OAAO,EAAE;AACxC,QAAA,IAAA,CAAA,KAAK,GAAqC,IAAI,OAAO,EAAE;AACvD,QAAA,IAAA,CAAA,MAAM,GAAqC,IAAI,OAAO,EAAE;AAExD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,OAAO,EAA0C;AACxE,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,OAAO,EAA0B;AAElD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAEhC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAA2B;QACvD,IAAA,CAAA,oBAAoB,GAAG,KAAK;QAE5B,IAAA,CAAA,iBAAiB,GAAkB,EAAE;AAE5B,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,KAAiB,KAAI;AACvD,YAAA,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,EAAE;AACxE,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;YACvB;AACF,QAAA,CAAC;QAEgB,IAAA,CAAA,qBAAqB,GAAG,MAAK;AAC5C,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACvB,QAAA,CAAC;AAGC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACtE,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACxB,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;AACH,IAAA,mBAAmB,CAAC,WAAwB,EAAA;AAC1C,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,oBAAoB,EAAE;YACpE;QACF;AACA,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;QAE9B,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC;AAC7D,QAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,qBAAqB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAChF,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,qBAAqB,CAAC;QAE7D,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,oBAAoB,CAAC,WAAW,CAAC;QACrE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;YACxC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,qBAAqB,CAAC;AAC/D,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;YAC7B,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC;AAChE,YAAA,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,qBAAqB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACnF,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,qBAAqB,CAAC;YAChE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;gBACxC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,qBAAqB,CAAC;AAClE,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;AACH,IAAA,WAAW,CAAC,MAA+B,EAAA;AACzC,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA2B;QACnD,IAAI,OAAO,GAA+C,MAAM;QAChE,OAAO,OAAO,EAAE;AACd,YAAA,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;AACrB,YAAA,OAAO,GAAG,OAAO,CAAC,iBAAiB,IAAI,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI;QACnE;QAEA,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE;YAC1C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAC3B,gBAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC3B;QACF;IACF;AAEA,IAAA,QAAQ,CAAC,IAA6B,EAAA;AACpC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;IACvB;AAEA,IAAA,UAAU,CAAC,IAA6B,EAAA;AACtC,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IACxB;8GAxFW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAb,aAAa,EAAA,CAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB;;;MCAqB,UAAU,CAAA;AAO/B;MAEqB,uBAAuB,CAAA;AAK5C;AAiCK,MAAO,wBAA8D,SAAQ,YAAe,CAAA;AAAlG,IAAA,WAAA,GAAA;;QAME,IAAA,CAAA,QAAQ,GAAG,KAAK;IAClB;AAAC;;AC3DD;AACO,MAAM,uBAAuB,GAAG,CAAC;AAExC;SACgB,oBAAoB,CAAC,QAAmB,EAAE,EAAe,EAAE,GAAW,EAAA;IACpF,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,YAAY,EAAE,CAAA,EAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,WAAW,GAAG,GAAG,GAAG,uBAAuB,CAAC,CAAA,EAAA,CAAI,CAAC;AAC7G;AAEM,SAAU,sBAAsB,CAAC,QAAmB,EAAE,EAAe,EAAA;AACzE,IAAA,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,YAAY,CAAC;AACxC;;ACqBA;;;AAGG;AAkBG,MAAO,mBAAoB,SAAQ,WAAW,CAAA;AA4DlD,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QA5DC,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,KAAK;mFAAC;AAEvB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAEvE,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,IAAI,IAAI;yFAAC;QAExD,IAAA,CAAA,cAAc,GAAG,eAAe,CAAC,mBAAmB,sFAAI,WAAW,EAAE,KAAK,EAAA,CAAG;QAC7E,IAAA,CAAA,0BAA0B,GAAG,MAAM,CAAC,CAAC;uGAAC;QACtC,IAAA,CAAA,WAAW,GAAG,SAAS,CAA0B,aAAa;wFAAC;AAC/D,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAChC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACxC,IAAA,CAAA,aAAa,GAA4B,IAAI;QAC7C,IAAA,CAAA,qBAAqB,GAAG,KAAK;AAErC;;;AAGG;QACH,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAqB,EAAE;qFAAC;AAE9B,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAC9B,MACE,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,0BAA0B,EAAE,GAAG,CAAC;wFAClH;AAES,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AAE3B,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;AAE/B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC;AACpC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAC5B,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;QACvC,IAAA,CAAA,MAAM,GAAoB,IAAI;QAC9B,IAAA,CAAA,mBAAmB,GAAuB,IAAI;QAC9C,IAAA,CAAA,wBAAwB,GAAqB,IAAI;;QAEjD,IAAA,CAAA,YAAY,GAA+B,IAAI;QAC/C,IAAA,CAAA,iBAAiB,GAAyC,IAAI;QAC9D,IAAA,CAAA,oBAAoB,GAAwB,IAAI;QAChD,IAAA,CAAA,oBAAoB,GAAwB,IAAI;AAE9C,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAS,MAAK;YAC1C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;AAClD,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,YAAY,IAAI,IAAI,CAAC,YAAY;AACjE,kBAAE;AACF,kBAAE;AACA,sBAAE;sBACA,uBAAuB;QAC/B,CAAC;sFAAC;QAEF,IAAA,CAAA,OAAO,GAAG,MAAM,EAAwB;AAExC,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK;4FAAU;AACtB,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK;4FAAO;AACnB,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK;gGAAW;AAC3B,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK;6FAAoB;QAK/B,eAAe,CAAC,MAAK;YACnB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBACvC;YACF;YACA,IAAI,CAAC,wBAAwB,EAAE;YAC/B,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,gCAAgC,EAAE;YACvC,IAAI,CAAC,aAAa,GAAG,IAAI,gBAAgB,CAAC,CAAC,OAAO,KAAI;gBACpD,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,EAAE;oBAC3C;gBACF;gBACA,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAClF,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,UAAU,EAAE,CAAC;AACnE,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;AAE5F,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AAC5E,YAAA,IAAK,IAAY,KAAK,IAAI,EAAE;AAC1B,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;gBACrB,IAAI,CAAC,2BAA2B,EAAE;YACpC;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AAC7E,YAAA,IAAK,IAAY,IAAI,IAAI,EAAE;AACzB,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;gBACtB,IAAI,CAAC,iBAAiB,EAAE;gBACxB,IAAI,CAAC,oBAAoB,EAAE;gBAC3B,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;AACvC,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI;YACpB;AACF,QAAA,CAAC,CAAC;IACJ;IAEQ,OAAO,GAAA;QACb,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAiB,SAAS,CAAC,EAAE,SAAS;IAC/E;AAEA;;;AAGG;IACH,iBAAiB,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,OAAO,IAAI,CAAC,YAAY;QAC1B;AACA,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,OAAO,IAAI,CAAC,MAAM;QACpB;AAEA,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,OAAO,CAAC,cAAc,CAAC;QAC5E,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,IAAI,CAAC,aAAa,EAAE;AACpD,YAAA,OAAO,IAAI;QACb;QAEA,OAAO,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,IAAI,IAAI;IACxD;AAEA;;AAEG;IACH,IAAI,GAAA;QACF,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;YAC1C;QACF;QAEA,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;QAE9B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,aAAa;QACjD,IAAI,OAAO,EAAE;;AAEX,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;QAC7B;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;QAC5C;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC7B;AAEA;;AAEG;IACH,KAAK,GAAA;QACH,IAAI,CAAC,iBAAiB,EAAE;AACxB,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;IAC/B;AAEA;;AAEG;IACK,2BAA2B,GAAA;QACjC,eAAe,CACb,MAAK;AACH,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;gBACjB,IAAI,CAAC,iBAAiB,EAAE;gBACxB,eAAe,CACb,MAAK;AACH,oBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;wBACjB,IAAI,CAAC,iBAAiB,EAAE;oBAC1B;gBACF,CAAC,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAC5B;YACH;QACF,CAAC,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAC5B;IACH;AAEA;;;AAGG;IACK,iBAAiB,GAAA;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,aAAa;AACjD,QAAA,IAAI,CAAC,OAAO;YAAE;AAEd,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;AAC3B,QAAA,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC;QAE9C,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE;AAC3D,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU;AACrC,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW;QACvC,MAAM,MAAM,GAAG,uBAAuB;QACtC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;QAClD,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;AAE5F,QAAA,IAAI,QAAgB;AACpB,QAAA,IAAI,SAAiB;QAErB,MAAM,YAAY,GAChB,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,YAAY,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG;AAClG,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,GAAG,eAAe;QAEnD,IAAI,YAAY,GAAG,eAAe,IAAI,YAAY,GAAG,MAAM,EAAE;YAC3D,QAAQ,GAAG,YAAY;QACzB;AAAO,aAAA,IAAI,YAAY,IAAI,MAAM,EAAE;YACjC,QAAQ,GAAG,YAAY;QACzB;aAAO;YACL,QAAQ,GAAG,MAAM;QACnB;AAEA,QAAA,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,CAAC;AAEtF,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,YAAY,EAAE;AACnE,YAAA,MAAM,aAAa,GAAG,KAAK,GAAG,QAAQ,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI;AAChF,YAAA,MAAM,aAAa,GAAG,KAAK,GAAG,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK;AAEhF,YAAA,IAAI,aAAa,IAAI,CAAC,IAAI,aAAa,GAAG,WAAW,CAAC,KAAK,IAAI,WAAW,EAAE;gBAC1E,SAAS,GAAG,aAAa;YAC3B;iBAAO;gBACL,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YACnF;QACF;aAAO;AACL,YAAA,MAAM,aAAa,GAAG,KAAK,GAAG,QAAQ,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK;AAChF,YAAA,MAAM,aAAa,GAAG,KAAK,GAAG,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK;AAEhF,YAAA,IAAI,KAAK,GAAG,aAAa,IAAI,CAAC,GAAG,aAAa,GAAG,WAAW,CAAC,KAAK,IAAI,WAAW,EAAE;gBACjF,SAAS,GAAG,aAAa;YAC3B;AAAO,iBAAA,IAAI,KAAK,GAAG,aAAa,GAAG,WAAW,CAAC,KAAK,IAAI,WAAW,GAAG,aAAa,IAAI,CAAC,EAAE;gBACxF,SAAS,GAAG,aAAa;YAC3B;iBAAO;AACL,gBAAA,SAAS,GAAG,KAAK,GAAG,CAAC,GAAG,WAAW,GAAG,WAAW,CAAC,KAAK;YACzD;QACF;AAEA,QAAA,MAAM,YAAY,GAAG,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,YAAY,CAAC;QACvF,IAAI,YAAY,EAAE;AAChB,YAAA,MAAM,cAAc,GAAG,SAAS,GAAG,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,GAAG,SAAS,GAAG,WAAW,CAAC,KAAK;AAClG,YAAA,IAAI,cAAc,IAAI,QAAQ,CAAC,MAAM,GAAG,eAAe,IAAI,YAAY,GAAG,MAAM,EAAE;AAChF,gBAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM;YAC5B;QACF;AAEA,QAAA,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,CAAC;QAEtF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC;AACpD,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,CAAA,EAAG,QAAQ,CAAA,EAAA,CAAI,CAAC;AACvD,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAA,EAAG,SAAS,CAAA,EAAA,CAAI,CAAC;QACzD,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC;AACtD,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxE;IACF;;AAGQ,IAAA,kBAAkB,CAAC,OAAoB,EAAA;QAC7C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC;QACvD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;AAClD,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE;QAC5C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC;QAChD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC;AAC7C,QAAA,OAAO,IAAI;IACb;;AAGQ,IAAA,aAAa,CAAC,OAAoB,EAAA;QACxC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACvC;QACF;AAEC,QAAA,OAA2B,CAAC,eAAe,GAAG,IAAI;AACnD,QAAA,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC;AAEzC,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B;QACF;AAEA,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa;QACpC,IAAI,CAAC,MAAM,EAAE;YACX;QACF;AAEA,QAAA,IAAI,CAAC,mBAAmB,GAAG,MAAM;AACjC,QAAA,IAAI,CAAC,wBAAwB,GAAG,OAAO,CAAC,WAAW;AAEnD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa;AACtC,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa;AACvC,QAAA,MAAM,UAAU,GACd,MAAM,CAAC,OAAO,KAAK,iBAAiB,IAAI,UAAU,IAAI,UAAU,KAAK,IAAI,CAAC,QAAQ,CAAC;AACjF,cAAE;AACF,cAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;AAExB,QAAA,IAAI,OAAO,CAAC,aAAa,KAAK,UAAU,EAAE;AACxC,YAAA,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC;QACjC;IACF;IAEQ,oBAAoB,GAAA;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,aAAa;QACjD,IAAI,CAAC,6BAA6B,EAAE;QAEpC,IAAI,OAAO,EAAE;AACX,YAAA,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC;YAC9C,OAAQ,OAA2B,CAAC,eAAe;QACrD;AAEA,QAAA,IAAI,OAAO,IAAI,IAAI,CAAC,mBAAmB,EAAE;AACvC,YAAA,IAAI;gBACF,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,wBAAwB,CAAC;YAC/E;AAAE,YAAA,MAAM;;YAER;QACF;AAEA,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI;IACtC;;AAGQ,IAAA,2BAA2B,CAAC,OAAoB,EAAA;QACtD,IAAI,CAAC,6BAA6B,EAAE;AACpC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,MAAK;YAC3E,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,0BAA0B,EAAE;AACnC,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC,KAAiB,KAAI;AAC5F,YAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AAChC,QAAA,CAAC,CAAC;IACJ;IAEQ,6BAA6B,GAAA;AACnC,QAAA,IAAI,CAAC,oBAAoB,IAAI;AAC7B,QAAA,IAAI,CAAC,oBAAoB,IAAI;AAC7B,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;IAClC;;IAGQ,cAAc,GAAA;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,aAAa;QACjD,IAAI,CAAC,OAAO,EAAE;YACZ;QACF;QAEA,OAAO,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;YAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC;YAC7C,IAAI,KAAK,EAAE;AACT,gBAAA,KAAK,CAAC,YAAY,GAAG,IAAI;YAC3B;AACF,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,sBAAsB,CAAC,EAAW,EAAA;AACxC,QAAA,MAAM,GAAG,GAAI,EAAgD,CAAC,aAAa;QAC3E,OAAO,GAAG,YAAY,mBAAmB,GAAG,GAAG,GAAG,SAAS;IAC7D;AAEA;;;AAGG;IACK,wBAAwB,GAAA;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,aAAa;QACnD,IAAI,CAAC,SAAS,EAAE;YACd;QACF;QAEA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;YAC7C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AAC3B,gBAAA,IAAI;AACF,oBAAA,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC3B;AAAE,gBAAA,MAAM;;gBAER;YACF;QACF;IACF;AAEA;;AAEG;IACK,qBAAqB,GAAA;AAC3B,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAc,oCAAoC,CAAC,CAAC,CAAC,MAAM,CAC9G,CAAC,EAAE,KAAI;AACL,YAAA,IAAI,EAAE,KAAK,IAAI,CAAC,aAAa,EAAE;AAC7B,gBAAA,OAAO,KAAK;YACd;AAEA,YAAA,IAAI,EAAE,CAAC,OAAO,KAAK,cAAc,EAAE;AACjC,gBAAA,OAAO,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC,aAAa;YACzE;YAEA,OAAO,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC,aAAa;AAC1D,QAAA,CAAC,CACF;IACH;IAEQ,gCAAgC,GAAA;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC,MAAM;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,aAAa;QACjD,MAAM,SAAS,GAAG;cACd,OAAO,CAAC,gBAAgB,CAAC,+DAA+D,CAAC,CAAC;cAC1F,CAAC;;AAEL,QAAA,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACpE;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B;QACF;AACA,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;QACjC,qBAAqB,CAAC,MAAK;AACzB,YAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;YAClC,IAAI,CAAC,wBAAwB,EAAE;YAC/B,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,gCAAgC,EAAE;AACzC,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,wBAAwB,CAAC,OAAyB,EAAA;AACxD,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC5B,YAAA,IACE,IAAI,CAAC,kCAAkC,CAAC,MAAM,CAAC,UAAU,CAAC;gBAC1D,IAAI,CAAC,kCAAkC,CAAC,MAAM,CAAC,YAAY,CAAC,EAC5D;AACA,gBAAA,OAAO,IAAI;YACb;QACF;AACA,QAAA,OAAO,KAAK;IACd;AAEQ,IAAA,kCAAkC,CAAC,KAAe,EAAA;QACxD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACpC,YAAA,IAAI,EAAE,IAAI,YAAY,OAAO,CAAC,EAAE;gBAC9B;YACF;AACA,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;AAC5B,YAAA,IAAI,OAAO,KAAK,cAAc,IAAI,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,YAAY,EAAE;AACpF,gBAAA,OAAO,IAAI;YACb;YACA,IAAI,IAAI,CAAC,aAAa,GAAG,kCAAkC,CAAC,EAAE;AAC5D,gBAAA,OAAO,IAAI;YACb;QACF;AACA,QAAA,OAAO,KAAK;IACd;;IAGQ,qBAAqB,CAAC,GAAW,EAAE,MAAc,EAAE,YAAoB,EAAE,MAAM,GAAG,CAAC,EAAA;QACzF,IAAI,GAAG,GAAG,MAAM,GAAG,YAAY,GAAG,MAAM,EAAE;AACxC,YAAA,GAAG,GAAG,YAAY,GAAG,MAAM,GAAG,MAAM;QACtC;AACA,QAAA,IAAI,GAAG,GAAG,MAAM,EAAE;YAChB,GAAG,GAAG,MAAM;QACd;AACA,QAAA,OAAO,GAAG;IACZ;AAGA,IAAA,WAAW,CAAC,CAAa,EAAA;QACvB,CAAC,CAAC,eAAe,EAAE;QACnB,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AAErB,QAAA,MAAM,KAAK,GAAG;AACZ,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,WAAW,EAAE,CAAC;AACd,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE;AACJ,gBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AACjB,gBAAA,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE;AACpB,gBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AAClB,aAAA;SACsB;AAEzB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,IAAW,EAAE,EAAE,CAAC;QAEzE,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YACzC,IAAI,CAAC,IAAI,EAAE;QACb;AAAO,aAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AAC1B,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE;AAC7B,YAAA,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/D;IACF;AAGA,IAAA,gBAAgB,CAAC,KAAiB,EAAA;QAChC,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,0BAA0B,EAAE;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,OAAO,EAAE;YACzD,IAAI,CAAC,IAAI,EAAE;QACb;IACF;AAGA,IAAA,gBAAgB,CAAC,KAAiB,EAAA;QAChC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;IAChC;AAEQ,IAAA,kBAAkB,CAAC,KAAiB,EAAA;AAC1C,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,OAAO,EAAE;YAC1D;QACF;AAEA,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa;QACzC,IAAI,aAAa,YAAY,IAAI,IAAI,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,EAAE;YAC/E;QACF;QAEA,IAAI,CAAC,aAAa,EAAE;IACtB;IAEQ,aAAa,GAAA;QACnB,IAAI,CAAC,iBAAiB,EAAE;AACxB,QAAA,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,MAAK;AACvC,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;YAC7B,IAAI,CAAC,KAAK,EAAE;QACd,CAAC,EAAE,GAAG,CAAC;IACT;IAEQ,iBAAiB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACpC,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;QAC/B;IACF;IAEQ,0BAA0B,GAAA;AAChC,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE;QACtC,OAAO,OAAO,EAAE;YACd,OAAO,CAAC,iBAAiB,EAAE;AAC3B,YAAA,OAAO,GAAG,OAAO,CAAC,iBAAiB,EAAE;QACvC;IACF;;AAGQ,IAAA,sBAAsB,CAAC,IAAU,EAAA;QACvC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC1F,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,EAAE,GAAG,IAAI,YAAY,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,aAAa;QAC9D,IAAI,CAAC,EAAE,EAAE;AACP,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,MAAM,IAAI,GACR,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;AAC5D,YAAA,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAA4B,EAAE,eAAe;QAE3E,OAAO,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;IAChD;AAEQ,IAAA,kBAAkB,CAAC,IAAyB,EAAA;QAClD,IAAI,OAAO,GAA+B,IAAI;QAC9C,OAAO,OAAO,EAAE;AACd,YAAA,IAAI,OAAO,KAAK,IAAI,EAAE;AACpB,gBAAA,OAAO,IAAI;YACb;AACA,YAAA,OAAO,GAAG,OAAO,CAAC,iBAAiB,EAAE;QACvC;AACA,QAAA,OAAO,KAAK;IACd;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,6BAA6B,EAAE;AACpC,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;YACjB,IAAI,CAAC,KAAK,EAAE;QACd;IACF;;AAGA,IAAA,IACI,WAAW,GAAA;AACb,QAAA,MAAM,IAAI,GAAa,CAAC,gBAAgB,CAAC;AACzC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC;QAChC;QACA,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AAElD,QAAA,OAAO,IAAI;IACb;8GA1kBW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,YAAA,EAAA,0BAAA,EAAA,YAAA,EAAA,0BAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,SAAA,EAZnB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,uBAAuB;AAChC,gBAAA,WAAW,EAAE,mBAAmB;AACjC,aAAA;YACD,cAAc;AACd,YAAA;AACE,gBAAA,OAAO,EAAE,WAAW;AACpB,gBAAA,WAAW,EAAE,mBAAmB;AACjC,aAAA;SACF,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,SAAA,EASiD,mBAAmB,gMC7DvE,4mBAiBA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FDqCa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAjB/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,aAAA,EAET,iBAAiB,CAAC,IAAI,EAAA,SAAA,EAE1B;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,uBAAuB;AAChC,4BAAA,WAAW,EAAA,mBAAqB;AACjC,yBAAA;wBACD,cAAc;AACd,wBAAA;AACE,4BAAA,OAAO,EAAE,WAAW;AACpB,4BAAA,WAAW,EAAA,mBAAqB;AACjC,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,4mBAAA,EAAA;AASiD,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,mBAAmB,QAAE,EAAE,WAAW,EAAE,KAAK,EAAE,mEAE3B,aAAa,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA;sBAmc9E,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;sBA2BhC,YAAY;uBAAC,YAAY,EAAE,CAAC,QAAQ,CAAC;;sBAUrC,YAAY;uBAAC,YAAY,EAAE,CAAC,QAAQ,CAAC;;sBAgFrC,WAAW;uBAAC,OAAO;;AAYtB,SAAS,yBAAyB,CAAC,KAAwB,EAAA;AACzD,IAAA,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,SAAS,EAAE;AACjC,QAAA,OAAO,YAAY;IACrB;IAEA,OAAO,CAAA,GAAA,EAAM,KAAK,CAAA,CAAE;AACtB;;AExmBM,MAAO,yBAA0B,SAAQ,OAA+B,CAAA;AAA9E,IAAA,WAAA,GAAA;;QAEE,IAAA,CAAA,QAAQ,GAAG,KAAK;IAElB;AAAC;AAGD;;;AAGG;AA2BG,MAAO,sBAAuB,SAAQ,WAAW,CAAA;;;AAkCrD,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;;QAhCA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAgB,UAAU;wFAAC;QAC9C,IAAA,CAAA,MAAM,GAAG,KAAK,CAAoB,OAAO;mFAAC;QAC1C,IAAA,CAAA,OAAO,GAAG,KAAK,CAAqB,OAAO;oFAAC;;QAE5C,IAAA,CAAA,kBAAkB,GAAG,KAAK,CAAC,KAAK;+FAAC;QACjC,IAAA,CAAA,aAAa,GAAG,KAAK,CAAe,EAAE,qFAAI,KAAK,EAAE,OAAO,EAAA,CAAG;AAC3D,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK;8FAAwC;QAE/D,IAAA,CAAA,WAAW,GAAG,MAAM,EAAgC;QACpD,IAAA,CAAA,SAAS,GAAG,MAAM,EAA6B;;QAE/C,IAAA,CAAA,OAAO,GAAG,MAAM,EAAQ;QAExB,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAU,IAAI;qFAAC;;AAIxB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;AAC/B,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAC5B,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAChC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;AACvC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC3B,IAAA,CAAA,MAAM,GAAoB,IAAI;QAC9B,IAAA,CAAA,aAAa,GAAmB,IAAI;QACpC,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC3C,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QA+F/B,IAAA,CAAA,mBAAmB,GAAgB,IAAI;QACvC,IAAA,CAAA,cAAc,GAAuB,IAAI;QAEvC,IAAA,CAAA,KAAK,GAAG,MAAM,CAAe,EAAE;kFAAC;;QA1FxC,eAAe,CAAC,MAAK;YACnB,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC;AACtD,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,uBAAuB,EAAE;QAE9B,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,SAAS,CAAC,MAAK;AAC/C,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE;YAC7B,IAAI,CAAC,KAAK,EAAE;AACd,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AAC5C,YAAA,IAAK,CAAC,CAAC,MAAc,IAAI,IAAI,EAAE;AAC7B,gBAAA,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC;YAC9B;AACF,QAAA,CAAC,CAAC;IACJ;;IAIA,WAAW,GAAA;QACT,IAAI,SAAS,EAAE,EAAE;YACf,IAAI,CAAC,kBAAkB,EAAE;QAC3B;IACF;AAEA;;AAEG;IACH,OAAO,GAAA;QACL,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAEA;;;;;AAKG;AACH,IAAA,MAAM,CAAC,KAAc,EAAE,aAA2B,EAAE,KAAiC,EAAA;QACnF,MAAM,MAAM,GAAG,IAAyB;QACxC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;AAClD,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACtC,IAAI,CAAC,aAAa,EAAE;AAClB,gBAAA,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAgB;YACjF;YACA,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,KAAK,GAAG;AACN,oBAAA,MAAM,EAAE,IAAI;AACZ,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,aAAa,EAAE,aAAa;AAC5B,oBAAA,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;iBACvC;gBACD,IAAI,KAAK,CAAC,QAAQ;oBAAE;YACtB;AACA,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;QAC7B;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACvD;AAEA;;AAEG;IACH,KAAK,GAAA;AACH,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC;QACtE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC;AACpD,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;QACzB,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC;;;QAGzD,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACpB;QACA,IAAI,CAAC,cAAc,EAAE;;QAErB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;AACvC,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QAClB,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;QACrB;IACF;;;IAaQ,uBAAuB,GAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACvD;QACF;QAEA,IAAI,CAAC,MAAM,CAAC;AACT,aAAA,IAAI,CACH,MAAM,CAAC,CAAC,KAAK,KAA+B,KAAK,YAAY,eAAe,CAAC,EAC7E,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aAEpC,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;gBAC7B,IAAI,CAAC,KAAK,EAAE;YACd;AACF,QAAA,CAAC,CAAC;IACN;;IAGQ,iBAAiB,GAAA;AACvB,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACtC,MAAM,QAAQ,GACZ,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI;AACtB,kBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAc,IAAI,CAAC,MAAM,EAAY,CAAC;kBAC/E,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE;AAC3B,sBAAG,IAAI,CAAC,MAAM;AACd,sBAAE,CAAC,IAAI,CAAC,MAAM,EAAiB,CAAC;AAEtC,YAAA,OAAO,QAAQ;QACjB;AACA,QAAA,OAAO,IAAI;IACb;;IAGQ,gBAAgB,GAAA;QACtB,IAAI,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AACrC,YAAA,CAAC,EAAE,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvE,QAAA,CAAC,CAAC;IACJ;;IAGQ,kBAAkB,GAAA;QACxB,IAAI,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AACrC,YAAA,CAAC,EAAE,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1E,QAAA,CAAC,CAAC;IACJ;;AAGQ,IAAA,iBAAiB,CAAC,CAAa,EAAA;QACrC,CAAC,CAAC,cAAc,EAAE;QAClB,CAAC,CAAC,eAAe,EAAE;;AAEnB,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACtC,YAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAkB;AACrF,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC/C,YAAA,MAAM,aAAa,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;;AAE1F,YAAA,MAAM,KAAK,GAA8B;AACvC,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,aAAa,EAAE,aAAa;AAC5B,gBAAA,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;aACvC;;AAED,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;gBACnB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,KAAK,CAAC;YACnE;QACF;IACF;;AAGQ,IAAA,cAAc,CAAC,KAAc,EAAA;AACnC,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa;AACrC,QAAA,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC;AACzC,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,cAAc,EAAE;;QAGrB,eAAe,CACb,MAAK;AACH,YAAA,IAAI,IAAI,CAAC,aAAa,IAAI,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;AACxE,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC;YAC1C;QACF,CAAC,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAC5B;IACH;AAEA;;;AAGG;AACK,IAAA,eAAe,CAAC,KAAc,EAAA;AACpC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC;AACjD,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU;AACrC,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW;QACvC,MAAM,MAAM,GAAG,uBAAuB;QACtC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC;AAE1C,QAAA,IAAI,IAAY;QAChB,IAAI,KAAK,EAAE;YACT,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK;AAC/B,YAAA,IAAI,IAAI,GAAG,CAAC,EAAE;AACZ,gBAAA,IAAI,GAAG,KAAK,CAAC,CAAC;YAChB;QACF;aAAO;AACL,YAAA,IAAI,GAAG,KAAK,CAAC,CAAC;YACd,IAAI,IAAI,GAAG,QAAQ,CAAC,KAAK,GAAG,WAAW,EAAE;gBACvC,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK;YACjC;QACF;QAEA,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;AACzF,QAAA,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC;QACjB,IAAI,GAAG,GAAG,eAAe,GAAG,YAAY,GAAG,MAAM,EAAE;AACjD,YAAA,GAAG,GAAG,YAAY,GAAG,MAAM,GAAG,eAAe;QAC/C;AACA,QAAA,IAAI,GAAG,GAAG,MAAM,EAAE;YAChB,GAAG,GAAG,MAAM;QACd;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAA,EAAG,IAAI,CAAA,EAAA,CAAI,CAAC;AACvD,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,CAAA,EAAG,GAAG,CAAA,EAAA,CAAI,CAAC;QACrD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC;QACvD,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC;IACtD;;AAGQ,IAAA,eAAe,CAAC,UAAuB,EAAA;AAC7C,QAAA,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,YAAY,EAAE,QAAQ,CAAC;QAC1D,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC;AACrD,QAAA,MAAM,IAAI,GAAG,UAAU,CAAC,qBAAqB,EAAE;QAC/C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,YAAY,CAAC;QACnD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC;AAChD,QAAA,OAAO,IAAI;IACb;;IAGQ,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa;YACtD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW;QAC3D;;QAGA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;QAE1C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACzD,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,EAAE,OAAO,CAAC;AACjE,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,GAAG,CAAC;AACxD,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,GAAG,CAAC;AACzD,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,MAAM,CAAC;AAC7D,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE,MAAM,CAAC;QAC9D,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACnF,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,YAAY,EAAE,aAAa,CAAC;AAEzE,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,eAAe,CAAC;QAE/C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC;QACpD,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC;AAEpD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,wBAAwB,EAAE;AACrD,QAAA,MAAM,OAAO,GAAG,oBAAoB,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;AAClF,QAAA,kBAAkB,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC;AACjD,QAAA,kBAAkB,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC;IACjD;;IAGQ,wBAAwB,GAAA;AAC9B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;QAC5B,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe;QACtC;AACA,QAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;YAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC9C,YAAA,OAAO,EAAE,YAAY,WAAW,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe;QACvE;AACA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACzB,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;AACvB,YAAA,OAAO,KAAK,YAAY,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe;QAC7E;AACA,QAAA,OAAO,MAAM;IACf;;IAGQ,cAAc,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,gBAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,mBAAmB,CAAC;YAC/F;AACA,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;AACnC,gBAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC;YAClF;AACA,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;QAC7B;IACF;AAEQ,IAAA,oBAAoB,CAAC,EAAe,EAAA;AAC1C,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,MAAK;YAChD,IAAI,CAAC,KAAK,EAAE;AACZ,YAAA,EAAE,EAAE;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAa,KAAI;AAC7D,YAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM;YACvB,IAAI,MAAM,YAAY,OAAO,KAAK,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,EAAE;gBAC1G;YACF;YACA,IAAI,CAAC,KAAK,EAAE;AACZ,YAAA,EAAE,EAAE;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,EAAE,CAAC,CAAa,KAAI;YACnE,CAAC,CAAC,cAAc,EAAE;YAClB,CAAC,CAAC,eAAe,EAAE;AAEnB,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO;AACnB,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO;;;YAInB,IAAI,CAAC,KAAK,EAAE;AAEZ,YAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBACtC,qBAAqB,CAAC,MAAK;AACzB,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAuB;AACxE,oBAAA,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;wBACrF;oBACF;AACA,oBAAA,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,aAAa,EAAE;AAC5C,wBAAA,OAAO,EAAE,IAAI;AACb,wBAAA,UAAU,EAAE,IAAI;AAChB,wBAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,SAAS;AAC5C,wBAAA,OAAO,EAAE,CAAC;AACV,wBAAA,OAAO,EAAE,CAAC;wBACV,OAAO,EAAE,CAAC,CAAC,OAAO;wBAClB,OAAO,EAAE,CAAC,CAAC,OAAO;AAClB,wBAAA,MAAM,EAAE,CAAC;AACT,wBAAA,OAAO,EAAE,CAAC;AACX,qBAAA,CAAC;AACF,oBAAA,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC;AAC9B,gBAAA,CAAC,CAAC;YACJ;AAEA,YAAA,EAAE,EAAE;AACN,QAAA,CAAC,CAAC;IACJ;;;IAOA,aAAa,GAAA;QACX,MAAM,MAAM,GAAG,IAAyB;AACxC,QAAA,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7D;;AAGA,IAAA,IACI,WAAW,GAAA;AACb,QAAA,OAAO,CAAC,mBAAmB,EAAE,CAAA,eAAA,EAAkB,IAAI,CAAC,WAAW,EAAE,CAAA,CAAE,EAAE,gBAAgB,EAAE,yBAAyB,CAAC;IACnH;8GA5YW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,SAAA,EApBtB;YACT,aAAa;AACb,YAAA;AACE,gBAAA,OAAO,EAAE,UAAU;AACnB,gBAAA,WAAW,EAAE,sBAAsB;AACpC,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,WAAW;AACpB,gBAAA,WAAW,EAAE,sBAAsB;AACpC,aAAA;AACF,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5DH,0oCAsCA,EAAA,MAAA,EAAA,CAAA,2kNAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDwBI,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,2BAA2B,EAAA,QAAA,EAAA,8IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC3B,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,wBAAwB,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACxB,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACT,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGP,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBA1BlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,aAAA,EAIZ,iBAAiB,CAAC,IAAI,EAAA,SAAA,EAC1B;wBACT,aAAa;AACb,wBAAA;AACE,4BAAA,OAAO,EAAE,UAAU;AACnB,4BAAA,WAAW,EAAA,sBAAwB;AACpC,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,WAAW;AACpB,4BAAA,WAAW,EAAA,sBAAwB;AACpC,yBAAA;qBACF,EAAA,OAAA,EACQ;wBACP,gBAAgB;wBAChB,2BAA2B;wBAC3B,mBAAmB;wBACnB,wBAAwB;wBACxB,SAAS;wBACT,gBAAgB;AACjB,qBAAA,EAAA,QAAA,EAAA,0oCAAA,EAAA,MAAA,EAAA,CAAA,2kNAAA,CAAA,EAAA;;sBAmYA,YAAY;uBAAC,eAAe;;sBAC5B,YAAY;uBAAC,eAAe;;sBAO5B,WAAW;uBAAC,OAAO;;;AEpctB;;;AAGG;AA2BG,MAAO,eAAgB,SAAQ,WAAW,CAAA;AAC9C,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QAMT,IAAA,CAAA,WAAW,GAAG,KAAK,CAAgB,YAAY;wFAAC;QAEhD,IAAA,CAAA,MAAM,GAAG,KAAK,CAAoB,OAAO;mFAAC;QAE1C,IAAA,CAAA,OAAO,GAAG,KAAK,CAAqB,OAAO;oFAAC;AAE5C,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;QAE/B,IAAA,CAAA,WAAW,GAAG,MAAM,EAAyB;QAE7C,IAAA,CAAA,KAAK,GAAG,KAAK,CAAe,EAAE;kFAAC;QAE/B,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,IAAI;qFAAC;QAjB7B,eAAe,CAAC,MAAK;YACnB,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC;AACtD,QAAA,CAAC,CAAC;IACJ;;AAiBA,IAAA,IACI,WAAW,GAAA;QACb,OAAO;YACL,cAAc;YACd,gBAAgB;AAChB,YAAA,CAAA,eAAA,EAAkB,IAAI,CAAC,WAAW,EAAE,CAAA,CAAE;AACtC,YAAA,CAAA,EAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,eAAe,GAAG,EAAE,CAAA,CAAE;SAC7C;IACH;AAEA;;;;AAIG;IACI,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE;IAC/B;8GAxCW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,SAAA,EApBf;YACT,aAAa;AACb,YAAA;AACE,gBAAA,OAAO,EAAE,UAAU;AACnB,gBAAA,WAAW,EAAE,eAAe;AAC7B,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,WAAW;AACpB,gBAAA,WAAW,EAAE,eAAe;AAC7B,aAAA;AACF,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ED/BH,0oCAsCA,EAAA,MAAA,EAAA,CAAA,2kNAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ECLI,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,2BAA2B,EAAA,QAAA,EAAA,8IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC3B,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,wBAAwB,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACxB,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACT,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGP,eAAe,EAAA,UAAA,EAAA,CAAA;kBA1B3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,EAAA,aAAA,EAGJ,iBAAiB,CAAC,IAAI,EAAA,SAAA,EAE1B;wBACT,aAAa;AACb,wBAAA;AACE,4BAAA,OAAO,EAAE,UAAU;AACnB,4BAAA,WAAW,EAAA,eAAiB;AAC7B,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,WAAW;AACpB,4BAAA,WAAW,EAAA,eAAiB;AAC7B,yBAAA;qBACF,EAAA,OAAA,EACQ;wBACP,gBAAgB;wBAChB,2BAA2B;wBAC3B,mBAAmB;wBACnB,wBAAwB;wBACxB,SAAS;wBACT,gBAAgB;AACjB,qBAAA,EAAA,QAAA,EAAA,0oCAAA,EAAA,MAAA,EAAA,CAAA,2kNAAA,CAAA,EAAA;;sBAyBA,WAAW;uBAAC,OAAO;;;MCvDT,YAAY,CAAA;8GAAZ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAZ,YAAY,EAAA,OAAA,EAAA,CAHb,mBAAmB,EAAE,eAAe,EAAE,sBAAsB,CAAA,EAAA,OAAA,EAAA,CAC5D,mBAAmB,EAAE,eAAe,EAAE,sBAAsB,CAAA,EAAA,CAAA,CAAA;+GAE3D,YAAY,EAAA,OAAA,EAAA,CAHQ,eAAe,EAAE,sBAAsB,CAAA,EAAA,CAAA,CAAA;;2FAG3D,YAAY,EAAA,UAAA,EAAA,CAAA;kBAJxB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,mBAAmB,EAAE,eAAe,EAAE,sBAAsB,CAAC;AACvE,oBAAA,OAAO,EAAE,CAAC,mBAAmB,EAAE,eAAe,EAAE,sBAAsB,CAAC;AACxE,iBAAA;;;ACRD;;AAEG;;;;"}