{"version":3,"file":"period-year-norway-ngx-bootstrap-focus-trap.mjs","sources":["../../../../src/focus-trap/focus-trap-manager.ts","../../../../src/focus-trap/platform.ts","../../../../src/focus-trap/interactivity-checker.ts","../../../../src/focus-trap/boolean-property.ts","../../../../src/focus-trap/focus-trap.ts","../../../../src/focus-trap/focus-trap.module.ts","../../../../src/focus-trap/period-year-norway-ngx-bootstrap-focus-trap.ts"],"sourcesContent":["/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\n/* eslint-disable */\r\n\r\nimport { Injectable } from '@angular/core';\r\n\r\n/**\r\n * A FocusTrap managed by FocusTrapManager.\r\n * Implemented by ConfigurableFocusTrap to avoid circular dependency.\r\n */\r\nexport interface ManagedFocusTrap {\r\n  _enable(): void;\r\n  _disable(): void;\r\n  focusInitialElementWhenReady(): Promise<boolean>;\r\n}\r\n\r\n/** Injectable that ensures only the most recently enabled FocusTrap is active. */\r\n@Injectable({providedIn: 'root'})\r\nexport class FocusTrapManager {\r\n  // A stack of the FocusTraps on the page. Only the FocusTrap at the\r\n  // top of the stack is active.\r\n  private _focusTrapStack: ManagedFocusTrap[] = [];\r\n\r\n  /**\r\n   * Disables the FocusTrap at the top of the stack, and then pushes\r\n   * the new FocusTrap onto the stack.\r\n   */\r\n  register(focusTrap: ManagedFocusTrap): void {\r\n    // Dedupe focusTraps that register multiple times.\r\n    this._focusTrapStack = this._focusTrapStack.filter((ft) => ft !== focusTrap);\r\n\r\n    let stack = this._focusTrapStack;\r\n\r\n    if (stack.length) {\r\n      stack[stack.length - 1]._disable();\r\n    }\r\n\r\n    stack.push(focusTrap);\r\n    focusTrap._enable();\r\n  }\r\n\r\n  /**\r\n   * Removes the FocusTrap from the stack, and activates the\r\n   * FocusTrap that is the new top of the stack.\r\n   */\r\n  deregister(focusTrap: ManagedFocusTrap): void {\r\n    focusTrap._disable();\r\n\r\n    const stack = this._focusTrapStack;\r\n\r\n    const i = stack.indexOf(focusTrap);\r\n    if (i !== -1) {\r\n      stack.splice(i, 1);\r\n      if (stack.length) {\r\n        stack[stack.length - 1]._enable();\r\n      }\r\n    }\r\n  }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\n/* eslint-disable */\r\n\r\nimport { Inject, Injectable, PLATFORM_ID } from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\n\r\n// Whether the current platform supports the V8 Break Iterator. The V8 check\r\n// is necessary to detect all Blink based browsers.\r\nlet hasV8BreakIterator: boolean;\r\n\r\n// We need a try/catch around the reference to `Intl`, because accessing it in some cases can\r\n// cause IE to throw. These cases are tied to particular versions of Windows and can happen if\r\n// the consumer is providing a polyfilled `Map`. See:\r\n// https://github.com/Microsoft/ChakraCore/issues/3189\r\n// https://github.com/angular/components/issues/15687\r\ntry {\r\n  hasV8BreakIterator = (typeof Intl !== 'undefined' && (Intl as any).v8BreakIterator);\r\n} catch {\r\n  hasV8BreakIterator = false;\r\n}\r\n\r\n/**\r\n * Service to detect the current platform by comparing the userAgent strings and\r\n * checking browser-specific global properties.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class Platform {\r\n  // We want to use the Angular platform check because if the Document is shimmed\r\n  // without the navigator, the following checks will fail. This is preferred because\r\n  // sometimes the Document may be shimmed without the user's knowledge or intention\r\n  /** Whether the Angular application is being rendered in the browser. */\r\n  isBrowser: boolean = this._platformId ?\r\n    isPlatformBrowser(this._platformId) : typeof document === 'object' && !!document;\r\n\r\n  /** Whether the current browser is Microsoft Edge. */\r\n  EDGE: boolean = this.isBrowser && /(edge)/i.test(navigator.userAgent);\r\n\r\n  /** Whether the current rendering engine is Microsoft Trident. */\r\n  TRIDENT: boolean = this.isBrowser && /(msie|trident)/i.test(navigator.userAgent);\r\n\r\n  // EdgeHTML and Trident mock Blink specific things and need to be excluded from this check.\r\n  /** Whether the current rendering engine is Blink. */\r\n  BLINK: boolean = this.isBrowser && (!!((window as any).chrome || hasV8BreakIterator) &&\r\n    typeof CSS !== 'undefined' && !this.EDGE && !this.TRIDENT);\r\n\r\n  // Webkit is part of the userAgent in EdgeHTML, Blink and Trident. Therefore we need to\r\n  // ensure that Webkit runs standalone and is not used as another engine's base.\r\n  /** Whether the current rendering engine is WebKit. */\r\n  WEBKIT: boolean = this.isBrowser &&\r\n    /AppleWebKit/i.test(navigator.userAgent) && !this.BLINK && !this.EDGE && !this.TRIDENT;\r\n\r\n  /** Whether the current platform is Apple iOS. */\r\n  IOS: boolean = this.isBrowser && /iPad|iPhone|iPod/.test(navigator.userAgent) &&\r\n    !('MSStream' in window);\r\n\r\n  // It's difficult to detect the plain Gecko engine, because most of the browsers identify\r\n  // them self as Gecko-like browsers and modify the userAgent's according to that.\r\n  // Since we only cover one explicit Firefox case, we can simply check for Firefox\r\n  // instead of having an unstable check for Gecko.\r\n  /** Whether the current browser is Firefox. */\r\n  FIREFOX: boolean = this.isBrowser && /(firefox|minefield)/i.test(navigator.userAgent);\r\n\r\n  /** Whether the current platform is Android. */\r\n    // Trident on mobile adds the android platform to the userAgent to trick detections.\r\n  ANDROID: boolean = this.isBrowser && /android/i.test(navigator.userAgent) && !this.TRIDENT;\r\n\r\n  // Safari browsers will include the Safari keyword in their userAgent. Some browsers may fake\r\n  // this and just place the Safari keyword in the userAgent. To be more safe about Safari every\r\n  // Safari browser should also use Webkit as its layout engine.\r\n  /** Whether the current browser is Safari. */\r\n  SAFARI: boolean = this.isBrowser && /safari/i.test(navigator.userAgent) && this.WEBKIT;\r\n\r\n  constructor(@Inject(PLATFORM_ID) private _platformId: Object) {\r\n  }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\n/* eslint-disable */\r\n\r\nimport { Platform } from './platform';\r\nimport { Injectable } from '@angular/core';\r\n\r\n/**\r\n * Configuration for the isFocusable method.\r\n */\r\nexport class IsFocusableConfig {\r\n  /**\r\n   * Whether to count an element as focusable even if it is not currently visible.\r\n   */\r\n  ignoreVisibility: boolean = false;\r\n}\r\n\r\n// The InteractivityChecker leans heavily on the ally.js accessibility utilities.\r\n// Methods like `isTabbable` are only covering specific edge-cases for the browsers which are\r\n// supported.\r\n\r\n/**\r\n * Utility for checking the interactivity of an element, such as whether is is focusable or\r\n * tabbable.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class InteractivityChecker {\r\n\r\n  constructor(private _platform: Platform) {\r\n  }\r\n\r\n  /**\r\n   * Gets whether an element is disabled.\r\n   *\r\n   * @param element Element to be checked.\r\n   * @returns Whether the element is disabled.\r\n   */\r\n  isDisabled(element: HTMLElement): boolean {\r\n    // This does not capture some cases, such as a non-form control with a disabled attribute or\r\n    // a form control inside of a disabled form, but should capture the most common cases.\r\n    return element.hasAttribute('disabled');\r\n  }\r\n\r\n  /**\r\n   * Gets whether an element is visible for the purposes of interactivity.\r\n   *\r\n   * This will capture states like `display: none` and `visibility: hidden`, but not things like\r\n   * being clipped by an `overflow: hidden` parent or being outside the viewport.\r\n   *\r\n   * @returns Whether the element is visible.\r\n   */\r\n  isVisible(element: HTMLElement): boolean {\r\n    return hasGeometry(element) && getComputedStyle(element).visibility === 'visible';\r\n  }\r\n\r\n  /**\r\n   * Gets whether an element can be reached via Tab key.\r\n   * Assumes that the element has already been checked with isFocusable.\r\n   *\r\n   * @param element Element to be checked.\r\n   * @returns Whether the element is tabbable.\r\n   */\r\n  isTabbable(element: HTMLElement): boolean {\r\n    // Nothing is tabbable on the server 😎\r\n    if (!this._platform.isBrowser) {\r\n      return false;\r\n    }\r\n\r\n    const frameElement = getFrameElement(getWindow(element));\r\n\r\n    if (frameElement) {\r\n      // Frame elements inherit their tabindex onto all child elements.\r\n      if (getTabIndexValue(frameElement) === -1) {\r\n        return false;\r\n      }\r\n\r\n      // Browsers disable tabbing to an element inside of an invisible frame.\r\n      if (!this.isVisible(frameElement)) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    let nodeName = element.nodeName.toLowerCase();\r\n    let tabIndexValue = getTabIndexValue(element);\r\n\r\n    if (element.hasAttribute('contenteditable')) {\r\n      return tabIndexValue !== -1;\r\n    }\r\n\r\n    if (nodeName === 'iframe' || nodeName === 'object') {\r\n      // The frame or object's content may be tabbable depending on the content, but it's\r\n      // not possibly to reliably detect the content of the frames. We always consider such\r\n      // elements as non-tabbable.\r\n      return false;\r\n    }\r\n\r\n    // In iOS, the browser only considers some specific elements as tabbable.\r\n    if (this._platform.WEBKIT && this._platform.IOS && !isPotentiallyTabbableIOS(element)) {\r\n      return false;\r\n    }\r\n\r\n    if (nodeName === 'audio') {\r\n      // Audio elements without controls enabled are never tabbable, regardless\r\n      // of the tabindex attribute explicitly being set.\r\n      if (!element.hasAttribute('controls')) {\r\n        return false;\r\n      }\r\n      // Audio elements with controls are by default tabbable unless the\r\n      // tabindex attribute is set to `-1` explicitly.\r\n      return tabIndexValue !== -1;\r\n    }\r\n\r\n    if (nodeName === 'video') {\r\n      // For all video elements, if the tabindex attribute is set to `-1`, the video\r\n      // is not tabbable. Note: We cannot rely on the default `HTMLElement.tabIndex`\r\n      // property as that one is set to `-1` in Chrome, Edge and Safari v13.1. The\r\n      // tabindex attribute is the source of truth here.\r\n      if (tabIndexValue === -1) {\r\n        return false;\r\n      }\r\n      // If the tabindex is explicitly set, and not `-1` (as per check before), the\r\n      // video element is always tabbable (regardless of whether it has controls or not).\r\n      if (tabIndexValue !== null) {\r\n        return true;\r\n      }\r\n      // Otherwise (when no explicit tabindex is set), a video is only tabbable if it\r\n      // has controls enabled. Firefox is special as videos are always tabbable regardless\r\n      // of whether there are controls or not.\r\n      return this._platform.FIREFOX || element.hasAttribute('controls');\r\n    }\r\n\r\n    return element.tabIndex >= 0;\r\n  }\r\n\r\n  /**\r\n   * Gets whether an element can be focused by the user.\r\n   *\r\n   * @param element Element to be checked.\r\n   * @param config The config object with options to customize this method's behavior\r\n   * @returns Whether the element is focusable.\r\n   */\r\n  isFocusable(element: HTMLElement, config?: IsFocusableConfig): boolean {\r\n    // Perform checks in order of left to most expensive.\r\n    // Again, naive approach that does not capture many edge cases and browser quirks.\r\n    return isPotentiallyFocusable(element) && !this.isDisabled(element) &&\r\n      (config?.ignoreVisibility || this.isVisible(element));\r\n  }\r\n\r\n}\r\n\r\n/**\r\n * Returns the frame element from a window object. Since browsers like MS Edge throw errors if\r\n * the frameElement property is being accessed from a different host address, this property\r\n * should be accessed carefully.\r\n */\r\nfunction getFrameElement(window: Window) {\r\n  try {\r\n    return window.frameElement as HTMLElement;\r\n  } catch {\r\n    return null;\r\n  }\r\n}\r\n\r\n/** Checks whether the specified element has any geometry / rectangles. */\r\nfunction hasGeometry(element: HTMLElement): boolean {\r\n  // Use logic from jQuery to check for an invisible element.\r\n  // See https://github.com/jquery/jquery/blob/master/src/css/hiddenVisibleSelectors.js#L12\r\n  return !!(element.offsetWidth || element.offsetHeight ||\r\n    (typeof element.getClientRects === 'function' && element.getClientRects().length));\r\n}\r\n\r\n/** Gets whether an element's  */\r\nfunction isNativeFormElement(element: Node) {\r\n  let nodeName = element.nodeName.toLowerCase();\r\n  return nodeName === 'input' ||\r\n    nodeName === 'select' ||\r\n    nodeName === 'button' ||\r\n    nodeName === 'textarea';\r\n}\r\n\r\n/** Gets whether an element is an `<input type=\"hidden\">`. */\r\nfunction isHiddenInput(element: HTMLElement): boolean {\r\n  return isInputElement(element) && element.type == 'hidden';\r\n}\r\n\r\n/** Gets whether an element is an anchor that has an href attribute. */\r\nfunction isAnchorWithHref(element: HTMLElement): boolean {\r\n  return isAnchorElement(element) && element.hasAttribute('href');\r\n}\r\n\r\n/** Gets whether an element is an input element. */\r\nfunction isInputElement(element: HTMLElement): element is HTMLInputElement {\r\n  return element.nodeName.toLowerCase() == 'input';\r\n}\r\n\r\n/** Gets whether an element is an anchor element. */\r\nfunction isAnchorElement(element: HTMLElement): element is HTMLAnchorElement {\r\n  return element.nodeName.toLowerCase() == 'a';\r\n}\r\n\r\n/** Gets whether an element has a valid tabindex. */\r\nfunction hasValidTabIndex(element: HTMLElement): boolean {\r\n  if (!element.hasAttribute('tabindex') || element.tabIndex === undefined) {\r\n    return false;\r\n  }\r\n\r\n  let tabIndex = element.getAttribute('tabindex');\r\n\r\n  // IE11 parses tabindex=\"\" as the value \"-32768\"\r\n  if (tabIndex == '-32768') {\r\n    return false;\r\n  }\r\n\r\n  return !!(tabIndex && !isNaN(parseInt(tabIndex, 10)));\r\n}\r\n\r\n/**\r\n * Returns the parsed tabindex from the element attributes instead of returning the\r\n * evaluated tabindex from the browsers defaults.\r\n */\r\nfunction getTabIndexValue(element: HTMLElement): number | null {\r\n  if (!hasValidTabIndex(element)) {\r\n    return null;\r\n  }\r\n\r\n  // See browser issue in Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=1128054\r\n  const tabIndex = parseInt(element.getAttribute('tabindex') || '', 10);\r\n\r\n  return isNaN(tabIndex) ? -1 : tabIndex;\r\n}\r\n\r\n/** Checks whether the specified element is potentially tabbable on iOS */\r\nfunction isPotentiallyTabbableIOS(element: HTMLElement): boolean {\r\n  let nodeName = element.nodeName.toLowerCase();\r\n  let inputType = nodeName === 'input' && (element as HTMLInputElement).type;\r\n\r\n  return inputType === 'text'\r\n    || inputType === 'password'\r\n    || nodeName === 'select'\r\n    || nodeName === 'textarea';\r\n}\r\n\r\n/**\r\n * Gets whether an element is potentially focusable without taking current visible/disabled state\r\n * into account.\r\n */\r\nfunction isPotentiallyFocusable(element: HTMLElement): boolean {\r\n  // Inputs are potentially focusable *unless* they're type=\"hidden\".\r\n  if (isHiddenInput(element)) {\r\n    return false;\r\n  }\r\n\r\n  return isNativeFormElement(element) ||\r\n    isAnchorWithHref(element) ||\r\n    element.hasAttribute('contenteditable') ||\r\n    hasValidTabIndex(element);\r\n}\r\n\r\n/** Gets the parent window of a DOM node with regards of being inside of an iframe. */\r\nfunction getWindow(node: HTMLElement): Window {\r\n  // ownerDocument is null if `node` itself *is* a document.\r\n  return node.ownerDocument && node.ownerDocument.defaultView || window;\r\n}\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\n/* eslint-disable */\r\n\r\n/**\r\n * Type describing the allowed values for a boolean input.\r\n * @docs-private\r\n */\r\nexport type BooleanInput = string | boolean | null | undefined;\r\n\r\n/** Coerces a data-bound value (typically a string) to a boolean. */\r\nexport function coerceBooleanProperty(value: any): boolean {\r\n  return value != null && `${value}` !== 'false';\r\n}\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\n/* eslint-disable */\r\n\r\nimport { coerceBooleanProperty, BooleanInput } from './boolean-property';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport {\r\n  AfterContentInit,\r\n  Directive,\r\n  ElementRef,\r\n  Inject,\r\n  Injectable,\r\n  Input,\r\n  NgZone,\r\n  OnDestroy,\r\n  DoCheck,\r\n  SimpleChanges,\r\n  OnChanges\r\n} from '@angular/core';\r\nimport { take } from 'rxjs/operators';\r\nimport { InteractivityChecker } from './interactivity-checker';\r\n\r\n\r\n/**\r\n * Class that allows for trapping focus within a DOM element.\r\n *\r\n * This class currently uses a relatively simple approach to focus trapping.\r\n * It assumes that the tab order is the same as DOM order, which is not necessarily true.\r\n * Things like `tabIndex > 0`, flex `order`, and shadow roots can cause the two to misalign.\r\n *\r\n * @deprecated Use `ConfigurableFocusTrap` instead.\r\n * @breaking-change for 11.0.0 Remove this class.\r\n */\r\nexport class FocusTrap {\r\n  private _startAnchor?: HTMLElement | null;\r\n  private _endAnchor?: HTMLElement | null;\r\n  private _hasAttached = false;\r\n\r\n  // Event listeners for the anchors. Need to be regular functions so that we can unbind them later.\r\n  protected startAnchorListener = () => this.focusLastTabbableElement();\r\n  protected endAnchorListener = () => this.focusFirstTabbableElement();\r\n\r\n  /** Whether the focus trap is active. */\r\n  get enabled(): boolean {\r\n    return this._enabled;\r\n  }\r\n\r\n  set enabled(value: boolean) {\r\n    this._enabled = value;\r\n\r\n    if (this._startAnchor && this._endAnchor) {\r\n      this._toggleAnchorTabIndex(value, this._startAnchor);\r\n      this._toggleAnchorTabIndex(value, this._endAnchor);\r\n    }\r\n  }\r\n\r\n  protected _enabled: boolean = true;\r\n\r\n  constructor(\r\n    readonly _element: HTMLElement,\r\n    private _checker: InteractivityChecker,\r\n    readonly _ngZone: NgZone,\r\n    readonly _document: Document,\r\n    deferAnchors = false) {\r\n\r\n    if (!deferAnchors) {\r\n      this.attachAnchors();\r\n    }\r\n  }\r\n\r\n  /** Destroys the focus trap by cleaning up the anchors. */\r\n  destroy() {\r\n    const startAnchor = this._startAnchor;\r\n    const endAnchor = this._endAnchor;\r\n\r\n    if (startAnchor) {\r\n      startAnchor.removeEventListener('focus', this.startAnchorListener);\r\n\r\n      if (startAnchor.parentNode) {\r\n        startAnchor.parentNode.removeChild(startAnchor);\r\n      }\r\n    }\r\n\r\n    if (endAnchor) {\r\n      endAnchor.removeEventListener('focus', this.endAnchorListener);\r\n\r\n      if (endAnchor.parentNode) {\r\n        endAnchor.parentNode.removeChild(endAnchor);\r\n      }\r\n    }\r\n\r\n    this._startAnchor = this._endAnchor = null;\r\n    this._hasAttached = false;\r\n  }\r\n\r\n  /**\r\n   * Inserts the anchors into the DOM. This is usually done automatically\r\n   * in the constructor, but can be deferred for cases like directives with `*ngIf`.\r\n   * @returns Whether the focus trap managed to attach successfuly. This may not be the case\r\n   * if the target element isn't currently in the DOM.\r\n   */\r\n  attachAnchors(): boolean {\r\n    // If we're not on the browser, there can be no focus to trap.\r\n    if (this._hasAttached) {\r\n      return true;\r\n    }\r\n\r\n    this._ngZone.runOutsideAngular(() => {\r\n      if (!this._startAnchor) {\r\n        this._startAnchor = this._createAnchor();\r\n        this._startAnchor!.addEventListener('focus', this.startAnchorListener);\r\n      }\r\n\r\n      if (!this._endAnchor) {\r\n        this._endAnchor = this._createAnchor();\r\n        this._endAnchor!.addEventListener('focus', this.endAnchorListener);\r\n      }\r\n    });\r\n\r\n    if (this._element.parentNode) {\r\n      this._element.parentNode.insertBefore(this._startAnchor!, this._element);\r\n      this._element.parentNode.insertBefore(this._endAnchor!, this._element.nextSibling);\r\n      this._hasAttached = true;\r\n    }\r\n\r\n    return this._hasAttached;\r\n  }\r\n\r\n  /**\r\n   * Waits for the zone to stabilize, then either focuses the first element that the\r\n   * user specified, or the first tabbable element.\r\n   * @returns Returns a promise that resolves with a boolean, depending\r\n   * on whether focus was moved successfully.\r\n   */\r\n  focusInitialElementWhenReady(): Promise<boolean> {\r\n    return new Promise<boolean>(resolve => {\r\n      this._executeOnStable(() => resolve(this.focusInitialElement()));\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Waits for the zone to stabilize, then focuses\r\n   * the first tabbable element within the focus trap region.\r\n   * @returns Returns a promise that resolves with a boolean, depending\r\n   * on whether focus was moved successfully.\r\n   */\r\n  focusFirstTabbableElementWhenReady(): Promise<boolean> {\r\n    return new Promise<boolean>(resolve => {\r\n      this._executeOnStable(() => resolve(this.focusFirstTabbableElement()));\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Waits for the zone to stabilize, then focuses\r\n   * the last tabbable element within the focus trap region.\r\n   * @returns Returns a promise that resolves with a boolean, depending\r\n   * on whether focus was moved successfully.\r\n   */\r\n  focusLastTabbableElementWhenReady(): Promise<boolean> {\r\n    return new Promise<boolean>(resolve => {\r\n      this._executeOnStable(() => resolve(this.focusLastTabbableElement()));\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Get the specified boundary element of the trapped region.\r\n   * @param bound The boundary to get (start or end of trapped region).\r\n   * @returns The boundary element.\r\n   */\r\n  private _getRegionBoundary(bound: 'start' | 'end'): HTMLElement | null {\r\n    // Contains the deprecated version of selector, for temporary backwards comparability.\r\n    let markers = this._element.querySelectorAll(`[cdk-focus-region-${bound}], ` +\r\n      `[cdkFocusRegion${bound}], ` +\r\n      `[cdk-focus-${bound}]`) as NodeListOf<HTMLElement>;\r\n\r\n    for (let i = 0; i < markers.length; i++) {\r\n      // @breaking-change 8.0.0\r\n      if (markers[i].hasAttribute(`cdk-focus-${bound}`)) {\r\n        console.warn(`Found use of deprecated attribute 'cdk-focus-${bound}', ` +\r\n          `use 'cdkFocusRegion${bound}' instead. The deprecated ` +\r\n          `attribute will be removed in 8.0.0.`, markers[i]);\r\n      } else if (markers[i].hasAttribute(`cdk-focus-region-${bound}`)) {\r\n        console.warn(`Found use of deprecated attribute 'cdk-focus-region-${bound}', ` +\r\n          `use 'cdkFocusRegion${bound}' instead. The deprecated attribute ` +\r\n          `will be removed in 8.0.0.`, markers[i]);\r\n      }\r\n    }\r\n\r\n    if (bound == 'start') {\r\n      return markers.length ? markers[0] : this._getFirstTabbableElement(this._element);\r\n    }\r\n    return markers.length ?\r\n      markers[markers.length - 1] : this._getLastTabbableElement(this._element);\r\n  }\r\n\r\n  /**\r\n   * Focuses the element that should be focused when the focus trap is initialized.\r\n   * @returns Whether focus was moved successfully.\r\n   */\r\n  focusInitialElement(): boolean {\r\n    // Contains the deprecated version of selector, for temporary backwards comparability.\r\n    const redirectToElement = this._element.querySelector(`[cdk-focus-initial], ` +\r\n      `[cdkFocusInitial]`) as HTMLElement;\r\n\r\n    if (redirectToElement) {\r\n      // @breaking-change 8.0.0\r\n      if (redirectToElement.hasAttribute(`cdk-focus-initial`)) {\r\n        console.warn(`Found use of deprecated attribute 'cdk-focus-initial', ` +\r\n          `use 'cdkFocusInitial' instead. The deprecated attribute ` +\r\n          `will be removed in 8.0.0`, redirectToElement);\r\n      }\r\n\r\n      // Warn the consumer if the element they've pointed to\r\n      // isn't focusable, when not in production mode.\r\n\r\n      if (!this._checker.isFocusable(redirectToElement)) {\r\n        const focusableChild = this._getFirstTabbableElement(redirectToElement) as HTMLElement;\r\n        focusableChild?.focus();\r\n        return !!focusableChild;\r\n      }\r\n\r\n      redirectToElement.focus();\r\n      return true;\r\n    }\r\n\r\n    return this.focusFirstTabbableElement();\r\n  }\r\n\r\n  /**\r\n   * Focuses the first tabbable element within the focus trap region.\r\n   * @returns Whether focus was moved successfully.\r\n   */\r\n  focusFirstTabbableElement(): boolean {\r\n    const redirectToElement = this._getRegionBoundary('start');\r\n\r\n    if (redirectToElement) {\r\n      redirectToElement.focus();\r\n    }\r\n\r\n    return !!redirectToElement;\r\n  }\r\n\r\n  /**\r\n   * Focuses the last tabbable element within the focus trap region.\r\n   * @returns Whether focus was moved successfully.\r\n   */\r\n  focusLastTabbableElement(): boolean {\r\n    const redirectToElement = this._getRegionBoundary('end');\r\n\r\n    if (redirectToElement) {\r\n      redirectToElement.focus();\r\n    }\r\n\r\n    return !!redirectToElement;\r\n  }\r\n\r\n  /**\r\n   * Checks whether the focus trap has successfully been attached.\r\n   */\r\n  hasAttached(): boolean {\r\n    return this._hasAttached;\r\n  }\r\n\r\n  /** Get the first tabbable element from a DOM subtree (inclusive). */\r\n  private _getFirstTabbableElement(root: HTMLElement): HTMLElement | null {\r\n    if (this._checker.isFocusable(root) && this._checker.isTabbable(root)) {\r\n      return root;\r\n    }\r\n\r\n    // Iterate in DOM order. Note that IE doesn't have `children` for SVG so we fall\r\n    // back to `childNodes` which includes text nodes, comments etc.\r\n    let children = root.children || root.childNodes;\r\n\r\n    for (let i = 0; i < children.length; i++) {\r\n      let tabbableChild = children[i].nodeType === this._document.ELEMENT_NODE ?\r\n        this._getFirstTabbableElement(children[i] as HTMLElement) :\r\n        null;\r\n\r\n      if (tabbableChild) {\r\n        return tabbableChild;\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  /** Get the last tabbable element from a DOM subtree (inclusive). */\r\n  private _getLastTabbableElement(root: HTMLElement): HTMLElement | null {\r\n    if (this._checker.isFocusable(root) && this._checker.isTabbable(root)) {\r\n      return root;\r\n    }\r\n\r\n    // Iterate in reverse DOM order.\r\n    let children = root.children || root.childNodes;\r\n\r\n    for (let i = children.length - 1; i >= 0; i--) {\r\n      let tabbableChild = children[i].nodeType === this._document.ELEMENT_NODE ?\r\n        this._getLastTabbableElement(children[i] as HTMLElement) :\r\n        null;\r\n\r\n      if (tabbableChild) {\r\n        return tabbableChild;\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  /** Creates an anchor element. */\r\n  private _createAnchor(): HTMLElement {\r\n    const anchor = this._document.createElement('div');\r\n    this._toggleAnchorTabIndex(this._enabled, anchor);\r\n    anchor.classList.add('cdk-visually-hidden');\r\n    anchor.classList.add('cdk-focus-trap-anchor');\r\n    anchor.setAttribute('aria-hidden', 'true');\r\n    return anchor;\r\n  }\r\n\r\n  /**\r\n   * Toggles the `tabindex` of an anchor, based on the enabled state of the focus trap.\r\n   * @param isEnabled Whether the focus trap is enabled.\r\n   * @param anchor Anchor on which to toggle the tabindex.\r\n   */\r\n  private _toggleAnchorTabIndex(isEnabled: boolean, anchor: HTMLElement) {\r\n    // Remove the tabindex completely, rather than setting it to -1, because if the\r\n    // element has a tabindex, the user might still hit it when navigating with the arrow keys.\r\n    isEnabled ? anchor.setAttribute('tabindex', '0') : anchor.removeAttribute('tabindex');\r\n  }\r\n\r\n  /**\r\n   * Toggles the`tabindex` of both anchors to either trap Tab focus or allow it to escape.\r\n   * @param enabled: Whether the anchors should trap Tab.\r\n   */\r\n  protected toggleAnchors(enabled: boolean) {\r\n    if (this._startAnchor && this._endAnchor) {\r\n      this._toggleAnchorTabIndex(enabled, this._startAnchor);\r\n      this._toggleAnchorTabIndex(enabled, this._endAnchor);\r\n    }\r\n  }\r\n\r\n  /** Executes a function when the zone is stable. */\r\n  private _executeOnStable(fn: () => any): void {\r\n    if (this._ngZone.isStable) {\r\n      fn();\r\n    } else {\r\n      this._ngZone.onStable.pipe(take(1)).subscribe(fn);\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Factory that allows easy instantiation of focus traps.\r\n * @deprecated Use `ConfigurableFocusTrapFactory` instead.\r\n * @breaking-change for 11.0.0 Remove this class.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class FocusTrapFactory {\r\n  private _document: Document;\r\n\r\n  constructor(\r\n    private _checker: InteractivityChecker,\r\n    private _ngZone: NgZone,\r\n    @Inject(DOCUMENT) _document: any) {\r\n\r\n    this._document = _document;\r\n  }\r\n\r\n  /**\r\n   * Creates a focus-trapped region around the given element.\r\n   * @param element The element around which focus will be trapped.\r\n   * @param deferCaptureElements Defers the creation of focus-capturing elements to be done\r\n   *     manually by the user.\r\n   * @returns The created focus trap instance.\r\n   */\r\n  create(element: HTMLElement, deferCaptureElements: boolean = false): FocusTrap {\r\n    return new FocusTrap(\r\n      element, this._checker, this._ngZone, this._document, deferCaptureElements);\r\n  }\r\n}\r\n\r\n/** Directive for trapping focus within a region. */\r\n@Directive({\n    selector: '[focusTrap]',\n    exportAs: 'focusTrap',\n    standalone: false\n})\r\nexport class FocusTrapDirective implements OnDestroy, AfterContentInit, OnChanges, DoCheck {\r\n  private _document: Document;\r\n\r\n  /** Underlying FocusTrap instance. */\r\n  focusTrap: FocusTrap;\r\n\r\n  /** Previously focused element to restore focus to upon destroy when using autoCapture. */\r\n  private _previouslyFocusedElement: HTMLElement | null = null;\r\n\r\n  /** Whether the focus trap is active. */\r\n  @Input('cdkTrapFocus')\r\n  get enabled(): boolean {\r\n    return this.focusTrap.enabled;\r\n  }\r\n\r\n  set enabled(value: boolean) {\r\n    this.focusTrap.enabled = coerceBooleanProperty(value);\r\n  }\r\n\r\n  /**\r\n   * Whether the directive should automatically move focus into the trapped region upon\r\n   * initialization and return focus to the previous activeElement upon destruction.\r\n   */\r\n  @Input('cdkTrapFocusAutoCapture')\r\n  get autoCapture(): boolean {\r\n    return this._autoCapture;\r\n  }\r\n\r\n  set autoCapture(value: boolean) {\r\n    this._autoCapture = coerceBooleanProperty(value);\r\n  }\r\n\r\n  private _autoCapture = false;\r\n\r\n  constructor(\r\n    private _elementRef: ElementRef<HTMLElement>,\r\n    private _focusTrapFactory: FocusTrapFactory,\r\n    @Inject(DOCUMENT) _document: any) {\r\n\r\n    this._document = _document;\r\n    this.focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement, true);\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.focusTrap.destroy();\r\n\r\n    // If we stored a previously focused element when using autoCapture, return focus to that\r\n    // element now that the trapped region is being destroyed.\r\n    if (this._previouslyFocusedElement) {\r\n      this._previouslyFocusedElement.focus();\r\n      this._previouslyFocusedElement = null;\r\n    }\r\n  }\r\n\r\n  ngAfterContentInit() {\r\n    this.focusTrap.attachAnchors();\r\n\r\n    if (this.autoCapture) {\r\n      this._captureFocus();\r\n    }\r\n  }\r\n\r\n  ngDoCheck() {\r\n    if (!this.focusTrap.hasAttached()) {\r\n      this.focusTrap.attachAnchors();\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    const autoCaptureChange = changes['autoCapture'];\r\n\r\n    if (autoCaptureChange && !autoCaptureChange.firstChange && this.autoCapture &&\r\n      this.focusTrap.hasAttached()) {\r\n      this._captureFocus();\r\n    }\r\n  }\r\n\r\n  private _captureFocus() {\r\n    this._previouslyFocusedElement = this._document.activeElement as HTMLElement;\r\n    this.focusTrap.focusInitialElementWhenReady();\r\n  }\r\n\r\n  static ngAcceptInputType_enabled: BooleanInput;\r\n  static ngAcceptInputType_autoCapture: BooleanInput;\r\n}\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { FocusTrapManager } from './focus-trap-manager';\r\nimport { InteractivityChecker } from './interactivity-checker';\r\nimport { FocusTrapDirective } from './focus-trap';\r\nimport { Platform } from './platform';\r\n\r\n@NgModule({\r\n  imports: [CommonModule],\r\n  declarations: [FocusTrapDirective],\r\n  exports: [FocusTrapDirective]\r\n})\r\nexport class FocusTrapModule {\r\n  static forRoot(): ModuleWithProviders<FocusTrapModule> {\r\n    return {\r\n      ngModule: FocusTrapModule,\r\n      providers: [\r\n        FocusTrapManager,\r\n        Platform,\r\n        InteractivityChecker\r\n      ]\r\n    };\r\n  }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.Platform"],"mappings":";;;;;AAAA;;;;;;AAMG;AAEH;AAcA;MAEa,gBAAgB,CAAA;AAD7B,IAAA,WAAA,GAAA;;;QAIU,IAAe,CAAA,eAAA,GAAuB,EAAE;AAqCjD;AAnCC;;;AAGG;AACH,IAAA,QAAQ,CAAC,SAA2B,EAAA;;AAElC,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,SAAS,CAAC;AAE5E,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,eAAe;AAEhC,QAAA,IAAI,KAAK,CAAC,MAAM,EAAE;YAChB,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE;;AAGpC,QAAA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;QACrB,SAAS,CAAC,OAAO,EAAE;;AAGrB;;;AAGG;AACH,IAAA,UAAU,CAAC,SAA2B,EAAA;QACpC,SAAS,CAAC,QAAQ,EAAE;AAEpB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe;QAElC,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;AAClC,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;AACZ,YAAA,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AAClB,YAAA,IAAI,KAAK,CAAC,MAAM,EAAE;gBAChB,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE;;;;8GApC5B,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cADJ,MAAM,EAAA,CAAA,CAAA;;2FAClB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;ACvBhC;;;;;;AAMG;AAEH;AAKA;AACA;AACA,IAAI,kBAA2B;AAE/B;AACA;AACA;AACA;AACA;AACA,IAAI;IACF,kBAAkB,IAAI,OAAO,IAAI,KAAK,WAAW,IAAK,IAAY,CAAC,eAAe,CAAC;AACrF;AAAE,MAAM;IACN,kBAAkB,GAAG,KAAK;AAC5B;AAEA;;;AAGG;MAEU,QAAQ,CAAA;AA8CnB,IAAA,WAAA,CAAyC,WAAmB,EAAA;QAAnB,IAAW,CAAA,WAAA,GAAX,WAAW;;;;;AAzCpD,QAAA,IAAA,CAAA,SAAS,GAAY,IAAI,CAAC,WAAW;AACnC,YAAA,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ;;AAGlF,QAAA,IAAA,CAAA,IAAI,GAAY,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;;AAGrE,QAAA,IAAA,CAAA,OAAO,GAAY,IAAI,CAAC,SAAS,IAAI,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;;;AAIhF,QAAA,IAAA,CAAA,KAAK,GAAY,IAAI,CAAC,SAAS,KAAK,CAAC,EAAG,MAAc,CAAC,MAAM,IAAI,kBAAkB,CAAC;AAClF,YAAA,OAAO,GAAG,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;;;QAK5D,IAAM,CAAA,MAAA,GAAY,IAAI,CAAC,SAAS;YAC9B,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO;;AAGxF,QAAA,IAAA,CAAA,GAAG,GAAY,IAAI,CAAC,SAAS,IAAI,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;AAC3E,YAAA,EAAE,UAAU,IAAI,MAAM,CAAC;;;;;;AAOzB,QAAA,IAAA,CAAA,OAAO,GAAY,IAAI,CAAC,SAAS,IAAI,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;;;AAIrF,QAAA,IAAA,CAAA,OAAO,GAAY,IAAI,CAAC,SAAS,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO;;;;;AAM1F,QAAA,IAAA,CAAA,MAAM,GAAY,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,MAAM;;AA5C3E,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,QAAQ,kBA8CC,WAAW,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AA9CpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,QAAQ,cADK,MAAM,EAAA,CAAA,CAAA;;2FACnB,QAAQ,EAAA,UAAA,EAAA,CAAA;kBADpB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;0BA+CnB,MAAM;2BAAC,WAAW;;;AC/EjC;;;;;;AAMG;AAEH;AAKA;;AAEG;MACU,iBAAiB,CAAA;AAA9B,IAAA,WAAA,GAAA;AACE;;AAEG;QACH,IAAgB,CAAA,gBAAA,GAAY,KAAK;;AAClC;AAED;AACA;AACA;AAEA;;;AAGG;MAEU,oBAAoB,CAAA;AAE/B,IAAA,WAAA,CAAoB,SAAmB,EAAA;QAAnB,IAAS,CAAA,SAAA,GAAT,SAAS;;AAG7B;;;;;AAKG;AACH,IAAA,UAAU,CAAC,OAAoB,EAAA;;;AAG7B,QAAA,OAAO,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC;;AAGzC;;;;;;;AAOG;AACH,IAAA,SAAS,CAAC,OAAoB,EAAA;AAC5B,QAAA,OAAO,WAAW,CAAC,OAAO,CAAC,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC,UAAU,KAAK,SAAS;;AAGnF;;;;;;AAMG;AACH,IAAA,UAAU,CAAC,OAAoB,EAAA;;AAE7B,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;AAC7B,YAAA,OAAO,KAAK;;QAGd,MAAM,YAAY,GAAG,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAExD,IAAI,YAAY,EAAE;;YAEhB,IAAI,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE;AACzC,gBAAA,OAAO,KAAK;;;YAId,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE;AACjC,gBAAA,OAAO,KAAK;;;QAIhB,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE;AAC7C,QAAA,IAAI,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC;AAE7C,QAAA,IAAI,OAAO,CAAC,YAAY,CAAC,iBAAiB,CAAC,EAAE;AAC3C,YAAA,OAAO,aAAa,KAAK,CAAC,CAAC;;QAG7B,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,QAAQ,EAAE;;;;AAIlD,YAAA,OAAO,KAAK;;;AAId,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,EAAE;AACrF,YAAA,OAAO,KAAK;;AAGd,QAAA,IAAI,QAAQ,KAAK,OAAO,EAAE;;;YAGxB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;AACrC,gBAAA,OAAO,KAAK;;;;AAId,YAAA,OAAO,aAAa,KAAK,CAAC,CAAC;;AAG7B,QAAA,IAAI,QAAQ,KAAK,OAAO,EAAE;;;;;AAKxB,YAAA,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;AACxB,gBAAA,OAAO,KAAK;;;;AAId,YAAA,IAAI,aAAa,KAAK,IAAI,EAAE;AAC1B,gBAAA,OAAO,IAAI;;;;;AAKb,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC;;AAGnE,QAAA,OAAO,OAAO,CAAC,QAAQ,IAAI,CAAC;;AAG9B;;;;;;AAMG;IACH,WAAW,CAAC,OAAoB,EAAE,MAA0B,EAAA;;;QAG1D,OAAO,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;aAChE,MAAM,EAAE,gBAAgB,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;;8GAvH9C,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cADP,MAAM,EAAA,CAAA,CAAA;;2FACnB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;AA6HlC;;;;AAIG;AACH,SAAS,eAAe,CAAC,MAAc,EAAA;AACrC,IAAA,IAAI;QACF,OAAO,MAAM,CAAC,YAA2B;;AACzC,IAAA,MAAM;AACN,QAAA,OAAO,IAAI;;AAEf;AAEA;AACA,SAAS,WAAW,CAAC,OAAoB,EAAA;;;IAGvC,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,YAAY;AACnD,SAAC,OAAO,OAAO,CAAC,cAAc,KAAK,UAAU,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC;AACtF;AAEA;AACA,SAAS,mBAAmB,CAAC,OAAa,EAAA;IACxC,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE;IAC7C,OAAO,QAAQ,KAAK,OAAO;AACzB,QAAA,QAAQ,KAAK,QAAQ;AACrB,QAAA,QAAQ,KAAK,QAAQ;QACrB,QAAQ,KAAK,UAAU;AAC3B;AAEA;AACA,SAAS,aAAa,CAAC,OAAoB,EAAA;IACzC,OAAO,cAAc,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,IAAI,QAAQ;AAC5D;AAEA;AACA,SAAS,gBAAgB,CAAC,OAAoB,EAAA;IAC5C,OAAO,eAAe,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC;AACjE;AAEA;AACA,SAAS,cAAc,CAAC,OAAoB,EAAA;IAC1C,OAAO,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,OAAO;AAClD;AAEA;AACA,SAAS,eAAe,CAAC,OAAoB,EAAA;IAC3C,OAAO,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,GAAG;AAC9C;AAEA;AACA,SAAS,gBAAgB,CAAC,OAAoB,EAAA;AAC5C,IAAA,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE;AACvE,QAAA,OAAO,KAAK;;IAGd,IAAI,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC;;AAG/C,IAAA,IAAI,QAAQ,IAAI,QAAQ,EAAE;AACxB,QAAA,OAAO,KAAK;;AAGd,IAAA,OAAO,CAAC,EAAE,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;AACvD;AAEA;;;AAGG;AACH,SAAS,gBAAgB,CAAC,OAAoB,EAAA;AAC5C,IAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE;AAC9B,QAAA,OAAO,IAAI;;;AAIb,IAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;AAErE,IAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ;AACxC;AAEA;AACA,SAAS,wBAAwB,CAAC,OAAoB,EAAA;IACpD,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE;IAC7C,IAAI,SAAS,GAAG,QAAQ,KAAK,OAAO,IAAK,OAA4B,CAAC,IAAI;IAE1E,OAAO,SAAS,KAAK;AAChB,WAAA,SAAS,KAAK;AACd,WAAA,QAAQ,KAAK;WACb,QAAQ,KAAK,UAAU;AAC9B;AAEA;;;AAGG;AACH,SAAS,sBAAsB,CAAC,OAAoB,EAAA;;AAElD,IAAA,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE;AAC1B,QAAA,OAAO,KAAK;;IAGd,OAAO,mBAAmB,CAAC,OAAO,CAAC;QACjC,gBAAgB,CAAC,OAAO,CAAC;AACzB,QAAA,OAAO,CAAC,YAAY,CAAC,iBAAiB,CAAC;QACvC,gBAAgB,CAAC,OAAO,CAAC;AAC7B;AAEA;AACA,SAAS,SAAS,CAAC,IAAiB,EAAA;;IAElC,OAAO,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,IAAI,MAAM;AACvE;;AC5QA;;;;;;AAMG;AAUH;AACM,SAAU,qBAAqB,CAAC,KAAU,EAAA;IAC9C,OAAO,KAAK,IAAI,IAAI,IAAI,GAAG,KAAK,CAAA,CAAE,KAAK,OAAO;AAChD;;ACnBA;;;;;;AAMG;AAEH;AAqBA;;;;;;;;;AASG;MACU,SAAS,CAAA;;AAUpB,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;;IAGtB,IAAI,OAAO,CAAC,KAAc,EAAA;AACxB,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QAErB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE;YACxC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC;YACpD,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;;;IAMtD,WACW,CAAA,QAAqB,EACtB,QAA8B,EAC7B,OAAe,EACf,SAAmB,EAC5B,YAAY,GAAG,KAAK,EAAA;QAJX,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACT,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACP,IAAO,CAAA,OAAA,GAAP,OAAO;QACP,IAAS,CAAA,SAAA,GAAT,SAAS;QA1BZ,IAAY,CAAA,YAAA,GAAG,KAAK;;QAGlB,IAAmB,CAAA,mBAAA,GAAG,MAAM,IAAI,CAAC,wBAAwB,EAAE;QAC3D,IAAiB,CAAA,iBAAA,GAAG,MAAM,IAAI,CAAC,yBAAyB,EAAE;QAgB1D,IAAQ,CAAA,QAAA,GAAY,IAAI;QAShC,IAAI,CAAC,YAAY,EAAE;YACjB,IAAI,CAAC,aAAa,EAAE;;;;IAKxB,OAAO,GAAA;AACL,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY;AACrC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU;QAEjC,IAAI,WAAW,EAAE;YACf,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC;AAElE,YAAA,IAAI,WAAW,CAAC,UAAU,EAAE;AAC1B,gBAAA,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC;;;QAInD,IAAI,SAAS,EAAE;YACb,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC;AAE9D,YAAA,IAAI,SAAS,CAAC,UAAU,EAAE;AACxB,gBAAA,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC;;;QAI/C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI;AAC1C,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;;AAG3B;;;;;AAKG;IACH,aAAa,GAAA;;AAEX,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,OAAO,IAAI;;AAGb,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAK;AAClC,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;gBACxC,IAAI,CAAC,YAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC;;AAGxE,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;gBACtC,IAAI,CAAC,UAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC;;AAEtE,SAAC,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;AAC5B,YAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,YAAa,EAAE,IAAI,CAAC,QAAQ,CAAC;AACxE,YAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,UAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;AAClF,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;;QAG1B,OAAO,IAAI,CAAC,YAAY;;AAG1B;;;;;AAKG;IACH,4BAA4B,GAAA;AAC1B,QAAA,OAAO,IAAI,OAAO,CAAU,OAAO,IAAG;AACpC,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAClE,SAAC,CAAC;;AAGJ;;;;;AAKG;IACH,kCAAkC,GAAA;AAChC,QAAA,OAAO,IAAI,OAAO,CAAU,OAAO,IAAG;AACpC,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC;AACxE,SAAC,CAAC;;AAGJ;;;;;AAKG;IACH,iCAAiC,GAAA;AAC/B,QAAA,OAAO,IAAI,OAAO,CAAU,OAAO,IAAG;AACpC,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAC;AACvE,SAAC,CAAC;;AAGJ;;;;AAIG;AACK,IAAA,kBAAkB,CAAC,KAAsB,EAAA;;QAE/C,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAqB,kBAAA,EAAA,KAAK,CAAK,GAAA,CAAA;AAC1E,YAAA,CAAA,eAAA,EAAkB,KAAK,CAAK,GAAA,CAAA;YAC5B,CAAc,WAAA,EAAA,KAAK,CAAG,CAAA,CAAA,CAA4B;AAEpD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;;AAEvC,YAAA,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA,UAAA,EAAa,KAAK,CAAA,CAAE,CAAC,EAAE;AACjD,gBAAA,OAAO,CAAC,IAAI,CAAC,CAAA,6CAAA,EAAgD,KAAK,CAAK,GAAA,CAAA;AACrE,oBAAA,CAAA,mBAAA,EAAsB,KAAK,CAA4B,0BAAA,CAAA;AACvD,oBAAA,CAAA,mCAAA,CAAqC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;;AAC/C,iBAAA,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA,iBAAA,EAAoB,KAAK,CAAA,CAAE,CAAC,EAAE;AAC/D,gBAAA,OAAO,CAAC,IAAI,CAAC,CAAA,oDAAA,EAAuD,KAAK,CAAK,GAAA,CAAA;AAC5E,oBAAA,CAAA,mBAAA,EAAsB,KAAK,CAAsC,oCAAA,CAAA;AACjE,oBAAA,CAAA,yBAAA,CAA2B,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;;;AAI9C,QAAA,IAAI,KAAK,IAAI,OAAO,EAAE;YACpB,OAAO,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC;;AAEnF,QAAA,OAAO,OAAO,CAAC,MAAM;AACnB,YAAA,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC;;AAG7E;;;AAGG;IACH,mBAAmB,GAAA;;QAEjB,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAuB,qBAAA,CAAA;AAC3E,YAAA,CAAA,iBAAA,CAAmB,CAAgB;QAErC,IAAI,iBAAiB,EAAE;;AAErB,YAAA,IAAI,iBAAiB,CAAC,YAAY,CAAC,CAAmB,iBAAA,CAAA,CAAC,EAAE;gBACvD,OAAO,CAAC,IAAI,CAAC,CAAyD,uDAAA,CAAA;oBACpE,CAA0D,wDAAA,CAAA;oBAC1D,CAA0B,wBAAA,CAAA,EAAE,iBAAiB,CAAC;;;;YAMlD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,iBAAiB,CAAC,EAAE;gBACjD,MAAM,cAAc,GAAG,IAAI,CAAC,wBAAwB,CAAC,iBAAiB,CAAgB;gBACtF,cAAc,EAAE,KAAK,EAAE;gBACvB,OAAO,CAAC,CAAC,cAAc;;YAGzB,iBAAiB,CAAC,KAAK,EAAE;AACzB,YAAA,OAAO,IAAI;;AAGb,QAAA,OAAO,IAAI,CAAC,yBAAyB,EAAE;;AAGzC;;;AAGG;IACH,yBAAyB,GAAA;QACvB,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;QAE1D,IAAI,iBAAiB,EAAE;YACrB,iBAAiB,CAAC,KAAK,EAAE;;QAG3B,OAAO,CAAC,CAAC,iBAAiB;;AAG5B;;;AAGG;IACH,wBAAwB,GAAA;QACtB,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;QAExD,IAAI,iBAAiB,EAAE;YACrB,iBAAiB,CAAC,KAAK,EAAE;;QAG3B,OAAO,CAAC,CAAC,iBAAiB;;AAG5B;;AAEG;IACH,WAAW,GAAA;QACT,OAAO,IAAI,CAAC,YAAY;;;AAIlB,IAAA,wBAAwB,CAAC,IAAiB,EAAA;AAChD,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACrE,YAAA,OAAO,IAAI;;;;QAKb,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU;AAE/C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,YAAA,IAAI,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,YAAY;gBACtE,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAgB,CAAC;AACzD,gBAAA,IAAI;YAEN,IAAI,aAAa,EAAE;AACjB,gBAAA,OAAO,aAAa;;;AAIxB,QAAA,OAAO,IAAI;;;AAIL,IAAA,uBAAuB,CAAC,IAAiB,EAAA;AAC/C,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACrE,YAAA,OAAO,IAAI;;;QAIb,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU;AAE/C,QAAA,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC7C,YAAA,IAAI,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,YAAY;gBACtE,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAgB,CAAC;AACxD,gBAAA,IAAI;YAEN,IAAI,aAAa,EAAE;AACjB,gBAAA,OAAO,aAAa;;;AAIxB,QAAA,OAAO,IAAI;;;IAIL,aAAa,GAAA;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC;QAClD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;AACjD,QAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC;AAC3C,QAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,uBAAuB,CAAC;AAC7C,QAAA,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;AAC1C,QAAA,OAAO,MAAM;;AAGf;;;;AAIG;IACK,qBAAqB,CAAC,SAAkB,EAAE,MAAmB,EAAA;;;QAGnE,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC;;AAGvF;;;AAGG;AACO,IAAA,aAAa,CAAC,OAAgB,EAAA;QACtC,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE;YACxC,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC;YACtD,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;;;;AAKhD,IAAA,gBAAgB,CAAC,EAAa,EAAA;AACpC,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACzB,YAAA,EAAE,EAAE;;aACC;AACL,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;;;AAGtD;AAED;;;;AAIG;MAEU,gBAAgB,CAAA;AAG3B,IAAA,WAAA,CACU,QAA8B,EAC9B,OAAe,EACL,SAAc,EAAA;QAFxB,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACR,IAAO,CAAA,OAAA,GAAP,OAAO;AAGf,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;;AAG5B;;;;;;AAMG;AACH,IAAA,MAAM,CAAC,OAAoB,EAAE,oBAAA,GAAgC,KAAK,EAAA;AAChE,QAAA,OAAO,IAAI,SAAS,CAClB,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC;;AApBpE,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,yEAMjB,QAAQ,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AANP,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cADH,MAAM,EAAA,CAAA,CAAA;;2FACnB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;0BAO7B,MAAM;2BAAC,QAAQ;;AAkBpB;MAMa,kBAAkB,CAAA;;AAU7B,IAAA,IACI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO;;IAG/B,IAAI,OAAO,CAAC,KAAc,EAAA;QACxB,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,qBAAqB,CAAC,KAAK,CAAC;;AAGvD;;;AAGG;AACH,IAAA,IACI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;;IAG1B,IAAI,WAAW,CAAC,KAAc,EAAA;AAC5B,QAAA,IAAI,CAAC,YAAY,GAAG,qBAAqB,CAAC,KAAK,CAAC;;AAKlD,IAAA,WAAA,CACU,WAAoC,EACpC,iBAAmC,EACzB,SAAc,EAAA;QAFxB,IAAW,CAAA,WAAA,GAAX,WAAW;QACX,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;;QA7BnB,IAAyB,CAAA,yBAAA,GAAuB,IAAI;QAyBpD,IAAY,CAAA,YAAA,GAAG,KAAK;AAO1B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC;;IAGtF,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;;;AAIxB,QAAA,IAAI,IAAI,CAAC,yBAAyB,EAAE;AAClC,YAAA,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE;AACtC,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;;;IAIzC,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE;AAE9B,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,aAAa,EAAE;;;IAIxB,SAAS,GAAA;QACP,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE;AACjC,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE;;;AAIlC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,MAAM,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC;QAEhD,IAAI,iBAAiB,IAAI,CAAC,iBAAiB,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW;AACzE,YAAA,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE;YAC9B,IAAI,CAAC,aAAa,EAAE;;;IAIhB,aAAa,GAAA;QACnB,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,SAAS,CAAC,aAA4B;AAC5E,QAAA,IAAI,CAAC,SAAS,CAAC,4BAA4B,EAAE;;AA/EpC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,yEAqCnB,QAAQ,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGArCP,kBAAkB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,SAAA,CAAA,EAAA,WAAA,EAAA,CAAA,yBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAsCI,MAAM;2BAAC,QAAQ;yCA1Bd,OAAO,EAAA,CAAA;sBADV,KAAK;uBAAC,cAAc;gBAcjB,WAAW,EAAA,CAAA;sBADd,KAAK;uBAAC,yBAAyB;;;MClZrB,eAAe,CAAA;AAC1B,IAAA,OAAO,OAAO,GAAA;QACZ,OAAO;AACL,YAAA,QAAQ,EAAE,eAAe;AACzB,YAAA,SAAS,EAAE;gBACT,gBAAgB;gBAChB,QAAQ;gBACR;AACD;SACF;;8GATQ,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EAHX,YAAA,EAAA,CAAA,kBAAkB,CADvB,EAAA,OAAA,EAAA,CAAA,YAAY,aAEZ,kBAAkB,CAAA,EAAA,CAAA,CAAA;AAEjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,YAJhB,YAAY,CAAA,EAAA,CAAA,CAAA;;2FAIX,eAAe,EAAA,UAAA,EAAA,CAAA;kBAL3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,YAAY,EAAE,CAAC,kBAAkB,CAAC;oBAClC,OAAO,EAAE,CAAC,kBAAkB;AAC7B,iBAAA;;;ACZD;;AAEG;;;;"}