{"version":3,"file":"pepperi-addons-ngx-lib-carousel.mjs","sources":["../../../projects/ngx-lib/carousel/carousel-item.directive.ts","../../../projects/ngx-lib/carousel/carousel.component.ts","../../../projects/ngx-lib/carousel/carousel.module.ts","../../../projects/ngx-lib/carousel/public-api.ts","../../../projects/ngx-lib/carousel/pepperi-addons-ngx-lib-carousel.ts"],"sourcesContent":["import {\n    Directive,\n    ElementRef,\n    Input,\n    HostBinding,\n    Inject,\n} from '@angular/core';\n\n@Directive({\n    selector: '[pepCarouselItem]',\n})\nexport class PepCarouselItemDirective {\n    @HostBinding('style.display')\n    display = 'inline-block';\n\n    @Input('dragDisabled')\n    get dragDisabled() {\n        return this._dragDisabled;\n    }\n    set dragDisabled(value: boolean) {\n        this._dragDisabled = value;\n    }\n\n    _dragDisabled = false;\n\n    _elementRef: ElementRef;\n\n    constructor(@Inject(ElementRef) elementRef: ElementRef) {\n        this._elementRef = elementRef;\n    }\n}\n","import {\n    ElementRef,\n    Component,\n    Renderer2,\n    OnDestroy,\n    Input,\n    Output,\n    AfterViewInit,\n    OnChanges,\n    EventEmitter,\n    ViewChild,\n    ContentChildren,\n    AfterViewChecked,\n    QueryList,\n    Inject,\n    HostBinding,\n    HostListener,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { PepCarouselItemDirective } from './carousel-item.directive';\n\n@Component({\n    selector: 'pep-carousel',\n    template: `\n        <div class=\"carousel-content\" #contentRef>\n            <ng-content></ng-content>\n        </div>\n    `,\n    styles: [\n        `\n            :host {\n                overflow: hidden;\n                display: block;\n            }\n            .carousel-content {\n                height: 100%;\n                overflow: auto;\n                white-space: nowrap;\n            }\n        `,\n    ],\n})\nexport class PepCarouselComponent\n    implements OnDestroy, AfterViewInit, OnChanges, AfterViewChecked {\n    private _index = 0;\n\n    private _scrollbarHidden = false;\n\n    private _disabled = false;\n\n    private _xDisabled = false;\n\n    private _xWheelEnabled = false;\n\n    private _yDisabled = false;\n\n    private _dragDisabled = false;\n\n    private _snapDisabled = false;\n\n    private _snapOffset = 0;\n\n    private _snapDuration = 500;\n\n    private _isDragging = false;\n\n    private _onMouseMoveListener: () => any;\n\n    private _onMouseUpListener: () => any;\n\n    private _onMouseDownListener: () => any;\n\n    private _onScrollListener: () => any;\n\n    private _onDragStartListener: () => any;\n\n    /**\n     * Is the user currently pressing the element\n     */\n    isPressed = false;\n\n    /**\n     * Is the user currently scrolling the element\n     */\n    isScrolling = false;\n\n    scrollTimer: any; // | NodeJS.Timer = -1;\n\n    scrollToTimer: any; // | NodeJS.Timer = -1;\n\n    /**\n     * Is the user currently dragging the element\n     */\n    get isDragging(): boolean {\n        return this._isDragging;\n    }\n\n    /**\n     * The x coordinates on the element\n     */\n    downX = 0;\n\n    /**\n     * The y coordinates on the element\n     */\n    downY = 0;\n\n    displayType: string | null = 'block';\n\n    elWidth: string | null = null;\n\n    elHeight: string | null = null;\n\n    /**\n     * The parentNode of carousel Element\n     */\n    parentNode: HTMLElement;\n\n    /**\n     * The carousel Element\n     */\n\n    @ViewChild('contentRef', { static: true }) _contentRef: ElementRef;\n\n    @ContentChildren(PepCarouselItemDirective, { descendants: true })\n    _children: QueryList<PepCarouselItemDirective>;\n\n    @HostBinding('style.pointer-events') _pointerEvents = 'auto';\n\n    wrapper: HTMLDivElement | null;\n\n    scrollbarWidth: string | null = null;\n\n    get currIndex() {\n        return this._index;\n    }\n    set currIndex(value) {\n        if (value !== this._index) {\n            this._index = value;\n            this.indexChanged.emit(value);\n        }\n    }\n\n    isAnimating = false;\n\n    prevChildrenLength = 0;\n\n    indexBound = 0;\n\n    @Output() dsInitialized = new EventEmitter<void>();\n\n    @Output() indexChanged = new EventEmitter<number>();\n\n    @Output() reachesLeftBound = new EventEmitter<boolean>();\n\n    @Output() reachesRightBound = new EventEmitter<boolean>();\n\n    @Output() snapAnimationFinished = new EventEmitter<number>();\n\n    @Output() dragStart = new EventEmitter<void>();\n\n    @Output() dragEnd = new EventEmitter<void>();\n\n    /**\n     * Whether the scrollbar is hidden\n     */\n    @Input('scrollbarHidden')\n    get scrollbarHidden() {\n        return this._scrollbarHidden;\n    }\n    set scrollbarHidden(value: boolean) {\n        this._scrollbarHidden = value;\n    }\n\n    /**\n     * Whether horizontally and vertically draging and scrolling is be disabled\n     */\n    @Input('disabled')\n    get disabled() {\n        return this._disabled;\n    }\n    set disabled(value: boolean) {\n        this._disabled = value;\n    }\n\n    /**\n     * Whether horizontally dragging and scrolling is be disabled\n     */\n    @Input('xDisabled')\n    get xDisabled() {\n        return this._xDisabled;\n    }\n    set xDisabled(value: boolean) {\n        this._xDisabled = value;\n    }\n\n    /**\n     * Whether vertically dragging and scrolling events is disabled\n     */\n    @Input('yDisabled')\n    get yDisabled() {\n        return this._yDisabled;\n    }\n    set yDisabled(value: boolean) {\n        this._yDisabled = value;\n    }\n\n    /**\n     * Whether scrolling horizontally with mouse wheel is enabled\n     */\n    @Input('xWheelEnabled')\n    get xWheelEnabled() {\n        return this._xWheelEnabled;\n    }\n    set xWheelEnabled(value: boolean) {\n        this._xWheelEnabled = value;\n    }\n\n    @Input('dragDisabled')\n    get dragDisabled() {\n        return this._dragDisabled;\n    }\n    set dragDisabled(value: boolean) {\n        this._dragDisabled = value;\n    }\n\n    @Input('snapDisabled')\n    get snapDisabled() {\n        return this._snapDisabled;\n    }\n    set snapDisabled(value: boolean) {\n        this._snapDisabled = value;\n    }\n\n    @Input('snapOffset')\n    get snapOffset() {\n        return this._snapOffset;\n    }\n    set snapOffset(value: number) {\n        this._snapOffset = value;\n    }\n\n    @Input('snapDuration')\n    get snapDuration() {\n        return this._snapDuration;\n    }\n    set snapDuration(value: number) {\n        this._snapDuration = value;\n    }\n\n    constructor(\n        @Inject(ElementRef) private _elementRef: ElementRef,\n        @Inject(Renderer2) private _renderer: Renderer2,\n        @Inject(DOCUMENT) private _document: any\n    ) {\n        this.scrollbarWidth = `${this.getScrollbarWidth()}px`;\n    }\n\n    ngOnChanges() {\n        this.setScrollBar();\n\n        if (this.xDisabled || this.disabled || this._scrollbarHidden) {\n            this.disableScroll('x');\n        } else {\n            this.enableScroll('x');\n        }\n\n        if (this.yDisabled || this.disabled) {\n            this.disableScroll('y');\n        } else {\n            this.enableScroll('y');\n        }\n    }\n\n    ngAfterViewInit() {\n        // auto assign computed css\n        this._renderer.setAttribute(\n            this._contentRef.nativeElement,\n            'drag-scroll',\n            'true'\n        );\n\n        this.displayType =\n            typeof window !== 'undefined'\n                ? window.getComputedStyle(this._elementRef.nativeElement)\n                    .display\n                : 'block';\n\n        this._renderer.setStyle(\n            this._contentRef.nativeElement,\n            'display',\n            this.displayType\n        );\n        this._renderer.setStyle(\n            this._contentRef.nativeElement,\n            'whiteSpace',\n            'noWrap'\n        );\n\n        // store ele width height for later user\n        this.markElDimension();\n\n        this._renderer.setStyle(\n            this._contentRef.nativeElement,\n            'width',\n            this.elWidth\n        );\n        this._renderer.setStyle(\n            this._contentRef.nativeElement,\n            'height',\n            this.elHeight\n        );\n\n        if (this.wrapper) {\n            this.checkScrollbar();\n        }\n\n        this._onMouseDownListener = this._renderer.listen(\n            this._contentRef.nativeElement,\n            'mousedown',\n            this.onMouseDownHandler.bind(this)\n        );\n        this._onScrollListener = this._renderer.listen(\n            this._contentRef.nativeElement,\n            'scroll',\n            this.onScrollHandler.bind(this)\n        );\n        // prevent Firefox from dragging images\n        this._onDragStartListener = this._renderer.listen(\n            'document',\n            'dragstart',\n            (e) => {\n                e.preventDefault();\n            }\n        );\n        this.checkNavStatus();\n        this.dsInitialized.emit();\n        this.adjustMarginToLastChild();\n    }\n\n    ngAfterViewChecked() {\n        // avoid extra checks\n        if (this._children.length !== this.prevChildrenLength) {\n            this.markElDimension();\n            this.checkScrollbar();\n            this.prevChildrenLength = this._children.length;\n            this.checkNavStatus();\n        }\n    }\n\n    ngOnDestroy() {\n        this._renderer.setAttribute(\n            this._contentRef.nativeElement,\n            'drag-scroll',\n            'false'\n        );\n        if (this._onMouseDownListener) {\n            this._onMouseDownListener = this._onMouseDownListener();\n        }\n        if (this._onScrollListener) {\n            this._onScrollListener = this._onScrollListener();\n        }\n        if (this._onDragStartListener) {\n            this._onDragStartListener = this._onDragStartListener();\n        }\n    }\n\n    onMouseMoveHandler(event: MouseEvent) {\n        this.onMouseMove(event);\n    }\n\n    onMouseMove(event: MouseEvent) {\n        if (this.isPressed && !this.disabled) {\n            // Workaround for prevent scroll stuck if browser lost focus\n            // MouseEvent.buttons not support by Safari\n            if (!event.buttons && !event.which) {\n                return this.onMouseUpHandler(event);\n            }\n\n            this._pointerEvents = 'none';\n            this._setIsDragging(true);\n\n            // Drag X\n            if (!this.xDisabled && !this.dragDisabled) {\n                const clientX = (event as MouseEvent).clientX;\n                this._contentRef.nativeElement.scrollLeft =\n                    this._contentRef.nativeElement.scrollLeft -\n                    clientX +\n                    this.downX;\n                this.downX = clientX;\n            }\n\n            // Drag Y\n            if (!this.yDisabled && !this.dragDisabled) {\n                const clientY = (event as MouseEvent).clientY;\n                this._contentRef.nativeElement.scrollTop =\n                    this._contentRef.nativeElement.scrollTop -\n                    clientY +\n                    this.downY;\n                this.downY = clientY;\n            }\n        }\n    }\n\n    onMouseDownHandler(event: MouseEvent) {\n        const carouselItem: PepCarouselItemDirective | null = this.locateCarouselItem(\n            event.target as Element\n        );\n        if (carouselItem && carouselItem.dragDisabled) {\n            return;\n        }\n\n        const isTouchEvent = event.type === 'touchstart';\n\n        this._startGlobalListening(isTouchEvent);\n        this.isPressed = true;\n\n        const mouseEvent = event as MouseEvent;\n        this.downX = mouseEvent.clientX;\n        this.downY = mouseEvent.clientY;\n\n        clearTimeout(this.scrollToTimer as number);\n    }\n\n    onScrollHandler() {\n        this.checkNavStatus();\n        if (!this.isPressed && !this.isAnimating && !this.snapDisabled) {\n            this.isScrolling = true;\n            clearTimeout(this.scrollTimer as number);\n            this.scrollTimer = setTimeout(() => {\n                this.isScrolling = false;\n                this.locateCurrentIndex(true);\n            }, 500);\n        } else {\n            this.locateCurrentIndex();\n        }\n    }\n\n    onMouseUpHandler(event: MouseEvent) {\n        if (this.isPressed) {\n            this.isPressed = false;\n            this._pointerEvents = 'auto';\n            this._setIsDragging(false);\n            if (!this.snapDisabled) {\n                this.locateCurrentIndex(true);\n            } else {\n                this.locateCurrentIndex();\n            }\n            this._stopGlobalListening();\n        }\n    }\n\n    /*\n     * Nav button\n     */\n    moveLeft() {\n        if (this.currIndex !== 0 || this.snapDisabled) {\n            this.currIndex--;\n            clearTimeout(this.scrollToTimer as number);\n            this.scrollTo(\n                this._contentRef.nativeElement,\n                this.toChildrenLocation(),\n                this.snapDuration\n            );\n        }\n    }\n\n    moveRight() {\n        const container = this.wrapper || this.parentNode;\n        const containerWidth = container ? container.clientWidth : 0;\n\n        if (\n            !this.isScrollReachesRightEnd() &&\n            this.currIndex <\n            this.maximumIndex(containerWidth, this._children.toArray())\n        ) {\n            this.currIndex++;\n            clearTimeout(this.scrollToTimer as number);\n            this.scrollTo(\n                this._contentRef.nativeElement,\n                this.toChildrenLocation(),\n                this.snapDuration\n            );\n        }\n    }\n\n    moveTo(index: number) {\n        const container = this.wrapper || this.parentNode;\n        const containerWidth = container ? container.clientWidth : 0;\n        if (\n            index >= 0 &&\n            index !== this.currIndex &&\n            this.currIndex <=\n            this.maximumIndex(containerWidth, this._children.toArray())\n        ) {\n            this.currIndex = Math.min(\n                index,\n                this.maximumIndex(containerWidth, this._children.toArray())\n            );\n            clearTimeout(this.scrollToTimer as number);\n            this.scrollTo(\n                this._contentRef.nativeElement,\n                this.toChildrenLocation(),\n                this.snapDuration\n            );\n        }\n    }\n\n    checkNavStatus() {\n        setTimeout(() => {\n            const onlyOneItem = Boolean(this._children.length <= 1);\n            const containerIsLargerThanContent = Boolean(\n                this._contentRef.nativeElement.scrollWidth <=\n                this._contentRef.nativeElement.clientWidth\n            );\n            if (onlyOneItem || containerIsLargerThanContent) {\n                // only one element\n                this.reachesLeftBound.emit(true);\n                this.reachesRightBound.emit(true);\n            } else if (this.isScrollReachesRightEnd()) {\n                // reached right end\n                this.reachesLeftBound.emit(false);\n                this.reachesRightBound.emit(true);\n            } else if (\n                this._contentRef.nativeElement.scrollLeft === 0 &&\n                this._contentRef.nativeElement.scrollWidth >\n                this._contentRef.nativeElement.clientWidth\n            ) {\n                // reached left end\n                this.reachesLeftBound.emit(true);\n                this.reachesRightBound.emit(false);\n            } else {\n                // in the middle\n                this.reachesLeftBound.emit(false);\n                this.reachesRightBound.emit(false);\n            }\n        }, 0);\n    }\n\n    @HostListener('wheel', ['$event'])\n    public onWheel(event: WheelEvent) {\n        if (this._xWheelEnabled) {\n            event.preventDefault();\n\n            if (this._snapDisabled) {\n                this._contentRef.nativeElement.scrollBy(event.deltaY, 0);\n            } else {\n                if (event.deltaY < 0) {\n                    this.moveLeft();\n                } else if (event.deltaY > 0) {\n                    this.moveRight();\n                }\n            }\n        }\n    }\n\n    @HostListener('window:resize')\n    public onWindowResize() {\n        this.refreshWrapperDimensions();\n        this.checkNavStatus();\n    }\n\n    private _setIsDragging(value: boolean) {\n        if (this._isDragging === value) {\n            return;\n        }\n\n        this._isDragging = value;\n        value ? this.dragStart.emit() : this.dragEnd.emit();\n    }\n\n    private _startGlobalListening(isTouchEvent: boolean) {\n        if (!this._onMouseMoveListener) {\n            const eventName = isTouchEvent ? 'touchmove' : 'mousemove';\n            this._onMouseMoveListener = this._renderer.listen(\n                'document',\n                eventName,\n                this.onMouseMoveHandler.bind(this)\n            );\n        }\n\n        if (!this._onMouseUpListener) {\n            const eventName = isTouchEvent ? 'touchend' : 'mouseup';\n            this._onMouseUpListener = this._renderer.listen(\n                'document',\n                eventName,\n                this.onMouseUpHandler.bind(this)\n            );\n        }\n    }\n\n    private _stopGlobalListening() {\n        if (this._onMouseMoveListener) {\n            this._onMouseMoveListener = this._onMouseMoveListener();\n        }\n\n        if (this._onMouseUpListener) {\n            this._onMouseUpListener = this._onMouseUpListener();\n        }\n    }\n\n    private disableScroll(axis: string): void {\n        this._renderer.setStyle(\n            this._contentRef.nativeElement,\n            `overflow-${axis}`,\n            'hidden'\n        );\n    }\n\n    private enableScroll(axis: string): void {\n        this._renderer.setStyle(\n            this._contentRef.nativeElement,\n            `overflow-${axis}`,\n            'auto'\n        );\n    }\n\n    private hideScrollbar(): void {\n        if (\n            this._contentRef.nativeElement.style.display !== 'none' &&\n            !this.wrapper\n        ) {\n            this.parentNode = this._contentRef.nativeElement.parentNode;\n\n            // create container element\n            this.wrapper = this._renderer.createElement('div');\n            this._renderer.addClass(this.wrapper, 'carousel-wrapper');\n            // this._renderer.setAttribute(this.wrapper, 'class', 'carousel-wrapper');\n            // this._renderer.addClass(this.wrapper, 'carousel-container');\n\n            this.refreshWrapperDimensions();\n\n            this._renderer.setStyle(this.wrapper, 'overflow', 'hidden');\n\n            this._renderer.setStyle(\n                this._contentRef.nativeElement,\n                'width',\n                `calc(100% + ${this.scrollbarWidth})`\n            );\n            this._renderer.setStyle(\n                this._contentRef.nativeElement,\n                'height',\n                `calc(100% + ${this.scrollbarWidth})`\n            );\n\n            // Append container element to component element.\n            this._renderer.appendChild(\n                this._elementRef.nativeElement,\n                this.wrapper\n            );\n\n            // Append content element to container element.\n            this._renderer.appendChild(\n                this.wrapper,\n                this._contentRef.nativeElement\n            );\n\n            this.adjustMarginToLastChild();\n        }\n    }\n\n    private showScrollbar(): void {\n        if (this.wrapper) {\n            this._renderer.setStyle(\n                this._contentRef.nativeElement,\n                'width',\n                '100%'\n            );\n            this._renderer.setStyle(\n                this._contentRef.nativeElement,\n                'height',\n                this.wrapper.style.height\n            );\n            if (this.parentNode !== null) {\n                this.parentNode.removeChild(this.wrapper);\n                this.parentNode.appendChild(this._contentRef.nativeElement);\n            }\n            this.wrapper = null;\n\n            this.adjustMarginToLastChild();\n        }\n    }\n\n    private checkScrollbar() {\n        if (\n            this._contentRef.nativeElement.scrollWidth <=\n            this._contentRef.nativeElement.clientWidth\n        ) {\n            this._renderer.setStyle(\n                this._contentRef.nativeElement,\n                'height',\n                '100%'\n            );\n        } else {\n            this._renderer.setStyle(\n                this._contentRef.nativeElement,\n                'height',\n                `calc(100% + ${this.scrollbarWidth})`\n            );\n        }\n        if (\n            this._contentRef.nativeElement.scrollHeight <=\n            this._contentRef.nativeElement.clientHeight\n        ) {\n            this._renderer.setStyle(\n                this._contentRef.nativeElement,\n                'width',\n                '100%'\n            );\n        } else {\n            this._renderer.setStyle(\n                this._contentRef.nativeElement,\n                'width',\n                `calc(100% + ${this.scrollbarWidth})`\n            );\n        }\n    }\n\n    private setScrollBar(): void {\n        if (this.scrollbarHidden) {\n            this.hideScrollbar();\n        } else {\n            this.showScrollbar();\n        }\n    }\n\n    private getScrollbarWidth(): number {\n        /**\n         * Browser Scrollbar Widths (2016)\n         * OSX (Chrome, Safari, Firefox) - 15px\n         * Windows XP (IE7, Chrome, Firefox) - 17px\n         * Windows 7 (IE10, IE11, Chrome, Firefox) - 17px\n         * Windows 8.1 (IE11, Chrome, Firefox) - 17px\n         * Windows 10 (IE11, Chrome, Firefox) - 17px\n         * Windows 10 (Edge 12/13) - 12px\n         */\n        const outer = this._renderer.createElement('div');\n        this._renderer.setStyle(outer, 'visibility', 'hidden');\n        this._renderer.setStyle(outer, 'width', '100px');\n        this._renderer.setStyle(outer, 'msOverflowStyle', 'scrollbar'); // needed for WinJS apps\n        // document.body.appendChild(outer);\n        this._renderer.appendChild(this._document.body, outer);\n        // this._renderer.appendChild(this._renderer.selectRootElement('body'), outer);\n        const widthNoScroll = outer.offsetWidth;\n        // force scrollbars\n        this._renderer.setStyle(outer, 'overflow', 'scroll');\n\n        // add innerdiv\n        const inner = this._renderer.createElement('div');\n        this._renderer.setStyle(inner, 'width', '100%');\n        this._renderer.appendChild(outer, inner);\n\n        const widthWithScroll = inner.offsetWidth;\n\n        // remove divs\n        this._renderer.removeChild(this._document.body, outer);\n\n        /**\n         * Scrollbar width will be 0 on Mac OS with the\n         * default \"Only show scrollbars when scrolling\" setting (Yosemite and up).\n         * setting default width to 20;\n         */\n        return widthNoScroll - widthWithScroll || 20;\n    }\n\n    private refreshWrapperDimensions() {\n        if (this.wrapper) {\n            const height =\n                this._elementRef.nativeElement.style.height ||\n                this._elementRef.nativeElement.offsetHeight;\n\n            this._renderer.setStyle(this.wrapper, 'width', '100%');\n            this._renderer.setStyle(\n                this.wrapper,\n                'height',\n                height === 0 ? 'auto' : height + 'px'\n            );\n        }\n    }\n\n    /*\n     * The below solution is heavily inspired from\n     * https://gist.github.com/andjosh/6764939\n     */\n    private scrollTo(element: Element, to: number, duration: number) {\n        this.isAnimating = true;\n        const start = element.scrollLeft,\n            change = to - start - this.snapOffset,\n            increment = 20;\n        let currentTime = 0;\n\n        // t = current time\n        // b = start value\n        // c = change in value\n        // d = duration\n        const easeInOutQuad = (t: number, b: number, c: number, d: number) => {\n            t /= d / 2;\n            if (t < 1) {\n                return (c / 2) * t * t + b;\n            }\n            t--;\n            return (-c / 2) * (t * (t - 2) - 1) + b;\n        };\n\n        const animateScroll = () => {\n            currentTime += increment;\n            element.scrollLeft = easeInOutQuad(\n                currentTime,\n                start,\n                change,\n                duration\n            );\n            if (currentTime < duration) {\n                this.scrollToTimer = setTimeout(animateScroll, increment);\n            } else {\n                // run one more frame to make sure the animation is fully finished\n                setTimeout(() => {\n                    this.isAnimating = false;\n                    this.snapAnimationFinished.emit(this.currIndex);\n                }, increment);\n            }\n        };\n        animateScroll();\n    }\n\n    private locateCurrentIndex(snap?: boolean) {\n        this.currentChildWidth(\n            (\n                currentChildWidth,\n                nextChildrenWidth,\n                childrenWidth,\n                idx: number,\n                stop\n            ) => {\n                if (\n                    this._contentRef.nativeElement.scrollLeft >=\n                    childrenWidth &&\n                    this._contentRef.nativeElement.scrollLeft <=\n                    nextChildrenWidth\n                ) {\n                    if (\n                        nextChildrenWidth -\n                        this._contentRef.nativeElement.scrollLeft >\n                        currentChildWidth / 2 &&\n                        !this.isScrollReachesRightEnd()\n                    ) {\n                        // roll back scrolling\n                        if (!this.isAnimating) {\n                            this.currIndex = idx;\n                        }\n                        if (snap) {\n                            this.scrollTo(\n                                this._contentRef.nativeElement,\n                                childrenWidth,\n                                this.snapDuration\n                            );\n                        }\n                    } else if (\n                        this._contentRef.nativeElement.scrollLeft !== 0\n                    ) {\n                        // forward scrolling\n                        if (!this.isAnimating) {\n                            this.currIndex = idx + 1;\n                        }\n                        if (snap) {\n                            this.scrollTo(\n                                this._contentRef.nativeElement,\n                                childrenWidth + currentChildWidth,\n                                this.snapDuration\n                            );\n                        }\n                    }\n                    stop();\n                } else if (idx + 1 === this._children.length - 1) {\n                    // reaches last index\n                    if (!this.isAnimating) {\n                        this.currIndex = idx + 1;\n                    }\n                    stop();\n                }\n            }\n        );\n    }\n\n    private currentChildWidth(\n        cb: (\n            currentClildWidth: number,\n            nextChildrenWidth: number,\n            childrenWidth: number,\n            index: number,\n            breakFunc: () => void\n        ) => void\n    ) {\n        let childrenWidth = 0;\n        let shouldBreak = false;\n        const breakFunc = function () {\n            shouldBreak = true;\n        };\n        const childrenArr = this._children.toArray();\n\n        for (let i = 0; i < childrenArr.length; i++) {\n            if (i === childrenArr.length - 1) {\n                break;\n            }\n            if (shouldBreak) {\n                break;\n            }\n\n            const nextChildrenWidth =\n                childrenWidth +\n                childrenArr[i + 1]._elementRef.nativeElement.clientWidth;\n            const currentClildWidth =\n                childrenArr[i]._elementRef.nativeElement.clientWidth;\n            cb(\n                currentClildWidth,\n                nextChildrenWidth,\n                childrenWidth,\n                i,\n                breakFunc\n            );\n\n            childrenWidth += currentClildWidth;\n        }\n    }\n\n    private toChildrenLocation(): number {\n        let to = 0;\n        const childrenArr = this._children.toArray();\n        for (let i = 0; i < this.currIndex; i++) {\n            to += childrenArr[i]._elementRef.nativeElement.clientWidth;\n        }\n        return to;\n    }\n\n    private locateCarouselItem(\n        element: Element\n    ): PepCarouselItemDirective | null {\n        let item: PepCarouselItemDirective | null = null;\n        const childrenArr = this._children.toArray();\n        for (let i = 0; i < childrenArr.length; i++) {\n            if (element === childrenArr[i]._elementRef.nativeElement) {\n                item = childrenArr[i];\n            }\n        }\n        return item;\n    }\n\n    private markElDimension() {\n        if (this.wrapper) {\n            this.elWidth = this.wrapper.style.width;\n            this.elHeight = this.wrapper.style.height;\n        } else {\n            this.elWidth =\n                this._elementRef.nativeElement.style.width ||\n                this._elementRef.nativeElement.offsetWidth + 'px';\n            this.elHeight =\n                this._elementRef.nativeElement.style.height ||\n                this._elementRef.nativeElement.offsetHeight + 'px';\n        }\n        const container = this.wrapper || this.parentNode;\n        const containerWidth = container ? container.clientWidth : 0;\n        if (this._children.length > 1) {\n            this.indexBound = this.maximumIndex(\n                containerWidth,\n                this._children.toArray()\n            );\n        }\n    }\n\n    private maximumIndex(\n        containerWidth: number,\n        childrenElements: PepCarouselItemDirective[]\n    ): number {\n        let count = 0;\n        let childrenWidth = 0;\n        for (let i = 0; i <= childrenElements.length; i++) {\n            // last N element\n            const carouselItemDirective: PepCarouselItemDirective =\n                childrenElements[childrenElements.length - 1 - i];\n            if (!carouselItemDirective) {\n                break;\n            } else {\n                const nativeElement =\n                    carouselItemDirective._elementRef.nativeElement;\n                let itemWidth = nativeElement.clientWidth;\n                if (itemWidth === 0 && nativeElement.firstElementChild) {\n                    itemWidth =\n                        carouselItemDirective._elementRef.nativeElement\n                            .firstElementChild.clientWidth;\n                }\n                childrenWidth += itemWidth;\n                if (childrenWidth < containerWidth) {\n                    count++;\n                } else {\n                    break;\n                }\n            }\n        }\n        return childrenElements.length - count;\n    }\n\n    private isScrollReachesRightEnd(): boolean {\n        const scrollLeftPos =\n            this._contentRef.nativeElement.scrollLeft +\n            this._contentRef.nativeElement.offsetWidth;\n        return scrollLeftPos >= this._contentRef.nativeElement.scrollWidth;\n    }\n\n    /**\n     * adds a margin right style to the last child element which will resolve the issue\n     * of last item gets cutoff.\n     */\n    private adjustMarginToLastChild(): void {\n        // if (this._children && this._children.length > 0 && this.hideScrollbar) {\n        //     const childrenArr = this._children.toArray();\n        //     const lastItem = childrenArr[childrenArr.length - 1]._elementRef.nativeElement;\n        //     if (this.wrapper && childrenArr.length > 1) {\n        //         this._renderer.setStyle(lastItem, 'margin-right', this.scrollbarWidth);\n        //     } else {\n        //         this._renderer.setStyle(lastItem, 'margin-right', 0);\n        //     }\n        // }\n    }\n}\n","import { NgModule } from '@angular/core';\n\nimport { PepCarouselComponent } from './carousel.component';\nimport { PepCarouselItemDirective } from './carousel-item.directive';\n\n@NgModule({\n    exports: [PepCarouselComponent, PepCarouselItemDirective],\n    declarations: [PepCarouselComponent, PepCarouselItemDirective],\n})\nexport class PepCarouselModule {}\n","/*\n * Public API Surface of carousel\n */\nexport * from './carousel.module';\nexport * from './carousel.component';\nexport * from './carousel-item.directive';\n// export * from './carousel.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;MAWa,wBAAwB,CAAA;AAgBjC,IAAA,WAAA,CAAgC,UAAsB,EAAA;QAdtD,IAAO,CAAA,OAAA,GAAG,cAAc,CAAC;QAUzB,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;AAKlB,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;KACjC;AAdD,IAAA,IACI,YAAY,GAAA;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;IACD,IAAI,YAAY,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;KAC9B;;AAVQ,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,kBAgBb,UAAU,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;yGAhBrB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,cAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,mBAAmB;AAChC,iBAAA,CAAA;;0BAiBgB,MAAM;2BAAC,UAAU,CAAA;4CAd9B,OAAO,EAAA,CAAA;sBADN,WAAW;uBAAC,eAAe,CAAA;gBAIxB,YAAY,EAAA,CAAA;sBADf,KAAK;uBAAC,cAAc,CAAA;;;MC4BZ,oBAAoB,CAAA;AAgN7B,IAAA,WAAA,CACgC,WAAuB,EACxB,SAAoB,EACrB,SAAc,EAAA;QAFZ,IAAW,CAAA,WAAA,GAAX,WAAW,CAAY;QACxB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QACrB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAK;QAjNpC,IAAM,CAAA,MAAA,GAAG,CAAC,CAAC;QAEX,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC;QAEzB,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;QAElB,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;QAEnB,IAAc,CAAA,cAAA,GAAG,KAAK,CAAC;QAEvB,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;QAEnB,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;QAEtB,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;QAEtB,IAAW,CAAA,WAAA,GAAG,CAAC,CAAC;QAEhB,IAAa,CAAA,aAAA,GAAG,GAAG,CAAC;QAEpB,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;AAY5B;;AAEG;QACH,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;AAElB;;AAEG;QACH,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;AAapB;;AAEG;QACH,IAAK,CAAA,KAAA,GAAG,CAAC,CAAC;AAEV;;AAEG;QACH,IAAK,CAAA,KAAA,GAAG,CAAC,CAAC;QAEV,IAAW,CAAA,WAAA,GAAkB,OAAO,CAAC;QAErC,IAAO,CAAA,OAAA,GAAkB,IAAI,CAAC;QAE9B,IAAQ,CAAA,QAAA,GAAkB,IAAI,CAAC;QAgBM,IAAc,CAAA,cAAA,GAAG,MAAM,CAAC;QAI7D,IAAc,CAAA,cAAA,GAAkB,IAAI,CAAC;QAYrC,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;QAEpB,IAAkB,CAAA,kBAAA,GAAG,CAAC,CAAC;QAEvB,IAAU,CAAA,UAAA,GAAG,CAAC,CAAC;AAEL,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAQ,CAAC;AAEzC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAU,CAAC;AAE1C,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAW,CAAC;AAE/C,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAW,CAAC;AAEhD,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAAU,CAAC;AAEnD,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAQ,CAAC;AAErC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ,CAAC;QA8FzC,IAAI,CAAC,cAAc,GAAG,CAAA,EAAG,IAAI,CAAC,iBAAiB,EAAE,CAAA,EAAA,CAAI,CAAC;KACzD;AAtKD;;AAEG;AACH,IAAA,IAAI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC,WAAW,CAAC;KAC3B;AAsCD,IAAA,IAAI,SAAS,GAAA;QACT,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;IACD,IAAI,SAAS,CAAC,KAAK,EAAA;AACf,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE;AACvB,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,SAAA;KACJ;AAsBD;;AAEG;AACH,IAAA,IACI,eAAe,GAAA;QACf,OAAO,IAAI,CAAC,gBAAgB,CAAC;KAChC;IACD,IAAI,eAAe,CAAC,KAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;KACjC;AAED;;AAEG;AACH,IAAA,IACI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;IACD,IAAI,QAAQ,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;KAC1B;AAED;;AAEG;AACH,IAAA,IACI,SAAS,GAAA;QACT,OAAO,IAAI,CAAC,UAAU,CAAC;KAC1B;IACD,IAAI,SAAS,CAAC,KAAc,EAAA;AACxB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;KAC3B;AAED;;AAEG;AACH,IAAA,IACI,SAAS,GAAA;QACT,OAAO,IAAI,CAAC,UAAU,CAAC;KAC1B;IACD,IAAI,SAAS,CAAC,KAAc,EAAA;AACxB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;KAC3B;AAED;;AAEG;AACH,IAAA,IACI,aAAa,GAAA;QACb,OAAO,IAAI,CAAC,cAAc,CAAC;KAC9B;IACD,IAAI,aAAa,CAAC,KAAc,EAAA;AAC5B,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;KAC/B;AAED,IAAA,IACI,YAAY,GAAA;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;IACD,IAAI,YAAY,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;KAC9B;AAED,IAAA,IACI,YAAY,GAAA;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;IACD,IAAI,YAAY,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;KAC9B;AAED,IAAA,IACI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC,WAAW,CAAC;KAC3B;IACD,IAAI,UAAU,CAAC,KAAa,EAAA;AACxB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;KAC5B;AAED,IAAA,IACI,YAAY,GAAA;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;IACD,IAAI,YAAY,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;KAC9B;IAUD,WAAW,GAAA;QACP,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAC1D,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAC3B,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAC1B,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjC,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAC3B,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAC1B,SAAA;KACJ;IAED,eAAe,GAAA;;AAEX,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CACvB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,aAAa,EACb,MAAM,CACT,CAAC;AAEF,QAAA,IAAI,CAAC,WAAW;YACZ,OAAO,MAAM,KAAK,WAAW;kBACvB,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;qBACpD,OAAO;kBACV,OAAO,CAAC;AAElB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,SAAS,EACT,IAAI,CAAC,WAAW,CACnB,CAAC;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,YAAY,EACZ,QAAQ,CACX,CAAC;;QAGF,IAAI,CAAC,eAAe,EAAE,CAAC;AAEvB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,OAAO,EACP,IAAI,CAAC,OAAO,CACf,CAAC;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,QAAQ,EACR,IAAI,CAAC,QAAQ,CAChB,CAAC;QAEF,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,cAAc,EAAE,CAAC;AACzB,SAAA;QAED,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAC7C,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,WAAW,EACX,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CACrC,CAAC;QACF,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAC1C,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,QAAQ,EACR,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAClC,CAAC;;AAEF,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAC7C,UAAU,EACV,WAAW,EACX,CAAC,CAAC,KAAI;YACF,CAAC,CAAC,cAAc,EAAE,CAAC;AACvB,SAAC,CACJ,CAAC;QACF,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,uBAAuB,EAAE,CAAC;KAClC;IAED,kBAAkB,GAAA;;QAEd,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,kBAAkB,EAAE;YACnD,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YAChD,IAAI,CAAC,cAAc,EAAE,CAAC;AACzB,SAAA;KACJ;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CACvB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,aAAa,EACb,OAAO,CACV,CAAC;QACF,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC3D,SAAA;QACD,IAAI,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACrD,SAAA;QACD,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC3D,SAAA;KACJ;AAED,IAAA,kBAAkB,CAAC,KAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KAC3B;AAED,IAAA,WAAW,CAAC,KAAiB,EAAA;QACzB,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;;;YAGlC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAChC,gBAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACvC,aAAA;AAED,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;AAC7B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;;YAG1B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACvC,gBAAA,MAAM,OAAO,GAAI,KAAoB,CAAC,OAAO,CAAC;AAC9C,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU;AACrC,oBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU;wBACzC,OAAO;wBACP,IAAI,CAAC,KAAK,CAAC;AACf,gBAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;AACxB,aAAA;;YAGD,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACvC,gBAAA,MAAM,OAAO,GAAI,KAAoB,CAAC,OAAO,CAAC;AAC9C,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS;AACpC,oBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS;wBACxC,OAAO;wBACP,IAAI,CAAC,KAAK,CAAC;AACf,gBAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;AACxB,aAAA;AACJ,SAAA;KACJ;AAED,IAAA,kBAAkB,CAAC,KAAiB,EAAA;QAChC,MAAM,YAAY,GAAoC,IAAI,CAAC,kBAAkB,CACzE,KAAK,CAAC,MAAiB,CAC1B,CAAC;AACF,QAAA,IAAI,YAAY,IAAI,YAAY,CAAC,YAAY,EAAE;YAC3C,OAAO;AACV,SAAA;AAED,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC;AAEjD,QAAA,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,MAAM,UAAU,GAAG,KAAmB,CAAC;AACvC,QAAA,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC;AAChC,QAAA,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC;AAEhC,QAAA,YAAY,CAAC,IAAI,CAAC,aAAuB,CAAC,CAAC;KAC9C;IAED,eAAe,GAAA;QACX,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAC5D,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,YAAA,YAAY,CAAC,IAAI,CAAC,WAAqB,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,MAAK;AAC/B,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;aACjC,EAAE,GAAG,CAAC,CAAC;AACX,SAAA;AAAM,aAAA;YACH,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC7B,SAAA;KACJ;AAED,IAAA,gBAAgB,CAAC,KAAiB,EAAA;QAC9B,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;AAC7B,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACpB,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;AACjC,aAAA;AAAM,iBAAA;gBACH,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC7B,aAAA;YACD,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC/B,SAAA;KACJ;AAED;;AAEG;IACH,QAAQ,GAAA;QACJ,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE;YAC3C,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,YAAA,YAAY,CAAC,IAAI,CAAC,aAAuB,CAAC,CAAC;AAC3C,YAAA,IAAI,CAAC,QAAQ,CACT,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,IAAI,CAAC,kBAAkB,EAAE,EACzB,IAAI,CAAC,YAAY,CACpB,CAAC;AACL,SAAA;KACJ;IAED,SAAS,GAAA;QACL,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC;AAClD,QAAA,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC,WAAW,GAAG,CAAC,CAAC;AAE7D,QAAA,IACI,CAAC,IAAI,CAAC,uBAAuB,EAAE;AAC/B,YAAA,IAAI,CAAC,SAAS;AACd,gBAAA,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAC7D;YACE,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,YAAA,YAAY,CAAC,IAAI,CAAC,aAAuB,CAAC,CAAC;AAC3C,YAAA,IAAI,CAAC,QAAQ,CACT,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,IAAI,CAAC,kBAAkB,EAAE,EACzB,IAAI,CAAC,YAAY,CACpB,CAAC;AACL,SAAA;KACJ;AAED,IAAA,MAAM,CAAC,KAAa,EAAA;QAChB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC;AAClD,QAAA,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC,WAAW,GAAG,CAAC,CAAC;QAC7D,IACI,KAAK,IAAI,CAAC;YACV,KAAK,KAAK,IAAI,CAAC,SAAS;AACxB,YAAA,IAAI,CAAC,SAAS;AACd,gBAAA,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAC7D;YACE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CACrB,KAAK,EACL,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAC9D,CAAC;AACF,YAAA,YAAY,CAAC,IAAI,CAAC,aAAuB,CAAC,CAAC;AAC3C,YAAA,IAAI,CAAC,QAAQ,CACT,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,IAAI,CAAC,kBAAkB,EAAE,EACzB,IAAI,CAAC,YAAY,CACpB,CAAC;AACL,SAAA;KACJ;IAED,cAAc,GAAA;QACV,UAAU,CAAC,MAAK;AACZ,YAAA,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;YACxD,MAAM,4BAA4B,GAAG,OAAO,CACxC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW;AAC1C,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAC7C,CAAC;YACF,IAAI,WAAW,IAAI,4BAA4B,EAAE;;AAE7C,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,aAAA;AAAM,iBAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE;;AAEvC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,aAAA;iBAAM,IACH,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU,KAAK,CAAC;AAC/C,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW;AAC1C,oBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,EAC5C;;AAEE,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,aAAA;AAAM,iBAAA;;AAEH,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,aAAA;SACJ,EAAE,CAAC,CAAC,CAAC;KACT;AAGM,IAAA,OAAO,CAAC,KAAiB,EAAA;QAC5B,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,KAAK,CAAC,cAAc,EAAE,CAAC;YAEvB,IAAI,IAAI,CAAC,aAAa,EAAE;AACpB,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC5D,aAAA;AAAM,iBAAA;AACH,gBAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;oBAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;AACnB,iBAAA;AAAM,qBAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;oBACzB,IAAI,CAAC,SAAS,EAAE,CAAC;AACpB,iBAAA;AACJ,aAAA;AACJ,SAAA;KACJ;IAGM,cAAc,GAAA;QACjB,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,IAAI,CAAC,cAAc,EAAE,CAAC;KACzB;AAEO,IAAA,cAAc,CAAC,KAAc,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;YAC5B,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,QAAA,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KACvD;AAEO,IAAA,qBAAqB,CAAC,YAAqB,EAAA;AAC/C,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAC5B,MAAM,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,WAAW,CAAC;YAC3D,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAC7C,UAAU,EACV,SAAS,EACT,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CACrC,CAAC;AACL,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC1B,MAAM,SAAS,GAAG,YAAY,GAAG,UAAU,GAAG,SAAS,CAAC;YACxD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAC3C,UAAU,EACV,SAAS,EACT,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CACnC,CAAC;AACL,SAAA;KACJ;IAEO,oBAAoB,GAAA;QACxB,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC3D,SAAA;QAED,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACzB,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;AACvD,SAAA;KACJ;AAEO,IAAA,aAAa,CAAC,IAAY,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,CAAY,SAAA,EAAA,IAAI,EAAE,EAClB,QAAQ,CACX,CAAC;KACL;AAEO,IAAA,YAAY,CAAC,IAAY,EAAA;AAC7B,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,CAAY,SAAA,EAAA,IAAI,EAAE,EAClB,MAAM,CACT,CAAC;KACL;IAEO,aAAa,GAAA;QACjB,IACI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM;YACvD,CAAC,IAAI,CAAC,OAAO,EACf;YACE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC;;YAG5D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACnD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;;;YAI1D,IAAI,CAAC,wBAAwB,EAAE,CAAC;AAEhC,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AAE5D,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,OAAO,EACP,CAAe,YAAA,EAAA,IAAI,CAAC,cAAc,CAAA,CAAA,CAAG,CACxC,CAAC;AACF,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,QAAQ,EACR,CAAe,YAAA,EAAA,IAAI,CAAC,cAAc,CAAA,CAAA,CAAG,CACxC,CAAC;;AAGF,YAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CACtB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,IAAI,CAAC,OAAO,CACf,CAAC;;AAGF,YAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CACtB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,WAAW,CAAC,aAAa,CACjC,CAAC;YAEF,IAAI,CAAC,uBAAuB,EAAE,CAAC;AAClC,SAAA;KACJ;IAEO,aAAa,GAAA;QACjB,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,OAAO,EACP,MAAM,CACT,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,QAAQ,EACR,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAC5B,CAAC;AACF,YAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;gBAC1B,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC1C,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AAC/D,aAAA;AACD,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YAEpB,IAAI,CAAC,uBAAuB,EAAE,CAAC;AAClC,SAAA;KACJ;IAEO,cAAc,GAAA;AAClB,QAAA,IACI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW;AAC1C,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,EAC5C;AACE,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,QAAQ,EACR,MAAM,CACT,CAAC;AACL,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,QAAQ,EACR,CAAe,YAAA,EAAA,IAAI,CAAC,cAAc,CAAA,CAAA,CAAG,CACxC,CAAC;AACL,SAAA;AACD,QAAA,IACI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY;AAC3C,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY,EAC7C;AACE,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,OAAO,EACP,MAAM,CACT,CAAC;AACL,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,OAAO,EACP,CAAe,YAAA,EAAA,IAAI,CAAC,cAAc,CAAA,CAAA,CAAG,CACxC,CAAC;AACL,SAAA;KACJ;IAEO,YAAY,GAAA;QAChB,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,aAAa,EAAE,CAAC;AACxB,SAAA;AAAM,aAAA;YACH,IAAI,CAAC,aAAa,EAAE,CAAC;AACxB,SAAA;KACJ;IAEO,iBAAiB,GAAA;AACrB;;;;;;;;AAQG;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;QACvD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAC;;AAE/D,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;;AAEvD,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC;;QAExC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;;QAGrD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAEzC,QAAA,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CAAC;;AAG1C,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAEvD;;;;AAIG;AACH,QAAA,OAAO,aAAa,GAAG,eAAe,IAAI,EAAE,CAAC;KAChD;IAEO,wBAAwB,GAAA;QAC5B,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,MAAM,MAAM,GACR,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM;AAC3C,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY,CAAC;AAEhD,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YACvD,IAAI,CAAC,SAAS,CAAC,QAAQ,CACnB,IAAI,CAAC,OAAO,EACZ,QAAQ,EACR,MAAM,KAAK,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CACxC,CAAC;AACL,SAAA;KACJ;AAED;;;AAGG;AACK,IAAA,QAAQ,CAAC,OAAgB,EAAE,EAAU,EAAE,QAAgB,EAAA;AAC3D,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,EAC5B,MAAM,GAAG,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,UAAU,EACrC,SAAS,GAAG,EAAE,CAAC;QACnB,IAAI,WAAW,GAAG,CAAC,CAAC;;;;;QAMpB,MAAM,aAAa,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,KAAI;AACjE,YAAA,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACX,IAAI,CAAC,GAAG,CAAC,EAAE;gBACP,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9B,aAAA;AACD,YAAA,CAAC,EAAE,CAAC;YACJ,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5C,SAAC,CAAC;QAEF,MAAM,aAAa,GAAG,MAAK;YACvB,WAAW,IAAI,SAAS,CAAC;AACzB,YAAA,OAAO,CAAC,UAAU,GAAG,aAAa,CAC9B,WAAW,EACX,KAAK,EACL,MAAM,EACN,QAAQ,CACX,CAAC;YACF,IAAI,WAAW,GAAG,QAAQ,EAAE;gBACxB,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;AAC7D,aAAA;AAAM,iBAAA;;gBAEH,UAAU,CAAC,MAAK;AACZ,oBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;oBACzB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;iBACnD,EAAE,SAAS,CAAC,CAAC;AACjB,aAAA;AACL,SAAC,CAAC;AACF,QAAA,aAAa,EAAE,CAAC;KACnB;AAEO,IAAA,kBAAkB,CAAC,IAAc,EAAA;AACrC,QAAA,IAAI,CAAC,iBAAiB,CAClB,CACI,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,GAAW,EACX,IAAI,KACJ;AACA,YAAA,IACI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU;gBACzC,aAAa;AACb,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU;AACzC,oBAAA,iBAAiB,EACnB;AACE,gBAAA,IACI,iBAAiB;AACjB,oBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU;AACzC,oBAAA,iBAAiB,GAAG,CAAC;AACrB,oBAAA,CAAC,IAAI,CAAC,uBAAuB,EAAE,EACjC;;AAEE,oBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,wBAAA,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;AACxB,qBAAA;AACD,oBAAA,IAAI,IAAI,EAAE;AACN,wBAAA,IAAI,CAAC,QAAQ,CACT,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,aAAa,EACb,IAAI,CAAC,YAAY,CACpB,CAAC;AACL,qBAAA;AACJ,iBAAA;qBAAM,IACH,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU,KAAK,CAAC,EACjD;;AAEE,oBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,wBAAA,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,CAAC,CAAC;AAC5B,qBAAA;AACD,oBAAA,IAAI,IAAI,EAAE;AACN,wBAAA,IAAI,CAAC,QAAQ,CACT,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,aAAa,GAAG,iBAAiB,EACjC,IAAI,CAAC,YAAY,CACpB,CAAC;AACL,qBAAA;AACJ,iBAAA;AACD,gBAAA,IAAI,EAAE,CAAC;AACV,aAAA;iBAAM,IAAI,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;;AAE9C,gBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,oBAAA,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,CAAC,CAAC;AAC5B,iBAAA;AACD,gBAAA,IAAI,EAAE,CAAC;AACV,aAAA;AACL,SAAC,CACJ,CAAC;KACL;AAEO,IAAA,iBAAiB,CACrB,EAMS,EAAA;QAET,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB,QAAA,MAAM,SAAS,GAAG,YAAA;YACd,WAAW,GAAG,IAAI,CAAC;AACvB,SAAC,CAAC;QACF,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AAE7C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,YAAA,IAAI,CAAC,KAAK,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC9B,MAAM;AACT,aAAA;AACD,YAAA,IAAI,WAAW,EAAE;gBACb,MAAM;AACT,aAAA;YAED,MAAM,iBAAiB,GACnB,aAAa;gBACb,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC;AAC7D,YAAA,MAAM,iBAAiB,GACnB,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC;YACzD,EAAE,CACE,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,CAAC,EACD,SAAS,CACZ,CAAC;YAEF,aAAa,IAAI,iBAAiB,CAAC;AACtC,SAAA;KACJ;IAEO,kBAAkB,GAAA;QACtB,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AAC7C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE;YACrC,EAAE,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC;AAC9D,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACb;AAEO,IAAA,kBAAkB,CACtB,OAAgB,EAAA;QAEhB,IAAI,IAAI,GAAoC,IAAI,CAAC;QACjD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AAC7C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACzC,IAAI,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,EAAE;AACtD,gBAAA,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AACzB,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACf;IAEO,eAAe,GAAA;QACnB,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;YACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;AAC7C,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,OAAO;AACR,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK;oBAC1C,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC;AACtD,YAAA,IAAI,CAAC,QAAQ;AACT,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM;oBAC3C,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY,GAAG,IAAI,CAAC;AAC1D,SAAA;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC;AAClD,QAAA,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC,WAAW,GAAG,CAAC,CAAC;AAC7D,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAC/B,cAAc,EACd,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAC3B,CAAC;AACL,SAAA;KACJ;IAEO,YAAY,CAChB,cAAsB,EACtB,gBAA4C,EAAA;QAE5C,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,aAAa,GAAG,CAAC,CAAC;AACtB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;;AAE/C,YAAA,MAAM,qBAAqB,GACvB,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACtD,IAAI,CAAC,qBAAqB,EAAE;gBACxB,MAAM;AACT,aAAA;AAAM,iBAAA;AACH,gBAAA,MAAM,aAAa,GACf,qBAAqB,CAAC,WAAW,CAAC,aAAa,CAAC;AACpD,gBAAA,IAAI,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC;AAC1C,gBAAA,IAAI,SAAS,KAAK,CAAC,IAAI,aAAa,CAAC,iBAAiB,EAAE;oBACpD,SAAS;wBACL,qBAAqB,CAAC,WAAW,CAAC,aAAa;6BAC1C,iBAAiB,CAAC,WAAW,CAAC;AAC1C,iBAAA;gBACD,aAAa,IAAI,SAAS,CAAC;gBAC3B,IAAI,aAAa,GAAG,cAAc,EAAE;AAChC,oBAAA,KAAK,EAAE,CAAC;AACX,iBAAA;AAAM,qBAAA;oBACH,MAAM;AACT,iBAAA;AACJ,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,gBAAgB,CAAC,MAAM,GAAG,KAAK,CAAC;KAC1C;IAEO,uBAAuB,GAAA;QAC3B,MAAM,aAAa,GACf,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU;AACzC,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC;QAC/C,OAAO,aAAa,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC;KACtE;AAED;;;AAGG;IACK,uBAAuB,GAAA;;;;;;;;;;KAU9B;;AAp9BQ,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,EAiNjB,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,UAAU,EACV,EAAA,EAAA,KAAA,EAAA,SAAS,aACT,QAAQ,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qGAnNX,oBAAoB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EAkFZ,wBAAwB,EArG/B,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,uGAAA,CAAA,EAAA,CAAA,CAAA;2FAeQ,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBArBhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EACd,QAAA,EAAA,CAAA;;;;AAIT,IAAA,CAAA,EAAA,MAAA,EAAA,CAAA,uGAAA,CAAA,EAAA,CAAA;;0BAgOI,MAAM;2BAAC,UAAU,CAAA;;0BACjB,MAAM;2BAAC,SAAS,CAAA;;0BAChB,MAAM;2BAAC,QAAQ,CAAA;4CAnIuB,WAAW,EAAA,CAAA;sBAArD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAGzC,SAAS,EAAA,CAAA;sBADR,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,wBAAwB,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;gBAG3B,cAAc,EAAA,CAAA;sBAAlD,WAAW;uBAAC,sBAAsB,CAAA;gBAsBzB,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBAEG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAEG,gBAAgB,EAAA,CAAA;sBAAzB,MAAM;gBAEG,iBAAiB,EAAA,CAAA;sBAA1B,MAAM;gBAEG,qBAAqB,EAAA,CAAA;sBAA9B,MAAM;gBAEG,SAAS,EAAA,CAAA;sBAAlB,MAAM;gBAEG,OAAO,EAAA,CAAA;sBAAhB,MAAM;gBAMH,eAAe,EAAA,CAAA;sBADlB,KAAK;uBAAC,iBAAiB,CAAA;gBAYpB,QAAQ,EAAA,CAAA;sBADX,KAAK;uBAAC,UAAU,CAAA;gBAYb,SAAS,EAAA,CAAA;sBADZ,KAAK;uBAAC,WAAW,CAAA;gBAYd,SAAS,EAAA,CAAA;sBADZ,KAAK;uBAAC,WAAW,CAAA;gBAYd,aAAa,EAAA,CAAA;sBADhB,KAAK;uBAAC,eAAe,CAAA;gBASlB,YAAY,EAAA,CAAA;sBADf,KAAK;uBAAC,cAAc,CAAA;gBASjB,YAAY,EAAA,CAAA;sBADf,KAAK;uBAAC,cAAc,CAAA;gBASjB,UAAU,EAAA,CAAA;sBADb,KAAK;uBAAC,YAAY,CAAA;gBASf,YAAY,EAAA,CAAA;sBADf,KAAK;uBAAC,cAAc,CAAA;gBA0Sd,OAAO,EAAA,CAAA;sBADb,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAkB1B,cAAc,EAAA,CAAA;sBADpB,YAAY;uBAAC,eAAe,CAAA;;;MCpiBpB,iBAAiB,CAAA;;8GAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAjB,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,iBAFX,oBAAoB,EAAE,wBAAwB,CADnD,EAAA,OAAA,EAAA,CAAA,oBAAoB,EAAE,wBAAwB,CAAA,EAAA,CAAA,CAAA;+GAG/C,iBAAiB,EAAA,CAAA,CAAA;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,oBAAoB,EAAE,wBAAwB,CAAC;AACzD,oBAAA,YAAY,EAAE,CAAC,oBAAoB,EAAE,wBAAwB,CAAC;AACjE,iBAAA,CAAA;;;ACRD;;AAEG;AAIH;;ACNA;;AAEG;;;;"}