{"version":3,"file":"menu.mjs","sources":["../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/menu/menu-dynamic-trigger.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/menu/menu-content.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/menu/menu-errors.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/menu/menu-panel.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/menu/menu-item.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/menu/menu-item.html","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/menu/menu.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/menu/menu.html","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/menu/menu-trigger.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/menu/contextmenu-trigger.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/menu/menu.module.ts"],"sourcesContent":["import { Directive, inject, TemplateRef, ViewContainerRef } from '@angular/core';\n\n@Directive({\n  selector: `[sbbMenuDynamicTrigger]`,\n  exportAs: 'sbbMenuDynamicTrigger',\n})\nexport class SbbMenuDynamicTrigger {\n  readonly _templateRef = inject<TemplateRef<any>>(TemplateRef);\n\n  constructor(...args: unknown[]);\n  constructor() {\n    const _templateRef = this._templateRef;\n    const viewContainerRef = inject(ViewContainerRef);\n\n    viewContainerRef.createEmbeddedView(_templateRef);\n  }\n}\n","import { DomPortalOutlet, TemplatePortal } from '@angular/cdk/portal';\nimport { DOCUMENT } from '@angular/common';\nimport {\n  ApplicationRef,\n  ChangeDetectorRef,\n  Directive,\n  inject,\n  InjectionToken,\n  Injector,\n  OnDestroy,\n  TemplateRef,\n  ViewContainerRef,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\n\n/**\n * Injection token that can be used to reference instances of `SbbMenuContent`. It serves\n * as alternative token to the actual `SbbMenuContent` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport const SBB_MENU_CONTENT = new InjectionToken<SbbMenuContent>('SbbMenuContent');\n\n/**\n * Menu content that will be rendered lazily once the menu is opened.\n */\n@Directive({\n  selector: 'ng-template[sbbMenuContent]',\n  providers: [{ provide: SBB_MENU_CONTENT, useExisting: SbbMenuContent }],\n})\nexport class SbbMenuContent implements OnDestroy {\n  private _template = inject<TemplateRef<any>>(TemplateRef);\n  private _appRef = inject(ApplicationRef);\n  private _injector = inject(Injector);\n  private _viewContainerRef = inject(ViewContainerRef);\n  private _document = inject(DOCUMENT);\n  private _changeDetectorRef = inject(ChangeDetectorRef);\n\n  private _portal: TemplatePortal | undefined;\n  private _outlet: DomPortalOutlet | undefined;\n\n  /** Emits when the menu content has been attached. */\n  readonly _attached: Subject<void> = new Subject<void>();\n\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  /**\n   * Attaches the content with a particular context.\n   * @docs-private\n   */\n  attach(context: any = {}) {\n    if (!this._portal) {\n      this._portal = new TemplatePortal(this._template, this._viewContainerRef);\n    }\n\n    this.detach();\n\n    if (!this._outlet) {\n      this._outlet = new DomPortalOutlet(\n        this._document.createElement('div'),\n        this._appRef,\n        this._injector,\n      );\n    }\n\n    const element: HTMLElement = this._template.elementRef.nativeElement;\n\n    // Because we support opening the same menu from different triggers (which in turn have their\n    // own `OverlayRef` panel), we have to re-insert the host element every time, otherwise we\n    // risk it staying attached to a pane that's no longer in the DOM.\n    element.parentNode!.insertBefore(this._outlet.outletElement, element);\n\n    // When `SbbMenuContent` is used in an `OnPush` component, the insertion of the menu\n    // content via `createEmbeddedView` does not cause the content to be seen as \"dirty\"\n    // by Angular. This causes the `@ContentChildren` for menu items within the menu to\n    // not be updated by Angular. By explicitly marking for check here, we tell Angular that\n    // it needs to check for new menu items and update the `@ContentChild` in `SbbMenu`.\n    this._changeDetectorRef.markForCheck();\n\n    this._portal.attach(this._outlet, context);\n    this._attached.next();\n  }\n\n  /**\n   * Detaches the content.\n   * @docs-private\n   */\n  detach() {\n    if (this._portal?.isAttached) {\n      this._portal.detach();\n    }\n  }\n\n  ngOnDestroy() {\n    this.detach();\n    this._outlet?.dispose();\n  }\n}\n","/**\n * Throws an exception for the case when menu's x-position value isn't valid.\n * In other words, it doesn't match 'before' or 'after'.\n * @docs-private\n */\nexport function throwSbbMenuInvalidPositionX() {\n  throw Error(`xPosition value must be either 'before' or after'.\n      Example: <sbb-menu xPosition=\"before\" #menu=\"sbbMenu\"></sbb-menu>`);\n}\n\n/**\n * Throws an exception for the case when menu's y-position value isn't valid.\n * In other words, it doesn't match 'above' or 'below'.\n * @docs-private\n */\nexport function throwSbbMenuInvalidPositionY() {\n  throw Error(`yPosition value must be either 'above' or below'.\n      Example: <sbb-menu yPosition=\"above\" #menu=\"sbbMenu\"></sbb-menu>`);\n}\n\n/**\n * Throws an exception for the case when a menu is assigned\n * to a trigger that is placed inside the same menu.\n * @docs-private\n */\nexport function throwSbbMenuRecursiveError() {\n  throw Error(\n    `sbbMenuTriggerFor: menu cannot contain its own trigger. Assign a menu that is ` +\n      `not a parent of the trigger or move the trigger outside of the menu.`,\n  );\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { EventEmitter, InjectionToken, TemplateRef } from '@angular/core';\n\nimport { SbbMenuContent } from './menu-content';\nimport { SbbMenuPositionX, SbbMenuPositionY } from './menu-positions';\nimport type { SbbMenuTriggerContext } from './menu-trigger';\n\n/**\n * Injection token used to provide the parent menu to menu-specific components.\n * @docs-private\n */\nexport const SBB_MENU_PANEL = new InjectionToken<SbbMenuPanel>('SBB_MENU_PANEL');\n\n/**\n * Interface for a custom menu panel that can be used with `sbbMenuTriggerFor`.\n * @docs-private\n */\nexport interface SbbMenuPanel<T = any> {\n  triggerContext: SbbMenuTriggerContext;\n  xPosition: SbbMenuPositionX;\n  yPosition: SbbMenuPositionY;\n  overlapTrigger: boolean;\n  templateRef: TemplateRef<any>;\n  readonly closed: EventEmitter<void | 'click' | 'keydown' | 'tab'>;\n  parentMenu?: SbbMenuPanel | undefined;\n  focusFirstItem: (origin?: FocusOrigin) => void;\n  resetActiveItem: () => void;\n  setPositionClasses?: (x: SbbMenuPositionX, y: SbbMenuPositionY) => void;\n  setElevation?(depth: number): void;\n  lazyContent?: SbbMenuContent;\n  backdropClass?: string;\n  overlayPanelClass?: string | string[];\n  hasBackdrop?: boolean;\n  readonly panelId?: string;\n}\n","import { FocusableOption, FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { DOCUMENT } from '@angular/common';\nimport {\n  AfterViewInit,\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  inject,\n  Input,\n  OnDestroy,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { SbbIcon } from '@sbb-esta/angular/icon';\nimport { Subject } from 'rxjs';\n\nimport { SbbMenuPanel, SBB_MENU_PANEL } from './menu-panel';\n\n/**\n * Single item inside a `sbb-menu`. Provides the menu item styling and accessibility treatment.\n */\n@Component({\n  selector: '[sbb-menu-item]',\n  exportAs: 'sbbMenuItem',\n  host: {\n    '[attr.role]': 'role',\n    '[class.sbb-active]': '_highlighted',\n    '[class.sbb-menu-item-submenu-trigger]': '_triggersSubmenu',\n    '[attr.tabindex]': '_getTabIndex()',\n    '[attr.aria-disabled]': 'disabled.toString()',\n    '[attr.disabled]': 'disabled || null',\n    class: 'sbb-menu-item sbb-link-reset sbb-icon-fit',\n    '(click)': '_checkDisabled($event)',\n    '(mouseenter)': '_handleMouseEnter()',\n  },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  templateUrl: 'menu-item.html',\n  imports: [SbbIcon],\n})\nexport class SbbMenuItem implements FocusableOption, AfterViewInit, OnDestroy {\n  private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private _document = inject(DOCUMENT);\n  private _focusMonitor = inject(FocusMonitor);\n  private _changeDetectorRef = inject(ChangeDetectorRef);\n  _parentMenu?: SbbMenuPanel<SbbMenuItem> | null | undefined = inject<SbbMenuPanel<SbbMenuItem>>(\n    SBB_MENU_PANEL,\n    { optional: true },\n  );\n\n  /** Whether the menu item is disabled. */\n  @Input({ transform: booleanAttribute }) disabled: boolean = false;\n\n  /** ARIA role for the menu item. */\n  @Input() role: 'menuitem' | 'menuitemradio' | 'menuitemcheckbox' = 'menuitem';\n\n  /** Stream that emits when the menu item is hovered. */\n  readonly _hovered: Subject<SbbMenuItem> = new Subject<SbbMenuItem>();\n\n  /** Stream that emits when the menu item is focused. */\n  readonly _focused: Subject<SbbMenuItem> = new Subject<SbbMenuItem>();\n\n  /** Whether the menu item is highlighted. */\n  _highlighted: boolean = false;\n\n  /** Whether the menu item acts as a trigger for a sub-menu. */\n  _triggersSubmenu: boolean = false;\n\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  /** Focuses the menu item. */\n  focus(origin?: FocusOrigin, options?: FocusOptions): void {\n    if (origin) {\n      this._focusMonitor.focusVia(this._getHostElement(), origin, options);\n    } else {\n      this._getHostElement().focus(options);\n    }\n\n    this._focused.next(this);\n  }\n\n  ngAfterViewInit() {\n    // Start monitoring the element so it gets the appropriate focused classes. We want\n    // to show the focus style for menu items only when the focus was not caused by a\n    // mouse or touch interaction.\n    this._focusMonitor.monitor(this._elementRef, false);\n  }\n\n  ngOnDestroy() {\n    this._focusMonitor.stopMonitoring(this._elementRef);\n\n    this._hovered.complete();\n    this._focused.complete();\n  }\n\n  /** Used to set the `tabindex`. */\n  _getTabIndex(): string {\n    return this.disabled ? '-1' : '0';\n  }\n\n  /** Returns the host DOM element. */\n  _getHostElement(): HTMLElement {\n    return this._elementRef.nativeElement;\n  }\n\n  /** Prevents the default element actions if it is disabled. */\n  _checkDisabled(event: Event): void {\n    if (this.disabled) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n  }\n\n  /** Emits to the hover stream. */\n  _handleMouseEnter() {\n    this._hovered.next(this);\n  }\n\n  /** Gets the label to be used when determining whether the option should be focused. */\n  getLabel(): string {\n    const clone = this._elementRef.nativeElement.cloneNode(true) as HTMLElement;\n    const icons = clone.querySelectorAll('sbb-icon');\n\n    // Strip away icons so they don't show up in the text.\n    for (let i = 0; i < icons.length; i++) {\n      icons[i].remove();\n    }\n\n    return clone.textContent?.trim() || '';\n  }\n\n  _setHighlighted(isHighlighted: boolean) {\n    // We need to mark this for check for the case where the content is coming from a\n    // `sbbMenuContent` whose change detection tree is at the declaration position,\n    // not the insertion position. See #23175.\n    this._highlighted = isHighlighted;\n    this._changeDetectorRef.markForCheck();\n  }\n\n  _hasFocus(): boolean {\n    return this._document.activeElement === this._getHostElement();\n  }\n}\n","<ng-content></ng-content>\n@if (_triggersSubmenu) {\n  <sbb-icon\n    svgIcon=\"chevron-small-right-small\"\n    class=\"sbb-menu-item-submenu-trigger-icon\"\n  ></sbb-icon>\n}\n","import { FocusKeyManager, FocusOrigin, _IdGenerator } from '@angular/cdk/a11y';\nimport { DOWN_ARROW, ESCAPE, hasModifierKey, LEFT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n  AfterContentInit,\n  afterNextRender,\n  AfterRenderRef,\n  ANIMATION_MODULE_TYPE,\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  ContentChildren,\n  ElementRef,\n  EventEmitter,\n  inject,\n  InjectionToken,\n  Injector,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  signal,\n  TemplateRef,\n  ViewChild,\n  ViewEncapsulation,\n  WritableSignal,\n} from '@angular/core';\nimport { merge, Observable, Subject } from 'rxjs';\nimport { startWith, switchMap } from 'rxjs/operators';\n\nimport { SbbMenuContent, SBB_MENU_CONTENT } from './menu-content';\nimport { throwSbbMenuInvalidPositionX, throwSbbMenuInvalidPositionY } from './menu-errors';\nimport { SbbMenuItem } from './menu-item';\nimport { SbbMenuPanel, SBB_MENU_PANEL } from './menu-panel';\nimport { SbbMenuPositionX, SbbMenuPositionY } from './menu-positions';\nimport type { SbbMenuTriggerContext } from './menu-trigger';\n\n/** Default `sbb-menu` options that can be overridden. */\nexport interface SbbMenuDefaultOptions {\n  /** The x-axis position of the menu. */\n  xPosition?: SbbMenuPositionX;\n\n  /** The y-axis position of the menu. */\n  yPosition?: SbbMenuPositionY;\n\n  /** Whether the menu should overlap the menu trigger. */\n  overlapTrigger: boolean;\n\n  /** Class to be applied to the menu's backdrop. */\n  backdropClass: string;\n\n  /** Class or list of classes to be applied to the menu's overlay panel. */\n  overlayPanelClass?: string | string[];\n\n  /** Whether the menu has a backdrop. */\n  hasBackdrop?: boolean;\n}\n\n/** Injection token to be used to override the default options for `sbb-menu`. */\nexport const SBB_MENU_DEFAULT_OPTIONS = new InjectionToken<SbbMenuDefaultOptions>(\n  'sbb-menu-default-options',\n  {\n    providedIn: 'root',\n    factory: SBB_MENU_DEFAULT_OPTIONS_FACTORY,\n  },\n);\n\n/** @docs-private */\nexport function SBB_MENU_DEFAULT_OPTIONS_FACTORY(): SbbMenuDefaultOptions {\n  return {\n    overlapTrigger: false,\n    xPosition: 'after',\n    yPosition: 'below',\n    backdropClass: 'cdk-overlay-transparent-backdrop',\n  };\n}\n\nexport type SbbMenuPlainAnimationState = 'enter' | 'void' | 'enter-usermenu';\n\nexport interface SbbMenuAnimationStateWithParams {\n  value: SbbMenuPlainAnimationState;\n  params?: { [key: string]: string };\n}\n\nexport type SbbMenuAnimationState = SbbMenuPlainAnimationState | SbbMenuAnimationStateWithParams;\n\n/** Reason why the menu was closed. */\nexport type SbbMenuCloseReason = void | 'click' | 'keydown' | 'tab';\n\n/** Name of the enter animation `@keyframes`. */\nconst ENTER_ANIMATION = '_sbb-menu-enter';\n\n/** Name of the exit animation `@keyframes`. */\nconst EXIT_ANIMATION = '_sbb-menu-exit';\n\n@Component({\n  selector: 'sbb-menu',\n  templateUrl: 'menu.html',\n  styleUrls: ['menu.css'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  exportAs: 'sbbMenu',\n  host: {\n    '[attr.aria-label]': 'null',\n    '[attr.aria-labelledby]': 'null',\n    '[attr.aria-describedby]': 'null',\n  },\n  providers: [{ provide: SBB_MENU_PANEL, useExisting: SbbMenu }],\n  imports: [NgTemplateOutlet],\n})\nexport class SbbMenu implements AfterContentInit, SbbMenuPanel<SbbMenuItem>, OnInit, OnDestroy {\n  private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private _defaultOptions = inject<SbbMenuDefaultOptions>(SBB_MENU_DEFAULT_OPTIONS);\n  private _changeDetectorRef = inject(ChangeDetectorRef);\n  private _injector = inject(Injector);\n\n  private _keyManager!: FocusKeyManager<SbbMenuItem>;\n  private _xPosition: SbbMenuPositionX = this._defaultOptions.xPosition;\n  private _yPosition: SbbMenuPositionY = this._defaultOptions.yPosition;\n  private _firstItemFocusRef?: AfterRenderRef;\n  private _exitFallbackTimeout: ReturnType<typeof setTimeout> | undefined;\n  private _previousElevation!: string;\n  private _elevationPrefix: string = 'sbb-elevation-z';\n  private _baseElevation: number = 4;\n\n  /** All items inside the menu. Includes items nested inside another menu. */\n  @ContentChildren(SbbMenuItem, { descendants: true }) _allItems!: QueryList<SbbMenuItem>;\n\n  /** Only the direct descendant menu items. */\n  _directDescendantItems: QueryList<SbbMenuItem> = new QueryList<SbbMenuItem>();\n\n  /** Classes to be applied to the menu panel. */\n  _classList: { [key: string]: boolean } = {};\n\n  /** Current state of the panel animation. */\n  _panelAnimationState: SbbMenuAnimationState = 'void';\n\n  /** Emits whenever an animation on the menu completes. */\n  readonly _animationDone = new Subject<'void' | 'enter'>();\n\n  /** Whether the menu is animating. */\n  _isAnimating: WritableSignal<boolean> = signal(false);\n\n  /** Parent menu of the current menu panel. */\n  parentMenu: SbbMenuPanel | undefined;\n\n  /** Class or list of classes to be added to the overlay panel. */\n  overlayPanelClass: string | string[] = this._defaultOptions.overlayPanelClass || '';\n\n  /** Class to be added to the backdrop element. */\n  @Input() backdropClass: string = this._defaultOptions.backdropClass;\n\n  /** aria-label for the menu panel. */\n  @Input('aria-label') ariaLabel!: string;\n\n  /** aria-labelledby for the menu panel. */\n  @Input('aria-labelledby') ariaLabelledby!: string;\n\n  /** aria-describedby for the menu panel. */\n  @Input('aria-describedby') ariaDescribedby!: string;\n\n  /** Position of the menu in the X axis. */\n  @Input()\n  get xPosition(): SbbMenuPositionX {\n    return this._xPosition;\n  }\n  set xPosition(value: SbbMenuPositionX) {\n    if (\n      value !== 'before' &&\n      value !== 'after' &&\n      (typeof ngDevMode === 'undefined' || ngDevMode)\n    ) {\n      throwSbbMenuInvalidPositionX();\n    }\n    this._xPosition = value;\n    this.setPositionClasses();\n  }\n\n  /** Position of the menu in the Y axis. */\n  @Input()\n  get yPosition(): SbbMenuPositionY {\n    return this._yPosition;\n  }\n  set yPosition(value: SbbMenuPositionY) {\n    if (value !== 'above' && value !== 'below' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throwSbbMenuInvalidPositionY();\n    }\n    this._yPosition = value;\n    this.setPositionClasses();\n  }\n\n  /** @docs-private */\n  @ViewChild(TemplateRef) templateRef!: TemplateRef<any>;\n\n  /**\n   * Menu content that will be rendered lazily.\n   * @docs-private\n   */\n  @ContentChild(SBB_MENU_CONTENT) lazyContent!: SbbMenuContent;\n\n  /** Whether the menu should overlap its trigger. */\n  @Input({ transform: booleanAttribute })\n  overlapTrigger: boolean = this._defaultOptions.overlapTrigger;\n\n  /** Whether the menu has a backdrop. */\n  @Input({ transform: booleanAttribute })\n  hasBackdrop: boolean | undefined = this._defaultOptions.hasBackdrop;\n\n  /**\n   * This method takes classes set on the host sbb-menu element and applies them on the\n   * menu template that displays in the overlay container. Otherwise, it's difficult\n   * to style the containing menu from outside the component.\n   * @param classes list of class names\n   */\n  @Input('class')\n  set panelClass(classes: string) {\n    const previousPanelClass = this._previousPanelClass;\n    const newClassList = { ...this._classList };\n\n    if (previousPanelClass && previousPanelClass.length) {\n      previousPanelClass.split(' ').forEach((className: string) => {\n        newClassList[className] = false;\n      });\n    }\n\n    this._previousPanelClass = classes;\n\n    if (classes && classes.length) {\n      classes.split(' ').forEach((className: string) => {\n        newClassList[className] = true;\n      });\n\n      this._elementRef.nativeElement.className = '';\n    }\n\n    this._classList = newClassList;\n  }\n  private _previousPanelClass!: string;\n\n  get triggerContext() {\n    return this._triggerContext;\n  }\n  set triggerContext(value: SbbMenuTriggerContext) {\n    if (this._triggerContext && this._triggerContext.type !== value.type) {\n      this._classList[`sbb-menu-panel-type-${this._triggerContext.type}`] = false;\n    }\n    this._classList[`sbb-menu-panel-type-${value.type}`] = true;\n    this._triggerContext = value;\n  }\n  private _triggerContext!: SbbMenuTriggerContext;\n\n  /** Event emitted when the menu is closed. */\n  @Output()\n  readonly closed: EventEmitter<SbbMenuCloseReason> = new EventEmitter<SbbMenuCloseReason>();\n\n  readonly panelId = inject(_IdGenerator).getId('sbb-menu-panel-');\n\n  /** Whether animations are currently disabled. */\n  protected _animationsDisabled: boolean =\n    inject(ANIMATION_MODULE_TYPE, { optional: true }) === 'NoopAnimations';\n\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  ngOnInit() {\n    this.setPositionClasses();\n  }\n\n  ngAfterContentInit() {\n    this._updateDirectDescendants();\n    this._keyManager = new FocusKeyManager(this._directDescendantItems)\n      .withWrap()\n      .withTypeAhead()\n      .withHomeAndEnd();\n    this._keyManager.tabOut.subscribe(() => this.closed.emit('tab'));\n\n    // If a user manually (programmatically) focuses a menu item, we need to reflect that focus\n    // change back to the key manager. Note that we don't need to unsubscribe here because _focused\n    // is internal and we know that it gets completed on destroy.\n    this._directDescendantItems.changes\n      .pipe(\n        startWith(this._directDescendantItems),\n        switchMap((items) => merge(...items.map((item: SbbMenuItem) => item._focused))),\n      )\n      .subscribe((focusedItem) => this._keyManager.updateActiveItem(focusedItem as SbbMenuItem));\n\n    this._directDescendantItems.changes.subscribe((itemsList: QueryList<SbbMenuItem>) => {\n      // Move focus to another item, if the active item is removed from the list.\n      // We need to debounce the callback, because multiple items might be removed\n      // in quick succession.\n      const manager = this._keyManager;\n\n      if (this._panelAnimationState === 'enter' && manager.activeItem?._hasFocus()) {\n        const items = itemsList.toArray();\n        const index = Math.max(0, Math.min(items.length - 1, manager.activeItemIndex || 0));\n\n        if (items[index] && !items[index].disabled) {\n          manager.setActiveItem(index);\n        } else {\n          manager.setNextItemActive();\n        }\n      }\n    });\n  }\n\n  ngOnDestroy() {\n    this._keyManager?.destroy();\n    this._directDescendantItems.destroy();\n    this.closed.complete();\n    this._firstItemFocusRef?.destroy();\n    clearTimeout(this._exitFallbackTimeout);\n  }\n\n  /** Stream that emits whenever the hovered menu item changes. */\n  _hovered(): Observable<SbbMenuItem> {\n    // Coerce the `changes` property because Angular types it as `Observable<any>`\n    const itemChanges = this._directDescendantItems.changes as Observable<QueryList<SbbMenuItem>>;\n    return itemChanges.pipe(\n      startWith(this._directDescendantItems),\n      switchMap((items) => merge(...items.map((item: SbbMenuItem) => item._hovered))),\n    ) as Observable<SbbMenuItem>;\n  }\n\n  /** Handle a keyboard event from the menu, delegating to the appropriate action. */\n  _handleKeydown(event: KeyboardEvent) {\n    const keyCode = event.keyCode;\n    const manager = this._keyManager;\n\n    switch (keyCode) {\n      case ESCAPE:\n        if (!hasModifierKey(event)) {\n          event.preventDefault();\n          this.closed.emit('keydown');\n        }\n        break;\n      case LEFT_ARROW:\n        if (this.parentMenu) {\n          this.closed.emit('keydown');\n        }\n        break;\n      default:\n        if (keyCode === UP_ARROW || keyCode === DOWN_ARROW) {\n          manager.setFocusOrigin('keyboard');\n        }\n\n        manager.onKeydown(event);\n        return;\n    }\n  }\n\n  /** Whether to display the menu header which mirrors the trigger content. */\n  _hasHeader() {\n    return !this.parentMenu && this.triggerContext && this.triggerContext.type !== 'headless';\n  }\n\n  /**\n   * Focus the first item in the menu.\n   * @param origin Action from which the focus originated. Used to set the correct styling.\n   */\n  focusFirstItem(origin: FocusOrigin = 'program'): void {\n    // Wait for `afterNextRender` to ensure iOS VoiceOver screen reader focuses the first item (#24735).\n    this._firstItemFocusRef?.destroy();\n    this._firstItemFocusRef = afterNextRender(\n      () => {\n        const menuPanel = this._resolvePanel();\n\n        // If an item in the menuPanel is already focused, avoid overriding the focus.\n        if (!menuPanel || !menuPanel.contains(document.activeElement)) {\n          const manager = this._keyManager;\n          manager.setFocusOrigin(origin).setFirstItemActive();\n\n          // If there's no active item at this point, it means that all the items are disabled.\n          // Move focus to the menu panel so keyboard events like Escape still work. Also this will\n          // give _some_ feedback to screen readers.\n          if (!manager.activeItem && menuPanel) {\n            menuPanel.focus();\n          }\n        }\n      },\n      { injector: this._injector },\n    );\n  }\n\n  /**\n   * Resets the active item in the menu. This is used when the menu is opened, allowing\n   * the user to start from the first option when pressing the down arrow.\n   */\n  resetActiveItem() {\n    this._keyManager.setActiveItem(-1);\n  }\n\n  /**\n   * Sets the menu panel elevation.\n   * @param depth Number of parent menus that come before the menu.\n   */\n  setElevation(depth: number): void {\n    // The elevation starts at the base and increases by one for each level.\n    const elevation = this._baseElevation + depth;\n    const newElevation = `${this._elevationPrefix}${elevation}`;\n    const customElevation = Object.keys(this._classList).find((className) =>\n      className.startsWith(this._elevationPrefix),\n    );\n\n    if (!customElevation || customElevation === this._previousElevation) {\n      const newClassList = { ...this._classList };\n      if (this._previousElevation) {\n        newClassList[this._previousElevation] = false;\n      }\n\n      newClassList[newElevation] = true;\n      this._previousElevation = newElevation;\n      this._classList = newClassList;\n    }\n  }\n\n  /**\n   * Adds classes to the menu panel based on its position. Can be used by\n   * consumers to add specific styling based on the position.\n   * @param posX Position of the menu along the x axis.\n   * @param posY Position of the menu along the y axis.\n   * @docs-private\n   */\n  setPositionClasses(\n    posX: SbbMenuPositionX = this.xPosition,\n    posY: SbbMenuPositionY = this.yPosition,\n  ) {\n    this._classList = {\n      ...this._classList,\n      ['sbb-menu-panel-before']: posX === 'before',\n      ['sbb-menu-panel-after']: posX === 'after',\n      ['sbb-menu-panel-above']: posY === 'above',\n      ['sbb-menu-panel-below']: posY === 'below',\n    };\n\n    this._changeDetectorRef.markForCheck();\n  }\n\n  /** Callback that is invoked when the panel animation completes. */\n  protected _onAnimationDone(state: string) {\n    const isExit = state === EXIT_ANIMATION;\n\n    if (isExit || state === ENTER_ANIMATION) {\n      if (isExit) {\n        clearTimeout(this._exitFallbackTimeout);\n        this._exitFallbackTimeout = undefined;\n      }\n      this._animationDone.next(isExit ? 'void' : 'enter');\n      this._isAnimating.set(false);\n    }\n  }\n\n  protected _onAnimationStart(state: string) {\n    if (state === ENTER_ANIMATION || state === EXIT_ANIMATION) {\n      this._isAnimating.set(true);\n    }\n  }\n\n  _setIsOpen(isOpen: boolean) {\n    this._panelAnimationState = isOpen ? 'enter' : 'void';\n\n    if (isOpen) {\n      if (this._keyManager.activeItemIndex === 0) {\n        // Scroll the content element to the top as soon as the animation starts. This is necessary,\n        // because we move focus to the first item while it's still being animated, which can throw\n        // the browser off when it determines the scroll position. Alternatively we can move focus\n        // when the animation is done, however moving focus asynchronously will interrupt screen\n        // readers which are in the process of reading out the menu already. We take the `element`\n        // from the `event` since we can't use a `ViewChild` to access the pane.\n        const menuPanel = this._resolvePanel();\n\n        if (menuPanel) {\n          menuPanel.scrollTop = 0;\n        }\n      }\n    } else if (!this._animationsDisabled) {\n      // Some apps do `* { animation: none !important; }` in tests which will prevent the\n      // `animationend` event from firing. Since the exit animation is loading-bearing for\n      // removing the content from the DOM, add a fallback timer.\n      this._exitFallbackTimeout = setTimeout(() => this._onAnimationDone(EXIT_ANIMATION), 200);\n    }\n\n    // Animation events won't fire when animations are disabled so we simulate them.\n    if (this._animationsDisabled) {\n      setTimeout(() => {\n        this._onAnimationDone(isOpen ? ENTER_ANIMATION : EXIT_ANIMATION);\n      });\n    }\n    this._changeDetectorRef.markForCheck();\n  }\n\n  /** Gets the menu panel DOM node. */\n  private _resolvePanel(): HTMLElement | null {\n    let menuPanel: HTMLElement | null = null;\n\n    if (this._directDescendantItems.length) {\n      // Because the `mat-menuPanel` is at the DOM insertion point, not inside the overlay, we don't\n      // have a nice way of getting a hold of the menuPanel panel. We can't use a `ViewChild` either\n      // because the panel is inside an `ng-template`. We work around it by starting from one of\n      // the items and walking up the DOM.\n      menuPanel = this._directDescendantItems.first!._getHostElement().closest('[role=\"menu\"]');\n    }\n    return menuPanel;\n  }\n\n  /**\n   * Sets up a stream that will keep track of any newly-added menu items and will update the list\n   * of direct descendants. We collect the descendants this way, because `_allItems` can include\n   * items that are part of child menus, and using a custom way of registering items is unreliable\n   * when it comes to maintaining the item order.\n   */\n  private _updateDirectDescendants() {\n    this._allItems.changes\n      .pipe(startWith(this._allItems))\n      .subscribe((items: QueryList<SbbMenuItem>) => {\n        this._directDescendantItems.reset(items.filter((item) => item._parentMenu === this));\n        this._directDescendantItems.notifyOnChanges();\n      });\n  }\n}\n","<ng-template>\n  <div\n    class=\"sbb-menu-panel-wrapper\"\n    [id]=\"panelId\"\n    [class]=\"_classList\"\n    (click)=\"closed.emit('click')\"\n    [class.sbb-menu-panel-animations-disabled]=\"_animationsDisabled\"\n    [class.sbb-menu-panel-exit-animation]=\"_panelAnimationState === 'void'\"\n    [class.sbb-menu-panel-animating]=\"_isAnimating()\"\n    [style.--sbb-menu-trigger-width.px]=\"triggerContext ? triggerContext.width : 0\"\n    [style.--sbb-menu-trigger-height.px]=\"triggerContext ? triggerContext.height : 0\"\n    tabindex=\"-1\"\n    role=\"menu\"\n    (animationstart)=\"_onAnimationStart($event.animationName)\"\n    (animationend)=\"_onAnimationDone($event.animationName)\"\n    (animationcancel)=\"_onAnimationDone($event.animationName)\"\n    [attr.aria-label]=\"ariaLabel || null\"\n    [attr.aria-labelledby]=\"ariaLabelledby || null\"\n    [attr.aria-describedby]=\"ariaDescribedby || null\"\n  >\n    @if (_hasHeader()) {\n      @if (!triggerContext.templateContent) {\n        <button\n          type=\"button\"\n          class=\"sbb-menu-panel-trigger\"\n          [innerHTML]=\"triggerContext.elementContent\"\n          aria-hidden=\"true\"\n        ></button>\n      }\n      @if (triggerContext.templateContent) {\n        <button type=\"button\" class=\"sbb-menu-panel-trigger\" aria-hidden=\"true\">\n          <ng-template [ngTemplateOutlet]=\"triggerContext.templateContent\"></ng-template>\n        </button>\n      }\n    }\n    <div\n      class=\"sbb-panel sbb-panel-padded sbb-menu-panel sbb-menu-content sbb-scrollbar\"\n      [class.sbb-menu-panel-root]=\"!parentMenu\"\n    >\n      <div class=\"sbb-menu-panel-content\">\n        <ng-content></ng-content>\n      </div>\n    </div>\n  </div>\n</ng-template>\n","import {\n  FocusMonitor,\n  FocusOrigin,\n  isFakeMousedownFromScreenReader,\n  isFakeTouchstartFromScreenReader,\n} from '@angular/cdk/a11y';\nimport { ENTER, RIGHT_ARROW, SPACE } from '@angular/cdk/keycodes';\nimport { BreakpointObserver, BreakpointState } from '@angular/cdk/layout';\nimport {\n  FlexibleConnectedPositionStrategy,\n  HorizontalConnectionPos,\n  Overlay,\n  OverlayConfig,\n  OverlayRef,\n  ScrollStrategy,\n  VerticalConnectionPos,\n} from '@angular/cdk/overlay';\nimport { normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport {\n  AfterContentInit,\n  ChangeDetectorRef,\n  ContentChild,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  inject,\n  InjectionToken,\n  Input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Output,\n  TemplateRef,\n  ViewContainerRef,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport {\n  Breakpoints,\n  mixinVariant,\n  SCALING_FACTOR_4K,\n  SCALING_FACTOR_5K,\n} from '@sbb-esta/angular/core';\nimport { merge, Observable, of as observableOf, Subscription } from 'rxjs';\nimport { filter, take, takeUntil } from 'rxjs/operators';\n\nimport { SbbMenu, SbbMenuAnimationState, SbbMenuCloseReason } from './menu';\nimport { SbbMenuDynamicTrigger } from './menu-dynamic-trigger';\nimport { throwSbbMenuRecursiveError } from './menu-errors';\nimport { SbbMenuItem } from './menu-item';\nimport { SbbMenuPanel, SBB_MENU_PANEL } from './menu-panel';\nimport { SbbMenuPositionX, SbbMenuPositionY } from './menu-positions';\n\nexport type SbbMenuTriggerType = 'default' | 'headless' | 'breadcrumb' | 'usermenu' | 'contextmenu';\n\nexport interface SbbMenuTriggerContext extends SbbMenuInheritedTriggerContext {\n  width?: number;\n  height?: number;\n  scalingFactor?: number;\n  templateContent?: TemplateRef<any>;\n  elementContent?: SafeHtml;\n}\n\nexport interface SbbMenuInheritedTriggerContext {\n  type: SbbMenuTriggerType;\n  xPosition?: SbbMenuPositionX;\n  yPosition?: SbbMenuPositionY;\n  xOffset?: number;\n  yOffset?: number;\n  panelWidth?: number;\n  animationStartStateResolver?: (context: SbbMenuTriggerContext) => SbbMenuAnimationState;\n}\n\n/** Injection token for SbbMenuInheritedTriggerContext */\nexport const SBB_MENU_INHERITED_TRIGGER_CONTEXT =\n  new InjectionToken<SbbMenuInheritedTriggerContext>('sbb-menu-inherited-trigger-context');\n\n/** Injection token that determines the scroll handling while the menu is open. */\nexport const SBB_MENU_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(\n  'sbb-menu-scroll-strategy',\n  {\n    providedIn: 'root',\n    factory: () => {\n      const overlay = inject(Overlay);\n      return () => overlay.scrollStrategies.reposition();\n    },\n  },\n);\n\n/** Default left overlapping of the submenu panel. */\nconst SUBMENU_PANEL_LEFT_OVERLAP = 3;\n\n/** Options for binding a passive event listener. */\nconst passiveEventListenerOptions = normalizePassiveListenerOptions({ passive: true });\n\n// Boilerplate for applying mixins to SbbMenu.\nconst _SbbMenuTriggerMixinBase = mixinVariant(class {});\n\n/** Mapping between menu panels and the last trigger that opened them. */\nconst PANELS_TO_TRIGGERS = new WeakMap<SbbMenuPanel, SbbMenuTrigger>();\n\n/** Directive applied to an element that should trigger a `sbb-menu`. */\n@Directive({\n  selector: `[sbbMenuTriggerFor], [sbbMenuHeadlessTriggerFor]`,\n  host: {\n    class: 'sbb-menu-trigger sbb-icon-fit',\n    '[attr.aria-haspopup]': 'menu ? \"menu\" : null',\n    '[attr.aria-expanded]': 'menuOpen',\n    '[attr.aria-controls]': 'menuOpen ? menu?.panelId : null',\n    '[class.sbb-menu-trigger-root]': '!_parentSbbMenu',\n    '[class.sbb-menu-trigger-menu-open]': 'menuOpen',\n    '(click)': '_handleClick($event)',\n    '(mousedown)': '_handleMousedown($event)',\n    '(keydown)': '_handleKeydown($event)',\n  },\n  exportAs: 'sbbMenuTrigger',\n})\nexport class SbbMenuTrigger\n  extends _SbbMenuTriggerMixinBase\n  implements OnInit, AfterContentInit, OnDestroy\n{\n  private _overlay = inject(Overlay);\n  private _element = inject<ElementRef<HTMLElement>>(ElementRef);\n  private _viewContainerRef = inject(ViewContainerRef);\n  private _inheritedTriggerContext = inject<SbbMenuInheritedTriggerContext>(\n    SBB_MENU_INHERITED_TRIGGER_CONTEXT,\n    { optional: true },\n  )!;\n  private _menuItemInstance = inject(SbbMenuItem, { optional: true, self: true })!;\n  private _focusMonitor = inject(FocusMonitor);\n  private _sanitizer = inject(DomSanitizer);\n  private _breakpointObserver = inject(BreakpointObserver);\n  private _changeDetectorRef = inject(ChangeDetectorRef);\n  private _ngZone = inject(NgZone);\n\n  private _portal!: TemplatePortal;\n  private _overlayRef: OverlayRef | null = null;\n  private _menuOpen: boolean = false;\n  private _breakpointSubscription = Subscription.EMPTY;\n  private _closingActionsSubscription = Subscription.EMPTY;\n  private _hoverSubscription = Subscription.EMPTY;\n  private _menuCloseSubscription = Subscription.EMPTY;\n  private _scrollStrategy = inject(SBB_MENU_SCROLL_STRATEGY);\n  private _pendingRemoval: Subscription | undefined;\n\n  /**\n   * We're specifically looking for a `SbbMenu` here since the generic `SbbMenuPanel`\n   * interface lacks some functionality around nested menus and animations.\n   */\n  _parentSbbMenu: SbbMenu | undefined;\n\n  /**\n   * Handles touch start events on the trigger.\n   * Needs to be an arrow function so we can easily use addEventListener and removeEventListener.\n   */\n  private _handleTouchStart = (event: TouchEvent) => {\n    if (!isFakeTouchstartFromScreenReader(event)) {\n      this._openedBy = 'touch';\n    }\n  };\n\n  // Tracking input type is necessary so it's possible to only auto-focus\n  // the first item of the list when the menu is opened via the keyboard\n  _openedBy: Exclude<FocusOrigin, 'program' | null> | undefined = undefined;\n\n  /** Variant of which trigger is used. */\n  _type: SbbMenuTriggerType = this._inheritedTriggerContext?.type || 'default';\n\n  /** References the menu instance that the headless trigger is associated with. */\n  @Input('sbbMenuHeadlessTriggerFor')\n  set sbbMenuHeadlessTriggerFor(menu: SbbMenuPanel | null) {\n    this._type = 'headless';\n    this._setMenu(menu);\n  }\n\n  /** References the menu instance that the trigger is associated with. */\n  @Input('sbbMenuTriggerFor')\n  get menu(): SbbMenuPanel | null {\n    return this._menu;\n  }\n  set menu(menu: SbbMenuPanel | null) {\n    this._setMenu(menu);\n    if (menu) {\n      menu.overlapTrigger = true;\n    }\n  }\n  private _menu: SbbMenuPanel | null = null;\n\n  /** Inits the menu for the different trigger types. Method is intentionally placed after corresponding inputs. */\n  private _setMenu(menu: SbbMenuPanel | null) {\n    if (menu === this._menu) {\n      return;\n    }\n\n    this._menu = menu;\n    this._menuCloseSubscription.unsubscribe();\n\n    if (menu) {\n      if (menu === this._parentSbbMenu && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n        throwSbbMenuRecursiveError();\n      }\n\n      this._menuCloseSubscription = menu.closed.subscribe((reason: SbbMenuCloseReason) => {\n        this._destroyMenu(reason);\n\n        // If a click closed the menu, we should close the entire chain of nested menus.\n        if ((reason === 'click' || reason === 'tab') && this._parentSbbMenu) {\n          this._parentSbbMenu.closed.emit(reason);\n        }\n      });\n    }\n  }\n\n  /** Data to be passed along to any lazily-rendered content. */\n  @Input('sbbMenuTriggerData') menuData: any;\n\n  /**\n   * Whether focus should be restored when the menu is closed.\n   * Note that disabling this option can have accessibility implications\n   * and it's up to you to manage focus, if you decide to turn it off.\n   */\n  @Input('sbbMenuTriggerRestoreFocus') restoreFocus: boolean = true;\n\n  /** Event emitted when the associated menu is opened. */\n  @Output() readonly menuOpened: EventEmitter<void> = new EventEmitter<void>();\n\n  /** Event emitted when the associated menu is closed. */\n  @Output() readonly menuClosed: EventEmitter<void> = new EventEmitter<void>();\n\n  @ContentChild(SbbMenuDynamicTrigger, { read: TemplateRef })\n  _triggerContent!: TemplateRef<any>;\n\n  private _scalingFactor: number = 1;\n\n  constructor(...args: unknown[]);\n\n  constructor() {\n    const parentMenu = inject<SbbMenuPanel>(SBB_MENU_PANEL, { optional: true })!;\n\n    super();\n    const _element = this._element;\n    const _menuItemInstance = this._menuItemInstance;\n\n    this._parentSbbMenu = parentMenu instanceof SbbMenu ? parentMenu : undefined;\n\n    _element.nativeElement.addEventListener(\n      'touchstart',\n      this._handleTouchStart,\n      passiveEventListenerOptions,\n    );\n\n    if (_menuItemInstance) {\n      _menuItemInstance._triggersSubmenu = this.triggersSubmenu();\n    }\n\n    this._breakpointSubscription = this._breakpointObserver\n      .observe([Breakpoints.Desktop4k, Breakpoints.Desktop5k])\n      .subscribe((result: BreakpointState) => {\n        this._scalingFactor = 1;\n\n        if (result.matches) {\n          if (result.breakpoints[Breakpoints.Desktop4k]) {\n            this._scalingFactor = SCALING_FACTOR_4K;\n          }\n          if (result.breakpoints[Breakpoints.Desktop5k]) {\n            this._scalingFactor = SCALING_FACTOR_5K;\n          }\n        }\n      });\n  }\n\n  ngOnInit(): void {\n    this._element.nativeElement.classList.add(`sbb-menu-trigger-${this._type}`);\n  }\n\n  ngAfterContentInit() {\n    this._handleHover();\n  }\n\n  ngOnDestroy() {\n    if (this.menu && this._ownsMenu(this.menu)) {\n      PANELS_TO_TRIGGERS.delete(this.menu);\n    }\n\n    this._element.nativeElement.removeEventListener(\n      'touchstart',\n      this._handleTouchStart,\n      passiveEventListenerOptions,\n    );\n\n    this._menuCloseSubscription.unsubscribe();\n    this._closingActionsSubscription.unsubscribe();\n    this._hoverSubscription.unsubscribe();\n    this._breakpointSubscription.unsubscribe();\n    this._pendingRemoval?.unsubscribe();\n\n    if (this._overlayRef) {\n      this._overlayRef.dispose();\n      this._overlayRef = null;\n    }\n  }\n\n  /** Whether the menu is open. */\n  get menuOpen(): boolean {\n    return this._menuOpen;\n  }\n\n  /** Whether the menu triggers a sub-menu or a top-level one. */\n  triggersSubmenu(): boolean {\n    return !!(this._menuItemInstance && this._parentSbbMenu);\n  }\n\n  /** Toggles the menu between the open and closed states. */\n  toggleMenu(): void {\n    return this._menuOpen ? this.closeMenu() : this.openMenu();\n  }\n\n  /** Opens the menu. */\n  openMenu(): void {\n    // Auto focus by default\n    this._openMenu(true);\n  }\n\n  /** Internal method to open menu providing option to auto focus on first item. */\n  private _openMenu(autoFocus: boolean): void {\n    const menu = this.menu;\n\n    if (this._menuOpen || !menu) {\n      return;\n    }\n\n    this._pendingRemoval?.unsubscribe();\n    const previousTrigger = PANELS_TO_TRIGGERS.get(menu);\n    PANELS_TO_TRIGGERS.set(menu, this);\n\n    // If the same menu is currently attached to another trigger,\n    // we need to close it so it doesn't end up in a broken state.\n    if (previousTrigger && previousTrigger !== this) {\n      previousTrigger.closeMenu();\n    }\n\n    const triggerContext: SbbMenuTriggerContext =\n      this._type === 'headless' || this.triggersSubmenu()\n        ? { type: this._type }\n        : {\n            width: this._element.nativeElement.clientWidth,\n            height: this._element.nativeElement.clientHeight,\n            templateContent: this._triggerContent,\n            elementContent: this._triggerContent\n              ? undefined\n              : this._element.nativeElement.childElementCount === 0\n                ? this._element.nativeElement.innerText\n                : this._sanitizer.bypassSecurityTrustHtml(this._element.nativeElement.innerHTML),\n            type: this._type,\n            scalingFactor: this._scalingFactor,\n          };\n\n    menu.triggerContext = { ...triggerContext, ...this._inheritedTriggerContext };\n\n    const overlayRef = this._createOverlay(menu);\n    const overlayConfig = overlayRef.getConfig();\n    const positionStrategy = overlayConfig.positionStrategy as FlexibleConnectedPositionStrategy;\n\n    this._setPosition(menu, positionStrategy);\n    overlayConfig.hasBackdrop =\n      menu.hasBackdrop == null ? !this.triggersSubmenu() : menu.hasBackdrop;\n\n    // We need the `hasAttached` check for the case where the user kicked off a removal animation,\n    // but re-entered the menu. Re-attaching the same portal will trigger an error otherwise.\n    if (!overlayRef.hasAttached()) {\n      overlayRef.attach(this._getPortal(menu));\n      menu.lazyContent?.attach(this.menuData);\n    }\n\n    this._closingActionsSubscription = this._menuClosingActions().subscribe(() => this.closeMenu());\n    menu.parentMenu = this.triggersSubmenu() ? this._parentSbbMenu : undefined;\n    if (autoFocus) {\n      menu.focusFirstItem(this._openedBy || 'program');\n    }\n    this._setMenuElevation(menu);\n    this._setIsMenuOpen(true);\n\n    if (menu instanceof SbbMenu) {\n      menu._setIsOpen(true);\n      menu._directDescendantItems.changes.pipe(takeUntil(menu.closed)).subscribe(() => {\n        // Re-adjust the position without locking when the amount of items\n        // changes so that the overlay is allowed to pick a new optimal position.\n        positionStrategy.withLockedPosition(false).reapplyLastPosition();\n        positionStrategy.withLockedPosition(true);\n      });\n    }\n  }\n\n  /** Closes the menu. */\n  closeMenu(): void {\n    this.menu?.closed.emit();\n  }\n\n  /**\n   * Focuses the menu trigger.\n   * @param origin Source of the menu trigger's focus.\n   */\n  focus(origin?: FocusOrigin, options?: FocusOptions) {\n    if (origin) {\n      this._focusMonitor.focusVia(this._element, origin, options);\n    } else {\n      this._element.nativeElement.focus(options);\n    }\n  }\n\n  /**\n   * Updates the position of the menu to ensure that it fits all options within the viewport.\n   */\n  updatePosition(): void {\n    this._overlayRef?.updatePosition();\n  }\n\n  /** Closes the menu and does the necessary cleanup. */\n  private _destroyMenu(reason: SbbMenuCloseReason) {\n    const overlayRef = this._overlayRef;\n    const menu = this._menu;\n\n    if (!overlayRef || !this.menuOpen) {\n      return;\n    }\n\n    this._closingActionsSubscription.unsubscribe();\n    this._pendingRemoval?.unsubscribe();\n\n    // Note that we don't wait for the animation to finish if another trigger took\n    // over the menu, because the panel will end up empty which looks glitchy.\n    if (menu instanceof SbbMenu && this._ownsMenu(menu)) {\n      this._pendingRemoval = menu._animationDone.pipe(take(1)).subscribe(() => {\n        overlayRef.detach();\n        menu.lazyContent?.detach();\n      });\n      menu._setIsOpen(false);\n    } else {\n      overlayRef.detach();\n      menu?.lazyContent?.detach();\n    }\n\n    if (menu && this._ownsMenu(menu)) {\n      PANELS_TO_TRIGGERS.delete(menu);\n    }\n\n    // Always restore focus if the user is navigating using the keyboard or the menu was opened\n    // programmatically. We don't restore for non-root triggers, because it can prevent focus\n    // from making it back to the root trigger when closing a long chain of menus by clicking\n    // on the backdrop.\n    if (this.restoreFocus && (reason === 'keydown' || !this._openedBy || !this.triggersSubmenu())) {\n      this.focus(this._openedBy);\n    }\n\n    this._openedBy = undefined;\n    this._setIsMenuOpen(false);\n  }\n\n  /** Updates the menu elevation based on the amount of parent menus that it has. */\n  private _setMenuElevation(menu: SbbMenuPanel): void {\n    if (menu.setElevation) {\n      let depth = 0;\n      let parentMenu = menu.parentMenu;\n\n      while (parentMenu) {\n        depth++;\n        parentMenu = parentMenu.parentMenu;\n      }\n\n      menu.setElevation(depth);\n    }\n  }\n\n  // Set state rather than toggle to support triggers sharing a menu\n  private _setIsMenuOpen(isOpen: boolean): void {\n    if (isOpen !== this._menuOpen) {\n      this._menuOpen = isOpen;\n      this._menuOpen ? this.menuOpened.emit() : this.menuClosed.emit();\n\n      if (this.triggersSubmenu()) {\n        this._menuItemInstance._setHighlighted(isOpen);\n      }\n      this._changeDetectorRef.markForCheck();\n    }\n  }\n\n  /**\n   * This method creates the overlay from the provided menu's template and saves its\n   * OverlayRef so that it can be attached to the DOM when openMenu is called.\n   */\n  private _createOverlay(menu: SbbMenuPanel): OverlayRef {\n    if (!this._overlayRef) {\n      const config = this._getOverlayConfig(menu);\n      this._subscribeToPositions(\n        menu,\n        config.positionStrategy as FlexibleConnectedPositionStrategy,\n      );\n      this._overlayRef = this._overlay.create(config);\n\n      this._overlayRef.keydownEvents().subscribe((event) => {\n        if (this.menu instanceof SbbMenu) {\n          this.menu._handleKeydown(event);\n        }\n      });\n    }\n\n    return this._overlayRef;\n  }\n\n  /**\n   * This method builds the configuration object needed to create the overlay, the OverlayState.\n   * @returns OverlayConfig\n   */\n  private _getOverlayConfig(menu: SbbMenuPanel): OverlayConfig {\n    return new OverlayConfig({\n      positionStrategy: this._overlay\n        .position()\n        .flexibleConnectedTo(this._element)\n        .withLockedPosition()\n        .withGrowAfterOpen()\n        .withTransformOriginOn('.sbb-menu-panel-wrapper')\n        .withPush(false),\n      backdropClass: menu.backdropClass || 'cdk-overlay-transparent-backdrop',\n      panelClass: menu.overlayPanelClass,\n      scrollStrategy: this._scrollStrategy(),\n    });\n  }\n\n  /**\n   * Listens to changes in the position of the overlay and sets the correct classes\n   * on the menu based on the new position. This ensures the animation origin is always\n   * correct, even if a fallback position is used for the overlay.\n   */\n  private _subscribeToPositions(menu: SbbMenuPanel, position: FlexibleConnectedPositionStrategy) {\n    if (menu.setPositionClasses) {\n      position.positionChanges.subscribe((change) => {\n        const posX: SbbMenuPositionX =\n          change.connectionPair.overlayX === 'start' ? 'after' : 'before';\n        const posY: SbbMenuPositionY = change.connectionPair.overlayY === 'top' ? 'below' : 'above';\n\n        this._element.nativeElement.classList.remove('sbb-menu-trigger-after');\n        this._element.nativeElement.classList.remove('sbb-menu-trigger-before');\n        this._element.nativeElement.classList.remove('sbb-menu-trigger-below');\n        this._element.nativeElement.classList.remove('sbb-menu-trigger-above');\n        this._element.nativeElement.classList.add(`sbb-menu-trigger-${posX}`);\n        this._element.nativeElement.classList.add(`sbb-menu-trigger-${posY}`);\n\n        this._ngZone.run(() => menu.setPositionClasses!(posX, posY));\n      });\n    }\n  }\n\n  /**\n   * Sets the appropriate positions on a position strategy\n   * so the overlay connects with the trigger correctly.\n   * @param positionStrategy Strategy whose position to update.\n   */\n  private _setPosition(menu: SbbMenuPanel, positionStrategy: FlexibleConnectedPositionStrategy) {\n    let [originX, originFallbackX]: HorizontalConnectionPos[] =\n      menu.xPosition === 'before' || this._inheritedTriggerContext?.xPosition === 'before'\n        ? ['end', 'start']\n        : ['start', 'end'];\n\n    const [overlayY, overlayFallbackY]: VerticalConnectionPos[] =\n      (!menu.yPosition && !this._inheritedTriggerContext?.yPosition) ||\n      menu.yPosition === 'below' ||\n      this._inheritedTriggerContext?.yPosition === 'below'\n        ? ['top', 'bottom']\n        : ['bottom', 'top'];\n\n    let [originY, originFallbackY] = [overlayY, overlayFallbackY];\n    let [overlayX, overlayFallbackX] = [originX, originFallbackX];\n\n    let offsetX = this._inheritedTriggerContext?.xOffset || 0;\n    let offsetY = this._inheritedTriggerContext?.yOffset || 0;\n\n    if (this.triggersSubmenu()) {\n      // When the menu is a sub-menu, it should always align itself\n      // to the edges of the trigger, instead of overlapping it.\n      overlayFallbackX = originX = menu.xPosition === 'before' ? 'start' : 'end';\n      originFallbackX = overlayX = originX === 'end' ? 'start' : 'end';\n      offsetX = -SUBMENU_PANEL_LEFT_OVERLAP;\n    } else if (!menu.overlapTrigger) {\n      originY = overlayY === 'top' ? 'bottom' : 'top';\n      originFallbackY = overlayFallbackY === 'top' ? 'bottom' : 'top';\n    }\n\n    // Set sign whether panel is above, below, before or after\n    offsetX = offsetX * (overlayX === 'end' ? -1 : 1);\n    offsetY = offsetY * (overlayY === 'bottom' ? -1 : 1);\n\n    // Apply scaling factor if variant is standard\n    if (this.variantSnapshot === 'standard') {\n      offsetX = offsetX * this._scalingFactor;\n      offsetY = offsetY * this._scalingFactor;\n    }\n\n    positionStrategy.withPositions([\n      {\n        originX,\n        originY,\n        overlayX,\n        overlayY,\n        offsetY,\n        offsetX,\n      },\n      {\n        originX: originFallbackX,\n        originY,\n        overlayX: overlayFallbackX,\n        overlayY,\n        offsetY,\n        offsetX: -offsetX,\n      },\n      {\n        originX,\n        originY: originFallbackY,\n        overlayX,\n        overlayY: overlayFallbackY,\n        offsetY: -offsetY,\n        offsetX: offsetX,\n      },\n      {\n        originX: originFallbackX,\n        originY: originFallbackY,\n        overlayX: overlayFallbackX,\n        overlayY: overlayFallbackY,\n        offsetY: -offsetY,\n        offsetX: -offsetX,\n      },\n    ]);\n  }\n\n  /** Returns a stream that emits whenever an action that should close the menu occurs. */\n  private _menuClosingActions() {\n    const backdrop = this._overlayRef!.backdropClick();\n    const detachments = this._overlayRef!.detachments();\n    const parentClose = this._parentSbbMenu ? this._parentSbbMenu.closed : observableOf();\n    const hover = this._parentSbbMenu\n      ? this._parentSbbMenu\n          ._hovered()\n          .pipe(filter((active) => this._menuOpen && active !== this._menuItemInstance))\n      : observableOf();\n\n    return merge(backdrop, parentClose as Observable<SbbMenuCloseReason>, hover, detachments);\n  }\n\n  /** Handles mouse presses on the trigger. */\n  _handleMousedown(event: MouseEvent): void {\n    if (!isFakeMousedownFromScreenReader(event)) {\n      // Since right or middle button clicks won't trigger the `click` event,\n      // we shouldn't consider the menu as opened by mouse in those cases.\n      this._openedBy = event.button === 0 ? 'mouse' : undefined;\n\n      // Since clicking on the trigger won't close the menu if it opens a sub-menu,\n      // we should prevent focus from moving onto it via click to avoid the\n      // highlight from lingering on the menu item.\n      if (this.triggersSubmenu()) {\n        event.preventDefault();\n      }\n    }\n  }\n\n  /** Handles key presses on the trigger. */\n  _handleKeydown(event: KeyboardEvent): void {\n    const keyCode = event.keyCode;\n\n    // Pressing enter on the trigger will trigger the click handler later.\n    if (keyCode === ENTER || keyCode === SPACE) {\n      this._openedBy = 'keyboard';\n    }\n\n    if (this.triggersSubmenu() && keyCode === RIGHT_ARROW) {\n      this._openedBy = 'keyboard';\n      this.openMenu();\n    }\n  }\n\n  /** Handles click events on the trigger. */\n  _handleClick(event: MouseEvent): void {\n    if (this.triggersSubmenu()) {\n      // Stop event propagation to avoid closing the parent menu.\n      event.stopPropagation();\n      this.openMenu();\n    } else {\n      this.toggleMenu();\n    }\n  }\n\n  /** Handles the cases where the user hovers over the trigger. */\n  private _handleHover() {\n    // Subscribe to changes in the hovered item in order to toggle the panel.\n    if (this.triggersSubmenu() && this._parentSbbMenu) {\n      this._hoverSubscription = this._parentSbbMenu._hovered().subscribe((active) => {\n        if (\n          active === this._menuItemInstance &&\n          !active.disabled &&\n          // Ignore hover events if the parent menu is in the process of being closed (see #31956).\n          this._parentSbbMenu?._panelAnimationState !== 'void'\n        ) {\n          this._openedBy = 'mouse';\n\n          // Open the menu, but do NOT auto-focus on first item when just hovering.\n          // When VoiceOver is enabled, this is particularly confusing as the focus will\n          // cause another hover event, and continue opening sub-menus without interaction.\n          this._openMenu(false);\n        }\n      });\n    }\n  }\n\n  /** Gets the portal that should be attached to the overlay. */\n  private _getPortal(menu: SbbMenuPanel): TemplatePortal {\n    // Note that we can avoid this check by keeping the portal on the menu panel.\n    // While it would be cleaner, we'd have to introduce another required method on\n    // `SbbMenuPanel`, making it harder to consume.\n    if (!this._portal || this._portal.templateRef !== menu.templateRef) {\n      this._portal = new TemplatePortal(menu.templateRef, this._viewContainerRef);\n    }\n\n    return this._portal;\n  }\n\n  /**\n   * Determines whether the trigger owns a specific menu panel, at the current point in time.\n   * This allows us to distinguish the case where the same panel is passed into multiple triggers\n   * and multiple are open at a time.\n   */\n  private _ownsMenu(menu: SbbMenuPanel): boolean {\n    return PANELS_TO_TRIGGERS.get(menu) === this;\n  }\n}\n","import { Component, Input } from '@angular/core';\nimport { SbbIcon } from '@sbb-esta/angular/icon';\n\nimport { SbbMenuDynamicTrigger } from './menu-dynamic-trigger';\nimport {\n  SbbMenuInheritedTriggerContext,\n  SbbMenuTrigger,\n  SBB_MENU_INHERITED_TRIGGER_CONTEXT,\n} from './menu-trigger';\n\nexport const _sbbContextmenuInheritedTriggerContext: SbbMenuInheritedTriggerContext = {\n  type: 'contextmenu',\n  xPosition: 'before',\n};\n\n/** Directive applied to an element that should trigger a `sbb-menu`. */\n@Component({\n  template: '<sbb-icon *sbbMenuDynamicTrigger [svgIcon]=\"svgIcon\"></sbb-icon>',\n  selector: `button[sbbContextmenuTriggerFor]`,\n  inputs: ['menu: sbbContextmenuTriggerFor'],\n  exportAs: 'sbbContextmenuTrigger',\n  providers: [\n    {\n      provide: SBB_MENU_INHERITED_TRIGGER_CONTEXT,\n      useValue: _sbbContextmenuInheritedTriggerContext,\n    },\n    {\n      provide: SbbMenuTrigger,\n      useExisting: SbbContextmenuTrigger,\n    },\n  ],\n  imports: [SbbMenuDynamicTrigger, SbbIcon],\n})\nexport class SbbContextmenuTrigger extends SbbMenuTrigger {\n  /**\n   * Custom trigger icon.\n   * Must be a valid svgIcon input for sbb-icon.\n   *\n   * e.g. svgIcon=\"plus-small\"\n   */\n  @Input() svgIcon: string = 'context-menu-small';\n}\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\nimport { NgModule } from '@angular/core';\nimport { SbbCommonModule } from '@sbb-esta/angular/core';\nimport { SbbIconModule } from '@sbb-esta/angular/icon';\n\nimport { SbbContextmenuTrigger } from './contextmenu-trigger';\nimport { SbbMenu } from './menu';\nimport { SbbMenuContent } from './menu-content';\nimport { SbbMenuDynamicTrigger } from './menu-dynamic-trigger';\nimport { SbbMenuItem } from './menu-item';\nimport { SbbMenuTrigger } from './menu-trigger';\n\n@NgModule({\n  imports: [\n    OverlayModule,\n    PortalModule,\n    SbbCommonModule,\n    SbbIconModule,\n    SbbMenu,\n    SbbMenuItem,\n    SbbMenuTrigger,\n    SbbContextmenuTrigger,\n    SbbMenuDynamicTrigger,\n    SbbMenuContent,\n  ],\n  exports: [\n    CdkScrollableModule,\n    SbbMenu,\n    SbbMenuItem,\n    SbbMenuTrigger,\n    SbbContextmenuTrigger,\n    SbbMenuDynamicTrigger,\n    SbbMenuContent,\n  ],\n})\nexport class SbbMenuModule {}\n"],"names":["observableOf"],"mappings":";;;;;;;;;;;;;;;;MAMa,qBAAqB,CAAA;AACvB,EAAA,YAAY,GAAG,MAAM,CAAmB,WAAW,CAAC;AAG7D,EAAA,WAAA,GAAA;AACE,IAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY;AACtC,IAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAEjD,IAAA,gBAAgB,CAAC,kBAAkB,CAAC,YAAY,CAAC;AACnD,EAAA;;;;;UATW,qBAAqB;AAAA,IAAA,IAAA,EAAA,EAAA;AAAA,IAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA;AAAA,GAAA,CAAA;;;;UAArB,qBAAqB;AAAA,IAAA,YAAA,EAAA,IAAA;AAAA,IAAA,QAAA,EAAA,yBAAA;IAAA,QAAA,EAAA,CAAA,uBAAA,CAAA;AAAA,IAAA,QAAA,EAAA;AAAA,GAAA,CAAA;;;;;;QAArB,qBAAqB;AAAA,EAAA,UAAA,EAAA,CAAA;UAJjC,SAAS;AAAC,IAAA,IAAA,EAAA,CAAA;AACT,MAAA,QAAQ,EAAE,CAAA,uBAAA,CAAyB;AACnC,MAAA,QAAQ,EAAE;KACX;;;;;MCeY,gBAAgB,GAAG,IAAI,cAAc,CAAiB,gBAAgB;MAStE,cAAc,CAAA;AACjB,EAAA,SAAS,GAAG,MAAM,CAAmB,WAAW,CAAC;AACjD,EAAA,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC;AAChC,EAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC5B,EAAA,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC5C,EAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC5B,EAAA,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC;EAE9C,OAAO;EACP,OAAO;AAGN,EAAA,SAAS,GAAkB,IAAI,OAAO,EAAQ;AAGvD,EAAA,WAAA,GAAA,CAAe;AAMf,EAAA,MAAM,CAAC,UAAe,EAAE,EAAA;AACtB,IAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,MAAA,IAAI,CAAC,OAAO,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC;AAC3E,IAAA;IAEA,IAAI,CAAC,MAAM,EAAE;AAEb,IAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;MACjB,IAAI,CAAC,OAAO,GAAG,IAAI,eAAe,CAChC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,EACnC,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,SAAS,CACf;AACH,IAAA;IAEA,MAAM,OAAO,GAAgB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,aAAa;AAKpE,IAAA,OAAO,CAAC,UAAW,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC;AAOrE,IAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;IAEtC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;AAC1C,IAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACvB,EAAA;AAMA,EAAA,MAAM,GAAA;AACJ,IAAA,IAAI,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE;AAC5B,MAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACvB,IAAA;AACF,EAAA;AAEA,EAAA,WAAW,GAAA;IACT,IAAI,CAAC,MAAM,EAAE;AACb,IAAA,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE;AACzB,EAAA;;;;;UAnEW,cAAc;AAAA,IAAA,IAAA,EAAA,EAAA;AAAA,IAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA;AAAA,GAAA,CAAA;;;;UAAd,cAAc;AAAA,IAAA,YAAA,EAAA,IAAA;AAAA,IAAA,QAAA,EAAA,6BAAA;AAAA,IAAA,SAAA,EAFd,CAAC;AAAE,MAAA,OAAO,EAAE,gBAAgB;AAAE,MAAA,WAAW,EAAE;AAAc,KAAE,CAAC;AAAA,IAAA,QAAA,EAAA;AAAA,GAAA,CAAA;;;;;;QAE5D,cAAc;AAAA,EAAA,UAAA,EAAA,CAAA;UAJ1B,SAAS;AAAC,IAAA,IAAA,EAAA,CAAA;AACT,MAAA,QAAQ,EAAE,6BAA6B;AACvC,MAAA,SAAS,EAAE,CAAC;AAAE,QAAA,OAAO,EAAE,gBAAgB;AAAE,QAAA,WAAW,EAAA;OAAkB;KACvE;;;;;SCvBe,4BAA4B,GAAA;AAC1C,EAAA,MAAM,KAAK,CAAC,CAAA;AAC0D,uEAAA,CAAA,CAAC;AACzE;SAOgB,4BAA4B,GAAA;AAC1C,EAAA,MAAM,KAAK,CAAC,CAAA;AACyD,sEAAA,CAAA,CAAC;AACxE;SAOgB,0BAA0B,GAAA;AACxC,EAAA,MAAM,KAAK,CACT,CAAA,8EAAA,CAAgF,GAC9E,sEAAsE,CACzE;AACH;;MCnBa,cAAc,GAAG,IAAI,cAAc,CAAe,gBAAgB;;MC8BlE,WAAW,CAAA;AACd,EAAA,WAAW,GAAG,MAAM,CAA0B,UAAU,CAAC;AACzD,EAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC5B,EAAA,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC;AACpC,EAAA,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACtD,EAAA,WAAW,GAAkD,MAAM,CACjE,cAAc,EACd;AAAE,IAAA,QAAQ,EAAE;AAAI,GAAE,CACnB;AAGuC,EAAA,QAAQ,GAAY,KAAK;AAGxD,EAAA,IAAI,GAAsD,UAAU;AAGpE,EAAA,QAAQ,GAAyB,IAAI,OAAO,EAAe;AAG3D,EAAA,QAAQ,GAAyB,IAAI,OAAO,EAAe;AAGpE,EAAA,YAAY,GAAY,KAAK;AAG7B,EAAA,gBAAgB,GAAY,KAAK;AAGjC,EAAA,WAAA,GAAA,CAAe;AAGf,EAAA,KAAK,CAAC,MAAoB,EAAE,OAAsB,EAAA;AAChD,IAAA,IAAI,MAAM,EAAE;AACV,MAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC;AACtE,IAAA,CAAC,MAAM;MACL,IAAI,CAAC,eAAe,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;AACvC,IAAA;AAEA,IAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1B,EAAA;AAEA,EAAA,eAAe,GAAA;IAIb,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC;AACrD,EAAA;AAEA,EAAA,WAAW,GAAA;IACT,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AAEnD,IAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;AACxB,IAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;AAC1B,EAAA;AAGA,EAAA,YAAY,GAAA;AACV,IAAA,OAAO,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,GAAG;AACnC,EAAA;AAGA,EAAA,eAAe,GAAA;AACb,IAAA,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa;AACvC,EAAA;EAGA,cAAc,CAAC,KAAY,EAAA;IACzB,IAAI,IAAI,CAAC,QAAQ,EAAE;MACjB,KAAK,CAAC,cAAc,EAAE;MACtB,KAAK,CAAC,eAAe,EAAE;AACzB,IAAA;AACF,EAAA;AAGA,EAAA,iBAAiB,GAAA;AACf,IAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1B,EAAA;AAGA,EAAA,QAAQ,GAAA;IACN,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAgB;AAC3E,IAAA,MAAM,KAAK,GAAG,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC;AAGhD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,MAAA,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;AACnB,IAAA;IAEA,OAAO,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;AACxC,EAAA;EAEA,eAAe,CAAC,aAAsB,EAAA;IAIpC,IAAI,CAAC,YAAY,GAAG,aAAa;AACjC,IAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;AACxC,EAAA;AAEA,EAAA,SAAS,GAAA;IACP,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,KAAK,IAAI,CAAC,eAAe,EAAE;AAChE,EAAA;;;;;UAtGW,WAAW;AAAA,IAAA,IAAA,EAAA,EAAA;AAAA,IAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA;AAAA,GAAA,CAAA;AAAX,EAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA;AAAA,IAAA,UAAA,EAAA,QAAA;AAAA,IAAA,OAAA,EAAA,QAAA;AAAA,IAAA,IAAA,EAAA,WAAW;AAAA,IAAA,YAAA,EAAA,IAAA;AAAA,IAAA,QAAA,EAAA,iBAAA;AAAA,IAAA,MAAA,EAAA;AAAA,MAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAWF,gBAAgB,CAAA;AAAA,MAAA,IAAA,EAAA;KAAA;AAAA,IAAA,IAAA,EAAA;AAAA,MAAA,SAAA,EAAA;AAAA,QAAA,OAAA,EAAA,wBAAA;AAAA,QAAA,YAAA,EAAA;OAAA;AAAA,MAAA,UAAA,EAAA;AAAA,QAAA,WAAA,EAAA,MAAA;AAAA,QAAA,kBAAA,EAAA,cAAA;AAAA,QAAA,qCAAA,EAAA,kBAAA;AAAA,QAAA,eAAA,EAAA,gBAAA;AAAA,QAAA,oBAAA,EAAA,qBAAA;AAAA,QAAA,eAAA,EAAA;OAAA;AAAA,MAAA,cAAA,EAAA;KAAA;IAAA,QAAA,EAAA,CAAA,aAAA,CAAA;AAAA,IAAA,QAAA,EAAA,EAAA;AAAA,IAAA,QAAA,ECpDtC,oLAOA;;;YDgCY,OAAO;AAAA,MAAA,QAAA,EAAA,UAAA;AAAA,MAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,IAAA,CAAA;MAAA,QAAA,EAAA,CAAA,SAAA;AAAA,KAAA,CAAA;AAAA,IAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA;AAAA,IAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA;AAAA,GAAA,CAAA;;;;;;QAEN,WAAW;AAAA,EAAA,UAAA,EAAA,CAAA;UAnBvB,SAAS;;gBACE,iBAAiB;AAAA,MAAA,QAAA,EACjB,aAAa;AAAA,MAAA,IAAA,EACjB;AACJ,QAAA,aAAa,EAAE,MAAM;AACrB,QAAA,oBAAoB,EAAE,cAAc;AACpC,QAAA,uCAAuC,EAAE,kBAAkB;AAC3D,QAAA,iBAAiB,EAAE,gBAAgB;AACnC,QAAA,sBAAsB,EAAE,qBAAqB;AAC7C,QAAA,iBAAiB,EAAE,kBAAkB;AACrC,QAAA,KAAK,EAAE,2CAA2C;AAClD,QAAA,SAAS,EAAE,wBAAwB;AACnC,QAAA,cAAc,EAAE;OACjB;MAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM;MAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI;MAAA,OAAA,EAE5B,CAAC,OAAO,CAAC;AAAA,MAAA,QAAA,EAAA;KAAA;;;;;YAajB,KAAK;aAAC;AAAE,QAAA,SAAS,EAAE;OAAkB;;;YAGrC;;;;;MEOU,wBAAwB,GAAG,IAAI,cAAc,CACxD,0BAA0B,EAC1B;AACE,EAAA,UAAU,EAAE,MAAM;AAClB,EAAA,OAAO,EAAE;AACV,CAAA;SAIa,gCAAgC,GAAA;EAC9C,OAAO;AACL,IAAA,cAAc,EAAE,KAAK;AACrB,IAAA,SAAS,EAAE,OAAO;AAClB,IAAA,SAAS,EAAE,OAAO;AAClB,IAAA,aAAa,EAAE;GAChB;AACH;AAeA,MAAM,eAAe,GAAG,iBAAiB;AAGzC,MAAM,cAAc,GAAG,gBAAgB;MAiB1B,OAAO,CAAA;AACV,EAAA,WAAW,GAAG,MAAM,CAA0B,UAAU,CAAC;AACzD,EAAA,eAAe,GAAG,MAAM,CAAwB,wBAAwB,CAAC;AACzE,EAAA,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC9C,EAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;EAE5B,WAAW;AACX,EAAA,UAAU,GAAqB,IAAI,CAAC,eAAe,CAAC,SAAS;AAC7D,EAAA,UAAU,GAAqB,IAAI,CAAC,eAAe,CAAC,SAAS;EAC7D,kBAAkB;EAClB,oBAAoB;EACpB,kBAAkB;AAClB,EAAA,gBAAgB,GAAW,iBAAiB;AAC5C,EAAA,cAAc,GAAW,CAAC;EAGmB,SAAS;AAG9D,EAAA,sBAAsB,GAA2B,IAAI,SAAS,EAAe;EAG7E,UAAU,GAA+B,EAAE;AAG3C,EAAA,oBAAoB,GAA0B,MAAM;AAG3C,EAAA,cAAc,GAAG,IAAI,OAAO,EAAoB;EAGzD,YAAY,GAA4B,MAAM,CAAC,KAAK;;WAAC;EAGrD,UAAU;AAGV,EAAA,iBAAiB,GAAsB,IAAI,CAAC,eAAe,CAAC,iBAAiB,IAAI,EAAE;AAG1E,EAAA,aAAa,GAAW,IAAI,CAAC,eAAe,CAAC,aAAa;EAG9C,SAAS;EAGJ,cAAc;EAGb,eAAe;AAG1C,EAAA,IACI,SAAS,GAAA;IACX,OAAO,IAAI,CAAC,UAAU;AACxB,EAAA;EACA,IAAI,SAAS,CAAC,KAAuB,EAAA;AACnC,IAAA,IACE,KAAK,KAAK,QAAQ,IAClB,KAAK,KAAK,OAAO,KAChB,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,EAC/C;AACA,MAAA,4BAA4B,EAAE;AAChC,IAAA;IACA,IAAI,CAAC,UAAU,GAAG,KAAK;IACvB,IAAI,CAAC,kBAAkB,EAAE;AAC3B,EAAA;AAGA,EAAA,IACI,SAAS,GAAA;IACX,OAAO,IAAI,CAAC,UAAU;AACxB,EAAA;EACA,IAAI,SAAS,CAAC,KAAuB,EAAA;AACnC,IAAA,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,KAAK,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,EAAE;AAC7F,MAAA,4BAA4B,EAAE;AAChC,IAAA;IACA,IAAI,CAAC,UAAU,GAAG,KAAK;IACvB,IAAI,CAAC,kBAAkB,EAAE;AAC3B,EAAA;EAGwB,WAAW;EAMH,WAAW;AAI3C,EAAA,cAAc,GAAY,IAAI,CAAC,eAAe,CAAC,cAAc;AAI7D,EAAA,WAAW,GAAwB,IAAI,CAAC,eAAe,CAAC,WAAW;EAQnE,IACI,UAAU,CAAC,OAAe,EAAA;AAC5B,IAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,mBAAmB;AACnD,IAAA,MAAM,YAAY,GAAG;AAAE,MAAA,GAAG,IAAI,CAAC;KAAY;AAE3C,IAAA,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,EAAE;MACnD,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAE,SAAiB,IAAI;AAC1D,QAAA,YAAY,CAAC,SAAS,CAAC,GAAG,KAAK;AACjC,MAAA,CAAC,CAAC;AACJ,IAAA;IAEA,IAAI,CAAC,mBAAmB,GAAG,OAAO;AAElC,IAAA,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE;MAC7B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAE,SAAiB,IAAI;AAC/C,QAAA,YAAY,CAAC,SAAS,CAAC,GAAG,IAAI;AAChC,MAAA,CAAC,CAAC;AAEF,MAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,GAAG,EAAE;AAC/C,IAAA;IAEA,IAAI,CAAC,UAAU,GAAG,YAAY;AAChC,EAAA;EACQ,mBAAmB;AAE3B,EAAA,IAAI,cAAc,GAAA;IAChB,OAAO,IAAI,CAAC,eAAe;AAC7B,EAAA;EACA,IAAI,cAAc,CAAC,KAA4B,EAAA;AAC7C,IAAA,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE;AACpE,MAAA,IAAI,CAAC,UAAU,CAAC,CAAA,oBAAA,EAAuB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAA,CAAE,CAAC,GAAG,KAAK;AAC7E,IAAA;IACA,IAAI,CAAC,UAAU,CAAC,CAAA,oBAAA,EAAuB,KAAK,CAAC,IAAI,CAAA,CAAE,CAAC,GAAG,IAAI;IAC3D,IAAI,CAAC,eAAe,GAAG,KAAK;AAC9B,EAAA;EACQ,eAAe;AAId,EAAA,MAAM,GAAqC,IAAI,YAAY,EAAsB;EAEjF,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC;AAGtD,EAAA,mBAAmB,GAC3B,MAAM,CAAC,qBAAqB,EAAE;AAAE,IAAA,QAAQ,EAAE;GAAM,CAAC,KAAK,gBAAgB;AAGxE,EAAA,WAAA,GAAA,CAAe;AAEf,EAAA,QAAQ,GAAA;IACN,IAAI,CAAC,kBAAkB,EAAE;AAC3B,EAAA;AAEA,EAAA,kBAAkB,GAAA;IAChB,IAAI,CAAC,wBAAwB,EAAE;IAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAChE,QAAQ,EAAE,CACV,aAAa,EAAE,CACf,cAAc,EAAE;AACnB,IAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAKhE,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAChC,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,sBAAsB,CAAC,EACtC,SAAS,CAAE,KAAK,IAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAE,IAAiB,IAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAChF,CACA,SAAS,CAAE,WAAW,IAAK,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,WAA0B,CAAC,CAAC;IAE5F,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,SAAS,CAAE,SAAiC,IAAI;AAIlF,MAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW;AAEhC,MAAA,IAAI,IAAI,CAAC,oBAAoB,KAAK,OAAO,IAAI,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE;AAC5E,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,EAAE;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,OAAO,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC;AAEnF,QAAA,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;AAC1C,UAAA,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC;AAC9B,QAAA,CAAC,MAAM;UACL,OAAO,CAAC,iBAAiB,EAAE;AAC7B,QAAA;AACF,MAAA;AACF,IAAA,CAAC,CAAC;AACJ,EAAA;AAEA,EAAA,WAAW,GAAA;AACT,IAAA,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE;AAC3B,IAAA,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE;AACrC,IAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACtB,IAAA,IAAI,CAAC,kBAAkB,EAAE,OAAO,EAAE;AAClC,IAAA,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC;AACzC,EAAA;AAGA,EAAA,QAAQ,GAAA;AAEN,IAAA,MAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAA6C;AAC7F,IAAA,OAAO,WAAW,CAAC,IAAI,CACrB,SAAS,CAAC,IAAI,CAAC,sBAAsB,CAAC,EACtC,SAAS,CAAE,KAAK,IAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAE,IAAiB,IAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CACrD;AAC9B,EAAA;EAGA,cAAc,CAAC,KAAoB,EAAA;AACjC,IAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;AAC7B,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW;AAEhC,IAAA,QAAQ,OAAO;AACb,MAAA,KAAK,MAAM;AACT,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;UAC1B,KAAK,CAAC,cAAc,EAAE;AACtB,UAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;AAC7B,QAAA;AACA,QAAA;AACF,MAAA,KAAK,UAAU;QACb,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,UAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;AAC7B,QAAA;AACA,QAAA;AACF,MAAA;AACE,QAAA,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,UAAU,EAAE;AAClD,UAAA,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC;AACpC,QAAA;AAEA,QAAA,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC;AACxB,QAAA;AACJ;AACF,EAAA;AAGA,EAAA,UAAU,GAAA;AACR,IAAA,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,UAAU;AAC3F,EAAA;AAMA,EAAA,cAAc,CAAC,SAAsB,SAAS,EAAA;AAE5C,IAAA,IAAI,CAAC,kBAAkB,EAAE,OAAO,EAAE;AAClC,IAAA,IAAI,CAAC,kBAAkB,GAAG,eAAe,CACvC,MAAK;AACH,MAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;AAGtC,MAAA,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;AAC7D,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW;QAChC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,kBAAkB,EAAE;AAKnD,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,SAAS,EAAE;UACpC,SAAS,CAAC,KAAK,EAAE;AACnB,QAAA;AACF,MAAA;AACF,IAAA,CAAC,EACD;MAAE,QAAQ,EAAE,IAAI,CAAC;AAAS,KAAE,CAC7B;AACH,EAAA;AAMA,EAAA,eAAe,GAAA;AACb,IAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC;AACpC,EAAA;EAMA,YAAY,CAAC,KAAa,EAAA;AAExB,IAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,GAAG,KAAK;IAC7C,MAAM,YAAY,GAAG,CAAA,EAAG,IAAI,CAAC,gBAAgB,CAAA,EAAG,SAAS,CAAA,CAAE;IAC3D,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAE,SAAS,IAClE,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAC5C;IAED,IAAI,CAAC,eAAe,IAAI,eAAe,KAAK,IAAI,CAAC,kBAAkB,EAAE;AACnE,MAAA,MAAM,YAAY,GAAG;AAAE,QAAA,GAAG,IAAI,CAAC;OAAY;MAC3C,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,QAAA,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,KAAK;AAC/C,MAAA;AAEA,MAAA,YAAY,CAAC,YAAY,CAAC,GAAG,IAAI;MACjC,IAAI,CAAC,kBAAkB,GAAG,YAAY;MACtC,IAAI,CAAC,UAAU,GAAG,YAAY;AAChC,IAAA;AACF,EAAA;AASA,EAAA,kBAAkB,CAChB,OAAyB,IAAI,CAAC,SAAS,EACvC,IAAA,GAAyB,IAAI,CAAC,SAAS,EAAA;IAEvC,IAAI,CAAC,UAAU,GAAG;MAChB,GAAG,IAAI,CAAC,UAAU;AAClB,MAAA,CAAC,uBAAuB,GAAG,IAAI,KAAK,QAAQ;AAC5C,MAAA,CAAC,sBAAsB,GAAG,IAAI,KAAK,OAAO;AAC1C,MAAA,CAAC,sBAAsB,GAAG,IAAI,KAAK,OAAO;MAC1C,CAAC,sBAAsB,GAAG,IAAI,KAAK;KACpC;AAED,IAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;AACxC,EAAA;EAGU,gBAAgB,CAAC,KAAa,EAAA;AACtC,IAAA,MAAM,MAAM,GAAG,KAAK,KAAK,cAAc;AAEvC,IAAA,IAAI,MAAM,IAAI,KAAK,KAAK,eAAe,EAAE;AACvC,MAAA,IAAI,MAAM,EAAE;AACV,QAAA,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC;QACvC,IAAI,CAAC,oBAAoB,GAAG,SAAS;AACvC,MAAA;MACA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AACnD,MAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC9B,IAAA;AACF,EAAA;EAEU,iBAAiB,CAAC,KAAa,EAAA;AACvC,IAAA,IAAI,KAAK,KAAK,eAAe,IAAI,KAAK,KAAK,cAAc,EAAE;AACzD,MAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,IAAA;AACF,EAAA;EAEA,UAAU,CAAC,MAAe,EAAA;AACxB,IAAA,IAAI,CAAC,oBAAoB,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM;AAErD,IAAA,IAAI,MAAM,EAAE;AACV,MAAA,IAAI,IAAI,CAAC,WAAW,CAAC,eAAe,KAAK,CAAC,EAAE;AAO1C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;AAEtC,QAAA,IAAI,SAAS,EAAE;UACb,SAAS,CAAC,SAAS,GAAG,CAAC;AACzB,QAAA;AACF,MAAA;AACF,IAAA,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AAIpC,MAAA,IAAI,CAAC,oBAAoB,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC;AAC1F,IAAA;IAGA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,MAAA,UAAU,CAAC,MAAK;QACd,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,eAAe,GAAG,cAAc,CAAC;AAClE,MAAA,CAAC,CAAC;AACJ,IAAA;AACA,IAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;AACxC,EAAA;AAGQ,EAAA,aAAa,GAAA;IACnB,IAAI,SAAS,GAAuB,IAAI;AAExC,IAAA,IAAI,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE;AAKtC,MAAA,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAM,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC;AAC3F,IAAA;AACA,IAAA,OAAO,SAAS;AAClB,EAAA;AAQQ,EAAA,wBAAwB,GAAA;AAC9B,IAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CACnB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAC/B,SAAS,CAAE,KAA6B,IAAI;AAC3C,MAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAE,IAAI,IAAK,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC;AACpF,MAAA,IAAI,CAAC,sBAAsB,CAAC,eAAe,EAAE;AAC/C,IAAA,CAAC,CAAC;AACN,EAAA;;;;;UAvZW,OAAO;AAAA,IAAA,IAAA,EAAA,EAAA;AAAA,IAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA;AAAA,GAAA,CAAA;;;;UAAP,OAAO;AAAA,IAAA,YAAA,EAAA,IAAA;AAAA,IAAA,QAAA,EAAA,UAAA;AAAA,IAAA,MAAA,EAAA;AAAA,MAAA,aAAA,EAAA,eAAA;AAAA,MAAA,SAAA,EAAA,CAAA,YAAA,EAAA,WAAA,CAAA;AAAA,MAAA,cAAA,EAAA,CAAA,iBAAA,EAAA,gBAAA,CAAA;AAAA,MAAA,eAAA,EAAA,CAAA,kBAAA,EAAA,iBAAA,CAAA;AAAA,MAAA,SAAA,EAAA,WAAA;AAAA,MAAA,SAAA,EAAA,WAAA;AAAA,MAAA,cAAA,EAAA,CAAA,gBAAA,EAAA,gBAAA,EA2FE,gBAAgB,CAAA;AAAA,MAAA,WAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAIhB,gBAAgB,CAAA;AAAA,MAAA,UAAA,EAAA,CAAA,OAAA,EAAA,YAAA;KAAA;AAAA,IAAA,OAAA,EAAA;AAAA,MAAA,MAAA,EAAA;KAAA;AAAA,IAAA,IAAA,EAAA;AAAA,MAAA,UAAA,EAAA;AAAA,QAAA,iBAAA,EAAA,MAAA;AAAA,QAAA,sBAAA,EAAA,MAAA;AAAA,QAAA,uBAAA,EAAA;AAAA;KAAA;AAAA,IAAA,SAAA,EAlGzB,CAAC;AAAE,MAAA,OAAO,EAAE,cAAc;AAAE,MAAA,WAAW,EAAE;AAAO,KAAE,CAAC;AAAA,IAAA,OAAA,EAAA,CAAA;AAAA,MAAA,YAAA,EAAA,aAAA;AAAA,MAAA,KAAA,EAAA,IAAA;AAAA,MAAA,SAAA,EA2FhD,gBAAgB;AAAA,MAAA,WAAA,EAAA;AAAA,KAAA,EAAA;AAAA,MAAA,YAAA,EAAA,WAAA;AAAA,MAAA,SAAA,EAxEb,WAAW;AAAA,MAAA,WAAA,EAAA;AAAA,KAAA,CAAA;AAAA,IAAA,WAAA,EAAA,CAAA;AAAA,MAAA,YAAA,EAAA,aAAA;AAAA,MAAA,KAAA,EAAA,IAAA;AAAA,MAAA,SAAA,EAkEjB,WAAW;AAAA,MAAA,WAAA,EAAA;AAAA,KAAA,CAAA;IAAA,QAAA,EAAA,CAAA,SAAA,CAAA;AAAA,IAAA,QAAA,EAAA,EAAA;AAAA,IAAA,QAAA,ECnMxB,ouDA6CA;IAAA,MAAA,EAAA,CAAA,6qMAAA,CAAA;AAAA,IAAA,YAAA,EAAA,CAAA;AAAA,MAAA,IAAA,EAAA,WAAA;AAAA,MAAA,IAAA,EDkEY,gBAAgB;AAAA,MAAA,QAAA,EAAA,oBAAA;AAAA,MAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA;AAAA,KAAA,CAAA;AAAA,IAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA;AAAA,IAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA;AAAA,GAAA,CAAA;;;;;;QAEf,OAAO;AAAA,EAAA,UAAA,EAAA,CAAA;UAfnB,SAAS;;gBACE,UAAU;MAAA,eAAA,EAGH,uBAAuB,CAAC,MAAM;MAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI;AAAA,MAAA,QAAA,EAC3B,SAAS;AAAA,MAAA,IAAA,EACb;AACJ,QAAA,mBAAmB,EAAE,MAAM;AAC3B,QAAA,wBAAwB,EAAE,MAAM;AAChC,QAAA,yBAAyB,EAAE;OAC5B;AAAA,MAAA,SAAA,EACU,CAAC;AAAE,QAAA,OAAO,EAAE,cAAc;AAAE,QAAA,WAAW,EAAA;AAAS,OAAE,CAAC;MAAA,OAAA,EACrD,CAAC,gBAAgB,CAAC;AAAA,MAAA,QAAA,EAAA,ouDAAA;MAAA,MAAA,EAAA,CAAA,6qMAAA;KAAA;;;;;YAkB1B,eAAe;MAAC,IAAA,EAAA,CAAA,WAAW,EAAE;AAAE,QAAA,WAAW,EAAE;OAAM;;;YAwBlD;;;YAGA,KAAK;aAAC,YAAY;;;YAGlB,KAAK;aAAC,iBAAiB;;;YAGvB,KAAK;aAAC,kBAAkB;;;YAGxB;;;YAiBA;;;YAaA,SAAS;aAAC,WAAW;;;YAMrB,YAAY;aAAC,gBAAgB;;;YAG7B,KAAK;aAAC;AAAE,QAAA,SAAS,EAAE;OAAkB;;;YAIrC,KAAK;aAAC;AAAE,QAAA,SAAS,EAAE;OAAkB;;;YASrC,KAAK;aAAC,OAAO;;;YAsCb;;;;;MErLU,kCAAkC,GAC7C,IAAI,cAAc,CAAiC,oCAAoC;MAG5E,wBAAwB,GAAG,IAAI,cAAc,CACxD,0BAA0B,EAC1B;AACE,EAAA,UAAU,EAAE,MAAM;AAClB,EAAA,OAAO,EAAE,MAAK;AACZ,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AAC/B,IAAA,OAAO,MAAM,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE;AACpD,EAAA;AACD,CAAA;AAOH,MAAM,2BAA2B,GAAG,+BAA+B,CAAC;AAAE,EAAA,OAAO,EAAE;AAAI,CAAE,CAAC;AAGtF,MAAM,wBAAwB,GAAG,YAAY,CAAC,MAAA,EAAQ,CAAC;AAGvD,MAAM,kBAAkB,GAAG,IAAI,OAAO,EAAgC;AAkBhE,MAAO,cACX,SAAQ,wBAAwB,CAAA;AAGxB,EAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAC1B,EAAA,QAAQ,GAAG,MAAM,CAA0B,UAAU,CAAC;AACtD,EAAA,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC5C,EAAA,wBAAwB,GAAG,MAAM,CACvC,kCAAkC,EAClC;AAAE,IAAA,QAAQ,EAAE;AAAI,GAAE,CAClB;AACM,EAAA,iBAAiB,GAAG,MAAM,CAAC,WAAW,EAAE;AAAE,IAAA,QAAQ,EAAE,IAAI;AAAE,IAAA,IAAI,EAAE;AAAI,GAAE,CAAE;AACxE,EAAA,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC;AACpC,EAAA,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC;AACjC,EAAA,mBAAmB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAChD,EAAA,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC9C,EAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;EAExB,OAAO;AACP,EAAA,WAAW,GAAsB,IAAI;AACrC,EAAA,SAAS,GAAY,KAAK;EAC1B,uBAAuB,GAAG,YAAY,CAAC,KAAK;EAC5C,2BAA2B,GAAG,YAAY,CAAC,KAAK;EAChD,kBAAkB,GAAG,YAAY,CAAC,KAAK;EACvC,sBAAsB,GAAG,YAAY,CAAC,KAAK;AAC3C,EAAA,eAAe,GAAG,MAAM,CAAC,wBAAwB,CAAC;EAClD,eAAe;EAMvB,cAAc;EAMN,iBAAiB,GAAI,KAAiB,IAAI;AAChD,IAAA,IAAI,CAAC,gCAAgC,CAAC,KAAK,CAAC,EAAE;MAC5C,IAAI,CAAC,SAAS,GAAG,OAAO;AAC1B,IAAA;EACF,CAAC;AAID,EAAA,SAAS,GAAuD,SAAS;AAGzE,EAAA,KAAK,GAAuB,IAAI,CAAC,wBAAwB,EAAE,IAAI,IAAI,SAAS;EAG5E,IACI,yBAAyB,CAAC,IAAyB,EAAA;IACrD,IAAI,CAAC,KAAK,GAAG,UAAU;AACvB,IAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACrB,EAAA;AAGA,EAAA,IACI,IAAI,GAAA;IACN,OAAO,IAAI,CAAC,KAAK;AACnB,EAAA;EACA,IAAI,IAAI,CAAC,IAAyB,EAAA;AAChC,IAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACnB,IAAA,IAAI,IAAI,EAAE;MACR,IAAI,CAAC,cAAc,GAAG,IAAI;AAC5B,IAAA;AACF,EAAA;AACQ,EAAA,KAAK,GAAwB,IAAI;EAGjC,QAAQ,CAAC,IAAyB,EAAA;AACxC,IAAA,IAAI,IAAI,KAAK,IAAI,CAAC,KAAK,EAAE;AACvB,MAAA;AACF,IAAA;IAEA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,IAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE;AAEzC,IAAA,IAAI,IAAI,EAAE;AACR,MAAA,IAAI,IAAI,KAAK,IAAI,CAAC,cAAc,KAAK,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,EAAE;AACnF,QAAA,0BAA0B,EAAE;AAC9B,MAAA;MAEA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAE,MAA0B,IAAI;AACjF,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AAGzB,QAAA,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,KAAK,KAAK,IAAI,CAAC,cAAc,EAAE;UACnE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AACzC,QAAA;AACF,MAAA,CAAC,CAAC;AACJ,IAAA;AACF,EAAA;EAG6B,QAAQ;AAOA,EAAA,YAAY,GAAY,IAAI;AAG9C,EAAA,UAAU,GAAuB,IAAI,YAAY,EAAQ;AAGzD,EAAA,UAAU,GAAuB,IAAI,YAAY,EAAQ;EAG5E,eAAe;AAEP,EAAA,cAAc,GAAW,CAAC;AAIlC,EAAA,WAAA,GAAA;AACE,IAAA,MAAM,UAAU,GAAG,MAAM,CAAe,cAAc,EAAE;AAAE,MAAA,QAAQ,EAAE;AAAI,KAAE,CAAE;AAE5E,IAAA,KAAK,EAAE;AACP,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC9B,IAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB;IAEhD,IAAI,CAAC,cAAc,GAAG,UAAU,YAAY,OAAO,GAAG,UAAU,GAAG,SAAS;AAE5E,IAAA,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CACrC,YAAY,EACZ,IAAI,CAAC,iBAAiB,EACtB,2BAA2B,CAC5B;AAED,IAAA,IAAI,iBAAiB,EAAE;AACrB,MAAA,iBAAiB,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,EAAE;AAC7D,IAAA;IAEA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,mBAAmB,CACpD,OAAO,CAAC,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,CACvD,SAAS,CAAE,MAAuB,IAAI;MACrC,IAAI,CAAC,cAAc,GAAG,CAAC;MAEvB,IAAI,MAAM,CAAC,OAAO,EAAE;QAClB,IAAI,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE;UAC7C,IAAI,CAAC,cAAc,GAAG,iBAAiB;AACzC,QAAA;QACA,IAAI,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE;UAC7C,IAAI,CAAC,cAAc,GAAG,iBAAiB;AACzC,QAAA;AACF,MAAA;AACF,IAAA,CAAC,CAAC;AACN,EAAA;AAEA,EAAA,QAAQ,GAAA;AACN,IAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA,iBAAA,EAAoB,IAAI,CAAC,KAAK,EAAE,CAAC;AAC7E,EAAA;AAEA,EAAA,kBAAkB,GAAA;IAChB,IAAI,CAAC,YAAY,EAAE;AACrB,EAAA;AAEA,EAAA,WAAW,GAAA;AACT,IAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAC1C,MAAA,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACtC,IAAA;AAEA,IAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAC7C,YAAY,EACZ,IAAI,CAAC,iBAAiB,EACtB,2BAA2B,CAC5B;AAED,IAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE;AACzC,IAAA,IAAI,CAAC,2BAA2B,CAAC,WAAW,EAAE;AAC9C,IAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE;AACrC,IAAA,IAAI,CAAC,uBAAuB,CAAC,WAAW,EAAE;AAC1C,IAAA,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE;IAEnC,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,MAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;MAC1B,IAAI,CAAC,WAAW,GAAG,IAAI;AACzB,IAAA;AACF,EAAA;AAGA,EAAA,IAAI,QAAQ,GAAA;IACV,OAAO,IAAI,CAAC,SAAS;AACvB,EAAA;AAGA,EAAA,eAAe,GAAA;IACb,OAAO,CAAC,EAAE,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,cAAc,CAAC;AAC1D,EAAA;AAGA,EAAA,UAAU,GAAA;AACR,IAAA,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC5D,EAAA;AAGA,EAAA,QAAQ,GAAA;AAEN,IAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACtB,EAAA;EAGQ,SAAS,CAAC,SAAkB,EAAA;AAClC,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;AAEtB,IAAA,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE;AAC3B,MAAA;AACF,IAAA;AAEA,IAAA,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE;AACnC,IAAA,MAAM,eAAe,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;AACpD,IAAA,kBAAkB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;AAIlC,IAAA,IAAI,eAAe,IAAI,eAAe,KAAK,IAAI,EAAE;MAC/C,eAAe,CAAC,SAAS,EAAE;AAC7B,IAAA;AAEA,IAAA,MAAM,cAAc,GAClB,IAAI,CAAC,KAAK,KAAK,UAAU,IAAI,IAAI,CAAC,eAAe,EAAE,GAC/C;MAAE,IAAI,EAAE,IAAI,CAAC;AAAK,KAAE,GACpB;AACE,MAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW;AAC9C,MAAA,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY;MAChD,eAAe,EAAE,IAAI,CAAC,eAAe;AACrC,MAAA,cAAc,EAAE,IAAI,CAAC,eAAe,GAChC,SAAS,GACT,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,iBAAiB,KAAK,CAAC,GACjD,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,GACrC,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC;MACpF,IAAI,EAAE,IAAI,CAAC,KAAK;MAChB,aAAa,EAAE,IAAI,CAAC;KACrB;IAEP,IAAI,CAAC,cAAc,GAAG;AAAE,MAAA,GAAG,cAAc;AAAE,MAAA,GAAG,IAAI,CAAC;KAA0B;AAE7E,IAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AAC5C,IAAA,MAAM,aAAa,GAAG,UAAU,CAAC,SAAS,EAAE;AAC5C,IAAA,MAAM,gBAAgB,GAAG,aAAa,CAAC,gBAAqD;AAE5F,IAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,gBAAgB,CAAC;AACzC,IAAA,aAAa,CAAC,WAAW,GACvB,IAAI,CAAC,WAAW,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,WAAW;AAIvE,IAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE;MAC7B,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;MACxC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;AACzC,IAAA;AAEA,IAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;AAC/F,IAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,cAAc,GAAG,SAAS;AAC1E,IAAA,IAAI,SAAS,EAAE;MACb,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC;AAClD,IAAA;AACA,IAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AAC5B,IAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;IAEzB,IAAI,IAAI,YAAY,OAAO,EAAE;AAC3B,MAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACrB,MAAA,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;QAG9E,gBAAgB,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,mBAAmB,EAAE;AAChE,QAAA,gBAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC;AAC3C,MAAA,CAAC,CAAC;AACJ,IAAA;AACF,EAAA;AAGA,EAAA,SAAS,GAAA;AACP,IAAA,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;AAC1B,EAAA;AAMA,EAAA,KAAK,CAAC,MAAoB,EAAE,OAAsB,EAAA;AAChD,IAAA,IAAI,MAAM,EAAE;AACV,MAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;AAC7D,IAAA,CAAC,MAAM;MACL,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;AAC5C,IAAA;AACF,EAAA;AAKA,EAAA,cAAc,GAAA;AACZ,IAAA,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE;AACpC,EAAA;EAGQ,YAAY,CAAC,MAA0B,EAAA;AAC7C,IAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW;AACnC,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;AAEvB,IAAA,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACjC,MAAA;AACF,IAAA;AAEA,IAAA,IAAI,CAAC,2BAA2B,CAAC,WAAW,EAAE;AAC9C,IAAA,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE;IAInC,IAAI,IAAI,YAAY,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;AACnD,MAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;QACtE,UAAU,CAAC,MAAM,EAAE;AACnB,QAAA,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AAC5B,MAAA,CAAC,CAAC;AACF,MAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACxB,IAAA,CAAC,MAAM;MACL,UAAU,CAAC,MAAM,EAAE;AACnB,MAAA,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE;AAC7B,IAAA;IAEA,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;AAChC,MAAA,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC;AACjC,IAAA;IAMA,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE;AAC7F,MAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;AAC5B,IAAA;IAEA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,IAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;AAC5B,EAAA;EAGQ,iBAAiB,CAAC,IAAkB,EAAA;IAC1C,IAAI,IAAI,CAAC,YAAY,EAAE;MACrB,IAAI,KAAK,GAAG,CAAC;AACb,MAAA,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU;AAEhC,MAAA,OAAO,UAAU,EAAE;AACjB,QAAA,KAAK,EAAE;QACP,UAAU,GAAG,UAAU,CAAC,UAAU;AACpC,MAAA;AAEA,MAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAC1B,IAAA;AACF,EAAA;EAGQ,cAAc,CAAC,MAAe,EAAA;AACpC,IAAA,IAAI,MAAM,KAAK,IAAI,CAAC,SAAS,EAAE;MAC7B,IAAI,CAAC,SAAS,GAAG,MAAM;AACvB,MAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AAEhE,MAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AAC1B,QAAA,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,MAAM,CAAC;AAChD,MAAA;AACA,MAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;AACxC,IAAA;AACF,EAAA;EAMQ,cAAc,CAAC,IAAkB,EAAA;AACvC,IAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,MAAA,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;MAC3C,IAAI,CAAC,qBAAqB,CACxB,IAAI,EACJ,MAAM,CAAC,gBAAqD,CAC7D;MACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;MAE/C,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,SAAS,CAAE,KAAK,IAAI;AACnD,QAAA,IAAI,IAAI,CAAC,IAAI,YAAY,OAAO,EAAE;AAChC,UAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;AACjC,QAAA;AACF,MAAA,CAAC,CAAC;AACJ,IAAA;IAEA,OAAO,IAAI,CAAC,WAAW;AACzB,EAAA;EAMQ,iBAAiB,CAAC,IAAkB,EAAA;IAC1C,OAAO,IAAI,aAAa,CAAC;AACvB,MAAA,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAC5B,QAAQ,EAAE,CACV,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAClC,kBAAkB,EAAE,CACpB,iBAAiB,EAAE,CACnB,qBAAqB,CAAC,yBAAyB,CAAC,CAChD,QAAQ,CAAC,KAAK,CAAC;AAClB,MAAA,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,kCAAkC;MACvE,UAAU,EAAE,IAAI,CAAC,iBAAiB;AAClC,MAAA,cAAc,EAAE,IAAI,CAAC,eAAe;AACrC,KAAA,CAAC;AACJ,EAAA;AAOQ,EAAA,qBAAqB,CAAC,IAAkB,EAAE,QAA2C,EAAA;IAC3F,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,MAAA,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAE,MAAM,IAAI;AAC5C,QAAA,MAAM,IAAI,GACR,MAAM,CAAC,cAAc,CAAC,QAAQ,KAAK,OAAO,GAAG,OAAO,GAAG,QAAQ;AACjE,QAAA,MAAM,IAAI,GAAqB,MAAM,CAAC,cAAc,CAAC,QAAQ,KAAK,KAAK,GAAG,OAAO,GAAG,OAAO;QAE3F,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC;QACtE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,yBAAyB,CAAC;QACvE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC;QACtE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC;AACtE,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA,iBAAA,EAAoB,IAAI,CAAA,CAAE,CAAC;AACrE,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA,iBAAA,EAAoB,IAAI,CAAA,CAAE,CAAC;AAErE,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,kBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC9D,MAAA,CAAC,CAAC;AACJ,IAAA;AACF,EAAA;AAOQ,EAAA,YAAY,CAAC,IAAkB,EAAE,gBAAmD,EAAA;AAC1F,IAAA,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,GAC5B,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,IAAI,CAAC,wBAAwB,EAAE,SAAS,KAAK,QAAQ,GAChF,CAAC,KAAK,EAAE,OAAO,CAAC,GAChB,CAAC,OAAO,EAAE,KAAK,CAAC;AAEtB,IAAA,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC,GAC/B,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,SAAS,IAC7D,IAAI,CAAC,SAAS,KAAK,OAAO,IAC1B,IAAI,CAAC,wBAAwB,EAAE,SAAS,KAAK,OAAO,GAChD,CAAC,KAAK,EAAE,QAAQ,CAAC,GACjB,CAAC,QAAQ,EAAE,KAAK,CAAC;IAEvB,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IAC7D,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC;IAE7D,IAAI,OAAO,GAAG,IAAI,CAAC,wBAAwB,EAAE,OAAO,IAAI,CAAC;IACzD,IAAI,OAAO,GAAG,IAAI,CAAC,wBAAwB,EAAE,OAAO,IAAI,CAAC;AAEzD,IAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;MAG1B,gBAAgB,GAAG,OAAO,GAAG,IAAI,CAAC,SAAS,KAAK,QAAQ,GAAG,OAAO,GAAG,KAAK;MAC1E,eAAe,GAAG,QAAQ,GAAG,OAAO,KAAK,KAAK,GAAG,OAAO,GAAG,KAAK;MAChE,OAAO,GAAG,EAA2B;AACvC,IAAA,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC/B,MAAA,OAAO,GAAG,QAAQ,KAAK,KAAK,GAAG,QAAQ,GAAG,KAAK;AAC/C,MAAA,eAAe,GAAG,gBAAgB,KAAK,KAAK,GAAG,QAAQ,GAAG,KAAK;AACjE,IAAA;IAGA,OAAO,GAAG,OAAO,IAAI,QAAQ,KAAK,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC;IACjD,OAAO,GAAG,OAAO,IAAI,QAAQ,KAAK,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC;AAGpD,IAAA,IAAI,IAAI,CAAC,eAAe,KAAK,UAAU,EAAE;AACvC,MAAA,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC,cAAc;AACvC,MAAA,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC,cAAc;AACzC,IAAA;IAEA,gBAAgB,CAAC,aAAa,CAAC,CAC7B;MACE,OAAO;MACP,OAAO;MACP,QAAQ;MACR,QAAQ;MACR,OAAO;AACP,MAAA;AACD,KAAA,EACD;AACE,MAAA,OAAO,EAAE,eAAe;MACxB,OAAO;AACP,MAAA,QAAQ,EAAE,gBAAgB;MAC1B,QAAQ;MACR,OAAO;AACP,MAAA,OAAO,EAAE,CAAC;AACX,KAAA,EACD;MACE,OAAO;AACP,MAAA,OAAO,EAAE,eAAe;MACxB,QAAQ;AACR,MAAA,QAAQ,EAAE,gBAAgB;MAC1B,OAAO,EAAE,CAAC,OAAO;AACjB,MAAA,OAAO,EAAE;AACV,KAAA,EACD;AACE,MAAA,OAAO,EAAE,eAAe;AACxB,MAAA,OAAO,EAAE,eAAe;AACxB,MAAA,QAAQ,EAAE,gBAAgB;AAC1B,MAAA,QAAQ,EAAE,gBAAgB;MAC1B,OAAO,EAAE,CAAC,OAAO;AACjB,MAAA,OAAO,EAAE,CAAC;AACX,KAAA,CACF,CAAC;AACJ,EAAA;AAGQ,EAAA,mBAAmB,GAAA;IACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAY,CAAC,aAAa,EAAE;IAClD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAY,CAAC,WAAW,EAAE;AACnD,IAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,GAAGA,EAAY,EAAE;AACrF,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,GAC7B,IAAI,CAAC,cAAc,CAChB,QAAQ,EAAE,CACV,IAAI,CAAC,MAAM,CAAE,MAAM,IAAK,IAAI,CAAC,SAAS,IAAI,MAAM,KAAK,IAAI,CAAC,iBAAiB,CAAC,CAAC,GAChFA,EAAY,EAAE;IAElB,OAAO,KAAK,CAAC,QAAQ,EAAE,WAA6C,EAAE,KAAK,EAAE,WAAW,CAAC;AAC3F,EAAA;EAGA,gBAAgB,CAAC,KAAiB,EAAA;AAChC,IAAA,IAAI,CAAC,+BAA+B,CAAC,KAAK,CAAC,EAAE;MAG3C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,OAAO,GAAG,SAAS;AAKzD,MAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;QAC1B,KAAK,CAAC,cAAc,EAAE;AACxB,MAAA;AACF,IAAA;AACF,EAAA;EAGA,cAAc,CAAC,KAAoB,EAAA;AACjC,IAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;AAG7B,IAAA,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,KAAK,EAAE;MAC1C,IAAI,CAAC,SAAS,GAAG,UAAU;AAC7B,IAAA;IAEA,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,OAAO,KAAK,WAAW,EAAE;MACrD,IAAI,CAAC,SAAS,GAAG,UAAU;MAC3B,IAAI,CAAC,QAAQ,EAAE;AACjB,IAAA;AACF,EAAA;EAGA,YAAY,CAAC,KAAiB,EAAA;AAC5B,IAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;MAE1B,KAAK,CAAC,eAAe,EAAE;MACvB,IAAI,CAAC,QAAQ,EAAE;AACjB,IAAA,CAAC,MAAM;MACL,IAAI,CAAC,UAAU,EAAE;AACnB,IAAA;AACF,EAAA;AAGQ,EAAA,YAAY,GAAA;IAElB,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE;AACjD,MAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAE,MAAM,IAAI;AAC5E,QAAA,IACE,MAAM,KAAK,IAAI,CAAC,iBAAiB,IACjC,CAAC,MAAM,CAAC,QAAQ,IAEhB,IAAI,CAAC,cAAc,EAAE,oBAAoB,KAAK,MAAM,EACpD;UACA,IAAI,CAAC,SAAS,GAAG,OAAO;AAKxB,UAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACvB,QAAA;AACF,MAAA,CAAC,CAAC;AACJ,IAAA;AACF,EAAA;EAGQ,UAAU,CAAC,IAAkB,EAAA;AAInC,IAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW,EAAE;AAClE,MAAA,IAAI,CAAC,OAAO,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC;AAC7E,IAAA;IAEA,OAAO,IAAI,CAAC,OAAO;AACrB,EAAA;EAOQ,SAAS,CAAC,IAAkB,EAAA;AAClC,IAAA,OAAO,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI;AAC9C,EAAA;;;;;UArmBW,cAAc;AAAA,IAAA,IAAA,EAAA,EAAA;AAAA,IAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA;AAAA,GAAA,CAAA;;;;UAAd,cAAc;AAAA,IAAA,YAAA,EAAA,IAAA;AAAA,IAAA,QAAA,EAAA,kDAAA;AAAA,IAAA,MAAA,EAAA;AAAA,MAAA,yBAAA,EAAA,2BAAA;AAAA,MAAA,IAAA,EAAA,CAAA,mBAAA,EAAA,MAAA,CAAA;AAAA,MAAA,QAAA,EAAA,CAAA,oBAAA,EAAA,UAAA,CAAA;AAAA,MAAA,YAAA,EAAA,CAAA,4BAAA,EAAA,cAAA;KAAA;AAAA,IAAA,OAAA,EAAA;AAAA,MAAA,UAAA,EAAA,YAAA;AAAA,MAAA,UAAA,EAAA;KAAA;AAAA,IAAA,IAAA,EAAA;AAAA,MAAA,SAAA,EAAA;AAAA,QAAA,OAAA,EAAA,sBAAA;AAAA,QAAA,WAAA,EAAA,0BAAA;AAAA,QAAA,SAAA,EAAA;OAAA;AAAA,MAAA,UAAA,EAAA;AAAA,QAAA,oBAAA,EAAA,wBAAA;AAAA,QAAA,oBAAA,EAAA,UAAA;AAAA,QAAA,oBAAA,EAAA,iCAAA;AAAA,QAAA,6BAAA,EAAA,iBAAA;AAAA,QAAA,kCAAA,EAAA;OAAA;AAAA,MAAA,cAAA,EAAA;KAAA;AAAA,IAAA,OAAA,EAAA,CAAA;AAAA,MAAA,YAAA,EAAA,iBAAA;AAAA,MAAA,KAAA,EAAA,IAAA;AAAA,MAAA,SAAA,EAgHX,qBAAqB;AAAA,MAAA,WAAA,EAAA,IAAA;AAAA,MAAA,IAAA,EAAU;AAAW,KAAA,CAAA;IAAA,QAAA,EAAA,CAAA,gBAAA,CAAA;AAAA,IAAA,eAAA,EAAA,IAAA;AAAA,IAAA,QAAA,EAAA;AAAA,GAAA,CAAA;;;;;;QAhH7C,cAAc;AAAA,EAAA,UAAA,EAAA,CAAA;UAf1B,SAAS;AAAC,IAAA,IAAA,EAAA,CAAA;AACT,MAAA,QAAQ,EAAE,CAAA,gDAAA,CAAkD;AAC5D,MAAA,IAAI,EAAE;AACJ,QAAA,KAAK,EAAE,+BAA+B;AACtC,QAAA,sBAAsB,EAAE,sBAAsB;AAC9C,QAAA,sBAAsB,EAAE,UAAU;AAClC,QAAA,sBAAsB,EAAE,iCAAiC;AACzD,QAAA,+BAA+B,EAAE,iBAAiB;AAClD,QAAA,oCAAoC,EAAE,UAAU;AAChD,QAAA,SAAS,EAAE,sBAAsB;AACjC,QAAA,aAAa,EAAE,0BAA0B;AACzC,QAAA,WAAW,EAAE;OACd;AACD,MAAA,QAAQ,EAAE;KACX;;;;;YAqDE,KAAK;aAAC,2BAA2B;;;YAOjC,KAAK;aAAC,mBAAmB;;;YAsCzB,KAAK;aAAC,oBAAoB;;;YAO1B,KAAK;aAAC,4BAA4B;;;YAGlC;;;YAGA;;;YAEA,YAAY;MAAC,IAAA,EAAA,CAAA,qBAAqB,EAAE;AAAE,QAAA,IAAI,EAAE;OAAa;;;;;AC3NrD,MAAM,sCAAsC,GAAmC;AACpF,EAAA,IAAI,EAAE,aAAa;AACnB,EAAA,SAAS,EAAE;;AAqBP,MAAO,qBAAsB,SAAQ,cAAc,CAAA;AAO9C,EAAA,OAAO,GAAW,oBAAoB;;;;;UAPpC,qBAAqB;AAAA,IAAA,IAAA,EAAA,IAAA;AAAA,IAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA;AAAA,GAAA,CAAA;AAArB,EAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA;AAAA,IAAA,UAAA,EAAA,QAAA;AAAA,IAAA,OAAA,EAAA,QAAA;AAAA,IAAA,IAAA,EAAA,qBAAqB;AAAA,IAAA,YAAA,EAAA,IAAA;AAAA,IAAA,QAAA,EAAA,kCAAA;AAAA,IAAA,MAAA,EAAA;AAAA,MAAA,IAAA,EAAA,CAAA,0BAAA,EAAA,MAAA,CAAA;AAAA,MAAA,OAAA,EAAA;KAAA;AAAA,IAAA,SAAA,EAZrB,CACT;AACE,MAAA,OAAO,EAAE,kCAAkC;AAC3C,MAAA,QAAQ,EAAE;AACX,KAAA,EACD;AACE,MAAA,OAAO,EAAE,cAAc;AACvB,MAAA,WAAW,EAAE;AACd,KAAA,CACF;IAAA,QAAA,EAAA,CAAA,uBAAA,CAAA;AAAA,IAAA,eAAA,EAAA,IAAA;AAAA,IAAA,QAAA,EAAA,EAAA;AAAA,IAAA,QAAA,EAbS,kEAAkE;AAAA,IAAA,QAAA,EAAA,IAAA;AAAA,IAAA,YAAA,EAAA,CAAA;AAAA,MAAA,IAAA,EAAA,WAAA;AAAA,MAAA,IAAA,EAclE,qBAAqB;AAAA,MAAA,QAAA,EAAA,yBAAA;MAAA,QAAA,EAAA,CAAA,uBAAA;AAAA,KAAA,EAAA;AAAA,MAAA,IAAA,EAAA,WAAA;AAAA,MAAA,IAAA,EAAE,OAAO;AAAA,MAAA,QAAA,EAAA,UAAA;AAAA,MAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,IAAA,CAAA;MAAA,QAAA,EAAA,CAAA,SAAA;KAAA;AAAA,GAAA,CAAA;;;;;;QAE7B,qBAAqB;AAAA,EAAA,UAAA,EAAA,CAAA;UAjBjC,SAAS;AAAC,IAAA,IAAA,EAAA,CAAA;AACT,MAAA,QAAQ,EAAE,kEAAkE;AAC5E,MAAA,QAAQ,EAAE,CAAA,gCAAA,CAAkC;MAC5C,MAAM,EAAE,CAAC,gCAAgC,CAAC;AAC1C,MAAA,QAAQ,EAAE,uBAAuB;AACjC,MAAA,SAAS,EAAE,CACT;AACE,QAAA,OAAO,EAAE,kCAAkC;AAC3C,QAAA,QAAQ,EAAE;AACX,OAAA,EACD;AACE,QAAA,OAAO,EAAE,cAAc;AACvB,QAAA,WAAW,EAAA;AACZ,OAAA,CACF;AACD,MAAA,OAAO,EAAE,CAAC,qBAAqB,EAAE,OAAO;KACzC;;;;YAQE;;;;;MCHU,aAAa,CAAA;;;;;UAAb,aAAa;AAAA,IAAA,IAAA,EAAA,EAAA;AAAA,IAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA;AAAA,GAAA,CAAA;AAAb,EAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA;AAAA,IAAA,UAAA,EAAA,QAAA;AAAA,IAAA,OAAA,EAAA,QAAA;AAAA,IAAA,QAAA,EAAA,EAAA;AAAA,IAAA,IAAA,EAAA,aAAa;cArBtB,aAAa,EACb,YAAY,EACZ,eAAe,EACf,aAAa,EACb,OAAO,EACP,WAAW,EACX,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,cAAc;cAGd,mBAAmB,EACnB,OAAO,EACP,WAAW,EACX,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,cAAc;AAAA,GAAA,CAAA;AAGL,EAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA;AAAA,IAAA,UAAA,EAAA,QAAA;AAAA,IAAA,OAAA,EAAA,QAAA;AAAA,IAAA,QAAA,EAAA,EAAA;AAAA,IAAA,IAAA,EAAA,aAAa;cArBtB,aAAa,EACb,YAAY,EACZ,eAAe,EACf,aAAa,EAEb,WAAW,EAEX,qBAAqB,EAKrB,mBAAmB;AAAA,GAAA,CAAA;;;;;;QASV,aAAa;AAAA,EAAA,UAAA,EAAA,CAAA;UAvBzB,QAAQ;AAAC,IAAA,IAAA,EAAA,CAAA;MACR,OAAO,EAAE,CACP,aAAa,EACb,YAAY,EACZ,eAAe,EACf,aAAa,EACb,OAAO,EACP,WAAW,EACX,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,cAAc,CACf;AACD,MAAA,OAAO,EAAE,CACP,mBAAmB,EACnB,OAAO,EACP,WAAW,EACX,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,cAAc;KAEjB;;;;;;"}