{"version":3,"file":"koobiq-components-tabs.mjs","sources":["../../../packages/components/tabs/tabs-animations.ts","../../../packages/components/tabs/tab-body.component.ts","../../../packages/components/tabs/tab-body.html","../../../packages/components/tabs/tab-content.directive.ts","../../../packages/components/tabs/paginated-tab-header.ts","../../../packages/components/tabs/tab-label.directive.ts","../../../packages/components/tabs/tab.component.ts","../../../packages/components/tabs/tab-label-wrapper.directive.ts","../../../packages/components/tabs/tab-header.component.ts","../../../packages/components/tabs/tab-header.html","../../../packages/components/tabs/tab-group.component.ts","../../../packages/components/tabs/tab-group.html","../../../packages/components/tabs/tab-nav-bar.ts","../../../packages/components/tabs/tab-nav-bar.html","../../../packages/components/tabs/tabs.module.ts","../../../packages/components/tabs/koobiq-components-tabs.ts"],"sourcesContent":["import { animate, AnimationTriggerMetadata, state, style, transition, trigger } from '@angular/animations';\n\nexport const kbqTabsAnimations: { readonly translateTab: AnimationTriggerMetadata } = {\n    /** Animation translates a tab along the X axis. */\n    translateTab: trigger('translateTab', [\n        // Note: transitions to `none` instead of 0, because some browsers might blur the content.\n        state('center, void, left-origin-center, right-origin-center', style({ transform: 'none' })),\n\n        // If the tab is either on the left or right, we additionally add a `min-height` of 1px\n        // in order to ensure that the element has a height before its state changes. This is\n        // necessary because Chrome does seem to skip the transition in RTL mode if the element does\n        // not have a static height and is not rendered. See related issue: #9465\n        state('left', style({ transform: 'translate3d(-100%, 0, 0)', minHeight: '1px' })),\n        state('right', style({ transform: 'translate3d(100%, 0, 0)', minHeight: '1px' })),\n\n        transition(\n            '* => left, * => right, left => center, right => center',\n            animate('{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)')\n        ),\n        transition('void => left-origin-center', [\n            style({ transform: 'translate3d(-100%, 0, 0)' }),\n            animate('{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)')\n        ]),\n        transition('void => right-origin-center', [\n            style({ transform: 'translate3d(100%, 0, 0)' }),\n            animate('{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)')\n        ])\n    ])\n};\n","import { AnimationEvent } from '@angular/animations';\nimport { Direction, Directionality } from '@angular/cdk/bidi';\nimport { CdkPortalOutlet, TemplatePortal } from '@angular/cdk/portal';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ComponentFactoryResolver,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    Inject,\n    Input,\n    OnDestroy,\n    OnInit,\n    Optional,\n    Output,\n    ViewChild,\n    ViewContainerRef,\n    ViewEncapsulation,\n    forwardRef\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { startWith } from 'rxjs/operators';\nimport { kbqTabsAnimations } from './tabs-animations';\n\n/**\n * These position states are used internally as animation states for the tab body. Setting the\n * position state to left, right, or center will transition the tab body from its current\n * position to its respective state. If there is not current position (void, in the case of a new\n * tab body), then there will be no transition animation to its state.\n *\n * In the case of a new tab body that should immediately be centered with an animating transition,\n * then left-origin-center or right-origin-center can be used, which will use left or right as its\n * pseudo-prior state.\n */\nexport type KbqTabBodyPositionState = 'left' | 'center' | 'right' | 'left-origin-center' | 'right-origin-center';\n\n/**\n * The origin state is an internally used state that is set on a new tab body indicating if it\n * began to the left or right of the prior selected index. For example, if the selected index was\n * set to 1, and a new tab is created and selected at index 2, then the tab body would have an\n * origin of right because its index was greater than the prior selected index.\n */\nexport type KbqTabBodyOriginState = 'left' | 'right';\n\n/**\n * Wrapper for the contents of a tab.\n * @docs-private\n */\n@Component({\n    selector: 'kbq-tab-body',\n    imports: [CdkScrollable, forwardRef(() => KbqTabBodyPortal)],\n    templateUrl: './tab-body.html',\n    styleUrl: './tab-body.scss',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    animations: [kbqTabsAnimations.translateTab],\n    host: {\n        class: 'kbq-tab-body'\n    }\n})\nexport class KbqTabBody implements OnInit, OnDestroy {\n    /** The shifted index position of the tab body, where zero represents the active center tab. */\n    @Input()\n    set position(position: number) {\n        this.positionIndex = position;\n        this.computePositionAnimationState();\n    }\n\n    /** Tab body position state. Used by the animation trigger for the current state. */\n    bodyPosition: KbqTabBodyPositionState;\n\n    /** Event emitted when the tab begins to animate towards the center as the active tab. */\n    @Output() readonly onCentering: EventEmitter<number> = new EventEmitter<number>();\n\n    /** Event emitted before the centering of the tab begins. */\n    @Output() readonly beforeCentering: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n    /** Event emitted before the centering of the tab begins. */\n    @Output() readonly afterLeavingCenter: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n    /** Event emitted when the tab completes its animation towards the center. */\n    @Output() readonly onCentered: EventEmitter<void> = new EventEmitter<void>(true);\n\n    /** The portal host inside of this container into which the tab body content will be loaded. */\n    @ViewChild(CdkPortalOutlet, { static: false }) portalHost: CdkPortalOutlet;\n\n    /** The tab body content to display. */\n    @Input() content: TemplatePortal;\n\n    /** Position that will be used when the tab is immediately becoming visible after creation. */\n    @Input() origin: number;\n\n    // Note that the default value will always be overwritten by `KbqTabBody`, but we need one\n    // anyway to prevent the animations module from throwing an error if the body is used on its own.\n    /** Duration for the tab's animation. */\n    @Input() animationDuration: string = '0ms';\n\n    /** Current position of the tab-body in the tab-group. Zero means that the tab is visible. */\n    private positionIndex: number;\n\n    /** Subscription to the directionality change observable. */\n    private readonly dirChangeSubscription = Subscription.EMPTY;\n\n    constructor(\n        private readonly elementRef: ElementRef<HTMLElement>,\n        @Optional() private readonly dir: Directionality,\n        changeDetectorRef: ChangeDetectorRef\n    ) {\n        if (this.dir && changeDetectorRef) {\n            this.dirChangeSubscription = this.dir.change.subscribe((direction: Direction) => {\n                this.computePositionAnimationState(direction);\n                changeDetectorRef.markForCheck();\n            });\n        }\n    }\n\n    /**\n     * After initialized, check if the content is centered and has an origin. If so, set the\n     * special position states that transition the tab from the left or right before centering.\n     */\n    ngOnInit() {\n        if (this.bodyPosition === 'center' && this.origin != null) {\n            this.bodyPosition = this.computePositionFromOrigin();\n        }\n    }\n\n    ngOnDestroy() {\n        this.dirChangeSubscription.unsubscribe();\n    }\n\n    onTranslateTabStarted(e: AnimationEvent): void {\n        const isCentering = this.isCenterPosition(e.toState);\n\n        this.beforeCentering.emit(isCentering);\n\n        if (isCentering) {\n            this.onCentering.emit(this.elementRef.nativeElement.clientHeight);\n        }\n    }\n\n    onTranslateTabComplete(e: AnimationEvent): void {\n        // If the transition to the center is complete, emit an event.\n        if (this.isCenterPosition(e.toState) && this.isCenterPosition(this.bodyPosition)) {\n            this.onCentered.emit();\n        }\n\n        if (this.isCenterPosition(e.fromState) && !this.isCenterPosition(this.bodyPosition)) {\n            this.afterLeavingCenter.emit();\n        }\n    }\n\n    /** The text direction of the containing app. */\n    getLayoutDirection(): Direction {\n        return this.dir && this.dir.value === 'rtl' ? 'rtl' : 'ltr';\n    }\n\n    /** Whether the provided position state is considered center, regardless of origin. */\n    isCenterPosition(position: KbqTabBodyPositionState | string): boolean {\n        return position === 'center' || position === 'left-origin-center' || position === 'right-origin-center';\n    }\n\n    /** Computes the position state that will be used for the tab-body animation trigger. */\n    private computePositionAnimationState(dir: Direction = this.getLayoutDirection()) {\n        if (this.positionIndex < 0) {\n            this.bodyPosition = dir === 'ltr' ? 'left' : 'right';\n        } else if (this.positionIndex > 0) {\n            this.bodyPosition = dir === 'ltr' ? 'right' : 'left';\n        } else {\n            this.bodyPosition = 'center';\n        }\n    }\n\n    /**\n     * Computes the position state based on the specified origin position. This is used if the\n     * tab is becoming visible immediately after creation.\n     */\n    private computePositionFromOrigin(): KbqTabBodyPositionState {\n        const dir = this.getLayoutDirection();\n\n        if ((dir === 'ltr' && this.origin <= 0) || (dir === 'rtl' && this.origin > 0)) {\n            return 'left-origin-center';\n        }\n\n        return 'right-origin-center';\n    }\n}\n\n/**\n * The portal host directive for the contents of the tab.\n * @docs-private\n */\n@Directive({\n    selector: '[kbqTabBodyHost]'\n})\nexport class KbqTabBodyPortal extends CdkPortalOutlet implements OnInit, OnDestroy {\n    /** Subscription to events for when the tab body begins centering. */\n    private centeringSub = Subscription.EMPTY;\n    /** Subscription to events for when the tab body finishes leaving from center position. */\n    private leavingSub = Subscription.EMPTY;\n\n    constructor(\n        componentFactoryResolver: ComponentFactoryResolver,\n        viewContainerRef: ViewContainerRef,\n        @Inject(forwardRef(() => KbqTabBody)) private readonly host: KbqTabBody\n    ) {\n        super(componentFactoryResolver, viewContainerRef);\n    }\n\n    /** Set initial visibility or set up subscription for changing visibility. */\n    ngOnInit(): void {\n        super.ngOnInit();\n\n        this.centeringSub = this.host.beforeCentering\n            .pipe(startWith(this.host.isCenterPosition(this.host.bodyPosition)))\n            .subscribe((isCentering: boolean) => {\n                if (isCentering && !this.hasAttached()) {\n                    this.attach(this.host.content);\n                }\n            });\n\n        this.leavingSub = this.host.afterLeavingCenter.subscribe(() => {\n            this.detach();\n        });\n    }\n\n    /** Clean up centering subscription. */\n    ngOnDestroy(): void {\n        super.ngOnDestroy();\n\n        this.centeringSub.unsubscribe();\n        this.leavingSub.unsubscribe();\n    }\n}\n","<div\n    #content\n    cdkScrollable\n    class=\"kbq-tab-body__content kbq-scrollbar kbq-hide-nested-popup\"\n    [@translateTab]=\"{\n        value: bodyPosition,\n        params: { animationDuration: animationDuration }\n    }\"\n    (@translateTab.done)=\"onTranslateTabComplete($event)\"\n    (@translateTab.start)=\"onTranslateTabStarted($event)\"\n>\n    <ng-template kbqTabBodyHost />\n</div>\n","import { Directive, TemplateRef } from '@angular/core';\n\n/** Decorates the `ng-template` tags and reads out the template from it. */\n@Directive({\n    selector: '[kbqTabContent]'\n})\nexport class KbqTabContent {\n    constructor(public template: TemplateRef<any>) {}\n}\n","import { FocusableOption, FocusKeyManager } from '@angular/cdk/a11y';\nimport { Direction, Directionality } from '@angular/cdk/bidi';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { ENTER, hasModifierKey, SPACE } from '@angular/cdk/keycodes';\nimport { normalizePassiveListenerOptions, Platform } from '@angular/cdk/platform';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport {\n    AfterContentChecked,\n    AfterContentInit,\n    AfterViewInit,\n    booleanAttribute,\n    ChangeDetectorRef,\n    DestroyRef,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    inject,\n    Input,\n    NgZone,\n    numberAttribute,\n    OnDestroy,\n    QueryList\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DOWN_ARROW, END, HOME, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@koobiq/cdk/keycodes';\nimport { KBQ_WINDOW } from '@koobiq/components/core';\nimport { fromEvent, merge, of as observableOf, Subject, timer } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n/** Config used to bind passive event listeners */\nconst passiveEventListenerOptions = normalizePassiveListenerOptions({ passive: true }) as EventListenerOptions;\n\n/**\n * The directions that scrolling can go in when the header's tabs exceed the header width. 'After'\n * will scroll the header towards the end of the tabs list and 'before' will scroll towards the\n * beginning of the list.\n */\nexport type ScrollDirection = 'after' | 'before';\n\n/**\n * The distance in pixels that will be overshot when scrolling a tab label into view. This helps\n * provide a small affordance to the label next to it.\n */\nconst EXAGGERATED_OVERSCROLL = 60;\n\n/**\n * Amount of milliseconds to wait before starting to scroll the header automatically.\n * Set a little conservatively in order to handle fake events dispatched on touch devices.\n */\nconst HEADER_SCROLL_DELAY = 650;\n\n/**\n * Interval in milliseconds at which to scroll the header\n * while the user is holding their pointer.\n */\nconst HEADER_SCROLL_INTERVAL = 100;\n\nconst VIEWPORT_THROTTLE_TIME = 150;\nconst SCROLL_DISTANCE = 0.8;\n\n/** Item inside a paginated tab header. */\nexport type KbqPaginatedTabHeaderItem = FocusableOption & { elementRef: ElementRef };\n\n/**\n * Base class for a tab header that supported pagination.\n * @docs-private\n */\n@Directive()\nexport abstract class KbqPaginatedTabHeader implements AfterContentChecked, AfterContentInit, AfterViewInit, OnDestroy {\n    /** The index of the active tab. */\n    @Input({ transform: numberAttribute })\n    get selectedIndex(): number {\n        return this._selectedIndex;\n    }\n\n    set selectedIndex(value: number) {\n        const coercedValue = coerceNumberProperty(value);\n\n        this.selectedIndexChanged = this._selectedIndex !== coercedValue;\n        this._selectedIndex = coercedValue;\n\n        this.keyManager?.updateActiveItem(coercedValue);\n    }\n\n    private _selectedIndex = 0;\n\n    /** Tracks which element has focus; used for keyboard navigation */\n    get focusIndex(): number {\n        return this.keyManager ? this.keyManager.activeItemIndex! : 0;\n    }\n\n    /** When the focus index is set, we must manually send focus to the correct label */\n    set focusIndex(value: number) {\n        if (!this.isValidIndex(value) || this.focusIndex === value || !this.keyManager) {\n            return;\n        }\n\n        this.keyManager.setActiveItem(value);\n    }\n\n    /** Sets the distance in pixels that the tab header should be transformed in the X-axis. */\n    get scrollDistance(): number {\n        return this._scrollDistance;\n    }\n\n    set scrollDistance(v: number) {\n        this._scrollDistance = Math.max(0, Math.min(this.getMaxScrollDistance(), v));\n\n        // Mark that the scroll distance has changed so that after the view is checked, the CSS\n        // transformation can move the header.\n        this.scrollDistanceChanged = true;\n        this.checkScrollingControls();\n    }\n\n    /** The distance in pixels that the tab labels should be translated to the left. */\n    private _scrollDistance = 0;\n\n    abstract readonly items: QueryList<KbqPaginatedTabHeaderItem>;\n    abstract readonly tabListContainer: ElementRef<HTMLElement>;\n    abstract readonly tabList: ElementRef<HTMLElement>;\n    abstract readonly nextPaginator: ElementRef<HTMLElement>;\n    abstract readonly previousPaginator: ElementRef<HTMLElement>;\n\n    /** Event emitted when the option is selected. */\n    readonly selectFocusedIndex: EventEmitter<number> = new EventEmitter<number>();\n\n    /** Event emitted when a label is focused. */\n    readonly indexFocused: EventEmitter<number> = new EventEmitter<number>();\n\n    /** Whether the controls for pagination should be displayed */\n    showPaginationControls = false;\n\n    /** Whether the tab list can be scrolled more towards the end of the tab label list. */\n    disableScrollAfter = true;\n\n    /** Whether the tab list can be scrolled more towards the beginning of the tab label list. */\n    disableScrollBefore = true;\n\n    /**\n     * Whether pagination should be disabled. This can be used to avoid unnecessary\n     * layout recalculations if it's known that pagination won't be required.\n     */\n    @Input({ transform: booleanAttribute }) disablePagination: boolean = false;\n\n    /** Whether the tabs should be displayed vertically. */\n    @Input({ transform: booleanAttribute })\n    set vertical(value: boolean) {\n        this._vertical = value;\n\n        if (this._vertical) {\n            this.disablePagination = true;\n        }\n    }\n\n    get vertical(): boolean {\n        return this._vertical;\n    }\n\n    private _vertical = false;\n\n    /**\n     * The number of tab labels that are displayed on the header. When this changes, the header\n     * should re-evaluate the scroll position.\n     */\n    private tabLabelCount: number;\n\n    /** Whether the scroll distance has changed and should be applied after the view is checked. */\n    private scrollDistanceChanged: boolean;\n\n    /** Used to manage focus between the tabs. */\n    private keyManager: FocusKeyManager<KbqPaginatedTabHeaderItem>;\n\n    /** Cached text content of the header. */\n    private currentTextContent: string;\n\n    /** Stream that will stop the automated scrolling. */\n    private stopScrolling = new Subject<void>();\n\n    /** Whether the header should scroll to the selected index after the view has been checked. */\n    private selectedIndexChanged = false;\n\n    protected readonly destroyRef = inject(DestroyRef);\n    public readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n    protected readonly changeDetectorRef = inject(ChangeDetectorRef);\n    private readonly viewportRuler = inject(ViewportRuler);\n    private readonly ngZone = inject(NgZone);\n    private readonly platform = inject(Platform);\n    private readonly dir = inject(Directionality, { optional: true });\n    private readonly window = inject(KBQ_WINDOW);\n\n    constructor() {\n        // Bind the `mouseleave` event on the outside since it doesn't change anything in the view.\n        this.ngZone.runOutsideAngular(() => {\n            fromEvent(this.elementRef.nativeElement, 'mouseleave')\n                .pipe(takeUntilDestroyed())\n                .subscribe(() => this.stopInterval());\n        });\n    }\n\n    /** Called when the user has selected an item via the keyboard. */\n    ngAfterViewInit() {\n        // We need to handle these events manually, because we want to bind passive event listeners.\n        fromEvent(this.previousPaginator.nativeElement, 'touchstart', passiveEventListenerOptions)\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe(() => this.handlePaginatorPress('before'));\n\n        fromEvent(this.nextPaginator.nativeElement, 'touchstart', passiveEventListenerOptions)\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe(() => this.handlePaginatorPress('after'));\n    }\n\n    ngAfterContentInit() {\n        const dirChange = this.dir ? this.dir.change : observableOf('ltr');\n        const resize = this.viewportRuler.change(VIEWPORT_THROTTLE_TIME);\n\n        const realign = () => {\n            this.updatePagination();\n        };\n\n        this.keyManager = new FocusKeyManager<KbqPaginatedTabHeaderItem>(this.items).withHorizontalOrientation(\n            this.getLayoutDirection()\n        );\n\n        this.keyManager.updateActiveItem(this._selectedIndex);\n\n        // Defer the first call in order to allow for slower browsers to lay out the elements.\n        // This helps in cases where the user lands directly on a page with paginated tabs.\n        typeof this.window.requestAnimationFrame !== 'undefined'\n            ? this.window.requestAnimationFrame(realign)\n            : realign();\n\n        // On dir change or window resize, realign the ink bar and update the orientation of\n        // the key manager if the direction has changed.\n        merge(dirChange, resize, this.items.changes)\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe(() => {\n                // We need to defer this to give the browser some time to recalculate\n                // the element dimensions. The call has to be wrapped in `NgZone.run`,\n                // because the viewport change handler runs outside of Angular.\n                this.ngZone.run(() =>\n                    Promise.resolve().then(() => {\n                        this.updateScrollPosition();\n                        realign();\n                    })\n                );\n\n                this.keyManager.withHorizontalOrientation(this.getLayoutDirection());\n            });\n\n        // If there is a change in the focus key manager we need to emit the `indexFocused`\n        // event in order to provide a public event that notifies about focus changes. Also we realign\n        // the tabs container by scrolling the new focused tab into the visible section.\n        this.keyManager.change.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((newFocusIndex) => {\n            this.indexFocused.emit(newFocusIndex);\n            this.setTabFocus(newFocusIndex);\n        });\n    }\n\n    ngAfterContentChecked(): void {\n        // If the number of tab labels have changed, check if scrolling should be enabled\n        if (this.tabLabelCount !== this.items.length) {\n            this.updatePagination();\n            this.tabLabelCount = this.items.length;\n            this.changeDetectorRef.markForCheck();\n        }\n\n        // If the selected index has changed, scroll to the label and check if the scrolling controls\n        // should be disabled.\n        if (this.selectedIndexChanged) {\n            this.scrollToLabel(this._selectedIndex);\n            this.checkScrollingControls();\n            this.selectedIndexChanged = false;\n            this.changeDetectorRef.markForCheck();\n        }\n\n        // If the scroll distance has been changed (tab selected, focused, scroll controls activated),\n        // then translate the header to reflect this.\n        if (this.scrollDistanceChanged) {\n            this.updateTabScrollPosition();\n            this.scrollDistanceChanged = false;\n            this.changeDetectorRef.markForCheck();\n        }\n    }\n\n    ngOnDestroy() {\n        this.stopScrolling.complete();\n    }\n\n    handleKeydown(event: KeyboardEvent) {\n        // We don't handle any key bindings with a modifier key.\n        if (hasModifierKey(event)) {\n            return;\n        }\n\n        const key = event.keyCode;\n\n        if (key === HOME) {\n            this.keyManager.setFirstItemActive();\n        } else if (key === END) {\n            this.keyManager.setLastItemActive();\n        } else if (key === UP_ARROW && this.vertical) {\n            this.keyManager.setPreviousItemActive();\n        } else if (key === DOWN_ARROW && this.vertical) {\n            this.keyManager.setNextItemActive();\n        } else if (key === RIGHT_ARROW && !this.vertical) {\n            this.keyManager.setNextItemActive();\n        } else if (key === LEFT_ARROW && !this.vertical) {\n            this.keyManager.setPreviousItemActive();\n        } else if ([ENTER, SPACE].includes(key)) {\n            this.selectFocusedIndex.emit(this.focusIndex);\n        }\n\n        if ([HOME, END, UP_ARROW, DOWN_ARROW, RIGHT_ARROW, LEFT_ARROW, SPACE, ENTER].includes(key)) {\n            event.preventDefault();\n        }\n    }\n\n    /**\n     * Callback for when the MutationObserver detects that the content has changed.\n     */\n    onContentChanges() {\n        const textContent = this.elementRef.nativeElement.textContent;\n\n        // We need to diff the text content of the header, because the MutationObserver callback\n        // will fire even if the text content didn't change which is inefficient and is prone\n        // to infinite loops if a poorly constructed expression is passed in (see #14249).\n        if (textContent !== this.currentTextContent) {\n            this.currentTextContent = textContent || '';\n\n            // The content observer runs outside the `NgZone` by default, which\n            // means that we need to bring the callback back in ourselves.\n            this.ngZone.run(() => {\n                this.updatePagination();\n                this.changeDetectorRef.markForCheck();\n            });\n        }\n    }\n\n    /**\n     * Updates the view whether pagination should be enabled or not.\n     *\n     * WARNING: Calling this method can be very costly in terms of performance. It should be called\n     * as infrequently as possible from outside of the Tabs component as it causes a reflow of the\n     * page.\n     */\n    updatePagination() {\n        this.checkPaginationEnabled();\n        this.checkScrollingControls();\n        this.updateTabScrollPosition();\n    }\n\n    /**\n     * Determines if an index is valid.  If the tabs are not ready yet, we assume that the user is\n     * providing a valid index and return true.\n     */\n    isValidIndex(index: number): boolean {\n        if (!this.items) {\n            return true;\n        }\n\n        const tab = this.items ? this.items.toArray()[index] : null;\n\n        return !!tab && !tab.disabled;\n    }\n\n    /**\n     * Sets focus on the HTML element for the label wrapper and scrolls it into the view if\n     * scrolling is enabled.\n     */\n    setTabFocus(tabIndex: number) {\n        if (this.showPaginationControls) {\n            this.scrollToLabel(tabIndex);\n        }\n\n        if (this.items?.length) {\n            this.items.toArray()[tabIndex].focus();\n\n            // Do not let the browser manage scrolling to focus the element, this will be handled\n            // by using translation. In LTR, the scroll left should be 0. In RTL, the scroll width\n            // should be the full width minus the offset width.\n            const containerEl = this.tabListContainer.nativeElement;\n            const dir = this.getLayoutDirection();\n\n            if (dir === 'ltr') {\n                containerEl.scrollLeft = 0;\n            } else {\n                containerEl.scrollLeft = containerEl.scrollWidth - containerEl.offsetWidth;\n            }\n        }\n    }\n\n    /** The layout direction of the containing app. */\n    getLayoutDirection(): Direction {\n        return this.dir?.value === 'rtl' ? 'rtl' : 'ltr';\n    }\n\n    /** Performs the CSS transformation on the tab list that will cause the list to scroll. */\n    updateTabScrollPosition() {\n        if (this.disablePagination) {\n            return;\n        }\n\n        const scrollDistance = this.scrollDistance;\n        const translateX = this.getLayoutDirection() === 'ltr' ? -scrollDistance : scrollDistance;\n\n        // Don't use `translate3d` here because we don't want to create a new layer. A new layer\n        // seems to cause flickering and overflow in Internet Explorer. For example, the ink bar\n        // and ripples will exceed the boundaries of the visible tab bar.\n        // See: https://github.com/angular/components/issues/10276\n        // We round the `transform` here, because transforms with sub-pixel precision cause some\n        // browsers to blur the content of the element.\n        this.tabList.nativeElement.style.transform = `translateX(${Math.round(translateX)}px)`;\n\n        // Setting the `transform` on IE will change the scroll offset of the parent, causing the\n        // position to be thrown off in some cases. We have to reset it ourselves to ensure that\n        // it doesn't get thrown off. Note that we scope it only to IE and Edge, because messing\n        // with the scroll position throws off Chrome 71+ in RTL mode (see #14689).\n        if (this.platform.TRIDENT || this.platform.EDGE) {\n            this.tabListContainer.nativeElement.scrollLeft = 0;\n        }\n    }\n\n    /**\n     * Moves the tab list in the 'before' or 'after' direction (towards the beginning of the list or\n     * the end of the list, respectively). The distance to scroll is computed to be a third of the\n     * length of the tab list view window.\n     *\n     * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n     * should be called sparingly.\n     */\n    scrollHeader(direction: ScrollDirection) {\n        const viewLength = this.tabListContainer.nativeElement.offsetWidth;\n\n        // Move the scroll distance one-third the length of the tab list's viewport.\n        const scrollAmount = (direction === 'before' ? -1 : 1) * viewLength * SCROLL_DISTANCE;\n\n        return this.scrollTo(this.scrollDistance + scrollAmount);\n    }\n\n    /** Handles click events on the pagination arrows. */\n    handlePaginatorClick(direction: ScrollDirection) {\n        this.stopInterval();\n        this.scrollHeader(direction);\n    }\n\n    /**\n     * Moves the tab list such that the desired tab label (marked by index) is moved into view.\n     *\n     * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n     * should be called sparingly.\n     */\n    scrollToLabel(labelIndex: number) {\n        if (this.disablePagination) {\n            return;\n        }\n\n        const selectedLabel = this.items ? this.items.toArray()[labelIndex] : null;\n\n        if (!selectedLabel) {\n            return;\n        }\n\n        // The view length is the visible width of the tab labels.\n        const viewLength = this.tabListContainer.nativeElement.offsetWidth;\n        const { offsetLeft, offsetWidth } = selectedLabel.elementRef.nativeElement;\n\n        let labelBeforePos: number;\n        let labelAfterPos: number;\n\n        if (this.getLayoutDirection() === 'ltr') {\n            labelBeforePos = offsetLeft;\n            labelAfterPos = labelBeforePos + (offsetWidth as number);\n        } else {\n            labelAfterPos = this.tabList.nativeElement.offsetWidth - offsetLeft;\n            labelBeforePos = labelAfterPos - offsetWidth;\n        }\n\n        const beforeVisiblePos = this.scrollDistance;\n        const afterVisiblePos = this.scrollDistance + viewLength;\n\n        if (labelBeforePos < beforeVisiblePos) {\n            // Scroll header to move label to the before direction\n            this.scrollDistance -= beforeVisiblePos - labelBeforePos + EXAGGERATED_OVERSCROLL;\n        } else if (labelAfterPos > afterVisiblePos) {\n            // Scroll header to move label to the after direction\n            this.scrollDistance += labelAfterPos - afterVisiblePos + EXAGGERATED_OVERSCROLL;\n        }\n    }\n\n    /**\n     * Evaluate whether the pagination controls should be displayed. If the scroll width of the\n     * tab list is wider than the size of the header container, then the pagination controls should\n     * be shown.\n     *\n     * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n     * should be called sparingly.\n     */\n    checkPaginationEnabled() {\n        if (this.disablePagination) {\n            this.showPaginationControls = false;\n        } else {\n            const isEnabled = this.tabList.nativeElement.scrollWidth > this.elementRef.nativeElement.offsetWidth;\n\n            if (!isEnabled) {\n                this.scrollDistance = 0;\n            }\n\n            if (isEnabled !== this.showPaginationControls) {\n                this.changeDetectorRef.markForCheck();\n            }\n\n            this.showPaginationControls = isEnabled;\n        }\n    }\n\n    /**\n     * Evaluate whether the before and after controls should be enabled or disabled.\n     * If the header is at the beginning of the list (scroll distance is equal to 0) then disable the\n     * before button. If the header is at the end of the list (scroll distance is equal to the\n     * maximum distance we can scroll), then disable the after button.\n     *\n     * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n     * should be called sparingly.\n     */\n    checkScrollingControls() {\n        if (this.disablePagination) {\n            this.disableScrollAfter = this.disableScrollBefore = true;\n        } else {\n            // Check if the pagination arrows should be activated.\n            this.disableScrollBefore = this.scrollDistance === 0;\n            this.disableScrollAfter = this.scrollDistance === this.getMaxScrollDistance();\n            this.changeDetectorRef.markForCheck();\n        }\n    }\n\n    /**\n     * Determines what is the maximum length in pixels that can be set for the scroll distance. This\n     * is equal to the difference in width between the tab list container and tab header container.\n     *\n     * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n     * should be called sparingly.\n     */\n    getMaxScrollDistance(): number {\n        const lengthOfTabList = this.tabList.nativeElement.scrollWidth;\n        const viewLength = this.tabListContainer.nativeElement.offsetWidth;\n\n        return lengthOfTabList - viewLength || 0;\n    }\n\n    /** Stops the currently-running paginator interval.  */\n    stopInterval() {\n        this.stopScrolling.next();\n    }\n\n    /**\n     * Handles the user pressing down on one of the paginators.\n     * Starts scrolling the header after a certain amount of time.\n     * @param direction In which direction the paginator should be scrolled.\n     */\n    handlePaginatorPress(direction: ScrollDirection, mouseEvent?: MouseEvent) {\n        // Don't start auto scrolling for right mouse button clicks. Note that we shouldn't have to\n        // null check the `button`, but we do it so we don't break tests that use fake events.\n\n        if (mouseEvent && mouseEvent.button != null && mouseEvent.button !== 0) {\n            return;\n        }\n\n        // Avoid overlapping timers.\n        this.stopInterval();\n\n        // Start a timer after the delay and keep firing based on the interval.\n        timer(HEADER_SCROLL_DELAY, HEADER_SCROLL_INTERVAL)\n            // Keep the timer going until something tells it to stop or the component is destroyed.\n            .pipe(takeUntilDestroyed(this.destroyRef), takeUntil(this.stopScrolling))\n            .subscribe(() => {\n                const { maxScrollDistance, distance } = this.scrollHeader(direction);\n\n                // Stop the timer if we've reached the start or the end.\n                if (distance === 0 || distance >= maxScrollDistance) {\n                    this.stopInterval();\n                }\n            });\n    }\n\n    protected abstract itemSelected(event: KeyboardEvent): void;\n\n    /**\n     * Scrolls the header to a given position.\n     * @param position Position to which to scroll.\n     * @returns Information on the current scroll distance and the maximum.\n     */\n    private scrollTo(position: number) {\n        if (this.disablePagination) {\n            return { maxScrollDistance: 0, distance: 0 };\n        }\n\n        const maxScrollDistance = this.getMaxScrollDistance();\n\n        this.scrollDistance = Math.max(0, Math.min(maxScrollDistance, position));\n\n        // Mark that the scroll distance has changed so that after the view is checked, the CSS\n        // transformation can move the header.\n        this.scrollDistanceChanged = true;\n        this.checkScrollingControls();\n\n        return { maxScrollDistance, distance: this.scrollDistance };\n    }\n\n    private updateScrollPosition() {\n        const maxScrollDistance = this.getMaxScrollDistance();\n\n        if (this.scrollDistance > maxScrollDistance) {\n            this.scrollTo(maxScrollDistance);\n        }\n    }\n}\n","import { CdkPortal } from '@angular/cdk/portal';\nimport { booleanAttribute, Directive, InjectionToken, input } from '@angular/core';\n\nexport const KBQ_TAB_LABEL = new InjectionToken<KbqTabLabel>('KbqTabLabel');\n\n/** Used to flag tab labels for use with the portal directive */\n@Directive({\n    selector: '[kbq-tab-label], [kbqTabLabel]',\n    providers: [{ provide: KBQ_TAB_LABEL, useExisting: KbqTabLabel }]\n})\nexport class KbqTabLabel extends CdkPortal {\n    /** Whether the tab contains only an icon without a label. */\n    readonly iconOnly = input(false, { transform: booleanAttribute });\n}\n","import { TemplatePortal } from '@angular/cdk/portal';\nimport {\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    ContentChild,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    SimpleChanges,\n    TemplateRef,\n    ViewChild,\n    ViewContainerRef,\n    ViewEncapsulation\n} from '@angular/core';\nimport {\n    KBQ_CUSTOM_SCROLL_STRATEGY_PROVIDER,\n    KBQ_SELECT_SCROLL_STRATEGY,\n    KbqPopUpPlacementValues,\n    PopUpPlacements\n} from '@koobiq/components/core';\nimport { KBQ_DROPDOWN_SCROLL_STRATEGY } from '@koobiq/components/dropdown';\nimport { Subject } from 'rxjs';\nimport { KbqTabContent } from './tab-content.directive';\nimport { KBQ_TAB_LABEL, KbqTabLabel } from './tab-label.directive';\n\n@Component({\n    selector: 'kbq-tab',\n    // Create a template for the content of the <kbq-tab> so that we can grab a reference to this\n    // TemplateRef and use it in a Portal to render the tab content in the appropriate place in the\n    // tab-group.\n    template: '<ng-template><ng-content /></ng-template>',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    exportAs: 'kbqTab',\n    providers: [\n        ...[KBQ_SELECT_SCROLL_STRATEGY, KBQ_DROPDOWN_SCROLL_STRATEGY].map((token) =>\n            KBQ_CUSTOM_SCROLL_STRATEGY_PROVIDER(token, (overlay) => () => overlay.scrollStrategies.close())\n        )\n    ]\n})\nexport class KbqTab implements OnInit, OnChanges, OnDestroy {\n    /** @docs-private */\n    get content(): TemplatePortal | null {\n        return this.contentPortal;\n    }\n\n    @ContentChild(KBQ_TAB_LABEL)\n    get templateLabel(): KbqTabLabel {\n        return this._templateLabel;\n    }\n\n    set templateLabel(value: KbqTabLabel) {\n        this.setTemplateLabelInput(value);\n    }\n\n    private _templateLabel: KbqTabLabel;\n\n    /**\n     * Template provided in the tab content that will be used if present, used to enable lazy-loading\n     */\n    @ContentChild(KbqTabContent, { read: TemplateRef, static: true }) explicitContent: TemplateRef<any>;\n\n    /** Template inside the KbqTab view that contains an `<ng-content>`. */\n    @ViewChild(TemplateRef, { static: true }) implicitContent: TemplateRef<any>;\n\n    @Input()\n    get tooltipTitle(): string {\n        return this.overflowTooltipTitle + this._tooltipTitle;\n    }\n\n    set tooltipTitle(value: string) {\n        this._tooltipTitle = value;\n    }\n\n    private _tooltipTitle = '';\n\n    @Input({ transform: booleanAttribute })\n    get disabled(): boolean {\n        return this._disabled;\n    }\n\n    set disabled(value: boolean) {\n        if (value !== this.disabled) {\n            this._disabled = value;\n        }\n    }\n\n    private _disabled: boolean = false;\n\n    @Input() tooltipPlacement: KbqPopUpPlacementValues = PopUpPlacements.Right;\n\n    /** Plain text label for the tab, used when there is no template label. */\n    @Input('label') textLabel = '';\n\n    @Input({ transform: booleanAttribute }) empty: boolean = false;\n\n    @Input() tabId: string;\n\n    /** Whether the tab label contains only an icon (no text). */\n    get iconOnlyLabel(): boolean {\n        return this.templateLabel?.iconOnly() ?? false;\n    }\n\n    /** Emits whenever the internal state of the tab changes. */\n    readonly stateChanges = new Subject<void>();\n\n    /**\n     * The relatively indexed position where 0 represents the center, negative is left, and positive\n     * represents the right.\n     */\n    position: number | null = null;\n\n    /**\n     * The initial relatively index origin of the tab if it was created and selected after there\n     * was already a selected tab. Provides context of what position the tab should originate from.\n     */\n    origin: number | null = null;\n\n    /**\n     * Whether the tab is currently active.\n     */\n    isActive = false;\n\n    get isOverflown(): boolean {\n        return !!this._overflowTooltipTitle;\n    }\n\n    get overflowTooltipTitle(): string {\n        if (this.isOverflown) {\n            return `${this._overflowTooltipTitle}\\n`;\n        }\n\n        return '';\n    }\n\n    set overflowTooltipTitle(value: string) {\n        this._overflowTooltipTitle = value;\n    }\n\n    private _overflowTooltipTitle = '';\n\n    /** Portal that will be the hosted content of the tab */\n    private contentPortal: TemplatePortal | null = null;\n\n    constructor(private readonly viewContainerRef: ViewContainerRef) {}\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes.hasOwnProperty('textLabel') || changes.hasOwnProperty('disabled')) {\n            this.stateChanges.next();\n        }\n    }\n\n    ngOnInit(): void {\n        this.contentPortal = new TemplatePortal(this.explicitContent || this.implicitContent, this.viewContainerRef);\n    }\n\n    ngOnDestroy(): void {\n        this.stateChanges.complete();\n    }\n\n    /**\n     * This has been extracted to a util because of TS 4 and VE.\n     * View Engine doesn't support property rename inheritance.\n     * TS 4.0 doesn't allow properties to override accessors or vice-versa.\n     * @docs-private\n     */\n    protected setTemplateLabelInput(value: KbqTabLabel) {\n        // Only update the templateLabel via query if there is actually\n        // a KbqTabLabel found. This works around an issue where a user may have\n        // manually set `templateLabel` during creation mode, which would then get clobbered\n        // by `undefined` when this query resolves.\n        if (value) {\n            this._templateLabel = value;\n        }\n    }\n}\n","import { AfterViewInit, booleanAttribute, ContentChild, Directive, ElementRef, Input, Renderer2 } from '@angular/core';\nimport { KbqTab } from './tab.component';\n\n/**\n * Used in the `kbq-tab-group` view to display tab labels.\n * @docs-private\n */\n@Directive({\n    selector: '[kbqTabLabelWrapper]',\n    host: {\n        '[class.kbq-disabled]': 'disabled',\n        '[attr.disabled]': 'disabled || null'\n    }\n})\nexport class KbqTabLabelWrapper implements AfterViewInit {\n    @ContentChild('labelContent') labelContent: ElementRef;\n\n    @Input() tab: KbqTab;\n\n    @Input({ transform: booleanAttribute })\n    get disabled(): boolean {\n        return this._disabled;\n    }\n\n    set disabled(value: boolean) {\n        if (value !== this.disabled) {\n            this._disabled = value;\n        }\n    }\n\n    private _disabled: boolean = false;\n\n    constructor(\n        public elementRef: ElementRef<HTMLElement>,\n        private renderer: Renderer2\n    ) {}\n\n    ngAfterViewInit(): void {\n        this.addClassModifierForIcons(Array.from(this.elementRef.nativeElement.querySelectorAll('.kbq-icon')));\n    }\n\n    /** Sets focus on the wrapper element */\n    focus(): void {\n        this.elementRef.nativeElement.focus();\n    }\n\n    getOffsetLeft(): number {\n        return this.elementRef.nativeElement.offsetLeft;\n    }\n\n    getOffsetWidth(): number {\n        return this.elementRef.nativeElement.offsetWidth;\n    }\n\n    checkOverflow() {\n        this.tab.overflowTooltipTitle = this.isOverflown() ? this.getInnerText() : '';\n    }\n\n    isOverflown() {\n        return this.labelContent.nativeElement.scrollWidth > this.labelContent.nativeElement.clientWidth;\n    }\n\n    getInnerText() {\n        return this.labelContent.nativeElement.innerText;\n    }\n\n    private addClassModifierForIcons(icons: HTMLElement[]) {\n        const twoIcons = 2;\n        const [firstIconElement, secondIconElement] = icons;\n\n        if (icons.length === 1) {\n            const COMMENT_NODE = 8;\n\n            if (firstIconElement.nextSibling && firstIconElement.nextSibling.nodeType !== COMMENT_NODE) {\n                this.renderer.addClass(firstIconElement, 'kbq-icon_left');\n                this.renderer.addClass(this.elementRef.nativeElement, 'kbq-tab-label_with-icon-left');\n            }\n\n            if (firstIconElement.previousSibling && firstIconElement.previousSibling.nodeType !== COMMENT_NODE) {\n                this.renderer.addClass(firstIconElement, 'kbq-icon_right');\n                this.renderer.addClass(this.elementRef.nativeElement, 'kbq-tab-label_with-icon-right');\n            }\n        } else if (icons.length === twoIcons) {\n            this.renderer.addClass(firstIconElement, 'kbq-icon_left');\n            this.renderer.addClass(secondIconElement, 'kbq-icon_right');\n            this.renderer.addClass(this.elementRef.nativeElement, 'kbq-tab-label_with-icon-left');\n            this.renderer.addClass(this.elementRef.nativeElement, 'kbq-tab-label_with-icon-right');\n        }\n    }\n}\n","import { CdkObserveContent } from '@angular/cdk/observers';\nimport {\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    ContentChildren,\n    ElementRef,\n    Input,\n    QueryList,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqPaginatedTabHeader } from './paginated-tab-header';\nimport { KbqTabLabelWrapper } from './tab-label-wrapper.directive';\n\n/**\n * The directions that scrolling can go in when the header's tabs exceed the header width. 'After'\n * will scroll the header towards the end of the tabs list and 'before' will scroll towards the\n * beginning of the list.\n */\nexport type ScrollDirection = 'after' | 'before';\n\n/** Corresponds to `margin-inline: var(--kbq-size-xs)` on `.kbq-tab-label_icon-only`. */\nconst ICON_ONLY_TAB_MARGIN_INLINE = 6;\n\n/**\n * The header of the tab group which displays a list of all the tabs in the tab group.\n * When the tabs list's width exceeds the width of the header container,\n * then arrows will be displayed to allow the user to scroll\n * left and right across the header.\n * @docs-private\n */\n@Component({\n    selector: 'kbq-tab-header',\n    imports: [KbqIconModule, CdkObserveContent],\n    templateUrl: './tab-header.html',\n    styleUrl: './tab-header.scss',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.Default,\n    outputs: ['selectFocusedIndex', 'indexFocused'],\n    host: {\n        class: 'kbq-tab-header',\n        '[class.kbq-tab-header_vertical]': 'vertical',\n        '[class.kbq-tab-header_underlined]': 'underlined',\n        '[class.kbq-tab-header__pagination-controls_enabled]': 'showPaginationControls',\n        '[class.kbq-tab-header_rtl]': \"getLayoutDirection() == 'rtl'\"\n    }\n})\nexport class KbqTabHeader extends KbqPaginatedTabHeader {\n    /** Whether the tabs are underlined. */\n    @Input({ transform: booleanAttribute }) underlined: boolean = false;\n\n    @ContentChildren(KbqTabLabelWrapper, { descendants: false }) readonly items: QueryList<KbqTabLabelWrapper>;\n    @ViewChild('tabListContainer', { static: true }) readonly tabListContainer: ElementRef;\n    @ViewChild('tabList', { static: true }) readonly tabList: ElementRef;\n    @ViewChild('nextPaginator') readonly nextPaginator: ElementRef<HTMLElement>;\n    @ViewChild('previousPaginator') readonly previousPaginator: ElementRef<HTMLElement>;\n\n    /** Width of the active tab, adjusted for icon-only tab margins. */\n    protected get activeTabOffsetWidth(): number | undefined {\n        const item = this.items.get(this.selectedIndex);\n        const width = item?.elementRef?.nativeElement?.offsetWidth;\n\n        if (!width) return width;\n\n        return item!.tab?.iconOnlyLabel ? width + ICON_ONLY_TAB_MARGIN_INLINE * 2 : width;\n    }\n\n    /** Left offset of the active tab, adjusted for icon-only tab margins. */\n    protected get activeTabOffsetLeft(): number | undefined {\n        const item = this.items.get(this.selectedIndex);\n        const left = item?.elementRef?.nativeElement?.offsetLeft;\n\n        if (!left) return left;\n\n        return item!.tab?.iconOnlyLabel ? left - ICON_ONLY_TAB_MARGIN_INLINE : left;\n    }\n\n    protected itemSelected(event: KeyboardEvent): void {\n        event.preventDefault();\n    }\n}\n","<div\n    #previousPaginator\n    class=\"kbq-tab-header__pagination kbq-tab-header__pagination_before\"\n    [class.kbq-disabled]=\"disableScrollBefore\"\n    (click)=\"handlePaginatorClick('before')\"\n    (mousedown)=\"handlePaginatorPress('before', $event)\"\n    (touchend)=\"stopInterval()\"\n>\n    <i kbq-icon=\"kbq-chevron-left_16\" [color]=\"disableScrollBefore ? 'contrast-fade' : 'contrast'\"></i>\n</div>\n\n<div #tabListContainer class=\"kbq-tab-header__container\" (keydown)=\"handleKeydown($event)\">\n    <div #tabList class=\"kbq-tab-list\" (cdkObserveContent)=\"onContentChanges()\">\n        <div class=\"kbq-tab-list__content\">\n            <ng-content />\n            <div\n                class=\"kbq-tab-list__active-tab-underline\"\n                [style.left.px]=\"activeTabOffsetLeft\"\n                [style.width.px]=\"activeTabOffsetWidth\"\n            ></div>\n        </div>\n    </div>\n</div>\n\n<div\n    #nextPaginator\n    class=\"kbq-tab-header__pagination kbq-tab-header__pagination_after\"\n    [class.kbq-disabled]=\"disableScrollAfter\"\n    (click)=\"handlePaginatorClick('after')\"\n    (mousedown)=\"handlePaginatorPress('after', $event)\"\n    (touchend)=\"stopInterval()\"\n>\n    <i kbq-icon=\"kbq-chevron-right_16\" [color]=\"disableScrollAfter ? 'contrast-fade' : 'contrast'\"></i>\n</div>\n","import { CdkMonitorFocus } from '@angular/cdk/a11y';\nimport { CdkPortalOutlet } from '@angular/cdk/portal';\nimport {\n    AfterContentChecked,\n    AfterContentInit,\n    AfterViewInit,\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ContentChildren,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    Inject,\n    InjectionToken,\n    Input,\n    numberAttribute,\n    OnDestroy,\n    Optional,\n    Output,\n    QueryList,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { KBQ_PARENT_ANIMATION_COMPONENT } from '@koobiq/components/core';\nimport { KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { merge, Subject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { KbqTabBody } from './tab-body.component';\nimport { KbqTabHeader } from './tab-header.component';\nimport { KbqTabLabelWrapper } from './tab-label-wrapper.directive';\nimport { KbqTab } from './tab.component';\n\n@Directive({\n    selector:\n        'kbq-tab-group[kbq-align-tabs-center], [kbq-tab-nav-bar][kbq-align-tabs-center], [kbqTabNavBar][kbq-align-tabs-center]',\n    host: { class: 'kbq-tab-group_align-labels-center' }\n})\nexport class KbqAlignTabsCenterCssStyler {}\n\n@Directive({\n    selector:\n        'kbq-tab-group[kbq-align-tabs-end], [kbq-tab-nav-bar][kbq-align-tabs-end], [kbqTabNavBar][kbq-align-tabs-end]',\n    host: { class: 'kbq-tab-group_align-labels-end' }\n})\nexport class KbqAlignTabsEndCssStyler {}\n\n@Directive({\n    selector: 'kbq-tab-group[kbq-stretch-tabs], [kbq-tab-nav-bar][kbq-stretch-tabs], [kbqTabNavBar][kbq-stretch-tabs]',\n    host: { class: 'kbq-tab-group_stretch-labels' }\n})\nexport class KbqStretchTabsCssStyler {}\n\n@Directive({\n    selector: 'kbq-tab-group[vertical], [kbq-tab-nav-bar][vertical], [kbqTabNavBar][vertical]',\n    host: { class: 'kbq-tab-group_vertical' }\n})\nexport class KbqVerticalTabsCssStyler {}\n\n/** Used to generate unique ID's for each tab component */\nlet nextId = 0;\n\n/** A simple change event emitted on focus or selection changes. */\nexport class KbqTabChangeEvent {\n    /** Index of the currently-selected tab. */\n    index: number;\n    /** Reference to the currently-selected tab. */\n    tab: KbqTab;\n}\n\n/** Possible positions for the tab header. */\nexport type KbqTabHeaderPosition = 'above' | 'below';\n\n/** Object that can be used to configure the default options for the tabs module. */\nexport interface KbqTabsConfig {\n    /** Duration for the tab animation. Must be a valid CSS value (e.g. 600ms). */\n    animationDuration?: string;\n}\n\n/** Injection token that can be used to provide the default options the tabs module. */\nexport const KBQ_TABS_CONFIG = new InjectionToken<KbqTabsConfig>('KBQ_TABS_CONFIG');\n\nexport type KbqTabSelectBy = string | number | ((tabs: KbqTab[]) => KbqTab | null);\n\n/**\n * Tab-group component.  Supports basic tab pairs (label + content) and includes keyboard navigation.\n */\n@Component({\n    selector: 'kbq-tab-group',\n    imports: [KbqTabHeader, CdkMonitorFocus, KbqTabLabelWrapper, KbqTooltipTrigger, CdkPortalOutlet, KbqTabBody],\n    templateUrl: './tab-group.html',\n    styleUrls: ['./tab-group.scss', './tabs-tokens.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    exportAs: 'kbqTabGroup',\n    host: {\n        class: 'kbq-tab-group',\n        '[class.kbq-tab-group_filled]': '!transparent',\n        '[class.kbq-tab-group_transparent]': 'transparent',\n        '[class.kbq-tab-group_on-background]': '!onSurface',\n        '[class.kbq-tab-group_on-surface]': 'onSurface',\n        '[class.kbq-tab-group_dynamic-height]': 'dynamicHeight',\n        '[class.kbq-tab-group_inverted-header]': 'headerPosition === \"below\"',\n        '(window:resize)': 'resizeStream.next($event)'\n    },\n    providers: [{ provide: KBQ_PARENT_ANIMATION_COMPONENT, useExisting: forwardRef(() => this) }]\n})\nexport class KbqTabGroup implements AfterContentInit, AfterViewInit, AfterContentChecked, OnDestroy {\n    readonly resizeStream = new Subject<Event>();\n\n    @ContentChildren(KbqTab) tabs: QueryList<KbqTab>;\n\n    @ViewChild('tabBodyWrapper', { static: false }) tabBodyWrapper: ElementRef;\n\n    @ViewChild('tabHeader', { static: false }) tabHeader: KbqTabHeader;\n\n    @Input({ transform: booleanAttribute }) transparent: boolean = false;\n    @Input({ transform: booleanAttribute }) onSurface: boolean = false;\n    @Input({ transform: booleanAttribute }) underlined: boolean = false;\n    @Input({ transform: booleanAttribute }) vertical: boolean = false;\n\n    /** Whether the tab group should grow to the size of the active tab. */\n    @Input({ transform: booleanAttribute }) dynamicHeight: boolean = false;\n\n    /** The index of the active tab. */\n    @Input({ transform: numberAttribute })\n    get selectedIndex(): number {\n        return this._selectedIndex;\n    }\n\n    set selectedIndex(value: number) {\n        this.activeTab = value;\n    }\n\n    private _selectedIndex: number;\n\n    @Input()\n    get activeTab(): KbqTab | null {\n        switch (typeof this.attributeToSelectBy) {\n            case 'number':\n                return this.tabs.get(this.clampTabIndex(this.attributeToSelectBy)) || null;\n            case 'string':\n                return (\n                    this.tabs.toArray().find(({ tabId }) => tabId === this.attributeToSelectBy) ||\n                    this.tabs.get(0) ||\n                    null\n                );\n            case 'function':\n                return this.attributeToSelectBy(this.tabs.toArray());\n            default:\n                return this.tabs.get(0) || null;\n        }\n    }\n\n    set activeTab(value: KbqTabSelectBy | null) {\n        this.attributeToSelectBy = value;\n    }\n\n    /** Position of the tab header. */\n    @Input() headerPosition: KbqTabHeaderPosition = 'above';\n\n    /** Duration for the tab animation. Must be a valid CSS value (e.g. 600ms). */\n    @Input() animationDuration: string;\n\n    @Input({ transform: booleanAttribute })\n    get disabled(): boolean {\n        return this._disabled;\n    }\n\n    set disabled(value: boolean) {\n        if (value !== this.disabled) {\n            this._disabled = value;\n        }\n    }\n\n    private _disabled: boolean = false;\n\n    /** Output to enable support for two-way binding on `[(selectedIndex)]` */\n    @Output() readonly selectedIndexChange: EventEmitter<number> = new EventEmitter<number>();\n\n    /** Event emitted when the tab selection has changed. */\n    @Output() readonly activeTabChange: EventEmitter<string | number | KbqTab> = new EventEmitter<\n        string | number | KbqTab\n    >();\n\n    /** Event emitted when focus has changed within a tab group. */\n    @Output() readonly focusChange: EventEmitter<KbqTabChangeEvent> = new EventEmitter<KbqTabChangeEvent>();\n\n    /** Event emitted when the body animation has completed */\n    @Output() readonly animationDone: EventEmitter<void> = new EventEmitter<void>();\n\n    /** Event emitted when the tab selection has changed. */\n    @Output() readonly selectedTabChange: EventEmitter<KbqTabChangeEvent> = new EventEmitter<KbqTabChangeEvent>(true);\n\n    private attributeToSelectBy: KbqTabSelectBy | null = null;\n\n    /** Snapshot of the height of the tab body wrapper before another tab is activated. */\n    private tabBodyWrapperHeight = 0;\n\n    /** Subscription to tabs being added/removed. */\n    private tabsSubscription = Subscription.EMPTY;\n\n    /** Subscription to changes in the tab labels. */\n    private tabLabelSubscription = Subscription.EMPTY;\n    private resizeSubscription = Subscription.EMPTY;\n\n    private readonly groupId: number;\n    private readonly resizeDebounceInterval: number = 100;\n\n    constructor(\n        private readonly changeDetectorRef: ChangeDetectorRef,\n        @Inject(KBQ_TABS_CONFIG) @Optional() defaultConfig?: KbqTabsConfig\n    ) {\n        this.groupId = nextId++;\n        this.animationDuration = defaultConfig?.animationDuration || '0ms';\n\n        this.subscribeToResize();\n    }\n\n    ngAfterContentInit() {\n        this.subscribeToTabLabels();\n\n        // Subscribe to changes in the amount of tabs, in order to be\n        // able to re-render the content as new tabs are added or removed.\n        this.tabsSubscription = this.tabs.changes.subscribe(() => {\n            // const indexToSelect = this.clampTabIndex(this.indexToSelect);\n            const indexToSelect = this.getTabIndexToSelect();\n\n            // Maintain the previously-selected tab if a new tab is added or removed and there is no\n            // explicit change that selects a different tab.\n            if (indexToSelect === this._selectedIndex) {\n                const tabs = this.tabs.toArray();\n\n                for (let i = 0; i < tabs.length; i++) {\n                    if (tabs[i].isActive) {\n                        // Assign both to the `activeTab` and `_selectedIndex` so we don't fire a changed\n                        // event, otherwise the consumer may end up in an infinite loop in some edge cases like\n                        // adding a tab within the `selectedIndexChange` event.\n                        this._selectedIndex = i;\n                        this.onSelectFocusedIndex(i);\n                        break;\n                    }\n                }\n            }\n\n            this.subscribeToTabLabels();\n            this.changeDetectorRef.markForCheck();\n        });\n    }\n\n    /**\n     * After the content is checked, this component knows what tabs have been defined\n     * and what the selected index should be. This is where we can know exactly what position\n     * each tab should be in according to the new selected index, and additionally we know how\n     * a new selected tab should transition in (from the left or right).\n     */\n    ngAfterContentChecked() {\n        // Don't clamp the `indexToSelect` immediately in the setter because it can happen that\n        // the amount of tabs changes before the actual change detection runs.\n        const indexToSelect = this.getTabIndexToSelect();\n\n        // If there is a change in selected index, emit a change event. Should not trigger if\n        // the selected index has not yet been initialized.\n        if (this._selectedIndex !== indexToSelect) {\n            const isFirstRun = this._selectedIndex == null;\n\n            if (!isFirstRun) {\n                this.selectedTabChange.emit(this.createChangeEvent(indexToSelect));\n            }\n\n            // Changing these values after change detection has run\n            // since the checked content may contain references to them.\n            Promise.resolve().then(() => {\n                this.tabs.forEach((tab, index) => (tab.isActive = index === indexToSelect));\n\n                if (!isFirstRun) {\n                    const tabToSelect = this.activeTab;\n\n                    this.selectedIndexChange.emit(indexToSelect);\n                    this.activeTabChange.emit(\n                        this.attributeToSelectBy && typeof this.attributeToSelectBy === 'function' && tabToSelect\n                            ? tabToSelect\n                            : (this.attributeToSelectBy as string | number)\n                    );\n                }\n            });\n        }\n\n        // Setup the position for each tab and optionally setup an origin on the next selected tab.\n        this.tabs.forEach((tab: KbqTab, index: number) => {\n            tab.position = index - indexToSelect;\n\n            // If there is already a selected tab, then set up an origin for the next selected tab\n            // if it doesn't have one already.\n\n            if (this._selectedIndex != null && tab.position === 0 && !tab.origin) {\n                tab.origin = indexToSelect - this._selectedIndex;\n            }\n        });\n\n        if (this._selectedIndex !== indexToSelect) {\n            this._selectedIndex = indexToSelect;\n            this.changeDetectorRef.markForCheck();\n        }\n    }\n\n    ngAfterViewInit(): void {\n        this.checkOverflow();\n    }\n\n    ngOnDestroy() {\n        this.tabsSubscription.unsubscribe();\n        this.tabLabelSubscription.unsubscribe();\n        this.resizeSubscription.unsubscribe();\n    }\n\n    focusChanged(index: number) {\n        this.focusChange.emit(this.createChangeEvent(index));\n    }\n\n    /** Returns a unique id for each tab label element */\n    getTabLabelId(i: number): string {\n        return `kbq-tab-label-${this.groupId}-${i}`;\n    }\n\n    /** Returns a unique id for each tab content element */\n    getTabContentId(i: number): string {\n        return `kbq-tab-content-${this.groupId}-${i}`;\n    }\n\n    /**\n     * Sets the height of the body wrapper to the height of the activating tab if dynamic\n     * height property is true.\n     */\n    setTabBodyWrapperHeight(tabHeight: number): void {\n        if (!this.dynamicHeight || !this.tabBodyWrapperHeight) {\n            return;\n        }\n\n        const wrapper: HTMLElement = this.tabBodyWrapper.nativeElement;\n\n        wrapper.style.height = `${this.tabBodyWrapperHeight}px`;\n\n        // This conditional forces the browser to paint the height so that\n        // the animation to the new height can have an origin.\n        if (this.tabBodyWrapper.nativeElement.offsetHeight) {\n            wrapper.style.height = `${tabHeight}px`;\n        }\n    }\n\n    /** Removes the height of the tab body wrapper. */\n    removeTabBodyWrapperHeight(): void {\n        this.tabBodyWrapperHeight = this.tabBodyWrapper.nativeElement.clientHeight;\n        this.tabBodyWrapper.nativeElement.style.height = '';\n        this.animationDone.emit();\n    }\n\n    /** Handle click events, setting new selected index if appropriate. */\n    handleClick(tab: KbqTab, tabHeader: KbqTabHeader, index: number) {\n        if (tab.disabled) {\n            return;\n        }\n\n        this.onSelectFocusedIndex(index);\n        tabHeader.focusIndex = index;\n    }\n\n    /** Retrieves the tabindex for the tab. */\n    getTabIndex(tab: KbqTab, index: number): number | null {\n        if (tab.disabled) {\n            return null;\n        }\n\n        return this.selectedIndex === index ? 0 : -1;\n    }\n\n    onSelectFocusedIndex($event: number): void {\n        if (typeof this.attributeToSelectBy === 'string') {\n            this.activeTab = this.tabs.get($event)?.tabId || null;\n\n            return;\n        }\n\n        this.activeTab = $event;\n    }\n\n    private checkOverflow = () => {\n        this.tabHeader.items.forEach((headerTab) => headerTab.checkOverflow());\n    };\n\n    private createChangeEvent(index: number): KbqTabChangeEvent {\n        const event = new KbqTabChangeEvent();\n\n        event.index = index;\n\n        if (this.tabs && this.tabs.length) {\n            event.tab = this.tabs.toArray()[index];\n        }\n\n        return event;\n    }\n\n    /**\n     * Subscribes to changes in the tab labels. This is needed, because the @Input for the label is\n     * on the KbqTab component, whereas the data binding is inside the KbqTabGroup. In order for the\n     * binding to be updated, we need to subscribe to changes in it and trigger change detection\n     * manually.\n     */\n    private subscribeToTabLabels() {\n        if (this.tabLabelSubscription) {\n            this.tabLabelSubscription.unsubscribe();\n        }\n\n        this.tabLabelSubscription = merge(...this.tabs.map((tab) => tab.stateChanges)).subscribe(() =>\n            this.changeDetectorRef.markForCheck()\n        );\n    }\n\n    private subscribeToResize() {\n        if (!this.vertical) {\n            return;\n        }\n\n        if (this.resizeSubscription) {\n            this.resizeSubscription.unsubscribe();\n        }\n\n        this.resizeSubscription = this.resizeStream\n            .pipe(debounceTime(this.resizeDebounceInterval))\n            .subscribe(this.checkOverflow);\n    }\n\n    /** Clamps the given index to the bounds of 0 and the tabs length. */\n    private clampTabIndex(index: number | null): number {\n        // Note the `|| 0`, which ensures that values like NaN can't get through\n        // and which would otherwise throw the component into an infinite loop\n        // (since Math.max(NaN, 0) === NaN).\n        return Math.min(this.tabs.length - 1, Math.max(index || 0, 0));\n    }\n\n    private getTabIndexToSelect(): number {\n        const currentSelectedTab = this.activeTab;\n\n        if (currentSelectedTab === null) {\n            return 0;\n        }\n\n        return this.tabs?.toArray().indexOf(currentSelectedTab);\n    }\n}\n","<kbq-tab-header\n    #tabHeader\n    [selectedIndex]=\"selectedIndex\"\n    [underlined]=\"underlined\"\n    [vertical]=\"vertical\"\n    (indexFocused)=\"focusChanged($event)\"\n    (selectFocusedIndex)=\"onSelectFocusedIndex($event)\"\n>\n    @for (tab of tabs; track tab) {\n        <div\n            cdkMonitorElementFocus\n            kbqTabLabelWrapper\n            class=\"kbq-tab-label\"\n            [attr.tabindex]=\"getTabIndex(tab, $index)\"\n            [class.kbq-selected]=\"selectedIndex === $index\"\n            [class.kbq-tab-label_empty]=\"tab.empty\"\n            [class.kbq-tab-label_horizontal]=\"!vertical\"\n            [class.kbq-tab-label_underlined]=\"underlined\"\n            [class.kbq-tab-label_vertical]=\"vertical\"\n            [class.kbq-tab-label_icon-only]=\"tab.iconOnlyLabel\"\n            [disabled]=\"tab.disabled\"\n            [id]=\"getTabLabelId($index)\"\n            [kbqPlacement]=\"tab.tooltipPlacement\"\n            [kbqTooltip]=\"tab.tooltipTitle\"\n            [kbqTooltipDisabled]=\"!tab.empty && !tab.isOverflown\"\n            [kbqTrigger]=\"'hover, focus'\"\n            [tab]=\"tab\"\n            (click)=\"handleClick(tab, tabHeader, $index)\"\n        >\n            <div #labelContent class=\"kbq-tab-label__content\" [class.kbq-tab-label__template]=\"tab.templateLabel\">\n                <!-- If there is a label template, use it. -->\n                @if (tab.templateLabel) {\n                    <ng-template [cdkPortalOutlet]=\"tab.templateLabel\" />\n                }\n                <!-- If there is not a label template, fall back to the text label. -->\n                @if (!tab.templateLabel) {\n                    {{ tab.textLabel }}\n                }\n            </div>\n        </div>\n    }\n</kbq-tab-header>\n\n<div #tabBodyWrapper class=\"kbq-tab-body__wrapper\">\n    @for (tab of tabs; track tab) {\n        <kbq-tab-body\n            [animationDuration]=\"animationDuration\"\n            [class.kbq-tab-body__active]=\"selectedIndex === $index\"\n            [content]=\"tab.content!\"\n            [id]=\"getTabContentId($index)\"\n            [origin]=\"tab.origin!\"\n            [position]=\"tab.position!\"\n            (onCentered)=\"removeTabBodyWrapperHeight()\"\n            (onCentering)=\"setTabBodyWrapperHeight($event)\"\n        />\n    }\n</div>\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { ENTER, SPACE } from '@angular/cdk/keycodes';\nimport { CdkObserveContent } from '@angular/cdk/observers';\nimport {\n    AfterContentInit,\n    AfterViewInit,\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    ContentChildren,\n    Directive,\n    ElementRef,\n    forwardRef,\n    inject,\n    Input,\n    numberAttribute,\n    OnDestroy,\n    QueryList,\n    Renderer2,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { startWith } from 'rxjs/operators';\nimport { KbqPaginatedTabHeader } from './paginated-tab-header';\n\n// Increasing integer for generating unique ids for tab nav components.\nlet nextUniqueId = 0;\n\n/**\n * Navigation component matching the styles of the tab group header.\n */\n@Component({\n    selector: '[kbqTabNavBar], [kbq-tab-nav-bar]',\n    imports: [\n        KbqIconModule,\n        CdkObserveContent\n    ],\n    templateUrl: './tab-nav-bar.html',\n    styleUrls: [\n        './tab-nav-bar.scss',\n        './tabs-tokens.scss',\n        // KbqTabLink is a directive and can't have self styles, so we need to include its styles here.\n        './tab-link.scss'\n    ],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    exportAs: 'kbqTabNavBar',\n    host: {\n        class: 'kbq-tab-nav-bar',\n        '[class.kbq-tab-nav-bar_filled]': '!transparent',\n        '[class.kbq-tab-nav-bar_transparent]': 'transparent',\n        '[class.kbq-tab-nav-bar_on-background]': '!onSurface',\n        '[class.kbq-tab-nav-bar_on-surface]': 'onSurface',\n        '[class.kbq-tab-header_underlined]': 'underlined',\n        '[class.kbq-tab-header__pagination-controls_enabled]': 'showPaginationControls',\n        '[attr.role]': 'role'\n    }\n})\nexport class KbqTabNavBar extends KbqPaginatedTabHeader implements AfterContentInit {\n    @ViewChild('tabListContainer', { static: true }) readonly tabListContainer: ElementRef;\n    @ViewChild('tabList', { static: true }) readonly tabList: ElementRef;\n    @ViewChild('nextPaginator') readonly nextPaginator: ElementRef<HTMLElement>;\n    @ViewChild('previousPaginator') readonly previousPaginator: ElementRef<HTMLElement>;\n    @ContentChildren(forwardRef(() => KbqTabLink), { descendants: true }) readonly items: QueryList<KbqTabLink>;\n\n    /** Whether the nav bar background should be transparent. */\n    @Input({ transform: booleanAttribute }) transparent: boolean = false;\n    @Input({ transform: booleanAttribute }) onSurface: boolean = false;\n\n    /** Whether the nav bar should be underlined. */\n    @Input({ transform: booleanAttribute }) underlined: boolean = false;\n\n    /**\n     * Associated tab panel controlled by the nav bar.\n     */\n    @Input() tabNavPanel?: KbqTabNavPanel;\n\n    get role(): string | null {\n        return this.tabNavPanel ? 'tablist' : this.elementRef.nativeElement.getAttribute('role');\n    }\n\n    protected get activeTabOffsetWidth(): number | undefined {\n        return this.items.get(this.selectedIndex)?.elementRef?.nativeElement?.offsetWidth;\n    }\n\n    protected get activeTabOffsetLeft(): number | undefined {\n        return this.items.get(this.selectedIndex)?.elementRef?.nativeElement?.offsetLeft;\n    }\n\n    override ngAfterContentInit() {\n        // We need this to run before the `changes` subscription in parent to ensure that the `selectedIndex` is\n        // up-to-date by the time the `KbqPaginatedTabHeader` starts looking for it.\n        this.items.changes.pipe(startWith(null), takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n            this.updateActiveLink();\n        });\n\n        super.ngAfterContentInit();\n    }\n\n    protected itemSelected() {}\n\n    /** Notifies the component that the active link has been changed. */\n    updateActiveLink(): void {\n        if (!this.items) {\n            return;\n        }\n\n        const items = this.items.toArray();\n\n        for (let i = 0; i < items.length; i++) {\n            if (items[i].active) {\n                this.selectedIndex = i;\n                this.changeDetectorRef.markForCheck();\n\n                if (this.tabNavPanel) {\n                    this.tabNavPanel.activeTabId = items[i].id;\n                }\n\n                return;\n            }\n        }\n\n        // The ink bar should hide itself if no items are active.\n        this.selectedIndex = -1;\n    }\n}\n\n/**\n * Link inside of a KbqTabNavBar.\n */\n@Directive({\n    selector: '[kbqTabLink], [kbq-tab-link]',\n    exportAs: 'kbqTabLink',\n    host: {\n        class: 'kbq-tab-link',\n        '[class.kbq-selected]': 'active',\n        '[class.kbq-tab-label_vertical]': 'vertical',\n        '[class.kbq-tab-label_horizontal]': '!vertical',\n        '[class.kbq-tab-label_underlined]': 'underlined',\n        '[class.kbq-disabled]': 'disabled',\n\n        '[attr.id]': 'id',\n        '[attr.tabindex]': 'tabIndex',\n        '[attr.disabled]': 'disabled || null',\n        '[attr.aria-disabled]': 'disabled',\n        '[attr.aria-selected]': 'ariaSelected',\n        '[attr.role]': 'role',\n        '[attr.aria-controls]': 'ariaControls',\n        '[attr.aria-current]': 'ariaCurrent',\n\n        '(focus)': 'handleFocus()',\n        '(keydown)': 'handleKeydown($event)'\n    }\n})\nexport class KbqTabLink implements OnDestroy, AfterViewInit {\n    /** Unique id for the link. */\n    @Input() id = `kbq-tab-link-${nextUniqueId++}`;\n\n    /** Whether the link is active. */\n    @Input({ transform: booleanAttribute })\n    get active(): boolean {\n        return this._active;\n    }\n\n    set active(value: boolean) {\n        if (value !== this._active) {\n            this._active = value;\n            this.tabNavBar.updateActiveLink();\n        }\n    }\n\n    /** Whether the tab link is active or not. */\n    private _active: boolean = false;\n\n    get vertical(): boolean {\n        return this.tabNavBar.vertical;\n    }\n\n    get underlined(): boolean {\n        return this.tabNavBar.underlined;\n    }\n\n    /** Whether the tab link is disabled. */\n    @Input({ transform: booleanAttribute }) disabled: boolean = false;\n\n    /** Link tab index. */\n    @Input({ transform: numberAttribute })\n    get tabIndex(): number {\n        if (this.tabNavBar.tabNavPanel) {\n            return this.active && !this.disabled ? this._tabIndex : -1;\n        } else {\n            return this.disabled ? -1 : this._tabIndex;\n        }\n    }\n\n    set tabIndex(value: number) {\n        this._tabIndex = value;\n    }\n\n    private _tabIndex: number = 0;\n\n    /** Link aria-selected attribute value. */\n    protected get ariaSelected(): string | null {\n        if (this.tabNavBar.tabNavPanel) {\n            return this.active ? 'true' : 'false';\n        } else {\n            return this.elementRef.nativeElement.getAttribute('aria-selected');\n        }\n    }\n\n    /** Link role attribute value. */\n    protected get role(): string | null {\n        return this.tabNavBar.tabNavPanel ? 'tab' : this.elementRef.nativeElement.getAttribute('role');\n    }\n\n    /** Link aria-controls attribute value. */\n    protected get ariaControls(): string | null {\n        return this.tabNavBar.tabNavPanel\n            ? this.tabNavBar.tabNavPanel?.id\n            : this.elementRef.nativeElement.getAttribute('aria-controls');\n    }\n\n    /** Link aria-current attribute value. */\n    protected get ariaCurrent(): string | null {\n        return this.active && !this.tabNavBar.tabNavPanel ? 'page' : null;\n    }\n\n    readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n    private readonly focusMonitor = inject(FocusMonitor);\n    private readonly renderer = inject(Renderer2);\n    private readonly tabNavBar = inject(KbqTabNavBar);\n\n    ngAfterViewInit(): void {\n        this.focusMonitor.monitor(this.elementRef.nativeElement);\n\n        this.addClassModifierForIcons(Array.from(this.elementRef.nativeElement.querySelectorAll('.kbq-icon')));\n    }\n\n    ngOnDestroy() {\n        this.focusMonitor.stopMonitoring(this.elementRef.nativeElement);\n    }\n\n    private addClassModifierForIcons(icons: HTMLElement[]) {\n        const twoIcons = 2;\n        const [firstIconElement, secondIconElement] = icons;\n\n        if (icons.length === 1) {\n            const COMMENT_NODE = 8;\n\n            if (firstIconElement.nextSibling && firstIconElement.nextSibling.nodeType !== COMMENT_NODE) {\n                this.renderer.addClass(firstIconElement, 'kbq-icon_left');\n            }\n\n            if (firstIconElement.previousSibling && firstIconElement.previousSibling.nodeType !== COMMENT_NODE) {\n                this.renderer.addClass(firstIconElement, 'kbq-icon_right');\n            }\n        } else if (icons.length === twoIcons) {\n            this.renderer.addClass(firstIconElement, 'kbq-icon_left');\n            this.renderer.addClass(secondIconElement, 'kbq-icon_right');\n        }\n    }\n\n    /** Focuses the tab link. */\n    focus(): void {\n        this.elementRef.nativeElement.focus();\n    }\n\n    /** Handles the focus event. */\n    protected handleFocus() {\n        // Since we allow navigation through tabbing in the nav bar, we have to update the focused index whenever the\n        // link receives focus.\n        this.tabNavBar.focusIndex = this.tabNavBar.items.toArray().indexOf(this);\n    }\n\n    /** Handles the keydown event. */\n    protected handleKeydown(event: KeyboardEvent) {\n        if (event.keyCode === SPACE || event.keyCode === ENTER) {\n            if (this.disabled) {\n                event.preventDefault();\n            } else if (this.tabNavBar.tabNavPanel) {\n                // Only prevent the default action on space since it can scroll the page.\n                // Don't prevent enter since it can break link navigation.\n                if (event.keyCode === SPACE) {\n                    event.preventDefault();\n                }\n\n                this.elementRef.nativeElement.click();\n            }\n        }\n    }\n}\n\n/**\n * Tab panel component associated with KbqTabNav.\n */\n@Directive({\n    selector: '[kbqTabNavPanel]',\n    exportAs: 'kbqTabNavPanel',\n    host: {\n        class: 'kbq-tab-nav-panel',\n\n        '[attr.id]': 'id',\n        '[attr.aria-labelledby]': 'activeTabId',\n\n        role: 'tabpanel'\n    }\n})\nexport class KbqTabNavPanel {\n    /** Unique id for the tab panel. */\n    @Input() id = `kbq-tab-nav-panel-${nextUniqueId++}`;\n\n    /** Id of the active tab in the nav bar. */\n    activeTabId?: string;\n}\n","<div\n    #previousPaginator\n    class=\"kbq-tab-header__pagination kbq-tab-header__pagination_before\"\n    [class.kbq-disabled]=\"disableScrollBefore\"\n    (click)=\"handlePaginatorClick('before')\"\n    (mousedown)=\"handlePaginatorPress('before', $event)\"\n    (touchend)=\"stopInterval()\"\n>\n    <i kbq-icon=\"kbq-chevron-left_16\" [color]=\"disableScrollBefore ? 'contrast-fade' : 'contrast'\"></i>\n</div>\n\n<div #tabListContainer class=\"kbq-tab-link__container\" (keydown)=\"handleKeydown($event)\">\n    <div #tabList class=\"kbq-tab-list\" (cdkObserveContent)=\"onContentChanges()\">\n        <div class=\"kbq-tab-list__content\">\n            <ng-content />\n            <div\n                class=\"kbq-tab-list__active-tab-underline\"\n                [style.left.px]=\"activeTabOffsetLeft\"\n                [style.width.px]=\"activeTabOffsetWidth\"\n            ></div>\n        </div>\n    </div>\n</div>\n\n<div\n    #nextPaginator\n    class=\"kbq-tab-header__pagination kbq-tab-header__pagination_after\"\n    [class.kbq-disabled]=\"disableScrollAfter\"\n    (click)=\"handlePaginatorClick('after')\"\n    (mousedown)=\"handlePaginatorPress('after', $event)\"\n    (touchend)=\"stopInterval()\"\n>\n    <i kbq-icon=\"kbq-chevron-right_16\" [color]=\"disableScrollAfter ? 'contrast-fade' : 'contrast'\"></i>\n</div>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { CdkObserveContent } from '@angular/cdk/observers';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\nimport { NgModule } from '@angular/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqToolTipModule } from '@koobiq/components/tooltip';\nimport { KbqTabBody, KbqTabBodyPortal } from './tab-body.component';\nimport { KbqTabContent } from './tab-content.directive';\nimport {\n    KbqAlignTabsCenterCssStyler,\n    KbqAlignTabsEndCssStyler,\n    KbqStretchTabsCssStyler,\n    KbqTabGroup,\n    KbqVerticalTabsCssStyler\n} from './tab-group.component';\nimport { KbqTabHeader } from './tab-header.component';\nimport { KbqTabLabelWrapper } from './tab-label-wrapper.directive';\nimport { KbqTabLabel } from './tab-label.directive';\nimport { KbqTabLink, KbqTabNavBar, KbqTabNavPanel } from './tab-nav-bar';\nimport { KbqTab } from './tab.component';\n\nconst STANDALONE_COMPONENTS = [\n    KbqTabNavBar,\n    KbqTabLink,\n    KbqTabNavPanel\n];\n\nconst COMPONENTS = [\n    KbqTabGroup,\n    KbqTabLabel,\n    KbqTab,\n    KbqTabLabelWrapper,\n    KbqTabBody,\n    KbqTabBodyPortal,\n    KbqTabHeader,\n    KbqTabContent,\n    KbqAlignTabsCenterCssStyler,\n    KbqAlignTabsEndCssStyler,\n    KbqStretchTabsCssStyler,\n    KbqVerticalTabsCssStyler\n];\n\n@NgModule({\n    imports: [\n        PortalModule,\n        A11yModule,\n        CdkScrollableModule,\n        KbqIconModule,\n        KbqToolTipModule,\n        CdkObserveContent,\n        ...STANDALONE_COMPONENTS,\n        ...COMPONENTS\n    ],\n    exports: [\n        ...COMPONENTS,\n        ...STANDALONE_COMPONENTS\n    ]\n})\nexport class KbqTabsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["observableOf","i1","this"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAEO,MAAM,iBAAiB,GAAwD;;AAElF,IAAA,YAAY,EAAE,OAAO,CAAC,cAAc,EAAE;;QAElC,KAAK,CAAC,uDAAuD,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;;;;;AAM5F,QAAA,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,0BAA0B,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AACjF,QAAA,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,yBAAyB,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AAEjF,QAAA,UAAU,CACN,wDAAwD,EACxD,OAAO,CAAC,sDAAsD,CAAC,CAClE;QACD,UAAU,CAAC,4BAA4B,EAAE;AACrC,YAAA,KAAK,CAAC,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAAC;YAChD,OAAO,CAAC,sDAAsD;SACjE,CAAC;QACF,UAAU,CAAC,6BAA6B,EAAE;AACtC,YAAA,KAAK,CAAC,EAAE,SAAS,EAAE,yBAAyB,EAAE,CAAC;YAC/C,OAAO,CAAC,sDAAsD;SACjE;KACJ;;;ACoBL;;;AAGG;MAaU,UAAU,CAAA;;IAEnB,IACI,QAAQ,CAAC,QAAgB,EAAA;AACzB,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ;QAC7B,IAAI,CAAC,6BAA6B,EAAE;IACxC;AAqCA,IAAA,WAAA,CACqB,UAAmC,EACvB,GAAmB,EAChD,iBAAoC,EAAA;QAFnB,IAAA,CAAA,UAAU,GAAV,UAAU;QACE,IAAA,CAAA,GAAG,GAAH,GAAG;;AAjCjB,QAAA,IAAA,CAAA,WAAW,GAAyB,IAAI,YAAY,EAAU;;AAG9D,QAAA,IAAA,CAAA,eAAe,GAA0B,IAAI,YAAY,EAAW;;AAGpE,QAAA,IAAA,CAAA,kBAAkB,GAA0B,IAAI,YAAY,EAAW;;AAGvE,QAAA,IAAA,CAAA,UAAU,GAAuB,IAAI,YAAY,CAAO,IAAI,CAAC;;;;QAcvE,IAAA,CAAA,iBAAiB,GAAW,KAAK;;AAMzB,QAAA,IAAA,CAAA,qBAAqB,GAAG,YAAY,CAAC,KAAK;AAOvD,QAAA,IAAI,IAAI,CAAC,GAAG,IAAI,iBAAiB,EAAE;AAC/B,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAoB,KAAI;AAC5E,gBAAA,IAAI,CAAC,6BAA6B,CAAC,SAAS,CAAC;gBAC7C,iBAAiB,CAAC,YAAY,EAAE;AACpC,YAAA,CAAC,CAAC;QACN;IACJ;AAEA;;;AAGG;IACH,QAAQ,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE;AACvD,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,yBAAyB,EAAE;QACxD;IACJ;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE;IAC5C;AAEA,IAAA,qBAAqB,CAAC,CAAiB,EAAA;QACnC,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC;AAEpD,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;QAEtC,IAAI,WAAW,EAAE;AACb,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC;QACrE;IACJ;AAEA,IAAA,sBAAsB,CAAC,CAAiB,EAAA;;AAEpC,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;AAC9E,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;QAC1B;AAEA,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;AACjF,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE;QAClC;IACJ;;IAGA,kBAAkB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK;IAC/D;;AAGA,IAAA,gBAAgB,CAAC,QAA0C,EAAA;QACvD,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,oBAAoB,IAAI,QAAQ,KAAK,qBAAqB;IAC3G;;AAGQ,IAAA,6BAA6B,CAAC,GAAA,GAAiB,IAAI,CAAC,kBAAkB,EAAE,EAAA;AAC5E,QAAA,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,YAAY,GAAG,GAAG,KAAK,KAAK,GAAG,MAAM,GAAG,OAAO;QACxD;AAAO,aAAA,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE;AAC/B,YAAA,IAAI,CAAC,YAAY,GAAG,GAAG,KAAK,KAAK,GAAG,OAAO,GAAG,MAAM;QACxD;aAAO;AACH,YAAA,IAAI,CAAC,YAAY,GAAG,QAAQ;QAChC;IACJ;AAEA;;;AAGG;IACK,yBAAyB,GAAA;AAC7B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,EAAE;QAErC,IAAI,CAAC,GAAG,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,GAAG,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;AAC3E,YAAA,OAAO,oBAAoB;QAC/B;AAEA,QAAA,OAAO,qBAAqB;IAChC;kIA5HS,UAAU,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAV,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,cAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAwBR,eAAe,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvF9B,qZAaA,EAAA,MAAA,EAAA,CAAA,0HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MDwCc,aAAa,CAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAgJd,gBAAgB,CAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,UAAA,EA3Ib,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAKnC,UAAU,EAAA,UAAA,EAAA,CAAA;kBAZtB,SAAS;+BACI,cAAc,EAAA,OAAA,EACf,CAAC,aAAa,EAAE,UAAU,EAAC,MAAM,gBAAgB,EAAC,CAAC,EAAA,aAAA,EAG7C,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAA,IAAA,EACtC;AACF,wBAAA,KAAK,EAAE;AACV,qBAAA,EAAA,QAAA,EAAA,qZAAA,EAAA,MAAA,EAAA,CAAA,0HAAA,CAAA,EAAA;;0BA+CI;yEA1CD,QAAQ,EAAA,CAAA;sBADX;gBAUkB,WAAW,EAAA,CAAA;sBAA7B;gBAGkB,eAAe,EAAA,CAAA;sBAAjC;gBAGkB,kBAAkB,EAAA,CAAA;sBAApC;gBAGkB,UAAU,EAAA,CAAA;sBAA5B;gBAG8C,UAAU,EAAA,CAAA;sBAAxD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBAGpC,OAAO,EAAA,CAAA;sBAAf;gBAGQ,MAAM,EAAA,CAAA;sBAAd;gBAKQ,iBAAiB,EAAA,CAAA;sBAAzB;;AA4FL;;;AAGG;AAIG,MAAO,gBAAiB,SAAQ,eAAe,CAAA;AAMjD,IAAA,WAAA,CACI,wBAAkD,EAClD,gBAAkC,EACqB,IAAgB,EAAA;AAEvE,QAAA,KAAK,CAAC,wBAAwB,EAAE,gBAAgB,CAAC;QAFM,IAAA,CAAA,IAAI,GAAJ,IAAI;;AAPvD,QAAA,IAAA,CAAA,YAAY,GAAG,YAAY,CAAC,KAAK;;AAEjC,QAAA,IAAA,CAAA,UAAU,GAAG,YAAY,CAAC,KAAK;IAQvC;;IAGA,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE;AAEhB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC;AACzB,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAClE,aAAA,SAAS,CAAC,CAAC,WAAoB,KAAI;YAChC,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;gBACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;YAClC;AACJ,QAAA,CAAC,CAAC;AAEN,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAK;YAC1D,IAAI,CAAC,MAAM,EAAE;AACjB,QAAA,CAAC,CAAC;IACN;;IAGA,WAAW,GAAA;QACP,KAAK,CAAC,WAAW,EAAE;AAEnB,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;AAC/B,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;IACjC;AArCS,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,0FASb,UAAU,CAAC,MAAM,UAAU,CAAC,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;sHAT/B,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE;AACb,iBAAA;;0BAUQ,MAAM;AAAC,oBAAA,IAAA,EAAA,CAAA,UAAU,CAAC,MAAM,UAAU,CAAC;;;AE5M5C;MAIa,aAAa,CAAA;AACtB,IAAA,WAAA,CAAmB,QAA0B,EAAA;QAA1B,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAAqB;kIADvC,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;sHAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE;AACb,iBAAA;;;ACwBD;AACA,MAAM,2BAA2B,GAAG,+BAA+B,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAyB;AAS9G;;;AAGG;AACH,MAAM,sBAAsB,GAAG,EAAE;AAEjC;;;AAGG;AACH,MAAM,mBAAmB,GAAG,GAAG;AAE/B;;;AAGG;AACH,MAAM,sBAAsB,GAAG,GAAG;AAElC,MAAM,sBAAsB,GAAG,GAAG;AAClC,MAAM,eAAe,GAAG,GAAG;AAK3B;;;AAGG;MAEmB,qBAAqB,CAAA;;AAEvC,IAAA,IACI,aAAa,GAAA;QACb,OAAO,IAAI,CAAC,cAAc;IAC9B;IAEA,IAAI,aAAa,CAAC,KAAa,EAAA;AAC3B,QAAA,MAAM,YAAY,GAAG,oBAAoB,CAAC,KAAK,CAAC;QAEhD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,cAAc,KAAK,YAAY;AAChE,QAAA,IAAI,CAAC,cAAc,GAAG,YAAY;AAElC,QAAA,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,YAAY,CAAC;IACnD;;AAKA,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,eAAgB,GAAG,CAAC;IACjE;;IAGA,IAAI,UAAU,CAAC,KAAa,EAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAC5E;QACJ;AAEA,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC;IACxC;;AAGA,IAAA,IAAI,cAAc,GAAA;QACd,OAAO,IAAI,CAAC,eAAe;IAC/B;IAEA,IAAI,cAAc,CAAC,CAAS,EAAA;QACxB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC,CAAC;;;AAI5E,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;QACjC,IAAI,CAAC,sBAAsB,EAAE;IACjC;;IAiCA,IACI,QAAQ,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AAEtB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;QACjC;IACJ;AAEA,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS;IACzB;AAkCA,IAAA,WAAA,GAAA;QA1GQ,IAAA,CAAA,cAAc,GAAG,CAAC;;QA+BlB,IAAA,CAAA,eAAe,GAAG,CAAC;;AASlB,QAAA,IAAA,CAAA,kBAAkB,GAAyB,IAAI,YAAY,EAAU;;AAGrE,QAAA,IAAA,CAAA,YAAY,GAAyB,IAAI,YAAY,EAAU;;QAGxE,IAAA,CAAA,sBAAsB,GAAG,KAAK;;QAG9B,IAAA,CAAA,kBAAkB,GAAG,IAAI;;QAGzB,IAAA,CAAA,mBAAmB,GAAG,IAAI;AAE1B;;;AAGG;QACqC,IAAA,CAAA,iBAAiB,GAAY,KAAK;QAgBlE,IAAA,CAAA,SAAS,GAAG,KAAK;;AAkBjB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAQ;;QAGnC,IAAA,CAAA,oBAAoB,GAAG,KAAK;AAEjB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAClC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAA0B,UAAU,CAAC;AACrD,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC/C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC3B,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAChD,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;;AAIxC,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;YAC/B,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,YAAY;iBAChD,IAAI,CAAC,kBAAkB,EAAE;iBACzB,SAAS,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;AAC7C,QAAA,CAAC,CAAC;IACN;;IAGA,eAAe,GAAA;;QAEX,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,YAAY,EAAE,2BAA2B;AACpF,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAEzD,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,YAAY,EAAE,2BAA2B;AAChF,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC5D;IAEA,kBAAkB,GAAA;QACd,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAGA,EAAY,CAAC,KAAK,CAAC;QAClE,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,sBAAsB,CAAC;QAEhE,MAAM,OAAO,GAAG,MAAK;YACjB,IAAI,CAAC,gBAAgB,EAAE;AAC3B,QAAA,CAAC;AAED,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,eAAe,CAA4B,IAAI,CAAC,KAAK,CAAC,CAAC,yBAAyB,CAClG,IAAI,CAAC,kBAAkB,EAAE,CAC5B;QAED,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC;;;AAIrD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,qBAAqB,KAAK;cACvC,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,OAAO;cACzC,OAAO,EAAE;;;QAIf,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;AACtC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAK;;;;AAIZ,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MACZ,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAK;gBACxB,IAAI,CAAC,oBAAoB,EAAE;AAC3B,gBAAA,OAAO,EAAE;YACb,CAAC,CAAC,CACL;YAED,IAAI,CAAC,UAAU,CAAC,yBAAyB,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;AACxE,QAAA,CAAC,CAAC;;;;QAKN,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,aAAa,KAAI;AACzF,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;AACrC,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;AACnC,QAAA,CAAC,CAAC;IACN;IAEA,qBAAqB,GAAA;;QAEjB,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAC1C,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;AACtC,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;QACzC;;;AAIA,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC;YACvC,IAAI,CAAC,sBAAsB,EAAE;AAC7B,YAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;AACjC,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;QACzC;;;AAIA,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC5B,IAAI,CAAC,uBAAuB,EAAE;AAC9B,YAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;AAClC,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;QACzC;IACJ;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;IACjC;AAEA,IAAA,aAAa,CAAC,KAAoB,EAAA;;AAE9B,QAAA,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE;YACvB;QACJ;AAEA,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO;AAEzB,QAAA,IAAI,GAAG,KAAK,IAAI,EAAE;AACd,YAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE;QACxC;AAAO,aAAA,IAAI,GAAG,KAAK,GAAG,EAAE;AACpB,YAAA,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE;QACvC;aAAO,IAAI,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC1C,YAAA,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE;QAC3C;aAAO,IAAI,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC5C,YAAA,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE;QACvC;aAAO,IAAI,GAAG,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC9C,YAAA,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE;QACvC;aAAO,IAAI,GAAG,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC7C,YAAA,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE;QAC3C;aAAO,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACrC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QACjD;QAEA,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACxF,KAAK,CAAC,cAAc,EAAE;QAC1B;IACJ;AAEA;;AAEG;IACH,gBAAgB,GAAA;QACZ,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW;;;;AAK7D,QAAA,IAAI,WAAW,KAAK,IAAI,CAAC,kBAAkB,EAAE;AACzC,YAAA,IAAI,CAAC,kBAAkB,GAAG,WAAW,IAAI,EAAE;;;AAI3C,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;gBACjB,IAAI,CAAC,gBAAgB,EAAE;AACvB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;AACzC,YAAA,CAAC,CAAC;QACN;IACJ;AAEA;;;;;;AAMG;IACH,gBAAgB,GAAA;QACZ,IAAI,CAAC,sBAAsB,EAAE;QAC7B,IAAI,CAAC,sBAAsB,EAAE;QAC7B,IAAI,CAAC,uBAAuB,EAAE;IAClC;AAEA;;;AAGG;AACH,IAAA,YAAY,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACb,YAAA,OAAO,IAAI;QACf;QAEA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI;QAE3D,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ;IACjC;AAEA;;;AAGG;AACH,IAAA,WAAW,CAAC,QAAgB,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC7B,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;QAChC;AAEA,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;YACpB,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE;;;;AAKtC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa;AACvD,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,EAAE;AAErC,YAAA,IAAI,GAAG,KAAK,KAAK,EAAE;AACf,gBAAA,WAAW,CAAC,UAAU,GAAG,CAAC;YAC9B;iBAAO;gBACH,WAAW,CAAC,UAAU,GAAG,WAAW,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW;YAC9E;QACJ;IACJ;;IAGA,kBAAkB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,GAAG,EAAE,KAAK,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK;IACpD;;IAGA,uBAAuB,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB;QACJ;AAEA,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc;AAC1C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,EAAE,KAAK,KAAK,GAAG,CAAC,cAAc,GAAG,cAAc;;;;;;;AAQzF,QAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,WAAA,EAAc,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK;;;;;AAMtF,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;YAC7C,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,UAAU,GAAG,CAAC;QACtD;IACJ;AAEA;;;;;;;AAOG;AACH,IAAA,YAAY,CAAC,SAA0B,EAAA;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,WAAW;;QAGlE,MAAM,YAAY,GAAG,CAAC,SAAS,KAAK,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,UAAU,GAAG,eAAe;QAErF,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,GAAG,YAAY,CAAC;IAC5D;;AAGA,IAAA,oBAAoB,CAAC,SAA0B,EAAA;QAC3C,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;IAChC;AAEA;;;;;AAKG;AACH,IAAA,aAAa,CAAC,UAAkB,EAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB;QACJ;QAEA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,GAAG,IAAI;QAE1E,IAAI,CAAC,aAAa,EAAE;YAChB;QACJ;;QAGA,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,WAAW;QAClE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,aAAa,CAAC,UAAU,CAAC,aAAa;AAE1E,QAAA,IAAI,cAAsB;AAC1B,QAAA,IAAI,aAAqB;AAEzB,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,KAAK,KAAK,EAAE;YACrC,cAAc,GAAG,UAAU;AAC3B,YAAA,aAAa,GAAG,cAAc,GAAI,WAAsB;QAC5D;aAAO;YACH,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,GAAG,UAAU;AACnE,YAAA,cAAc,GAAG,aAAa,GAAG,WAAW;QAChD;AAEA,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc;AAC5C,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,GAAG,UAAU;AAExD,QAAA,IAAI,cAAc,GAAG,gBAAgB,EAAE;;YAEnC,IAAI,CAAC,cAAc,IAAI,gBAAgB,GAAG,cAAc,GAAG,sBAAsB;QACrF;AAAO,aAAA,IAAI,aAAa,GAAG,eAAe,EAAE;;YAExC,IAAI,CAAC,cAAc,IAAI,aAAa,GAAG,eAAe,GAAG,sBAAsB;QACnF;IACJ;AAEA;;;;;;;AAOG;IACH,sBAAsB,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;QACvC;aAAO;AACH,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW;YAEpG,IAAI,CAAC,SAAS,EAAE;AACZ,gBAAA,IAAI,CAAC,cAAc,GAAG,CAAC;YAC3B;AAEA,YAAA,IAAI,SAAS,KAAK,IAAI,CAAC,sBAAsB,EAAE;AAC3C,gBAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;YACzC;AAEA,YAAA,IAAI,CAAC,sBAAsB,GAAG,SAAS;QAC3C;IACJ;AAEA;;;;;;;;AAQG;IACH,sBAAsB,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,GAAG,IAAI;QAC7D;aAAO;;YAEH,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,cAAc,KAAK,CAAC;YACpD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,oBAAoB,EAAE;AAC7E,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;QACzC;IACJ;AAEA;;;;;;AAMG;IACH,oBAAoB,GAAA;QAChB,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW;QAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,WAAW;AAElE,QAAA,OAAO,eAAe,GAAG,UAAU,IAAI,CAAC;IAC5C;;IAGA,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC7B;AAEA;;;;AAIG;IACH,oBAAoB,CAAC,SAA0B,EAAE,UAAuB,EAAA;;;AAIpE,QAAA,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,IAAI,IAAI,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;YACpE;QACJ;;QAGA,IAAI,CAAC,YAAY,EAAE;;AAGnB,QAAA,KAAK,CAAC,mBAAmB,EAAE,sBAAsB;;AAE5C,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;aACvE,SAAS,CAAC,MAAK;AACZ,YAAA,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;;YAGpE,IAAI,QAAQ,KAAK,CAAC,IAAI,QAAQ,IAAI,iBAAiB,EAAE;gBACjD,IAAI,CAAC,YAAY,EAAE;YACvB;AACJ,QAAA,CAAC,CAAC;IACV;AAIA;;;;AAIG;AACK,IAAA,QAAQ,CAAC,QAAgB,EAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE;QAChD;AAEA,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,EAAE;AAErD,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;;;AAIxE,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;QACjC,IAAI,CAAC,sBAAsB,EAAE;QAE7B,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE;IAC/D;IAEQ,oBAAoB,GAAA;AACxB,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,EAAE;AAErD,QAAA,IAAI,IAAI,CAAC,cAAc,GAAG,iBAAiB,EAAE;AACzC,YAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QACpC;IACJ;kIAliBkB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,CAAA,eAAA,EAAA,eAAA,EAEnB,eAAe,CAAA,EAAA,iBAAA,EAAA,CAAA,mBAAA,EAAA,mBAAA,EAwEf,gBAAgB,sCAGhB,gBAAgB,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FA7ElB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAD1C;wDAIO,aAAa,EAAA,CAAA;sBADhB,KAAK;uBAAC,EAAE,SAAS,EAAE,eAAe,EAAE;gBAwEG,iBAAiB,EAAA,CAAA;sBAAxD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAIlC,QAAQ,EAAA,CAAA;sBADX,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;;MC9I7B,aAAa,GAAG,IAAI,cAAc,CAAc,aAAa;AAE1E;AAKM,MAAO,WAAY,SAAQ,SAAS,CAAA;AAJ1C,IAAA,WAAA,GAAA;;;QAMa,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;AACpE,IAAA;kIAHY,WAAW,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;sHAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAFT,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAExD,WAAW,EAAA,UAAA,EAAA,CAAA;kBAJvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,gCAAgC;oBAC1C,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAA,WAAa,EAAE;AACnE,iBAAA;;;MCiCY,MAAM,CAAA;;AAEf,IAAA,IAAI,OAAO,GAAA;QACP,OAAO,IAAI,CAAC,aAAa;IAC7B;AAEA,IAAA,IACI,aAAa,GAAA;QACb,OAAO,IAAI,CAAC,cAAc;IAC9B;IAEA,IAAI,aAAa,CAAC,KAAkB,EAAA;AAChC,QAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;IACrC;AAYA,IAAA,IACI,YAAY,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,aAAa;IACzD;IAEA,IAAI,YAAY,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;IAC9B;AAIA,IAAA,IACI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS;IACzB;IAEA,IAAI,QAAQ,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QAC1B;IACJ;;AAcA,IAAA,IAAI,aAAa,GAAA;QACb,OAAO,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,IAAI,KAAK;IAClD;AAsBA,IAAA,IAAI,WAAW,GAAA;AACX,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,qBAAqB;IACvC;AAEA,IAAA,IAAI,oBAAoB,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,OAAO,CAAA,EAAG,IAAI,CAAC,qBAAqB,IAAI;QAC5C;AAEA,QAAA,OAAO,EAAE;IACb;IAEA,IAAI,oBAAoB,CAAC,KAAa,EAAA;AAClC,QAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;IACtC;AAOA,IAAA,WAAA,CAA6B,gBAAkC,EAAA;QAAlC,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAtErC,IAAA,CAAA,aAAa,GAAG,EAAE;QAalB,IAAA,CAAA,SAAS,GAAY,KAAK;AAEzB,QAAA,IAAA,CAAA,gBAAgB,GAA4B,eAAe,CAAC,KAAK;;QAG1D,IAAA,CAAA,SAAS,GAAG,EAAE;QAEU,IAAA,CAAA,KAAK,GAAY,KAAK;;AAUrD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAQ;AAE3C;;;AAGG;QACH,IAAA,CAAA,QAAQ,GAAkB,IAAI;AAE9B;;;AAGG;QACH,IAAA,CAAA,MAAM,GAAkB,IAAI;AAE5B;;AAEG;QACH,IAAA,CAAA,QAAQ,GAAG,KAAK;QAkBR,IAAA,CAAA,qBAAqB,GAAG,EAAE;;QAG1B,IAAA,CAAA,aAAa,GAA0B,IAAI;IAEe;AAElE,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,IAAI,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;AAC3E,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QAC5B;IACJ;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,gBAAgB,CAAC;IAChH;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;IAChC;AAEA;;;;;AAKG;AACO,IAAA,qBAAqB,CAAC,KAAkB,EAAA;;;;;QAK9C,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;QAC/B;IACJ;kIAtIS,MAAM,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAN,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAM,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAoCK,gBAAgB,CAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,CAAA,OAAA,EAAA,WAAA,CAAA,EAAA,KAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAkBhB,gBAAgB,CAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EA5DzB;AACP,YAAA,GAAG,CAAC,0BAA0B,EAAE,4BAA4B,CAAC,CAAC,GAAG,EAAC,CAAC,KAAK,KACpE,mCAAmC,CAAC,KAAK,GAAE,CAAC,OAAO,MAAK,MAAM,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAA,EAAC;SAEtG,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAQa,aAAa,kFAcb,aAAa,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAU,WAAW,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAGrC,WAAW,yGAjCZ,2CAA2C,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAU5C,MAAM,EAAA,UAAA,EAAA,CAAA;kBAflB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,SAAS;;;;AAInB,oBAAA,QAAQ,EAAE,2CAA2C;oBACrD,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,SAAS,EAAE;AACP,wBAAA,GAAG,CAAC,0BAA0B,EAAE,4BAA4B,CAAC,CAAC,GAAG,EAAC,CAAC,KAAK,KACpE,mCAAmC,CAAC,KAAK,GAAE,CAAC,OAAO,MAAK,MAAM,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAA,EAAC;AAEtG;AACJ,iBAAA;qFAQO,aAAa,EAAA,CAAA;sBADhB,YAAY;uBAAC,aAAa;gBAcuC,eAAe,EAAA,CAAA;sBAAhF,YAAY;uBAAC,aAAa,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE;gBAGtB,eAAe,EAAA,CAAA;sBAAxD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAGpC,YAAY,EAAA,CAAA;sBADf;gBAYG,QAAQ,EAAA,CAAA;sBADX,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAa7B,gBAAgB,EAAA,CAAA;sBAAxB;gBAGe,SAAS,EAAA,CAAA;sBAAxB,KAAK;uBAAC,OAAO;gBAE0B,KAAK,EAAA,CAAA;sBAA5C,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAE7B,KAAK,EAAA,CAAA;sBAAb;;;AC/FL;;;AAGG;MAQU,kBAAkB,CAAA;AAK3B,IAAA,IACI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS;IACzB;IAEA,IAAI,QAAQ,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QAC1B;IACJ;IAIA,WAAA,CACW,UAAmC,EAClC,QAAmB,EAAA;QADpB,IAAA,CAAA,UAAU,GAAV,UAAU;QACT,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAJZ,IAAA,CAAA,SAAS,GAAY,KAAK;IAK/B;IAEH,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC;IAC1G;;IAGA,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE;IACzC;IAEA,aAAa,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU;IACnD;IAEA,cAAc,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW;IACpD;IAEA,aAAa,GAAA;QACT,IAAI,CAAC,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;IACjF;IAEA,WAAW,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,WAAW;IACpG;IAEA,YAAY,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS;IACpD;AAEQ,IAAA,wBAAwB,CAAC,KAAoB,EAAA;QACjD,MAAM,QAAQ,GAAG,CAAC;AAClB,QAAA,MAAM,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,GAAG,KAAK;AAEnD,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACpB,MAAM,YAAY,GAAG,CAAC;AAEtB,YAAA,IAAI,gBAAgB,CAAC,WAAW,IAAI,gBAAgB,CAAC,WAAW,CAAC,QAAQ,KAAK,YAAY,EAAE;gBACxF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE,eAAe,CAAC;AACzD,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,8BAA8B,CAAC;YACzF;AAEA,YAAA,IAAI,gBAAgB,CAAC,eAAe,IAAI,gBAAgB,CAAC,eAAe,CAAC,QAAQ,KAAK,YAAY,EAAE;gBAChG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;AAC1D,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,+BAA+B,CAAC;YAC1F;QACJ;AAAO,aAAA,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE;YAClC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE,eAAe,CAAC;YACzD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;AAC3D,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,8BAA8B,CAAC;AACrF,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,+BAA+B,CAAC;QAC1F;IACJ;kIA1ES,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,iHAKP,gBAAgB,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAL3B,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,IAAI,EAAE;AACF,wBAAA,sBAAsB,EAAE,UAAU;AAClC,wBAAA,iBAAiB,EAAE;AACtB;AACJ,iBAAA;uGAEiC,YAAY,EAAA,CAAA;sBAAzC,YAAY;uBAAC,cAAc;gBAEnB,GAAG,EAAA,CAAA;sBAAX;gBAGG,QAAQ,EAAA,CAAA;sBADX,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;;ACI1C;AACA,MAAM,2BAA2B,GAAG,CAAC;AAErC;;;;;;AAMG;AAiBG,MAAO,YAAa,SAAQ,qBAAqB,CAAA;AAhBvD,IAAA,WAAA,GAAA;;;QAkB4C,IAAA,CAAA,UAAU,GAAY,KAAK;AA+BtE,IAAA;;AAtBG,IAAA,IAAc,oBAAoB,GAAA;AAC9B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW;AAE1D,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,KAAK;AAExB,QAAA,OAAO,IAAK,CAAC,GAAG,EAAE,aAAa,GAAG,KAAK,GAAG,2BAA2B,GAAG,CAAC,GAAG,KAAK;IACrF;;AAGA,IAAA,IAAc,mBAAmB,GAAA;AAC7B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU;AAExD,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;AAEtB,QAAA,OAAO,IAAK,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,GAAG,2BAA2B,GAAG,IAAI;IAC/E;AAEU,IAAA,YAAY,CAAC,KAAoB,EAAA;QACvC,KAAK,CAAC,cAAc,EAAE;IAC1B;kIAhCS,YAAY,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;sHAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAED,gBAAgB,CAAA,EAAA,EAAA,OAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,+BAAA,EAAA,UAAA,EAAA,iCAAA,EAAA,YAAA,EAAA,mDAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAEnB,kBAAkB,qeCrDvC,m0CAkCA,EAAA,MAAA,EAAA,CAAA,k7HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDCc,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,OAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAcjC,YAAY,EAAA,UAAA,EAAA,CAAA;kBAhBxB,SAAS;+BACI,gBAAgB,EAAA,OAAA,EACjB,CAAC,aAAa,EAAE,iBAAiB,CAAC,EAAA,aAAA,EAG5B,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,OAAO,EAAA,OAAA,EACvC,CAAC,oBAAoB,EAAE,cAAc,CAAC,EAAA,IAAA,EACzC;AACF,wBAAA,KAAK,EAAE,gBAAgB;AACvB,wBAAA,iCAAiC,EAAE,UAAU;AAC7C,wBAAA,mCAAmC,EAAE,YAAY;AACjD,wBAAA,qDAAqD,EAAE,wBAAwB;AAC/E,wBAAA,4BAA4B,EAAE;AACjC,qBAAA,EAAA,QAAA,EAAA,m0CAAA,EAAA,MAAA,EAAA,CAAA,k7HAAA,CAAA,EAAA;8BAIuC,UAAU,EAAA,CAAA;sBAAjD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAEgC,KAAK,EAAA,CAAA;sBAA1E,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,kBAAkB,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;gBACD,gBAAgB,EAAA,CAAA;sBAAzE,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,kBAAkB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBACE,OAAO,EAAA,CAAA;sBAAvD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBACD,aAAa,EAAA,CAAA;sBAAjD,SAAS;uBAAC,eAAe;gBACe,iBAAiB,EAAA,CAAA;sBAAzD,SAAS;uBAAC,mBAAmB;;;MEjBrB,2BAA2B,CAAA;kIAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;sHAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uHAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,mCAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBALvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EACJ,uHAAuH;AAC3H,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,mCAAmC;AACrD,iBAAA;;MAQY,wBAAwB,CAAA;kIAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;sHAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8GAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,gCAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBALpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EACJ,8GAA8G;AAClH,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,gCAAgC;AAClD,iBAAA;;MAOY,uBAAuB,CAAA;kIAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;sHAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wGAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,8BAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAJnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,wGAAwG;AAClH,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,8BAA8B;AAChD,iBAAA;;MAOY,wBAAwB,CAAA;kIAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;sHAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gFAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAJpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,gFAAgF;AAC1F,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,wBAAwB;AAC1C,iBAAA;;AAGD;AACA,IAAI,MAAM,GAAG,CAAC;AAEd;MACa,iBAAiB,CAAA;AAK7B;AAWD;MACa,eAAe,GAAG,IAAI,cAAc,CAAgB,iBAAiB;AAIlF;;AAEG;MAqBU,WAAW,CAAA;;AAkBpB,IAAA,IACI,aAAa,GAAA;QACb,OAAO,IAAI,CAAC,cAAc;IAC9B;IAEA,IAAI,aAAa,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;IAC1B;AAIA,IAAA,IACI,SAAS,GAAA;AACT,QAAA,QAAQ,OAAO,IAAI,CAAC,mBAAmB;AACnC,YAAA,KAAK,QAAQ;AACT,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,IAAI,IAAI;AAC9E,YAAA,KAAK,QAAQ;gBACT,QACI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK,IAAI,CAAC,mBAAmB,CAAC;AAC3E,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAChB,oBAAA,IAAI;AAEZ,YAAA,KAAK,UAAU;gBACX,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACxD,YAAA;gBACI,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI;;IAE3C;IAEA,IAAI,SAAS,CAAC,KAA4B,EAAA;AACtC,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;IACpC;AAQA,IAAA,IACI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS;IACzB;IAEA,IAAI,QAAQ,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QAC1B;IACJ;IAoCA,WAAA,CACqB,iBAAoC,EAChB,aAA6B,EAAA;QADjD,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;AAtG7B,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAS;QAQJ,IAAA,CAAA,WAAW,GAAY,KAAK;QAC5B,IAAA,CAAA,SAAS,GAAY,KAAK;QAC1B,IAAA,CAAA,UAAU,GAAY,KAAK;QAC3B,IAAA,CAAA,QAAQ,GAAY,KAAK;;QAGzB,IAAA,CAAA,aAAa,GAAY,KAAK;;QAqC7D,IAAA,CAAA,cAAc,GAAyB,OAAO;QAgB/C,IAAA,CAAA,SAAS,GAAY,KAAK;;AAGf,QAAA,IAAA,CAAA,mBAAmB,GAAyB,IAAI,YAAY,EAAU;;AAGtE,QAAA,IAAA,CAAA,eAAe,GAA2C,IAAI,YAAY,EAE1F;;AAGgB,QAAA,IAAA,CAAA,WAAW,GAAoC,IAAI,YAAY,EAAqB;;AAGpF,QAAA,IAAA,CAAA,aAAa,GAAuB,IAAI,YAAY,EAAQ;;AAG5D,QAAA,IAAA,CAAA,iBAAiB,GAAoC,IAAI,YAAY,CAAoB,IAAI,CAAC;QAEzG,IAAA,CAAA,mBAAmB,GAA0B,IAAI;;QAGjD,IAAA,CAAA,oBAAoB,GAAG,CAAC;;AAGxB,QAAA,IAAA,CAAA,gBAAgB,GAAG,YAAY,CAAC,KAAK;;AAGrC,QAAA,IAAA,CAAA,oBAAoB,GAAG,YAAY,CAAC,KAAK;AACzC,QAAA,IAAA,CAAA,kBAAkB,GAAG,YAAY,CAAC,KAAK;QAG9B,IAAA,CAAA,sBAAsB,GAAW,GAAG;QAmL7C,IAAA,CAAA,aAAa,GAAG,MAAK;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,aAAa,EAAE,CAAC;AAC1E,QAAA,CAAC;AA/KG,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,EAAE;QACvB,IAAI,CAAC,iBAAiB,GAAG,aAAa,EAAE,iBAAiB,IAAI,KAAK;QAElE,IAAI,CAAC,iBAAiB,EAAE;IAC5B;IAEA,kBAAkB,GAAA;QACd,IAAI,CAAC,oBAAoB,EAAE;;;AAI3B,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAK;;AAErD,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE;;;AAIhD,YAAA,IAAI,aAAa,KAAK,IAAI,CAAC,cAAc,EAAE;gBACvC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AAEhC,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAClC,oBAAA,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;;;;AAIlB,wBAAA,IAAI,CAAC,cAAc,GAAG,CAAC;AACvB,wBAAA,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;wBAC5B;oBACJ;gBACJ;YACJ;YAEA,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;AACzC,QAAA,CAAC,CAAC;IACN;AAEA;;;;;AAKG;IACH,qBAAqB,GAAA;;;AAGjB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE;;;AAIhD,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,aAAa,EAAE;AACvC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI;YAE9C,IAAI,CAAC,UAAU,EAAE;AACb,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;YACtE;;;AAIA,YAAA,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAK;gBACxB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,MAAM,GAAG,CAAC,QAAQ,GAAG,KAAK,KAAK,aAAa,CAAC,CAAC;gBAE3E,IAAI,CAAC,UAAU,EAAE;AACb,oBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS;AAElC,oBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC;AAC5C,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CACrB,IAAI,CAAC,mBAAmB,IAAI,OAAO,IAAI,CAAC,mBAAmB,KAAK,UAAU,IAAI;AAC1E,0BAAE;AACF,0BAAG,IAAI,CAAC,mBAAuC,CACtD;gBACL;AACJ,YAAA,CAAC,CAAC;QACN;;QAGA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAW,EAAE,KAAa,KAAI;AAC7C,YAAA,GAAG,CAAC,QAAQ,GAAG,KAAK,GAAG,aAAa;;;AAKpC,YAAA,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;gBAClE,GAAG,CAAC,MAAM,GAAG,aAAa,GAAG,IAAI,CAAC,cAAc;YACpD;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,aAAa,EAAE;AACvC,YAAA,IAAI,CAAC,cAAc,GAAG,aAAa;AACnC,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;QACzC;IACJ;IAEA,eAAe,GAAA;QACX,IAAI,CAAC,aAAa,EAAE;IACxB;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE;AACnC,QAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE;AACvC,QAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE;IACzC;AAEA,IAAA,YAAY,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACxD;;AAGA,IAAA,aAAa,CAAC,CAAS,EAAA;AACnB,QAAA,OAAO,iBAAiB,IAAI,CAAC,OAAO,CAAA,CAAA,EAAI,CAAC,EAAE;IAC/C;;AAGA,IAAA,eAAe,CAAC,CAAS,EAAA;AACrB,QAAA,OAAO,mBAAmB,IAAI,CAAC,OAAO,CAAA,CAAA,EAAI,CAAC,EAAE;IACjD;AAEA;;;AAGG;AACH,IAAA,uBAAuB,CAAC,SAAiB,EAAA;QACrC,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YACnD;QACJ;AAEA,QAAA,MAAM,OAAO,GAAgB,IAAI,CAAC,cAAc,CAAC,aAAa;QAE9D,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,oBAAoB,CAAA,EAAA,CAAI;;;QAIvD,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,YAAY,EAAE;YAChD,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAA,EAAG,SAAS,IAAI;QAC3C;IACJ;;IAGA,0BAA0B,GAAA;QACtB,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,YAAY;QAC1E,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE;AACnD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC7B;;AAGA,IAAA,WAAW,CAAC,GAAW,EAAE,SAAuB,EAAE,KAAa,EAAA;AAC3D,QAAA,IAAI,GAAG,CAAC,QAAQ,EAAE;YACd;QACJ;AAEA,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;AAChC,QAAA,SAAS,CAAC,UAAU,GAAG,KAAK;IAChC;;IAGA,WAAW,CAAC,GAAW,EAAE,KAAa,EAAA;AAClC,QAAA,IAAI,GAAG,CAAC,QAAQ,EAAE;AACd,YAAA,OAAO,IAAI;QACf;AAEA,QAAA,OAAO,IAAI,CAAC,aAAa,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;IAChD;AAEA,IAAA,oBAAoB,CAAC,MAAc,EAAA;AAC/B,QAAA,IAAI,OAAO,IAAI,CAAC,mBAAmB,KAAK,QAAQ,EAAE;AAC9C,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,IAAI;YAErD;QACJ;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM;IAC3B;AAMQ,IAAA,iBAAiB,CAAC,KAAa,EAAA;AACnC,QAAA,MAAM,KAAK,GAAG,IAAI,iBAAiB,EAAE;AAErC,QAAA,KAAK,CAAC,KAAK,GAAG,KAAK;QAEnB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC/B,YAAA,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;QAC1C;AAEA,QAAA,OAAO,KAAK;IAChB;AAEA;;;;;AAKG;IACK,oBAAoB,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE;QAC3C;AAEA,QAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,MACrF,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CACxC;IACL;IAEQ,iBAAiB,GAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB;QACJ;AAEA,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACzB,YAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE;QACzC;AAEA,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;AAC1B,aAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC;AAC9C,aAAA,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;IACtC;;AAGQ,IAAA,aAAa,CAAC,KAAoB,EAAA;;;;QAItC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAClE;IAEQ,mBAAmB,GAAA;AACvB,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS;AAEzC,QAAA,IAAI,kBAAkB,KAAK,IAAI,EAAE;AAC7B,YAAA,OAAO,CAAC;QACZ;QAEA,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC;IAC3D;AArVS,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,mDAwGR,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;sHAxGlB,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EASA,gBAAgB,CAAA,EAAA,SAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAChB,gBAAgB,4CAChB,gBAAgB,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAChB,gBAAgB,CAAA,EAAA,aAAA,EAAA,CAAA,eAAA,EAAA,eAAA,EAGhB,gBAAgB,qDAGhB,eAAe,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAuCf,gBAAgB,CAAA,EAAA,EAAA,OAAA,EAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,eAAA,EAAA,2BAAA,EAAA,EAAA,UAAA,EAAA,EAAA,4BAAA,EAAA,cAAA,EAAA,iCAAA,EAAA,aAAA,EAAA,mCAAA,EAAA,YAAA,EAAA,gCAAA,EAAA,WAAA,EAAA,oCAAA,EAAA,eAAA,EAAA,qCAAA,EAAA,8BAAA,EAAA,EAAA,cAAA,EAAA,eAAA,EAAA,EAAA,SAAA,EA3DzB,CAAC,EAAE,OAAO,EAAE,8BAA8B,EAAE,WAAW,EAAE,UAAU,EAAC,MAAM,IAAI,EAAC,EAAE,CAAC,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,SAAA,EAK5E,MAAM,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChH3B,kzEAyDA,2iODkCc,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,oDAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,8FAAE,iBAAiB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,4BAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAkBlG,WAAW,EAAA,UAAA,EAAA,CAAA;kBApBvB,SAAS;+BACI,eAAe,EAAA,OAAA,EAChB,CAAC,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,EAAE,UAAU,CAAC,EAAA,aAAA,EAG7F,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC,aAAa,EAAA,IAAA,EACjB;AACF,wBAAA,KAAK,EAAE,eAAe;AACtB,wBAAA,8BAA8B,EAAE,cAAc;AAC9C,wBAAA,mCAAmC,EAAE,aAAa;AAClD,wBAAA,qCAAqC,EAAE,YAAY;AACnD,wBAAA,kCAAkC,EAAE,WAAW;AAC/C,wBAAA,sCAAsC,EAAE,eAAe;AACvD,wBAAA,uCAAuC,EAAE,4BAA4B;AACrE,wBAAA,iBAAiB,EAAE;AACtB,qBAAA,EAAA,SAAA,EACU,CAAC,EAAE,OAAO,EAAE,8BAA8B,EAAE,WAAW,EAAE,UAAU,EAAC,MAAMC,IAAI,EAAC,EAAE,CAAC,EAAA,QAAA,EAAA,kzEAAA,EAAA,MAAA,EAAA,CAAA,u0BAAA,EAAA,0qMAAA,CAAA,EAAA;;0BA0GxF,MAAM;2BAAC,eAAe;;0BAAG;yCArGL,IAAI,EAAA,CAAA;sBAA5B,eAAe;uBAAC,MAAM;gBAEyB,cAAc,EAAA,CAAA;sBAA7D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBAEH,SAAS,EAAA,CAAA;sBAAnD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBAED,WAAW,EAAA,CAAA;sBAAlD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBACE,SAAS,EAAA,CAAA;sBAAhD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBACE,UAAU,EAAA,CAAA;sBAAjD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBACE,QAAQ,EAAA,CAAA;sBAA/C,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAGE,aAAa,EAAA,CAAA;sBAApD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAIlC,aAAa,EAAA,CAAA;sBADhB,KAAK;uBAAC,EAAE,SAAS,EAAE,eAAe,EAAE;gBAYjC,SAAS,EAAA,CAAA;sBADZ;gBAuBQ,cAAc,EAAA,CAAA;sBAAtB;gBAGQ,iBAAiB,EAAA,CAAA;sBAAzB;gBAGG,QAAQ,EAAA,CAAA;sBADX,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAcnB,mBAAmB,EAAA,CAAA;sBAArC;gBAGkB,eAAe,EAAA,CAAA;sBAAjC;gBAKkB,WAAW,EAAA,CAAA;sBAA7B;gBAGkB,aAAa,EAAA,CAAA;sBAA/B;gBAGkB,iBAAiB,EAAA,CAAA;sBAAnC;;;AEvKL;AACA,IAAI,YAAY,GAAG,CAAC;AAEpB;;AAEG;AA4BG,MAAO,YAAa,SAAQ,qBAAqB,CAAA;AA3BvD,IAAA,WAAA,GAAA;;;QAmC4C,IAAA,CAAA,WAAW,GAAY,KAAK;QAC5B,IAAA,CAAA,SAAS,GAAY,KAAK;;QAG1B,IAAA,CAAA,UAAU,GAAY,KAAK;AAuDtE,IAAA;AAhDG,IAAA,IAAI,IAAI,GAAA;QACJ,OAAO,IAAI,CAAC,WAAW,GAAG,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC;IAC5F;AAEA,IAAA,IAAc,oBAAoB,GAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW;IACrF;AAEA,IAAA,IAAc,mBAAmB,GAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU;IACpF;IAES,kBAAkB,GAAA;;;QAGvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YACzF,IAAI,CAAC,gBAAgB,EAAE;AAC3B,QAAA,CAAC,CAAC;QAEF,KAAK,CAAC,kBAAkB,EAAE;IAC9B;AAEU,IAAA,YAAY,KAAI;;IAG1B,gBAAgB,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACb;QACJ;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AAElC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;AACjB,gBAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACtB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;AAErC,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE;oBAClB,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC9C;gBAEA;YACJ;QACJ;;AAGA,QAAA,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;IAC3B;kIAlES,YAAY,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAZ,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAQD,gBAAgB,CAAA,EAAA,SAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAChB,gBAAgB,CAAA,EAAA,UAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAGhB,gBAAgB,CAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,8BAAA,EAAA,cAAA,EAAA,mCAAA,EAAA,aAAA,EAAA,qCAAA,EAAA,YAAA,EAAA,kCAAA,EAAA,WAAA,EAAA,iCAAA,EAAA,YAAA,EAAA,mDAAA,EAAA,wBAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAPF,UAAU,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjEhD,i0CAkCA,EAAA,MAAA,EAAA,CAAA,m/CAAA,EAAA,0qMAAA,EAAA,o8EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDEQ,aAAa,8IACb,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAuBZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBA3BxB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mCAAmC,EAAA,OAAA,EACpC;wBACL,aAAa;wBACb;qBACH,EAAA,aAAA,EAQc,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC,cAAc,EAAA,IAAA,EAClB;AACF,wBAAA,KAAK,EAAE,iBAAiB;AACxB,wBAAA,gCAAgC,EAAE,cAAc;AAChD,wBAAA,qCAAqC,EAAE,aAAa;AACpD,wBAAA,uCAAuC,EAAE,YAAY;AACrD,wBAAA,oCAAoC,EAAE,WAAW;AACjD,wBAAA,mCAAmC,EAAE,YAAY;AACjD,wBAAA,qDAAqD,EAAE,wBAAwB;AAC/E,wBAAA,aAAa,EAAE;AAClB,qBAAA,EAAA,QAAA,EAAA,i0CAAA,EAAA,MAAA,EAAA,CAAA,m/CAAA,EAAA,0qMAAA,EAAA,o8EAAA,CAAA,EAAA;8BAGyD,gBAAgB,EAAA,CAAA;sBAAzE,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,kBAAkB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBACE,OAAO,EAAA,CAAA;sBAAvD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBACD,aAAa,EAAA,CAAA;sBAAjD,SAAS;uBAAC,eAAe;gBACe,iBAAiB,EAAA,CAAA;sBAAzD,SAAS;uBAAC,mBAAmB;gBACiD,KAAK,EAAA,CAAA;sBAAnF,eAAe;uBAAC,UAAU,CAAC,MAAM,UAAU,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;gBAG5B,WAAW,EAAA,CAAA;sBAAlD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBACE,SAAS,EAAA,CAAA;sBAAhD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAGE,UAAU,EAAA,CAAA;sBAAjD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAK7B,WAAW,EAAA,CAAA;sBAAnB;;AAoDL;;AAEG;MAyBU,UAAU,CAAA;AAxBvB,IAAA,WAAA,GAAA;;AA0Ba,QAAA,IAAA,CAAA,EAAE,GAAG,CAAA,aAAA,EAAgB,YAAY,EAAE,EAAE;;QAgBtC,IAAA,CAAA,OAAO,GAAY,KAAK;;QAWQ,IAAA,CAAA,QAAQ,GAAY,KAAK;QAgBzD,IAAA,CAAA,SAAS,GAAW,CAAC;AA4BpB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAA0B,UAAU,CAAC;AAChD,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAC5B,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;AA4DpD,IAAA;;AAnIG,IAAA,IACI,MAAM,GAAA;QACN,OAAO,IAAI,CAAC,OAAO;IACvB;IAEA,IAAI,MAAM,CAAC,KAAc,EAAA;AACrB,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE;AACxB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,YAAA,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE;QACrC;IACJ;AAKA,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ;IAClC;AAEA,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU;IACpC;;AAMA,IAAA,IACI,QAAQ,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;AAC5B,YAAA,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QAC9D;aAAO;AACH,YAAA,OAAO,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS;QAC9C;IACJ;IAEA,IAAI,QAAQ,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;IAC1B;;AAKA,IAAA,IAAc,YAAY,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;YAC5B,OAAO,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO;QACzC;aAAO;YACH,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,eAAe,CAAC;QACtE;IACJ;;AAGA,IAAA,IAAc,IAAI,GAAA;QACd,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC;IAClG;;AAGA,IAAA,IAAc,YAAY,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC;AAClB,cAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;cAC5B,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,eAAe,CAAC;IACrE;;AAGA,IAAA,IAAc,WAAW,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,MAAM,GAAG,IAAI;IACrE;IAOA,eAAe,GAAA;QACX,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;AAExD,QAAA,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC;IAC1G;IAEA,WAAW,GAAA;QACP,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;IACnE;AAEQ,IAAA,wBAAwB,CAAC,KAAoB,EAAA;QACjD,MAAM,QAAQ,GAAG,CAAC;AAClB,QAAA,MAAM,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,GAAG,KAAK;AAEnD,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACpB,MAAM,YAAY,GAAG,CAAC;AAEtB,YAAA,IAAI,gBAAgB,CAAC,WAAW,IAAI,gBAAgB,CAAC,WAAW,CAAC,QAAQ,KAAK,YAAY,EAAE;gBACxF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE,eAAe,CAAC;YAC7D;AAEA,YAAA,IAAI,gBAAgB,CAAC,eAAe,IAAI,gBAAgB,CAAC,eAAe,CAAC,QAAQ,KAAK,YAAY,EAAE;gBAChG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;YAC9D;QACJ;AAAO,aAAA,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE;YAClC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE,eAAe,CAAC;YACzD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;QAC/D;IACJ;;IAGA,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE;IACzC;;IAGU,WAAW,GAAA;;;AAGjB,QAAA,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC5E;;AAGU,IAAA,aAAa,CAAC,KAAoB,EAAA;AACxC,QAAA,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,EAAE;AACpD,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,KAAK,CAAC,cAAc,EAAE;YAC1B;AAAO,iBAAA,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;;;AAGnC,gBAAA,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,EAAE;oBACzB,KAAK,CAAC,cAAc,EAAE;gBAC1B;AAEA,gBAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE;YACzC;QACJ;IACJ;kIAvIS,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAV,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAKC,gBAAgB,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAwBhB,gBAAgB,sCAGhB,eAAe,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,UAAA,EAAA,gCAAA,EAAA,WAAA,EAAA,gCAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,WAAA,EAAA,MAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,EAAA,cAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAhC1B,UAAU,EAAA,UAAA,EAAA,CAAA;kBAxBtB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,8BAA8B;AACxC,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,IAAI,EAAE;AACF,wBAAA,KAAK,EAAE,cAAc;AACrB,wBAAA,sBAAsB,EAAE,QAAQ;AAChC,wBAAA,gCAAgC,EAAE,UAAU;AAC5C,wBAAA,kCAAkC,EAAE,WAAW;AAC/C,wBAAA,kCAAkC,EAAE,YAAY;AAChD,wBAAA,sBAAsB,EAAE,UAAU;AAElC,wBAAA,WAAW,EAAE,IAAI;AACjB,wBAAA,iBAAiB,EAAE,UAAU;AAC7B,wBAAA,iBAAiB,EAAE,kBAAkB;AACrC,wBAAA,sBAAsB,EAAE,UAAU;AAClC,wBAAA,sBAAsB,EAAE,cAAc;AACtC,wBAAA,aAAa,EAAE,MAAM;AACrB,wBAAA,sBAAsB,EAAE,cAAc;AACtC,wBAAA,qBAAqB,EAAE,aAAa;AAEpC,wBAAA,SAAS,EAAE,eAAe;AAC1B,wBAAA,WAAW,EAAE;AAChB;AACJ,iBAAA;8BAGY,EAAE,EAAA,CAAA;sBAAV;gBAIG,MAAM,EAAA,CAAA;sBADT,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAwBE,QAAQ,EAAA,CAAA;sBAA/C,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAIlC,QAAQ,EAAA,CAAA;sBADX,KAAK;uBAAC,EAAE,SAAS,EAAE,eAAe,EAAE;;AA0GzC;;AAEG;MAaU,cAAc,CAAA;AAZ3B,IAAA,WAAA,GAAA;;AAca,QAAA,IAAA,CAAA,EAAE,GAAG,CAAA,kBAAA,EAAqB,YAAY,EAAE,EAAE;AAItD,IAAA;kIANY,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;sHAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,UAAA,EAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,aAAA,EAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAZ1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,IAAI,EAAE;AACF,wBAAA,KAAK,EAAE,mBAAmB;AAE1B,wBAAA,WAAW,EAAE,IAAI;AACjB,wBAAA,wBAAwB,EAAE,aAAa;AAEvC,wBAAA,IAAI,EAAE;AACT;AACJ,iBAAA;8BAGY,EAAE,EAAA,CAAA;sBAAV;;;AEjSL,MAAM,qBAAqB,GAAG;IAC1B,YAAY;IACZ,UAAU;IACV;CACH;AAED,MAAM,UAAU,GAAG;IACf,WAAW;IACX,WAAW;IACX,MAAM;IACN,kBAAkB;IAClB,UAAU;IACV,gBAAgB;IAChB,YAAY;IACZ,aAAa;IACb,2BAA2B;IAC3B,wBAAwB;IACxB,uBAAuB;IACvB;CACH;MAkBY,aAAa,CAAA;kIAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAb,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,YAdlB,YAAY;YACZ,UAAU;YACV,mBAAmB;YACnB,aAAa;YACb,gBAAgB;AAChB,YAAA,iBAAiB,EA3BrB,YAAY;YACZ,UAAU;AACV,YAAA,cAAc,EAId,WAAW;YACX,WAAW;YACX,MAAM;YACN,kBAAkB;YAClB,UAAU;YACV,gBAAgB;YAChB,YAAY;YACZ,aAAa;YACb,2BAA2B;YAC3B,wBAAwB;YACxB,uBAAuB;AACvB,YAAA,wBAAwB,aAXxB,WAAW;YACX,WAAW;YACX,MAAM;YACN,kBAAkB;YAClB,UAAU;YACV,gBAAgB;YAChB,YAAY;YACZ,aAAa;YACb,2BAA2B;YAC3B,wBAAwB;YACxB,uBAAuB;AACvB,YAAA,wBAAwB,EAjBxB,YAAY;YACZ,UAAU;YACV,cAAc,CAAA,EAAA,CAAA,CAAA;AAkCL,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,YAdlB,YAAY;YACZ,UAAU;YACV,mBAAmB;YACnB,aAAa;YACb,gBAAgB,EA1BpB,YAAY,EAMZ,WAAW;YAMX,YAAY,CAAA,EAAA,CAAA,CAAA;;4FAwBH,aAAa,EAAA,UAAA,EAAA,CAAA;kBAhBzB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE;wBACL,YAAY;wBACZ,UAAU;wBACV,mBAAmB;wBACnB,aAAa;wBACb,gBAAgB;wBAChB,iBAAiB;AACjB,wBAAA,GAAG,qBAAqB;AACxB,wBAAA,GAAG;AACN,qBAAA;AACD,oBAAA,OAAO,EAAE;AACL,wBAAA,GAAG,UAAU;AACb,wBAAA,GAAG;AACN;AACJ,iBAAA;;;AC1DD;;AAEG;;;;"}