{"version":3,"sources":["node_modules/ngx-owl-carousel-o/fesm2022/ngx-owl-carousel-o.mjs"],"sourcesContent":["import * as i0 from '@angular/core';\nimport { isDevMode, Injectable, InjectionToken, PLATFORM_ID, Inject, Optional, Directive, Input, Component, HostListener, EventEmitter, ChangeDetectionStrategy, ContentChildren, Output, Attribute, HostBinding, NgModule } from '@angular/core';\nimport * as i3 from '@angular/common';\nimport { isPlatformBrowser, CommonModule } from '@angular/common';\nimport { Subject, merge, of, fromEvent, from } from 'rxjs';\nimport { tap, filter, switchMap, first, take, skip, map, toArray, delay } from 'rxjs/operators';\nimport * as i1 from '@angular/router';\nimport { NavigationEnd } from '@angular/router';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\n\n/**\n * Defaults value of options\n */\nconst _c0 = (a0, a1, a2, a3, a4) => ({\n \"width\": a0,\n \"transform\": a1,\n \"transition\": a2,\n \"padding-left\": a3,\n \"padding-right\": a4\n});\nconst _c1 = (a0, a1, a2, a3) => ({\n \"width\": a0,\n \"margin-left\": a1,\n \"margin-right\": a2,\n \"left\": a3\n});\nconst _c2 = (a0, a1) => ({\n $implicit: a0,\n index: a1\n});\nfunction StageComponent_ng_container_2_2_ng_template_0_Template(rf, ctx) {}\nfunction StageComponent_ng_container_2_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, StageComponent_ng_container_2_2_ng_template_0_Template, 0, 0, \"ng-template\", 4);\n }\n if (rf & 2) {\n const ctx_r3 = i0.ɵɵnextContext();\n const slide_r2 = ctx_r3.$implicit;\n const i_r5 = ctx_r3.index;\n const ctx_r2 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"ngTemplateOutlet\", slide_r2.tplRef)(\"ngTemplateOutletContext\", i0.ɵɵpureFunction2(2, _c2, ctx_r2.preparePublicSlide(slide_r2), i_r5));\n }\n}\nfunction StageComponent_ng_container_2_Template(rf, ctx) {\n if (rf & 1) {\n const _r1 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementContainerStart(0);\n i0.ɵɵelementStart(1, \"div\", 2);\n i0.ɵɵlistener(\"animationend\", function StageComponent_ng_container_2_Template_div_animationend_1_listener() {\n const slide_r2 = i0.ɵɵrestoreView(_r1).$implicit;\n const ctx_r2 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r2.clear(slide_r2.id));\n });\n i0.ɵɵtemplate(2, StageComponent_ng_container_2_2_Template, 1, 5, null, 3);\n i0.ɵɵelementEnd();\n i0.ɵɵelementContainerEnd();\n }\n if (rf & 2) {\n const slide_r2 = ctx.$implicit;\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngClass\", slide_r2.classes)(\"ngStyle\", i0.ɵɵpureFunction4(4, _c1, slide_r2.width + \"px\", slide_r2.marginL ? slide_r2.marginL + \"px\" : \"\", slide_r2.marginR ? slide_r2.marginR + \"px\" : \"\", slide_r2.left))(\"@autoHeight\", slide_r2.heightState);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", slide_r2.load);\n }\n}\nconst _c3 = (a0, a1, a2, a3, a4) => ({\n \"owl-rtl\": a0,\n \"owl-loaded\": a1,\n \"owl-responsive\": a2,\n \"owl-drag\": a3,\n \"owl-grab\": a4\n});\nconst _c4 = (a0, a1) => ({\n \"isMouseDragable\": a0,\n \"isTouchDragable\": a1\n});\nconst _c5 = a0 => ({\n \"disabled\": a0\n});\nconst _c6 = (a0, a1) => ({\n \"active\": a0,\n \"owl-dot-text\": a1\n});\nfunction CarouselComponent_div_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 4);\n i0.ɵɵelement(1, \"owl-stage\", 5);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"owlDraggable\", i0.ɵɵpureFunction2(3, _c4, ctx_r1.owlDOMData == null ? null : ctx_r1.owlDOMData.isMouseDragable, ctx_r1.owlDOMData == null ? null : ctx_r1.owlDOMData.isTouchDragable))(\"stageData\", ctx_r1.stageData)(\"slidesData\", ctx_r1.slidesData);\n }\n}\nfunction CarouselComponent_ng_container_3_div_5_Template(rf, ctx) {\n if (rf & 1) {\n const _r4 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"div\", 11);\n i0.ɵɵlistener(\"click\", function CarouselComponent_ng_container_3_div_5_Template_div_click_0_listener() {\n const dot_r5 = i0.ɵɵrestoreView(_r4).$implicit;\n const ctx_r1 = i0.ɵɵnextContext(2);\n return i0.ɵɵresetView(ctx_r1.moveByDot(dot_r5.id));\n });\n i0.ɵɵelement(1, \"span\", 12);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const dot_r5 = ctx.$implicit;\n i0.ɵɵproperty(\"ngClass\", i0.ɵɵpureFunction2(2, _c6, dot_r5.active, dot_r5.showInnerContent));\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"innerHTML\", dot_r5.innerContent, i0.ɵɵsanitizeHtml);\n }\n}\nfunction CarouselComponent_ng_container_3_Template(rf, ctx) {\n if (rf & 1) {\n const _r3 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementContainerStart(0);\n i0.ɵɵelementStart(1, \"div\", 6)(2, \"div\", 7);\n i0.ɵɵlistener(\"click\", function CarouselComponent_ng_container_3_Template_div_click_2_listener() {\n i0.ɵɵrestoreView(_r3);\n const ctx_r1 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r1.prev());\n });\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(3, \"div\", 8);\n i0.ɵɵlistener(\"click\", function CarouselComponent_ng_container_3_Template_div_click_3_listener() {\n i0.ɵɵrestoreView(_r3);\n const ctx_r1 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r1.next());\n });\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(4, \"div\", 9);\n i0.ɵɵtemplate(5, CarouselComponent_ng_container_3_div_5_Template, 2, 5, \"div\", 10);\n i0.ɵɵelementEnd();\n i0.ɵɵelementContainerEnd();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngClass\", i0.ɵɵpureFunction1(7, _c5, ctx_r1.navData == null ? null : ctx_r1.navData.disabled));\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngClass\", i0.ɵɵpureFunction1(9, _c5, ctx_r1.navData == null ? null : ctx_r1.navData.prev == null ? null : ctx_r1.navData.prev.disabled))(\"innerHTML\", ctx_r1.navData == null ? null : ctx_r1.navData.prev == null ? null : ctx_r1.navData.prev.htmlText, i0.ɵɵsanitizeHtml);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngClass\", i0.ɵɵpureFunction1(11, _c5, ctx_r1.navData == null ? null : ctx_r1.navData.next == null ? null : ctx_r1.navData.next.disabled))(\"innerHTML\", ctx_r1.navData == null ? null : ctx_r1.navData.next == null ? null : ctx_r1.navData.next.htmlText, i0.ɵɵsanitizeHtml);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngClass\", i0.ɵɵpureFunction1(13, _c5, ctx_r1.dotsData == null ? null : ctx_r1.dotsData.disabled));\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngForOf\", ctx_r1.dotsData == null ? null : ctx_r1.dotsData.dots);\n }\n}\nclass OwlCarouselOConfig {\n items = 3;\n skip_validateItems = false;\n loop = false;\n center = false;\n rewind = false;\n mouseDrag = true;\n touchDrag = true;\n pullDrag = true;\n freeDrag = false;\n margin = 0;\n stagePadding = 0;\n merge = false;\n mergeFit = true;\n autoWidth = false;\n startPosition = 0;\n rtl = false;\n smartSpeed = 250;\n fluidSpeed = false;\n dragEndSpeed = false;\n responsive = {};\n responsiveRefreshRate = 200;\n // defaults to Navigation\n nav = false;\n navText = ['prev', 'next'];\n navSpeed = false;\n slideBy = 1; // stage moves on 1 width of slide; if slideBy = 2, stage moves on 2 widths of slide\n dots = true;\n dotsEach = false;\n dotsData = false;\n dotsSpeed = false;\n // defaults to Autoplay\n autoplay = false;\n autoplayTimeout = 5000;\n autoplayHoverPause = false;\n autoplaySpeed = false;\n autoplayMouseleaveTimeout = 1;\n // defaults to LazyLoading\n lazyLoad = false;\n lazyLoadEager = 0;\n // defaults to Animate\n slideTransition = '';\n animateOut = false;\n animateIn = false;\n // defaults to AutoHeight\n autoHeight = false;\n // defaults to Hash\n URLhashListener = false;\n constructor() {}\n}\n/**\n * we can't read types from OwlOptions in javascript because of props have undefined value and types of those props are used for validating inputs\n * class below is copy of OwlOptions but its all props have string value showing certain type;\n * this is class is being used just in method _validateOptions() of CarouselService;\n */\nclass OwlOptionsMockedTypes {\n items = 'number';\n skip_validateItems = 'boolean';\n loop = 'boolean';\n center = 'boolean';\n rewind = 'boolean';\n mouseDrag = 'boolean';\n touchDrag = 'boolean';\n pullDrag = 'boolean';\n freeDrag = 'boolean';\n margin = 'number';\n stagePadding = 'number';\n merge = 'boolean';\n mergeFit = 'boolean';\n autoWidth = 'boolean';\n startPosition = 'number|string';\n rtl = 'boolean';\n smartSpeed = 'number';\n fluidSpeed = 'boolean';\n dragEndSpeed = 'number|boolean';\n responsive = {};\n responsiveRefreshRate = 'number';\n // defaults to Navigation\n nav = 'boolean';\n navText = 'string[]';\n navSpeed = 'number|boolean';\n slideBy = 'number|string'; // stage moves on 1 width of slide; if slideBy = 2, stage moves on 2 widths of slide\n dots = 'boolean';\n dotsEach = 'number|boolean';\n dotsData = 'boolean';\n dotsSpeed = 'number|boolean';\n // defaults to Autoplay\n autoplay = 'boolean';\n autoplayTimeout = 'number';\n autoplayHoverPause = 'boolean';\n autoplaySpeed = 'number|boolean';\n autoplayMouseleaveTimeout = 'number';\n // defaults to LazyLoading\n lazyLoad = 'boolean';\n lazyLoadEager = 'number';\n // defaults to Animate\n slideTransition = 'string';\n animateOut = 'string|boolean';\n animateIn = 'string|boolean';\n // defaults to AutoHeight\n autoHeight = 'boolean';\n // defaults to Hash\n URLhashListener = \"boolean\";\n constructor() {}\n}\nlet OwlLogger = /*#__PURE__*/(() => {\n class OwlLogger {\n errorHandler;\n constructor(errorHandler) {\n this.errorHandler = errorHandler;\n }\n log(value, ...rest) {\n if (isDevMode()) {\n console.log(value, ...rest);\n }\n }\n error(error) {\n this.errorHandler.handleError(error);\n }\n warn(value, ...rest) {\n console.warn(value, ...rest);\n }\n static ɵfac = function OwlLogger_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || OwlLogger)(i0.ɵɵinject(i0.ErrorHandler));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: OwlLogger,\n factory: OwlLogger.ɵfac\n });\n }\n return OwlLogger;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Current state information and their tags.\n */\nclass States {\n current;\n tags;\n}\n/**\n * Enumeration for types.\n * @enum {String}\n */\nvar Type = /*#__PURE__*/function (Type) {\n Type[\"Event\"] = \"event\";\n Type[\"State\"] = \"state\";\n return Type;\n}(Type || {});\n;\n/**\n * Enumeration for width.\n * @enum {String}\n */\nvar Width = /*#__PURE__*/function (Width) {\n Width[\"Default\"] = \"default\";\n Width[\"Inner\"] = \"inner\";\n Width[\"Outer\"] = \"outer\";\n return Width;\n}(Width || {});\n;\n/**\n * Model for coords of .owl-stage\n */\nclass Coords {\n x;\n y;\n}\n/**\n * Model for all current data of carousel\n */\nclass CarouselCurrentData {\n owlDOMData;\n stageData;\n slidesData;\n navData;\n dotsData;\n}\nlet CarouselService = /*#__PURE__*/(() => {\n class CarouselService {\n logger;\n /**\n * Subject for passing data needed for managing View\n */\n _viewSettingsShipper$ = new Subject();\n /**\n * Subject for notification when the carousel got initializes\n */\n _initializedCarousel$ = new Subject();\n /**\n * Subject for notification when the carousel's settings start changinf\n */\n _changeSettingsCarousel$ = new Subject();\n /**\n * Subject for notification when the carousel's settings have changed\n */\n _changedSettingsCarousel$ = new Subject();\n /**\n * Subject for notification when the carousel starts translating or moving\n */\n _translateCarousel$ = new Subject();\n /**\n * Subject for notification when the carousel stopped translating or moving\n */\n _translatedCarousel$ = new Subject();\n /**\n * Subject for notification when the carousel's rebuilding caused by 'resize' event starts\n */\n _resizeCarousel$ = new Subject();\n /**\n * Subject for notification when the carousel's rebuilding caused by 'resize' event is ended\n */\n _resizedCarousel$ = new Subject();\n /**\n * Subject for notification when the refresh of carousel starts\n */\n _refreshCarousel$ = new Subject();\n /**\n * Subject for notification when the refresh of carousel is ended\n */\n _refreshedCarousel$ = new Subject();\n /**\n * Subject for notification when the dragging of carousel starts\n */\n _dragCarousel$ = new Subject();\n /**\n * Subject for notification when the dragging of carousel is ended\n */\n _draggedCarousel$ = new Subject();\n /**\n * Current settings for the carousel.\n */\n settings = {\n items: 0\n };\n /**\n * Initial data for setting classes to element .owl-carousel\n */\n owlDOMData = {\n rtl: false,\n isResponsive: false,\n isRefreshed: false,\n isLoaded: false,\n isLoading: false,\n isMouseDragable: false,\n isGrab: false,\n isTouchDragable: false\n };\n /**\n * Initial data of .owl-stage\n */\n stageData = {\n transform: 'translate3d(0px,0px,0px)',\n transition: '0s',\n width: 0,\n paddingL: 0,\n paddingR: 0\n };\n /**\n * Data of every slide\n */\n slidesData;\n /**\n * Data of navigation block\n */\n navData;\n /**\n * Data of dots block\n */\n dotsData;\n /**\n * Carousel width\n */\n _width;\n /**\n * All real items.\n */\n _items = []; // is equal to this.slides\n /**\n * Array with width of every slide.\n */\n _widths = [];\n /**\n * Currently suppressed events to prevent them from beeing retriggered.\n */\n _supress = {};\n /**\n * References to the running plugins of this carousel.\n */\n _plugins = {};\n /**\n * Absolute current position.\n */\n _current = null;\n /**\n * All cloned items.\n */\n _clones = [];\n /**\n * Merge values of all items.\n * @todo Maybe this could be part of a plugin.\n */\n _mergers = [];\n /**\n * Animation speed in milliseconds.\n */\n _speed = null;\n /**\n * Coordinates of all items in pixel.\n * @todo The name of this member is missleading.\n */\n _coordinates = [];\n /**\n * Current breakpoint.\n * @todo Real media queries would be nice.\n */\n _breakpoint = null;\n /**\n * Prefix for id of cloned slides\n */\n clonedIdPrefix = 'cloned-';\n /**\n * Current options set by the caller including defaults.\n */\n _options = {};\n /**\n * Invalidated parts within the update process.\n */\n _invalidated = {};\n // Is needed for tests\n get invalidated() {\n return this._invalidated;\n }\n /**\n * Current state information and their tags.\n */\n _states = {\n current: {},\n tags: {\n initializing: ['busy'],\n animating: ['busy'],\n dragging: ['interacting']\n }\n };\n // is needed for tests\n get states() {\n return this._states;\n }\n /**\n * Ordered list of workers for the update process.\n */\n _pipe = [\n // {\n // filter: ['width', 'settings'],\n // run: () => {\n // this._width = this.carouselWindowWidth;\n // }\n // },\n {\n filter: ['width', 'items', 'settings'],\n run: cache => {\n cache.current = this._items && this._items[this.relative(this._current)]?.id;\n }\n },\n // {\n // filter: ['items', 'settings'],\n // run: function() {\n // // this.$stage.children('.cloned').remove();\n // }\n // },\n {\n filter: ['width', 'items', 'settings'],\n run: cache => {\n const margin = this.settings.margin || '',\n grid = !this.settings.autoWidth,\n rtl = this.settings.rtl,\n css = {\n 'margin-left': rtl ? margin : '',\n 'margin-right': rtl ? '' : margin\n };\n if (!grid) {\n this.slidesData.forEach(slide => {\n slide.marginL = css['margin-left'];\n slide.marginR = css['margin-right'];\n });\n }\n cache.css = css;\n }\n }, {\n filter: ['width', 'items', 'settings'],\n run: cache => {\n const width = +(this.width() / this.settings.items).toFixed(3) - this.settings.margin,\n grid = !this.settings.autoWidth,\n widths = [];\n let merge = null,\n iterator = this._items.length;\n cache.items = {\n merge: false,\n width: width\n };\n while (iterator-- > 0) {\n merge = this._mergers[iterator];\n merge = this.settings.mergeFit && Math.min(merge, this.settings.items) || merge;\n cache.items.merge = merge > 1 || cache.items.merge;\n widths[iterator] = !grid ? this._items[iterator].width ? this._items[iterator].width : width : width * merge;\n }\n this._widths = widths;\n this.slidesData.forEach((slide, i) => {\n slide.width = this._widths[i];\n slide.marginR = cache.css['margin-right'];\n slide.marginL = cache.css['margin-left'];\n });\n }\n }, {\n filter: ['items', 'settings'],\n run: () => {\n const clones = [],\n items = this._items,\n settings = this.settings,\n // TODO: Should be computed from number of min width items in stage\n view = Math.max(settings.items * 2, 4),\n size = Math.ceil(items.length / 2) * 2;\n let append = [],\n prepend = [],\n repeat = settings.loop && items.length ? settings.rewind ? view : Math.max(view, size) : 0;\n repeat /= 2;\n while (repeat-- > 0) {\n // Switch to only using appended clones\n clones.push(this.normalize(clones.length / 2, true));\n append.push({\n ...this.slidesData[clones[clones.length - 1]]\n });\n clones.push(this.normalize(items.length - 1 - (clones.length - 1) / 2, true));\n prepend.unshift({\n ...this.slidesData[clones[clones.length - 1]]\n });\n }\n this._clones = clones;\n append = append.map(slide => {\n slide.id = `${this.clonedIdPrefix}${slide.id}`;\n slide.isActive = false;\n slide.isCloned = true;\n return slide;\n });\n prepend = prepend.map(slide => {\n slide.id = `${this.clonedIdPrefix}${slide.id}`;\n slide.isActive = false;\n slide.isCloned = true;\n return slide;\n });\n this.slidesData = prepend.concat(this.slidesData).concat(append);\n }\n }, {\n filter: ['width', 'items', 'settings'],\n run: () => {\n const rtl = this.settings.rtl ? 1 : -1,\n size = this._clones.length + this._items.length,\n coordinates = [];\n let iterator = -1,\n previous = 0,\n current = 0;\n while (++iterator < size) {\n previous = coordinates[iterator - 1] || 0;\n current = this._widths[this.relative(iterator)] + this.settings.margin;\n coordinates.push(previous + current * rtl);\n }\n this._coordinates = coordinates;\n }\n }, {\n filter: ['width', 'items', 'settings'],\n run: () => {\n const padding = this.settings.stagePadding,\n coordinates = this._coordinates,\n css = {\n 'width': Math.ceil(Math.abs(coordinates[coordinates.length - 1])) + padding * 2,\n 'padding-left': padding || '',\n 'padding-right': padding || ''\n };\n this.stageData.width = css.width; // use this property in *ngIf directive for .owl-stage element\n this.stageData.paddingL = css['padding-left'];\n this.stageData.paddingR = css['padding-right'];\n }\n }, {\n // filter: [ 'width', 'items', 'settings' ],\n // run: cache => {\n // \t\t// this method sets the width for every slide, but I set it in different way earlier\n // \t\tconst grid = !this.settings.autoWidth,\n // \t\titems = this.$stage.children(); // use this.slidesData\n // let iterator = this._coordinates.length;\n // if (grid && cache.items.merge) {\n // while (iterator--) {\n // cache.css.width = this._widths[this.relative(iterator)];\n // items.eq(iterator).css(cache.css);\n // }\n // } else if (grid) {\n // cache.css.width = cache.items.width;\n // items.css(cache.css);\n // }\n // }\n // }, {\n // filter: [ 'items' ],\n // run: function() {\n // this._coordinates.length < 1 && this.$stage.removeAttr('style');\n // }\n // }, {\n filter: ['width', 'items', 'settings'],\n run: cache => {\n let current = cache.current ? this.slidesData.findIndex(slide => slide.id === cache.current) : 0;\n current = Math.max(this.minimum(), Math.min(this.maximum(), current));\n this.reset(current);\n }\n }, {\n filter: ['position'],\n run: () => {\n this.animate(this.coordinates(this._current));\n }\n }, {\n filter: ['width', 'position', 'items', 'settings'],\n run: () => {\n const rtl = this.settings.rtl ? 1 : -1,\n padding = this.settings.stagePadding * 2,\n matches = [];\n let begin, end, inner, outer, i, n;\n begin = this.coordinates(this.current());\n if (typeof begin === 'number') {\n begin += padding;\n } else {\n begin = 0;\n }\n end = begin + this.width() * rtl;\n if (rtl === -1 && this.settings.center) {\n const result = this._coordinates.filter(element => {\n return this.settings.items % 2 === 1 ? element >= begin : element > begin;\n });\n begin = result.length ? result[result.length - 1] : begin;\n }\n for (i = 0, n = this._coordinates.length; i < n; i++) {\n inner = Math.ceil(this._coordinates[i - 1] || 0);\n outer = Math.ceil(Math.abs(this._coordinates[i]) + padding * rtl);\n if (this._op(inner, '<=', begin) && this._op(inner, '>', end) || this._op(outer, '<', begin) && this._op(outer, '>', end)) {\n matches.push(i);\n }\n }\n this.slidesData.forEach(slide => {\n slide.isActive = false;\n return slide;\n });\n matches.forEach(item => {\n this.slidesData[item].isActive = true;\n });\n if (this.settings.center) {\n this.slidesData.forEach(slide => {\n slide.isCentered = false;\n return slide;\n });\n this.slidesData[this.current()].isCentered = true;\n }\n }\n }];\n constructor(logger) {\n this.logger = logger;\n }\n /**\n * Makes _viewSettingsShipper$ Subject become Observable\n * @returns Observable of _viewSettingsShipper$ Subject\n */\n getViewCurSettings() {\n return this._viewSettingsShipper$.asObservable();\n }\n /**\n * Makes _initializedCarousel$ Subject become Observable\n * @returns Observable of _initializedCarousel$ Subject\n */\n getInitializedState() {\n return this._initializedCarousel$.asObservable();\n }\n /**\n * Makes _changeSettingsCarousel$ Subject become Observable\n * @returns Observable of _changeSettingsCarousel$ Subject\n */\n getChangeState() {\n return this._changeSettingsCarousel$.asObservable();\n }\n /**\n * Makes _changedSettingsCarousel$ Subject become Observable\n * @returns Observable of _changedSettingsCarousel$ Subject\n */\n getChangedState() {\n return this._changedSettingsCarousel$.asObservable();\n }\n /**\n * Makes _translateCarousel$ Subject become Observable\n * @returns Observable of _translateCarousel$ Subject\n */\n getTranslateState() {\n return this._translateCarousel$.asObservable();\n }\n /**\n * Makes _translatedCarousel$ Subject become Observable\n * @returns Observable of _translatedCarousel$ Subject\n */\n getTranslatedState() {\n return this._translatedCarousel$.asObservable();\n }\n /**\n * Makes _resizeCarousel$ Subject become Observable\n * @returns Observable of _resizeCarousel$ Subject\n */\n getResizeState() {\n return this._resizeCarousel$.asObservable();\n }\n /**\n * Makes _resizedCarousel$ Subject become Observable\n * @returns Observable of _resizedCarousel$ Subject\n */\n getResizedState() {\n return this._resizedCarousel$.asObservable();\n }\n /**\n * Makes _refreshCarousel$ Subject become Observable\n * @returns Observable of _refreshCarousel$ Subject\n */\n getRefreshState() {\n return this._refreshCarousel$.asObservable();\n }\n /**\n * Makes _refreshedCarousel$ Subject become Observable\n * @returns Observable of _refreshedCarousel$ Subject\n */\n getRefreshedState() {\n return this._refreshedCarousel$.asObservable();\n }\n /**\n * Makes _dragCarousel$ Subject become Observable\n * @returns Observable of _dragCarousel$ Subject\n */\n getDragState() {\n return this._dragCarousel$.asObservable();\n }\n /**\n * Makes _draggedCarousel$ Subject become Observable\n * @returns Observable of _draggedCarousel$ Subject\n */\n getDraggedState() {\n return this._draggedCarousel$.asObservable();\n }\n /**\n * Setups custom options expanding default options\n * @param options custom options\n */\n setOptions(options) {\n const configOptions = new OwlCarouselOConfig();\n const checkedOptions = this._validateOptions(options, configOptions);\n this._options = {\n ...configOptions,\n ...checkedOptions\n };\n }\n /**\n * Checks whether user's option are set properly. Cheking is based on typings;\n * @param options options set by user\n * @param configOptions default options\n * @returns checked and modified (if it's needed) user's options\n *\n * Notes:\n * \t- if user set option with wrong type, it'll be written in console\n */\n _validateOptions(options, configOptions) {\n const checkedOptions = {\n ...options\n };\n const mockedTypes = new OwlOptionsMockedTypes();\n const setRightOption = (type, key) => {\n this.logger.log(`options.${key} must be type of ${type}; ${key}=${options[key]} skipped to defaults: ${key}=${configOptions[key]}`);\n return configOptions[key];\n };\n for (const key in checkedOptions) {\n if (checkedOptions.hasOwnProperty(key)) {\n // condition could be shortened but it gets harder for understanding\n if (mockedTypes[key] === 'number') {\n if (this._isNumeric(checkedOptions[key])) {\n checkedOptions[key] = +checkedOptions[key];\n checkedOptions[key] = key === 'items' ? this._validateItems(checkedOptions[key], checkedOptions.skip_validateItems) : checkedOptions[key];\n } else {\n checkedOptions[key] = setRightOption(mockedTypes[key], key);\n }\n } else if (mockedTypes[key] === 'boolean' && typeof checkedOptions[key] !== 'boolean') {\n checkedOptions[key] = setRightOption(mockedTypes[key], key);\n } else if (mockedTypes[key] === 'number|boolean' && !this._isNumberOrBoolean(checkedOptions[key])) {\n checkedOptions[key] = setRightOption(mockedTypes[key], key);\n } else if (mockedTypes[key] === 'number|string' && !this._isNumberOrString(checkedOptions[key])) {\n checkedOptions[key] = setRightOption(mockedTypes[key], key);\n } else if (mockedTypes[key] === 'string|boolean' && !this._isStringOrBoolean(checkedOptions[key])) {\n checkedOptions[key] = setRightOption(mockedTypes[key], key);\n } else if (mockedTypes[key] === 'string[]') {\n if (Array.isArray(checkedOptions[key])) {\n let isString = false;\n checkedOptions[key].forEach(element => {\n isString = typeof element === 'string' ? true : false;\n });\n if (!isString) {\n checkedOptions[key] = setRightOption(mockedTypes[key], key);\n }\n ;\n } else {\n checkedOptions[key] = setRightOption(mockedTypes[key], key);\n }\n }\n }\n }\n return checkedOptions;\n }\n /**\n * Checks the option `items` set by user and if it bigger than number of slides, the function returns number of slides\n * @param items option items set by user\n * @param skip_validateItems option `skip_validateItems` set by user\n * @returns right number of items\n */\n _validateItems(items, skip_validateItems) {\n let result = items;\n if (items > this._items.length) {\n if (skip_validateItems) {\n this.logger.log('The option \\'items\\' in your options is bigger than the number of slides. The navigation got disabled');\n } else {\n result = this._items.length;\n this.logger.log('The option \\'items\\' in your options is bigger than the number of slides. This option is updated to the current number of slides and the navigation got disabled');\n }\n } else {\n if (items === this._items.length && (this.settings.dots || this.settings.nav)) {\n this.logger.log('Option \\'items\\' in your options is equal to the number of slides. So the navigation got disabled');\n }\n }\n return result;\n }\n /**\n * Set current width of carousel\n * @param width width of carousel Window\n */\n setCarouselWidth(width) {\n this._width = width;\n }\n /**\n * Setups the current settings.\n * @todo Remove responsive classes. Why should adaptive designs be brought into IE8?\n * @todo Support for media queries by using `matchMedia` would be nice.\n * @param carouselWidth width of carousel\n * @param slides array of slides\n * @param options options set by user\n */\n setup(carouselWidth, slides, options) {\n this.setCarouselWidth(carouselWidth);\n this.setItems(slides);\n this._defineSlidesData();\n this.setOptions(options);\n this.settings = {\n ...this._options\n };\n this.setOptionsForViewport();\n this._trigger('change', {\n property: {\n name: 'settings',\n value: this.settings\n }\n });\n this.invalidate('settings'); // must be call of this function;\n this._trigger('changed', {\n property: {\n name: 'settings',\n value: this.settings\n }\n });\n }\n /**\n * Set options for current viewport\n */\n setOptionsForViewport() {\n const viewport = this._width,\n overwrites = this._options.responsive;\n let match = -1;\n if (!Object.keys(overwrites).length) {\n return;\n }\n if (!viewport) {\n this.settings.items = 1;\n return;\n }\n for (const key in overwrites) {\n if (overwrites.hasOwnProperty(key)) {\n if (+key <= viewport && +key > match) {\n match = Number(key);\n }\n }\n }\n this.settings = {\n ...this._options,\n ...overwrites[match],\n items: overwrites[match] && overwrites[match].items ? this._validateItems(overwrites[match].items, this._options.skip_validateItems) : this._options.items\n };\n // if (typeof this.settings.stagePadding === 'function') {\n // \tthis.settings.stagePadding = this.settings.stagePadding();\n // }\n delete this.settings.responsive;\n this.owlDOMData.isResponsive = true;\n this.owlDOMData.isMouseDragable = this.settings.mouseDrag;\n this.owlDOMData.isTouchDragable = this.settings.touchDrag;\n const mergers = [];\n this._items.forEach(item => {\n const mergeN = this.settings.merge ? item.dataMerge : 1;\n mergers.push(mergeN);\n });\n this._mergers = mergers;\n this._breakpoint = match;\n this.invalidate('settings');\n }\n /**\n * Initializes the carousel.\n * @param slides array of CarouselSlideDirective\n */\n initialize(slides) {\n this.enter('initializing');\n // this.trigger('initialize');\n this.owlDOMData.rtl = this.settings.rtl;\n if (this._mergers.length) {\n this._mergers = [];\n }\n slides.forEach(item => {\n const mergeN = this.settings.merge ? item.dataMerge : 1;\n this._mergers.push(mergeN);\n });\n this._clones = [];\n this.reset(this._isNumeric(this.settings.startPosition) ? +this.settings.startPosition : 0);\n this.invalidate('items');\n this.refresh();\n this.owlDOMData.isLoaded = true;\n this.owlDOMData.isMouseDragable = this.settings.mouseDrag;\n this.owlDOMData.isTouchDragable = this.settings.touchDrag;\n this.sendChanges();\n this.leave('initializing');\n this._trigger('initialized');\n }\n /**\n * Sends all data needed for View\n */\n sendChanges() {\n this._viewSettingsShipper$.next({\n owlDOMData: this.owlDOMData,\n stageData: this.stageData,\n slidesData: this.slidesData,\n navData: this.navData,\n dotsData: this.dotsData\n });\n }\n /**\n * Updates option logic if necessery\n */\n _optionsLogic() {\n if (this.settings.autoWidth) {\n this.settings.stagePadding = 0;\n this.settings.merge = false;\n }\n }\n /**\n * Updates the view\n */\n update() {\n let i = 0;\n const n = this._pipe.length,\n filter = item => this._invalidated[item],\n cache = {};\n while (i < n) {\n const filteredPipe = this._pipe[i].filter.filter(filter);\n if (this._invalidated.all || filteredPipe.length > 0) {\n this._pipe[i].run(cache);\n }\n i++;\n }\n this.slidesData.forEach(slide => slide.classes = this.setCurSlideClasses(slide));\n this.sendChanges();\n this._invalidated = {};\n if (!this.is('valid')) {\n this.enter('valid');\n }\n }\n /**\n * Gets the width of the view.\n * @param [dimension=Width.Default] The dimension to return\n * @returns The width of the view in pixel.\n */\n width(dimension) {\n dimension = dimension || Width.Default;\n switch (dimension) {\n case Width.Inner:\n case Width.Outer:\n return this._width;\n default:\n return this._width - this.settings.stagePadding * 2 + this.settings.margin;\n }\n }\n /**\n * Refreshes the carousel primarily for adaptive purposes.\n */\n refresh() {\n this.enter('refreshing');\n this._trigger('refresh');\n this._defineSlidesData();\n this.setOptionsForViewport();\n this._optionsLogic();\n // this.$element.addClass(this.options.refreshClass);\n this.update();\n // this.$element.removeClass(this.options.refreshClass);\n this.leave('refreshing');\n this._trigger('refreshed');\n }\n /**\n * Checks window `resize` event.\n * @param curWidth width of .owl-carousel\n */\n onResize(curWidth) {\n if (!this._items.length) {\n return false;\n }\n this.setCarouselWidth(curWidth);\n this.enter('resizing');\n // if (this.trigger('resize').isDefaultPrevented()) {\n // \tthis.leave('resizing');\n // \treturn false;\n // }\n this._trigger('resize');\n this.invalidate('width');\n this.refresh();\n this.leave('resizing');\n this._trigger('resized');\n }\n /**\n * Prepares data for dragging carousel. It starts after firing `touchstart` and `mousedown` events.\n * @todo Horizontal swipe threshold as option\n * @todo #261\n * @param event - The event arguments.\n * @returns stage - object with 'x' and 'y' coordinates of .owl-stage\n */\n prepareDragging(event) {\n let stage = null,\n transformArr;\n // could be 5 commented lines below; However there's stage transform in stageData and in updates after each move of stage\n // stage = getComputedStyle(this.el.nativeElement).transform.replace(/.*\\(|\\)| /g, '').split(',');\n // stage = {\n // x: stage[stage.length === 16 ? 12 : 4],\n // y: stage[stage.length === 16 ? 13 : 5]\n // };\n transformArr = this.stageData.transform.replace(/.*\\(|\\)| |[^,-\\d]\\w|\\)/g, '').split(',');\n stage = {\n x: +transformArr[0],\n y: +transformArr[1]\n };\n if (this.is('animating')) {\n this.invalidate('position');\n }\n if (event.type === 'mousedown') {\n this.owlDOMData.isGrab = true;\n }\n this.speed(0);\n return stage;\n }\n /**\n * Enters into a 'dragging' state\n */\n enterDragging() {\n this.enter('dragging');\n this._trigger('drag');\n }\n /**\n * Defines new coords for .owl-stage while dragging it\n * @todo #261\n * @param event the event arguments.\n * @param dragData initial data got after starting dragging\n * @returns coords or false\n */\n defineNewCoordsDrag(event, dragData) {\n let minimum = null,\n maximum = null,\n pull = null;\n const delta = this.difference(dragData.pointer, this.pointer(event)),\n stage = this.difference(dragData.stage.start, delta);\n if (!this.is('dragging')) {\n return false;\n }\n if (this.settings.loop) {\n minimum = this.coordinates(this.minimum());\n maximum = +this.coordinates(this.maximum() + 1) - minimum;\n stage.x = ((stage.x - minimum) % maximum + maximum) % maximum + minimum;\n } else {\n minimum = this.settings.rtl ? this.coordinates(this.maximum()) : this.coordinates(this.minimum());\n maximum = this.settings.rtl ? this.coordinates(this.minimum()) : this.coordinates(this.maximum());\n pull = this.settings.pullDrag ? -1 * delta.x / 5 : 0;\n stage.x = Math.max(Math.min(stage.x, minimum + pull), maximum + pull);\n }\n return stage;\n }\n /**\n * Finishes dragging of carousel when `touchend` and `mouseup` events fire.\n * @todo #261\n * @todo Threshold for click event\n * @param event the event arguments.\n * @param dragObj the object with dragging settings and states\n * @param clickAttacher function which attaches click handler to slide or its children elements in order to prevent event bubling\n */\n finishDragging(event, dragObj, clickAttacher) {\n const directions = ['right', 'left'],\n delta = this.difference(dragObj.pointer, this.pointer(event)),\n stage = dragObj.stage.current,\n direction = directions[+(this.settings.rtl ? delta.x < +this.settings.rtl : delta.x > +this.settings.rtl)];\n let currentSlideI, current, newCurrent;\n if (delta.x !== 0 && this.is('dragging') || !this.is('valid')) {\n this.speed(+this.settings.dragEndSpeed || this.settings.smartSpeed);\n currentSlideI = this.closest(stage.x, delta.x !== 0 ? direction : dragObj.direction);\n current = this.current();\n newCurrent = this.current(currentSlideI === -1 ? undefined : currentSlideI);\n if (current !== newCurrent) {\n this.invalidate('position');\n this.update();\n }\n dragObj.direction = direction;\n if (Math.abs(delta.x) > 3 || new Date().getTime() - dragObj.time > 300) {\n clickAttacher();\n }\n }\n if (!this.is('dragging')) {\n return;\n }\n this.leave('dragging');\n this._trigger('dragged');\n }\n /**\n * Gets absolute position of the closest item for a coordinate.\n * @todo Setting `freeDrag` makes `closest` not reusable. See #165.\n * @param coordinate The coordinate in pixel.\n * @param direction The direction to check for the closest item. Ether `left` or `right`.\n * @returns The absolute position of the closest item.\n */\n closest(coordinate, direction) {\n const pull = 30,\n width = this.width();\n let coordinates = this.coordinates(),\n position = -1;\n if (this.settings.center) {\n coordinates = coordinates.map(item => {\n if (item === 0) {\n item += 0.000001;\n }\n return item;\n });\n }\n // option 'freeDrag' doesn't have realization and using it here creates problem:\n // variable 'position' stays unchanged (it equals -1 at the begging) and thus method returns -1\n // Returning value is consumed by method current(), which taking -1 as argument calculates the index of new current slide\n // In case of having 5 slides ans 'loop=false; calling 'current(-1)' sets props '_current' as 4. Just last slide remains visible instead of 3 last slides.\n // if (!this.settings.freeDrag) {\n // check closest item\n for (let i = 0; i < coordinates.length; i++) {\n if (direction === 'left' && coordinate > coordinates[i] - pull && coordinate < coordinates[i] + pull) {\n position = i;\n // on a right pull, check on previous index\n // to do so, subtract width from value and set position = index + 1\n } else if (direction === 'right' && coordinate > coordinates[i] - width - pull && coordinate < coordinates[i] - width + pull) {\n position = i + 1;\n } else if (this._op(coordinate, '<', coordinates[i]) && this._op(coordinate, '>', coordinates[i + 1] || coordinates[i] - width)) {\n position = direction === 'left' ? i + 1 : i;\n } else if (direction === null && coordinate > coordinates[i] - pull && coordinate < coordinates[i] + pull) {\n position = i;\n }\n if (position !== -1) {\n break;\n }\n ;\n }\n // }\n if (!this.settings.loop) {\n // non loop boundries\n if (this._op(coordinate, '>', coordinates[this.minimum()])) {\n position = coordinate = this.minimum();\n } else if (this._op(coordinate, '<', coordinates[this.maximum()])) {\n position = coordinate = this.maximum();\n }\n }\n return position;\n }\n /**\n * Animates the stage.\n * @todo #270\n * @param coordinate The coordinate in pixels.\n */\n animate(coordinate) {\n const animate = this.speed() > 0;\n if (this.is('animating')) {\n this.onTransitionEnd();\n }\n if (animate) {\n this.enter('animating');\n this._trigger('translate');\n }\n this.stageData.transform = 'translate3d(' + coordinate + 'px,0px,0px)';\n this.stageData.transition = this.speed() / 1000 + 's' + (this.settings.slideTransition ? ' ' + this.settings.slideTransition : '');\n // also there was transition by means of JQuery.animate or css-changing property left\n }\n /**\n * Checks whether the carousel is in a specific state or not.\n * @param state The state to check.\n * @returns The flag which indicates if the carousel is busy.\n */\n is(state) {\n return this._states.current[state] && this._states.current[state] > 0;\n }\n /**\n * Sets the absolute position of the current item.\n * @param position The new absolute position or nothing to leave it unchanged.\n * @returns The absolute position of the current item.\n */\n current(position) {\n if (position === undefined) {\n return this._current;\n }\n if (this._items.length === 0) {\n return undefined;\n }\n position = this.normalize(position);\n if (this._current !== position) {\n const event = this._trigger('change', {\n property: {\n name: 'position',\n value: position\n }\n });\n // if (event.data !== undefined) {\n // \tposition = this.normalize(event.data);\n // }\n this._current = position;\n this.invalidate('position');\n this._trigger('changed', {\n property: {\n name: 'position',\n value: this._current\n }\n });\n }\n return this._current;\n }\n /**\n * Invalidates the given part of the update routine.\n * @param part The part to invalidate.\n * @returns The invalidated parts.\n */\n invalidate(part) {\n if (typeof part === 'string') {\n this._invalidated[part] = true;\n if (this.is('valid')) {\n this.leave('valid');\n }\n }\n return Object.keys(this._invalidated);\n }\n /**\n * Resets the absolute position of the current item.\n * @param position the absolute position of the new item.\n */\n reset(position) {\n position = this.normalize(position);\n if (position === undefined) {\n return;\n }\n this._speed = 0;\n this._current = position;\n this._suppress(['translate', 'translated']);\n this.animate(this.coordinates(position));\n this._release(['translate', 'translated']);\n }\n /**\n * Normalizes an absolute or a relative position of an item.\n * @param position The absolute or relative position to normalize.\n * @param relative Whether the given position is relative or not.\n * @returns The normalized position.\n */\n normalize(position, relative) {\n const n = this._items.length,\n m = relative ? 0 : this._clones.length;\n if (!this._isNumeric(position) || n < 1) {\n position = undefined;\n } else if (position < 0 || position >= n + m) {\n position = ((position - m / 2) % n + n) % n + m / 2;\n }\n return position;\n }\n /**\n * Converts an absolute position of an item into a relative one.\n * @param position The absolute position to convert.\n * @returns The converted position.\n */\n relative(position) {\n position -= this._clones.length / 2;\n return this.normalize(position, true);\n }\n /**\n * Gets the maximum position for the current item.\n * @param relative Whether to return an absolute position or a relative position.\n * @returns number of maximum position\n */\n maximum(relative = false) {\n const settings = this.settings;\n let maximum = this._coordinates.length,\n iterator,\n reciprocalItemsWidth,\n elementWidth;\n if (settings.loop) {\n maximum = this._clones.length / 2 + this._items.length - 1;\n } else if (settings.autoWidth || settings.merge) {\n iterator = this._items.length;\n reciprocalItemsWidth = this.slidesData[--iterator].width;\n elementWidth = this._width;\n while (iterator-- > 0) {\n // it could be use this._items instead of this.slidesData;\n reciprocalItemsWidth += +this.slidesData[iterator].width + this.settings.margin;\n if (reciprocalItemsWidth > elementWidth) {\n break;\n }\n }\n maximum = iterator + 1;\n } else if (settings.center) {\n maximum = this._items.length - 1;\n } else {\n maximum = this._items.length - settings.items;\n }\n if (relative) {\n maximum -= this._clones.length / 2;\n }\n return Math.max(maximum, 0);\n }\n /**\n * Gets the minimum position for the current item.\n * @param relative Whether to return an absolute position or a relative position.\n * @returns number of minimum position\n */\n minimum(relative = false) {\n return relative ? 0 : this._clones.length / 2;\n }\n /**\n * Gets an item at the specified relative position.\n * @param position The relative position of the item.\n * @returns The item at the given position or all items if no position was given.\n */\n items(position) {\n if (position === undefined) {\n return this._items.slice();\n }\n position = this.normalize(position, true);\n return [this._items[position]];\n }\n /**\n * Gets an item at the specified relative position.\n * @param position The relative position of the item.\n * @returns The item at the given position or all items if no position was given.\n */\n mergers(position) {\n if (position === undefined) {\n return this._mergers.slice();\n }\n position = this.normalize(position, true);\n return this._mergers[position];\n }\n /**\n * Gets the absolute positions of clones for an item.\n * @param position The relative position of the item.\n * @returns The absolute positions of clones for the item or all if no position was given.\n */\n clones(position) {\n const odd = this._clones.length / 2,\n even = odd + this._items.length,\n map = index => index % 2 === 0 ? even + index / 2 : odd - (index + 1) / 2;\n if (position === undefined) {\n return this._clones.map((v, i) => map(i));\n }\n return this._clones.map((v, i) => v === position ? map(i) : null).filter(item => item);\n }\n /**\n * Sets the current animation speed.\n * @param speed The animation speed in milliseconds or nothing to leave it unchanged.\n * @returns The current animation speed in milliseconds.\n */\n speed(speed) {\n if (speed !== undefined) {\n this._speed = speed;\n }\n return this._speed;\n }\n /**\n * Gets the coordinate of an item.\n * @todo The name of this method is missleanding.\n * @param position The absolute position of the item within `minimum()` and `maximum()`.\n * @returns The coordinate of the item in pixel or all coordinates.\n */\n coordinates(position) {\n let multiplier = 1,\n newPosition = position - 1,\n coordinate,\n result;\n if (position === undefined) {\n result = this._coordinates.map((item, index) => {\n return this.coordinates(index);\n });\n return result;\n }\n if (this.settings.center) {\n if (this.settings.rtl) {\n multiplier = -1;\n newPosition = position + 1;\n }\n coordinate = this._coordinates[position];\n coordinate += (this.width() - coordinate + (this._coordinates[newPosition] || 0)) / 2 * multiplier;\n } else {\n coordinate = this._coordinates[newPosition] || 0;\n }\n coordinate = Math.ceil(coordinate);\n return coordinate;\n }\n /**\n * Calculates the speed for a translation.\n * @param from The absolute position of the start item.\n * @param to The absolute position of the target item.\n * @param factor [factor=undefined] - The time factor in milliseconds.\n * @returns The time in milliseconds for the translation.\n */\n _duration(from, to, factor) {\n if (factor === 0) {\n return 0;\n }\n return Math.min(Math.max(Math.abs(to - from), 1), 6) * Math.abs(+factor || this.settings.smartSpeed);\n }\n /**\n * Slides to the specified item.\n * @param position The position of the item.\n * @param speed The time in milliseconds for the transition.\n */\n to(position, speed) {\n let current = this.current(),\n revert = null,\n distance = position - this.relative(current),\n maximum = this.maximum(),\n delayForLoop = 0;\n const direction = +(distance > 0) - +(distance < 0),\n items = this._items.length,\n minimum = this.minimum();\n if (this.settings.loop) {\n if (!this.settings.rewind && Math.abs(distance) > items / 2) {\n distance += direction * -1 * items;\n }\n position = current + distance;\n revert = ((position - minimum) % items + items) % items + minimum;\n if (revert !== position && revert - distance <= maximum && revert - distance > 0) {\n current = revert - distance;\n position = revert;\n delayForLoop = 30;\n this.reset(current);\n this.sendChanges();\n }\n } else if (this.settings.rewind) {\n maximum += 1;\n position = (position % maximum + maximum) % maximum;\n } else {\n position = Math.max(minimum, Math.min(maximum, position));\n }\n setTimeout(() => {\n this.speed(this._duration(current, position, speed));\n this.current(position);\n this.update();\n }, delayForLoop);\n }\n /**\n * Slides to the next item.\n * @param speed The time in milliseconds for the transition.\n */\n next(speed) {\n speed = speed || false;\n this.to(this.relative(this.current()) + 1, speed);\n }\n /**\n * Slides to the previous item.\n * @param speed The time in milliseconds for the transition.\n */\n prev(speed) {\n speed = speed || false;\n this.to(this.relative(this.current()) - 1, speed);\n }\n /**\n * Handles the end of an animation.\n * @param event - The event arguments.\n */\n onTransitionEnd(event) {\n // if css2 animation then event object is undefined\n if (event !== undefined) {\n // event.stopPropagation();\n // // Catch only owl-stage transitionEnd event\n // if ((event.target || event.srcElement || event.originalTarget) !== this.$stage.get(0)\t) {\n // \treturn false;\n // }\n return false;\n }\n this.leave('animating');\n this._trigger('translated');\n }\n /**\n * Gets viewport width.\n * @returns - The width in pixel.\n */\n _viewport() {\n let width;\n if (this._width) {\n width = this._width;\n } else {\n this.logger.log('Can not detect viewport width.');\n }\n return width;\n }\n /**\n * Sets _items\n * @param content The list of slides put into CarouselSlideDirectives.\n */\n setItems(content) {\n this._items = content;\n }\n /**\n * Sets slidesData using this._items\n */\n _defineSlidesData() {\n // Maybe creating and using loadMap would be better in LazyLoadService.\n // Hovewer in that case when 'resize' event fires, prop 'load' of all slides will get 'false' and such state of prop will be seen by View during its updating. Accordingly the code will remove slides's content from DOM even if it was loaded before.\n // Thus it would be needed to add that content into DOM again.\n // In order to avoid additional removing/adding loaded slides's content we use loadMap here and set restore state of prop 'load' before the View will get it.\n let loadMap;\n if (this.slidesData && this.slidesData.length) {\n loadMap = new Map();\n this.slidesData.forEach(item => {\n if (item.load) {\n loadMap.set(item.id, item.load);\n }\n });\n }\n this.slidesData = this._items.map(slide => {\n return {\n id: `${slide.id}`,\n isActive: false,\n tplRef: slide.tplRef,\n dataMerge: slide.dataMerge,\n width: 0,\n isCloned: false,\n load: loadMap ? loadMap.get(slide.id) : false,\n hashFragment: slide.dataHash\n };\n });\n }\n /**\n * Sets current classes for slide\n * @param slide Slide of carousel\n * @returns object with names of css-classes which are keys and true/false values\n */\n setCurSlideClasses(slide) {\n // CSS classes: added/removed per current state of component properties\n const currentClasses = {\n 'active': slide.isActive,\n 'center': slide.isCentered,\n 'cloned': slide.isCloned,\n 'animated': slide.isAnimated,\n 'owl-animated-in': slide.isDefAnimatedIn,\n 'owl-animated-out': slide.isDefAnimatedOut\n };\n if (this.settings.animateIn) {\n currentClasses[this.settings.animateIn] = slide.isCustomAnimatedIn;\n }\n if (this.settings.animateOut) {\n currentClasses[this.settings.animateOut] = slide.isCustomAnimatedOut;\n }\n return currentClasses;\n }\n /**\n * Operators to calculate right-to-left and left-to-right.\n * @param a - The left side operand.\n * @param o - The operator.\n * @param b - The right side operand.\n * @returns true/false meaning right-to-left or left-to-right\n */\n _op(a, o, b) {\n const rtl = this.settings.rtl;\n switch (o) {\n case '<':\n return rtl ? a > b : a < b;\n case '>':\n return rtl ? a < b : a > b;\n case '>=':\n return rtl ? a <= b : a >= b;\n case '<=':\n return rtl ? a >= b : a <= b;\n default:\n break;\n }\n }\n /**\n * Triggers a public event.\n * @todo Remove `status`, `relatedTarget` should be used instead.\n * @param name The event name.\n * @param data The event data.\n * @param namespace The event namespace.\n * @param state The state which is associated with the event.\n * @param enter Indicates if the call enters the specified state or not.\n */\n _trigger(name, data, namespace, state, enter) {\n switch (name) {\n case 'initialized':\n this._initializedCarousel$.next(name);\n break;\n case 'change':\n this._changeSettingsCarousel$.next(data);\n break;\n case 'changed':\n this._changedSettingsCarousel$.next(data);\n break;\n case 'drag':\n this._dragCarousel$.next(name);\n break;\n case 'dragged':\n this._draggedCarousel$.next(name);\n break;\n case 'resize':\n this._resizeCarousel$.next(name);\n break;\n case 'resized':\n this._resizedCarousel$.next(name);\n break;\n case 'refresh':\n this._refreshCarousel$.next(name);\n break;\n case 'refreshed':\n this._refreshedCarousel$.next(name);\n break;\n case 'translate':\n this._translateCarousel$.next(name);\n break;\n case 'translated':\n this._translatedCarousel$.next(name);\n break;\n default:\n break;\n }\n }\n /**\n * Enters a state.\n * @param name - The state name.\n */\n enter(name) {\n [name].concat(this._states.tags[name] || []).forEach(stateName => {\n if (this._states.current[stateName] === undefined) {\n this._states.current[stateName] = 0;\n }\n this._states.current[stateName]++;\n });\n }\n /**\n * Leaves a state.\n * @param name - The state name.\n */\n leave(name) {\n [name].concat(this._states.tags[name] || []).forEach(stateName => {\n if (this._states.current[stateName] === 0 || !!this._states.current[stateName]) {\n this._states.current[stateName]--;\n }\n });\n }\n /**\n * Registers an event or state.\n * @param object - The event or state to register.\n */\n register(object) {\n if (object.type === Type.State) {\n if (!this._states.tags[object.name]) {\n this._states.tags[object.name] = object.tags;\n } else {\n this._states.tags[object.name] = this._states.tags[object.name].concat(object.tags);\n }\n this._states.tags[object.name] = this._states.tags[object.name].filter((tag, i) => {\n return this._states.tags[object.name].indexOf(tag) === i;\n });\n }\n }\n /**\n * Suppresses events.\n * @param events The events to suppress.\n */\n _suppress(events) {\n events.forEach(event => {\n this._supress[event] = true;\n });\n }\n /**\n * Releases suppressed events.\n * @param events The events to release.\n */\n _release(events) {\n events.forEach(event => {\n delete this._supress[event];\n });\n }\n /**\n * Gets unified pointer coordinates from event.\n * @todo #261\n * @param event The `mousedown` or `touchstart` event.\n * @returns Object Coords which contains `x` and `y` coordinates of current pointer position.\n */\n pointer(event) {\n const result = {\n x: null,\n y: null\n };\n event = event.originalEvent || event || window.event;\n event = event.touches && event.touches.length ? event.touches[0] : event.changedTouches && event.changedTouches.length ? event.changedTouches[0] : event;\n if (event.pageX) {\n result.x = event.pageX;\n result.y = event.pageY;\n } else {\n result.x = event.clientX;\n result.y = event.clientY;\n }\n return result;\n }\n /**\n * Determines if the input is a Number or something that can be coerced to a Number\n * @param number The input to be tested\n * @returns An indication if the input is a Number or can be coerced to a Number\n */\n _isNumeric(number) {\n return !isNaN(parseFloat(number));\n }\n /**\n * Determines whether value is number or boolean type\n * @param value The input to be tested\n * @returns An indication if the input is a Number or can be coerced to a Number, or Boolean\n */\n _isNumberOrBoolean(value) {\n return this._isNumeric(value) || typeof value === 'boolean';\n }\n /**\n * Determines whether value is number or string type\n * @param value The input to be tested\n * @returns An indication if the input is a Number or can be coerced to a Number, or String\n */\n _isNumberOrString(value) {\n return this._isNumeric(value) || typeof value === 'string';\n }\n /**\n * Determines whether value is number or string type\n * @param value The input to be tested\n * @returns An indication if the input is a Number or can be coerced to a Number, or String\n */\n _isStringOrBoolean(value) {\n return typeof value === 'string' || typeof value === 'boolean';\n }\n /**\n * Gets the difference of two vectors.\n * @todo #261\n * @param first The first vector.\n * @param second The second vector.\n * @returns The difference.\n */\n difference(first, second) {\n if (null === first || null === second) {\n return {\n x: 0,\n y: 0\n };\n }\n return {\n x: first.x - second.x,\n y: first.y - second.y\n };\n }\n static ɵfac = function CarouselService_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CarouselService)(i0.ɵɵinject(OwlLogger));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: CarouselService,\n factory: CarouselService.ɵfac\n });\n }\n return CarouselService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NavigationService = /*#__PURE__*/(() => {\n class NavigationService {\n carouselService;\n /**\n * Subscrioption to merge Observable from CarouselService\n */\n navSubscription;\n /**\n * Indicates whether the plugin is initialized or not.\n */\n _initialized = false;\n /**\n * The current paging indexes.\n */\n _pages = [];\n /**\n * Data for navigation elements of the user interface.\n */\n _navData = {\n disabled: false,\n prev: {\n disabled: false,\n htmlText: ''\n },\n next: {\n disabled: false,\n htmlText: ''\n }\n };\n /**\n * Data for dot elements of the user interface.\n */\n _dotsData = {\n disabled: false,\n dots: []\n };\n constructor(carouselService) {\n this.carouselService = carouselService;\n this.spyDataStreams();\n }\n ngOnDestroy() {\n this.navSubscription.unsubscribe();\n }\n /**\n * Defines Observables which service must observe\n */\n spyDataStreams() {\n const initializedCarousel$ = this.carouselService.getInitializedState().pipe(tap(state => {\n this.initialize();\n this._updateNavPages();\n this.draw();\n this.update();\n this.carouselService.sendChanges();\n }));\n // mostly changes in carouselService and carousel at all causes carouselService.to(). It moves stage right-left by its code and calling needed functions\n // Thus this method by calling carouselService.current(position) notifies about changes\n const changedSettings$ = this.carouselService.getChangedState().pipe(filter(data => data.property.name === 'position'), tap(data => {\n this.update();\n // should be the call of the function written at the end of comment\n // but the method carouselServive.to() has setTimeout(f, 0) which contains carouselServive.update() which calls sendChanges() method.\n // carouselService.navData and carouselService.dotsData update earlier than carouselServive.update() gets called\n // updates of carouselService.navData and carouselService.dotsData are being happening withing carouselService.current(position) method which calls next() of _changedSettingsCarousel$\n // carouselService.current(position) is being calling earlier than carouselServive.update();\n // this.carouselService.sendChanges();\n }));\n const refreshedCarousel$ = this.carouselService.getRefreshedState().pipe(tap(() => {\n this._updateNavPages();\n this.draw();\n this.update();\n this.carouselService.sendChanges();\n }));\n const navMerge$ = merge(initializedCarousel$, changedSettings$, refreshedCarousel$);\n this.navSubscription = navMerge$.subscribe(() => {});\n }\n /**\n * Initializes the layout of the plugin and extends the carousel.\n */\n initialize() {\n this._navData.disabled = true;\n this._navData.prev.htmlText = this.carouselService.settings.navText[0];\n this._navData.next.htmlText = this.carouselService.settings.navText[1];\n this._dotsData.disabled = true;\n this.carouselService.navData = this._navData;\n this.carouselService.dotsData = this._dotsData;\n }\n /**\n * Calculates internal states and updates prop _pages\n */\n _updateNavPages() {\n let i, j, k;\n const lower = this.carouselService.clones().length / 2,\n upper = lower + this.carouselService.items().length,\n maximum = this.carouselService.maximum(true),\n pages = [],\n settings = this.carouselService.settings;\n let size = settings.center || settings.autoWidth || settings.dotsData ? 1 : Math.floor(Number(settings.dotsEach)) || Math.floor(settings.items);\n size = +size;\n if (settings.slideBy !== 'page') {\n settings.slideBy = Math.min(+settings.slideBy, settings.items);\n }\n if (settings.dots || settings.slideBy === 'page') {\n for (i = lower, j = 0, k = 0; i < upper; i++) {\n if (j >= size || j === 0) {\n pages.push({\n start: Math.min(maximum, i - lower),\n end: i - lower + size - 1\n });\n if (Math.min(maximum, i - lower) === maximum) {\n break;\n }\n j = 0, ++k;\n }\n j += this.carouselService.mergers(this.carouselService.relative(i));\n }\n }\n this._pages = pages;\n }\n /**\n * Draws the user interface.\n * @todo The option `dotsData` wont work.\n */\n draw() {\n let difference;\n const settings = this.carouselService.settings,\n items = this.carouselService.items(),\n disabled = items.length <= settings.items;\n this._navData.disabled = !settings.nav || disabled;\n this._dotsData.disabled = !settings.dots || disabled;\n if (settings.dots) {\n difference = this._pages.length - this._dotsData.dots.length;\n if (settings.dotsData && difference !== 0) {\n this._dotsData.dots = [];\n items.forEach(item => {\n this._dotsData.dots.push({\n active: false,\n id: `dot-${item.id}`,\n innerContent: item.dotContent,\n showInnerContent: true\n });\n });\n } else if (difference > 0) {\n const startI = this._dotsData.dots.length > 0 ? this._dotsData.dots.length : 0;\n for (let i = 0; i < difference; i++) {\n this._dotsData.dots.push({\n active: false,\n id: `dot-${i + startI}`,\n innerContent: '',\n showInnerContent: false\n });\n }\n } else if (difference < 0) {\n this._dotsData.dots.splice(difference, Math.abs(difference));\n }\n }\n this.carouselService.navData = this._navData;\n this.carouselService.dotsData = this._dotsData;\n }\n /**\n * Updates navigation buttons's and dots's states\n */\n update() {\n this._updateNavButtons();\n this._updateDots();\n }\n /**\n * Changes state of nav buttons (disabled, enabled)\n */\n _updateNavButtons() {\n const settings = this.carouselService.settings,\n loop = settings.loop || settings.rewind,\n index = this.carouselService.relative(this.carouselService.current());\n if (settings.nav) {\n this._navData.prev.disabled = !loop && index <= this.carouselService.minimum(true);\n this._navData.next.disabled = !loop && index >= this.carouselService.maximum(true);\n }\n this.carouselService.navData = this._navData;\n }\n /**\n * Changes active dot if page becomes changed\n */\n _updateDots() {\n let curActiveDotI;\n if (!this.carouselService.settings.dots) {\n return;\n }\n this._dotsData.dots.forEach(item => {\n if (item.active === true) {\n item.active = false;\n }\n });\n curActiveDotI = this._current();\n if (this._dotsData.dots.length) {\n this._dotsData.dots[curActiveDotI].active = true;\n }\n this.carouselService.dotsData = this._dotsData;\n }\n /**\n * Gets the current page position of the carousel.\n * @returns the current page position of the carousel\n */\n _current() {\n const current = this.carouselService.relative(this.carouselService.current());\n let finalCurrent;\n const pages = this._pages.filter((page, index) => {\n return page.start <= current && page.end >= current;\n }).pop();\n finalCurrent = this._pages.findIndex(page => {\n return page.start === pages.start && page.end === pages.end;\n });\n return finalCurrent;\n }\n /**\n * Gets the current succesor/predecessor position.\n * @param sussessor position of slide\n * @returns the current succesor/predecessor position\n */\n _getPosition(successor) {\n let position, length;\n const settings = this.carouselService.settings;\n if (settings.slideBy === 'page') {\n position = this._current();\n length = this._pages.length;\n successor ? ++position : --position;\n position = this._pages[(position % length + length) % length].start;\n } else {\n position = this.carouselService.relative(this.carouselService.current());\n length = this.carouselService.items().length;\n successor ? position += +settings.slideBy : position -= +settings.slideBy;\n }\n return position;\n }\n /**\n * Slides to the next item or page.\n * @param speed The time in milliseconds for the transition.\n */\n next(speed) {\n this.carouselService.to(this._getPosition(true), speed);\n }\n /**\n * Slides to the previous item or page.\n * @param speed The time in milliseconds for the transition.\n */\n prev(speed) {\n this.carouselService.to(this._getPosition(false), speed);\n }\n /**\n * Slides to the specified item or page.\n * @param position - The position of the item or page.\n * @param speed - The time in milliseconds for the transition.\n * @param standard - Whether to use the standard behaviour or not. Default meaning false\n */\n to(position, speed, standard) {\n let length;\n if (!standard && this._pages.length) {\n length = this._pages.length;\n this.carouselService.to(this._pages[(position % length + length) % length].start, speed);\n } else {\n this.carouselService.to(position, speed);\n }\n }\n /**\n * Moves carousel after user's clicking on any dots\n */\n moveByDot(dotId) {\n const index = this._dotsData.dots.findIndex(dot => dotId === dot.id);\n this.to(index, this.carouselService.settings.dotsSpeed);\n }\n /**\n * rewinds carousel to slide with needed id\n * @param id id of slide\n */\n toSlideById(id) {\n const position = this.carouselService.slidesData.findIndex(slide => slide.id === id && slide.isCloned === false);\n if (position === -1 || position === this.carouselService.current()) {\n return;\n }\n this.carouselService.to(this.carouselService.relative(position), false);\n }\n static ɵfac = function NavigationService_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NavigationService)(i0.ɵɵinject(CarouselService));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NavigationService,\n factory: NavigationService.ɵfac\n });\n }\n return NavigationService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// import { Injectable } from '@angular/core';\n// function _window(): any {\n// // return the global native browser window object\n// return window;\n// }\n// @Injectable()\n// export class WindowRefService {\n// get nativeWindow(): any {\n// return _window();\n// }\n// }\n/**\n * Create a new injection token for injecting the window into a component.\n */\nconst WINDOW = new InjectionToken('WindowToken');\n/**\n * Define abstract class for obtaining reference to the global window object.\n */\nclass WindowRef {\n get nativeWindow() {\n throw new Error('Not implemented.');\n }\n}\n/**\n * Define class that implements the abstract class and returns the native window object.\n */\nlet BrowserWindowRef = /*#__PURE__*/(() => {\n class BrowserWindowRef extends WindowRef {\n constructor() {\n super();\n }\n /**\n * @returns window object\n */\n get nativeWindow() {\n return window;\n }\n static ɵfac = function BrowserWindowRef_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || BrowserWindowRef)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: BrowserWindowRef,\n factory: BrowserWindowRef.ɵfac\n });\n }\n return BrowserWindowRef;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Create an factory function that returns the native window object.\n * @param browserWindowRef Native window object\n * @param platformId id of platform\n * @returns type of platform of empty object\n */\nfunction windowFactory(browserWindowRef, platformId) {\n if (isPlatformBrowser(platformId)) {\n return browserWindowRef.nativeWindow;\n }\n const obj = {\n setTimeout: (func, time) => {},\n clearTimeout: a => {}\n };\n return obj;\n}\n/**\n * Create a injectable provider for the WindowRef token that uses the BrowserWindowRef class.\n */\nconst browserWindowProvider = {\n provide: WindowRef,\n useClass: BrowserWindowRef\n};\n/**\n * Create an injectable provider that uses the windowFactory function for returning the native window object.\n */\nconst windowProvider = {\n provide: WINDOW,\n useFactory: windowFactory,\n deps: [WindowRef, PLATFORM_ID]\n};\n/**\n * Create an array of providers.\n */\nconst WINDOW_PROVIDERS = [browserWindowProvider, windowProvider];\n\n/**\n * Create a new injection token for injecting the Document into a component.\n */\nconst DOCUMENT = new InjectionToken('DocumentToken');\n/**\n * Define abstract class for obtaining reference to the global Document object.\n */\nclass DocumentRef {\n get nativeDocument() {\n throw new Error('Not implemented.');\n }\n}\n/**\n * Define class that implements the abstract class and returns the native Document object.\n */\nlet BrowserDocumentRef = /*#__PURE__*/(() => {\n class BrowserDocumentRef extends DocumentRef {\n constructor() {\n super();\n }\n /**\n * @returns Document object\n */\n get nativeDocument() {\n return document;\n }\n static ɵfac = function BrowserDocumentRef_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || BrowserDocumentRef)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: BrowserDocumentRef,\n factory: BrowserDocumentRef.ɵfac\n });\n }\n return BrowserDocumentRef;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Create an factory function that returns the native Document object.\n * @param browserDocumentRef Native Document object\n * @param platformId id of platform\n * @returns type of platform of empty object\n */\nfunction documentFactory(browserDocumentRef, platformId) {\n if (isPlatformBrowser(platformId)) {\n return browserDocumentRef.nativeDocument;\n }\n const doc = {\n hidden: false,\n visibilityState: 'visible'\n };\n return doc;\n}\n/**\n * Create a injectable provider for the DocumentRef token that uses the BrowserDocumentRef class.\n */\nconst browserDocumentProvider = {\n provide: DocumentRef,\n useClass: BrowserDocumentRef\n};\n/**\n * Create an injectable provider that uses the DocumentFactory function for returning the native Document object.\n */\nconst documentProvider = {\n provide: DOCUMENT,\n useFactory: documentFactory,\n deps: [DocumentRef, PLATFORM_ID]\n};\n/**\n * Create an array of providers.\n */\nconst DOCUMENT_PROVIDERS = [browserDocumentProvider, documentProvider];\nlet AutoplayService = /*#__PURE__*/(() => {\n class AutoplayService {\n carouselService;\n ngZone;\n /**\n * Subscrioption to merge Observables from CarouselService\n */\n autoplaySubscription;\n /**\n * The autoplay timeout.\n */\n _timeout = null;\n /**\n * Indicates whenever the autoplay is paused.\n */\n _paused = false;\n /**\n * Shows whether the code (the plugin) changed the option 'AutoplayTimeout' for own needs\n */\n _isArtificialAutoplayTimeout;\n /**\n * Shows whether the autoplay is paused for unlimited time by the developer.\n * Use to prevent autoplaying in case of firing `mouseleave` by adding layers to `` like `mat-menu` does\n */\n _isAutoplayStopped = false;\n get isAutoplayStopped() {\n return this._isAutoplayStopped;\n }\n set isAutoplayStopped(value) {\n this._isAutoplayStopped = value;\n }\n winRef;\n docRef;\n constructor(carouselService, winRef, docRef, ngZone) {\n this.carouselService = carouselService;\n this.ngZone = ngZone;\n this.winRef = winRef;\n this.docRef = docRef;\n this.spyDataStreams();\n }\n ngOnDestroy() {\n this.autoplaySubscription.unsubscribe();\n }\n /**\n * Defines Observables which service must observe\n */\n spyDataStreams() {\n const initializedCarousel$ = this.carouselService.getInitializedState().pipe(tap(() => {\n if (this.carouselService.settings.autoplay) {\n this.play();\n }\n }));\n const changedSettings$ = this.carouselService.getChangedState().pipe(tap(data => {\n this._handleChangeObservable(data);\n }));\n const resized$ = this.carouselService.getResizedState().pipe(tap(() => {\n if (this.carouselService.settings.autoplay && !this._isAutoplayStopped) {\n this.play();\n } else {\n this.stop();\n }\n }));\n // original Autoplay Plugin has listeners on play.owl.core and stop.owl.core events.\n // They are triggered by Video Plugin\n const autoplayMerge$ = merge(initializedCarousel$, changedSettings$, resized$);\n this.autoplaySubscription = autoplayMerge$.subscribe(() => {});\n }\n /**\n * Starts the autoplay.\n * @param timeout The interval before the next animation starts.\n * @param speed The animation speed for the animations.\n */\n play(timeout, speed) {\n if (this._paused) {\n this._paused = false;\n this._setAutoPlayInterval(this.carouselService.settings.autoplayMouseleaveTimeout);\n }\n if (this.carouselService.is('rotating')) {\n return;\n }\n this.carouselService.enter('rotating');\n this._setAutoPlayInterval();\n }\n /**\n * Gets a new timeout\n * @param timeout - The interval before the next animation starts.\n * @param speed - The animation speed for the animations.\n * @return\n */\n _getNextTimeout(timeout, speed) {\n if (this._timeout) {\n this.winRef.clearTimeout(this._timeout);\n }\n this._isArtificialAutoplayTimeout = timeout ? true : false;\n return this.ngZone.runOutsideAngular(() => {\n return this.winRef.setTimeout(() => {\n this.ngZone.run(() => {\n if (this._paused || this.carouselService.is('busy') || this.carouselService.is('interacting') || this.docRef.hidden) {\n return;\n }\n this.carouselService.next(speed || this.carouselService.settings.autoplaySpeed);\n });\n }, timeout || this.carouselService.settings.autoplayTimeout);\n });\n }\n /**\n * Sets autoplay in motion.\n */\n _setAutoPlayInterval(timeout) {\n this._timeout = this._getNextTimeout(timeout);\n }\n /**\n * Stops the autoplay.\n */\n stop() {\n if (!this.carouselService.is('rotating')) {\n return;\n }\n this._paused = true;\n this.winRef.clearTimeout(this._timeout);\n this.carouselService.leave('rotating');\n }\n /**\n * Stops the autoplay.\n */\n pause() {\n if (!this.carouselService.is('rotating')) {\n return;\n }\n this._paused = true;\n }\n /**\n * Manages by autoplaying according to data passed by _changedSettingsCarousel$ Obsarvable\n * @param data object with current position of carousel and type of change\n */\n _handleChangeObservable(data) {\n if (data.property.name === 'settings') {\n if (this.carouselService.settings.autoplay) {\n this.play();\n } else {\n this.stop();\n }\n } else if (data.property.name === 'position') {\n //console.log('play?', e);\n if (this.carouselService.settings.autoplay) {\n this._setAutoPlayInterval();\n }\n }\n }\n /**\n * Starts autoplaying of the carousel in the case when user leaves the carousel before it starts translateing (moving)\n */\n _playAfterTranslated() {\n of('translated').pipe(switchMap(data => this.carouselService.getTranslatedState()), first(), filter(() => this._isArtificialAutoplayTimeout), tap(() => this._setAutoPlayInterval())).subscribe(() => {});\n }\n /**\n * Starts pausing\n */\n startPausing() {\n if (this.carouselService.settings.autoplayHoverPause && this.carouselService.is('rotating')) {\n this.pause();\n }\n }\n /**\n * Starts playing after mouse leaves carousel\n */\n startPlayingMouseLeave() {\n if (this.carouselService.settings.autoplayHoverPause && this.carouselService.is('rotating')) {\n this.play();\n this._playAfterTranslated();\n }\n }\n /**\n * Starts playing after touch ends\n */\n startPlayingTouchEnd() {\n if (this.carouselService.settings.autoplayHoverPause && this.carouselService.is('rotating')) {\n this.play();\n this._playAfterTranslated();\n }\n }\n static ɵfac = function AutoplayService_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || AutoplayService)(i0.ɵɵinject(CarouselService), i0.ɵɵinject(WINDOW), i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(i0.NgZone));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: AutoplayService,\n factory: AutoplayService.ɵfac\n });\n }\n return AutoplayService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet LazyLoadService = /*#__PURE__*/(() => {\n class LazyLoadService {\n carouselService;\n /**\n * Subscrioption to merge Observable from CarouselService\n */\n lazyLoadSubscription;\n constructor(carouselService) {\n this.carouselService = carouselService;\n this.spyDataStreams();\n }\n ngOnDestroy() {\n this.lazyLoadSubscription.unsubscribe();\n }\n /**\n * Defines Observables which service must observe\n */\n spyDataStreams() {\n const initializedCarousel$ = this.carouselService.getInitializedState().pipe(tap(() => {\n const isLazyLoad = this.carouselService.settings && !this.carouselService.settings.lazyLoad;\n this.carouselService.slidesData.forEach(item => item.load = isLazyLoad ? true : false);\n }));\n const changeSettings$ = this.carouselService.getChangeState();\n const resizedCarousel$ = this.carouselService.getResizedState();\n const lazyLoadMerge$ = merge(initializedCarousel$, changeSettings$, resizedCarousel$).pipe(tap(data => this._defineLazyLoadSlides(data)));\n this.lazyLoadSubscription = lazyLoadMerge$.subscribe(() => {});\n }\n _defineLazyLoadSlides(data) {\n if (!this.carouselService.settings || !this.carouselService.settings.lazyLoad) {\n return;\n }\n if (data.property && data.property.name === 'position' || data === 'initialized' || data === \"resized\") {\n const settings = this.carouselService.settings,\n clones = this.carouselService.clones().length;\n let n = settings.center && Math.ceil(settings.items / 2) || settings.items,\n i = settings.center && n * -1 || 0,\n position = (data.property && data.property.value !== undefined ? data.property.value : this.carouselService.current()) + i;\n // load = $.proxy(function(i, v) { this.load(v) }, this);\n //TODO: Need documentation for this new option\n if (settings.lazyLoadEager > 0) {\n n += settings.lazyLoadEager;\n // If the carousel is looping also preload images that are to the \"left\"\n if (settings.loop) {\n position -= settings.lazyLoadEager;\n n++;\n }\n }\n while (i++ < n) {\n this._load(clones / 2 + this.carouselService.relative(position));\n if (clones) {\n this.carouselService.clones(this.carouselService.relative(position)).forEach(value => this._load(value));\n }\n position++;\n }\n }\n }\n /**\n * Loads all resources of an item at the specified position.\n * @param position - The absolute position of the item.\n */\n _load(position) {\n if (this.carouselService.slidesData[position].load) {\n return;\n }\n this.carouselService.slidesData[position].load = true;\n }\n static ɵfac = function LazyLoadService_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || LazyLoadService)(i0.ɵɵinject(CarouselService));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: LazyLoadService,\n factory: LazyLoadService.ɵfac\n });\n }\n return LazyLoadService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet AnimateService = /*#__PURE__*/(() => {\n class AnimateService {\n carouselService;\n /**\n * Subscrioption to merge Observable from CarouselService\n */\n animateSubscription;\n /**\n * s\n */\n swapping = true;\n /**\n * active slide before translating\n */\n previous = undefined;\n /**\n * new active slide after translating\n */\n next = undefined;\n constructor(carouselService) {\n this.carouselService = carouselService;\n this.spyDataStreams();\n }\n ngOnDestroy() {\n this.animateSubscription.unsubscribe();\n }\n /**\n * Defines Observables which service must observe\n */\n spyDataStreams() {\n const changeSettings$ = this.carouselService.getChangeState().pipe(tap(data => {\n if (data.property.name === 'position') {\n this.previous = this.carouselService.current();\n this.next = data.property.value;\n }\n }));\n const dragCarousel$ = this.carouselService.getDragState();\n const draggedCarousel$ = this.carouselService.getDraggedState();\n const translatedCarousel$ = this.carouselService.getTranslatedState();\n const dragTranslatedMerge$ = merge(dragCarousel$, draggedCarousel$, translatedCarousel$).pipe(tap(data => this.swapping = data === 'translated'));\n const translateCarousel$ = this.carouselService.getTranslateState().pipe(tap(data => {\n if (this.swapping && (this.carouselService._options.animateOut || this.carouselService._options.animateIn)) {\n this._swap();\n }\n }));\n const animateMerge$ = merge(changeSettings$, translateCarousel$, dragTranslatedMerge$).pipe();\n this.animateSubscription = animateMerge$.subscribe(() => {});\n }\n /**\n * Toggles the animation classes whenever an translations starts.\n * @returns\n */\n _swap() {\n if (this.carouselService.settings.items !== 1) {\n return;\n }\n // if (!$.support.animation || !$.support.transition) {\n // \treturn;\n // }\n this.carouselService.speed(0);\n let left;\n const previous = this.carouselService.slidesData[this.previous],\n next = this.carouselService.slidesData[this.next],\n incoming = this.carouselService.settings.animateIn,\n outgoing = this.carouselService.settings.animateOut;\n if (this.carouselService.current() === this.previous) {\n return;\n }\n if (outgoing) {\n left = +this.carouselService.coordinates(this.previous) - +this.carouselService.coordinates(this.next);\n this.carouselService.slidesData.forEach(slide => {\n if (slide.id === previous.id) {\n slide.left = `${left}px`;\n slide.isAnimated = true;\n slide.isDefAnimatedOut = true;\n slide.isCustomAnimatedOut = true;\n }\n });\n }\n if (incoming) {\n this.carouselService.slidesData.forEach(slide => {\n if (slide.id === next.id) {\n slide.isAnimated = true;\n slide.isDefAnimatedIn = true;\n slide.isCustomAnimatedIn = true;\n }\n });\n }\n }\n /**\n * Handles the end of 'animationend' event\n * @param id Id of slides\n */\n clear(id) {\n this.carouselService.slidesData.forEach(slide => {\n if (slide.id === id) {\n slide.left = '';\n slide.isAnimated = false;\n slide.isDefAnimatedOut = false;\n slide.isCustomAnimatedOut = false;\n slide.isDefAnimatedIn = false;\n slide.isCustomAnimatedIn = false;\n slide.classes = this.carouselService.setCurSlideClasses(slide);\n }\n });\n this.carouselService.onTransitionEnd();\n }\n static ɵfac = function AnimateService_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || AnimateService)(i0.ɵɵinject(CarouselService));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: AnimateService,\n factory: AnimateService.ɵfac\n });\n }\n return AnimateService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet AutoHeightService = /*#__PURE__*/(() => {\n class AutoHeightService {\n carouselService;\n /**\n * Subscrioption to merge Observable from CarouselService\n */\n autoHeightSubscription;\n constructor(carouselService) {\n this.carouselService = carouselService;\n this.spyDataStreams();\n }\n ngOnDestroy() {\n this.autoHeightSubscription.unsubscribe();\n }\n /**\n * Defines Observables which service must observe\n */\n spyDataStreams() {\n const initializedCarousel$ = this.carouselService.getInitializedState().pipe(tap(data => {\n if (this.carouselService.settings.autoHeight) {\n this.update();\n } else {\n this.carouselService.slidesData.forEach(slide => slide.heightState = 'full');\n }\n }));\n const changedSettings$ = this.carouselService.getChangedState().pipe(tap(data => {\n if (this.carouselService.settings.autoHeight && data.property.name === 'position') {\n this.update();\n }\n }));\n const refreshedCarousel$ = this.carouselService.getRefreshedState().pipe(tap(data => {\n if (this.carouselService.settings.autoHeight) {\n this.update();\n }\n }));\n const autoHeight$ = merge(initializedCarousel$, changedSettings$, refreshedCarousel$);\n this.autoHeightSubscription = autoHeight$.subscribe(() => {});\n }\n /**\n * Updates the prop 'heightState' of slides\n */\n update() {\n const items = this.carouselService.settings.items;\n let start = this.carouselService.current(),\n end = start + items;\n if (this.carouselService.settings.center) {\n start = items % 2 === 1 ? start - (items - 1) / 2 : start - items / 2;\n end = items % 2 === 1 ? start + items : start + items + 1;\n }\n this.carouselService.slidesData.forEach((slide, i) => {\n slide.heightState = i >= start && i < end ? 'full' : 'nulled';\n });\n }\n static ɵfac = function AutoHeightService_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || AutoHeightService)(i0.ɵɵinject(CarouselService));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: AutoHeightService,\n factory: AutoHeightService.ɵfac\n });\n }\n return AutoHeightService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet HashService = /*#__PURE__*/(() => {\n class HashService {\n carouselService;\n route;\n router;\n /**\n * Subscription to merge Observable from CarouselService\n */\n hashSubscription;\n /**\n * Current url fragment (hash)\n */\n currentHashFragment;\n constructor(carouselService, route, router) {\n this.carouselService = carouselService;\n this.route = route;\n this.router = router;\n this.spyDataStreams();\n if (!this.route) {\n this.route = {\n fragment: of('no route').pipe(take(1))\n };\n }\n ;\n if (!this.router) {\n this.router = {\n navigate: (commands, extras) => {\n return;\n }\n };\n }\n }\n ngOnDestroy() {\n this.hashSubscription.unsubscribe();\n }\n /**\n * Defines Observables which service must observe\n */\n spyDataStreams() {\n const initializedCarousel$ = this.carouselService.getInitializedState().pipe(tap(() => this.listenToRoute()));\n const changedSettings$ = this.carouselService.getChangedState().pipe(tap(data => {\n if (this.carouselService.settings.URLhashListener && data.property.name === 'position') {\n const newCurSlide = this.carouselService.current();\n const newCurFragment = this.carouselService.slidesData[newCurSlide].hashFragment;\n if (!newCurFragment || newCurFragment === this.currentHashFragment) {\n return;\n }\n this.router.navigate(['./'], {\n fragment: newCurFragment,\n relativeTo: this.route\n });\n }\n }));\n const hashFragment$ = merge(initializedCarousel$, changedSettings$);\n this.hashSubscription = hashFragment$.subscribe(() => {});\n }\n /**\n * rewinds carousel to slide which has the same hashFragment as fragment of current url\n * @param fragment fragment of url\n */\n rewind(fragment) {\n const position = this.carouselService.slidesData.findIndex(slide => slide.hashFragment === fragment && slide.isCloned === false);\n if (position === -1 || position === this.carouselService.current()) {\n return;\n }\n this.carouselService.to(this.carouselService.relative(position), false);\n }\n /**\n * Initiate listening to ActivatedRoute.fragment\n */\n listenToRoute() {\n const count = this.carouselService.settings.startPosition === 'URLHash' ? 0 : 2;\n this.route.fragment.pipe(skip(count)).subscribe(fragment => {\n this.currentHashFragment = fragment;\n this.rewind(fragment);\n });\n }\n static ɵfac = function HashService_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || HashService)(i0.ɵɵinject(CarouselService), i0.ɵɵinject(i1.ActivatedRoute, 8), i0.ɵɵinject(i1.Router, 8));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: HashService,\n factory: HashService.ɵfac\n });\n }\n return HashService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet nextId = 0;\nlet CarouselSlideDirective = /*#__PURE__*/(() => {\n class CarouselSlideDirective {\n tplRef;\n /**\n * Unique slide identifier. Must be unique for the entire document for proper accessibility support.\n * Will be auto-generated if not provided.\n */\n id = `owl-slide-${nextId++}`;\n /**\n * Defines how much widths of common slide will current slide have\n * e.g. if _mergeData=2, the slide will twice wider then slides with _mergeData=1\n */\n _dataMerge = 1;\n set dataMerge(data) {\n this._dataMerge = this.isNumeric(data) ? data : 1;\n }\n get dataMerge() {\n return this._dataMerge;\n }\n /**\n * Width of slide\n */\n width = 0;\n /**\n * Inner content of dot for certain slide; can be html-markup\n */\n dotContent = '';\n /**\n * Hash (fragment) of url which corresponds to certain slide\n */\n dataHash = '';\n constructor(tplRef) {\n this.tplRef = tplRef;\n }\n /**\n * Determines if the input is a Number or something that can be coerced to a Number\n * @param - The input to be tested\n * @returns - An indication if the input is a Number or can be coerced to a Number\n */\n isNumeric(number) {\n return !isNaN(parseFloat(number));\n }\n static ɵfac = function CarouselSlideDirective_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CarouselSlideDirective)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CarouselSlideDirective,\n selectors: [[\"ng-template\", \"carouselSlide\", \"\"]],\n inputs: {\n id: \"id\",\n dataMerge: \"dataMerge\",\n width: \"width\",\n dotContent: \"dotContent\",\n dataHash: \"dataHash\"\n }\n });\n }\n return CarouselSlideDirective;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet ResizeService = /*#__PURE__*/(() => {\n class ResizeService {\n resizeObservable$;\n /**\n * Makes resizeSubject become Observable\n * @returns Observable of resizeSubject\n */\n get onResize$() {\n return this.resizeObservable$;\n }\n constructor(winRef, platformId) {\n this.resizeObservable$ = isPlatformBrowser(platformId) ? fromEvent(winRef, 'resize') : new Subject().asObservable();\n }\n static ɵfac = function ResizeService_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ResizeService)(i0.ɵɵinject(WINDOW), i0.ɵɵinject(PLATFORM_ID));\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: ResizeService,\n factory: ResizeService.ɵfac\n });\n }\n return ResizeService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet StageComponent = /*#__PURE__*/(() => {\n class StageComponent {\n zone;\n el;\n renderer;\n carouselService;\n animateService;\n /**\n * Object with settings which make carousel draggable by touch or mouse\n */\n owlDraggable;\n /**\n * Data of owl-stage\n */\n stageData;\n /**\n * Data of every slide\n */\n slidesData;\n /**\n * Function wich will be returned after attaching listener to 'mousemove' event\n */\n listenerMouseMove;\n /**\n * Function wich will be returned after attaching listener to 'touchmove' event\n */\n listenerTouchMove;\n /**\n * Function wich will be returned after attaching listener to 'mousemove' event\n */\n listenerOneMouseMove;\n /**\n * Function wich will be returned after attaching listener to 'touchmove' event\n */\n listenerOneTouchMove;\n /**\n * Function wich will be returned after attaching listener to 'mouseup' event\n */\n listenerMouseUp;\n /**\n * Function wich will be returned after attaching listener to 'touchend' event\n */\n listenerTouchEnd;\n /**\n * Function wich will be returned after attaching listener to 'click' event\n */\n listenerOneClick;\n listenerATag;\n /**\n * Object with data needed for dragging\n */\n _drag = {\n time: null,\n target: null,\n pointer: null,\n stage: {\n start: null,\n current: null\n },\n direction: null,\n active: false,\n moving: false\n };\n /**\n * Subject for notification when the carousel's rebuilding caused by resize event starts\n */\n _oneDragMove$ = new Subject();\n /**\n * Subsctiption to _oneDragMove$ Subject\n */\n _oneMoveSubsription;\n preparePublicSlide = slide => {\n const newSlide = {\n ...slide\n };\n delete newSlide.tplRef;\n return newSlide;\n };\n constructor(zone, el, renderer, carouselService, animateService) {\n this.zone = zone;\n this.el = el;\n this.renderer = renderer;\n this.carouselService = carouselService;\n this.animateService = animateService;\n }\n onMouseDown(event) {\n if (this.owlDraggable.isMouseDragable) {\n this._onDragStart(event);\n }\n }\n onTouchStart(event) {\n if (event.targetTouches.length >= 2) {\n return false;\n }\n if (this.owlDraggable.isTouchDragable) {\n this._onDragStart(event);\n }\n }\n onTouchCancel(event) {\n this._onDragEnd(event);\n }\n onDragStart() {\n if (this.owlDraggable.isMouseDragable) {\n return false;\n }\n }\n onSelectStart() {\n if (this.owlDraggable.isMouseDragable) {\n return false;\n }\n }\n ngOnInit() {\n this._oneMoveSubsription = this._oneDragMove$.pipe(first()).subscribe(() => {\n this._sendChanges();\n });\n }\n ngOnDestroy() {\n this._oneMoveSubsription.unsubscribe();\n }\n /**\n * Passes this to _oneMouseTouchMove();\n */\n bindOneMouseTouchMove = ev => {\n this._oneMouseTouchMove(ev);\n };\n /**\n * Passes this to _onDragMove();\n */\n bindOnDragMove = ev => {\n this._onDragMove(ev);\n };\n /**\n * Passes this to _onDragMove();\n */\n bindOnDragEnd = ev => {\n // this.zone.run(() => {\n this._onDragEnd(ev);\n // });\n };\n /**\n * Handles `touchstart` and `mousedown` events.\n * @todo Horizontal swipe threshold as option\n * @todo #261\n * @param event - The event arguments.\n */\n _onDragStart(event) {\n let stage = null;\n if (event.which === 3) {\n return;\n }\n stage = this._prepareDragging(event);\n this._drag.time = new Date().getTime();\n this._drag.target = event.target;\n this._drag.stage.start = stage;\n this._drag.stage.current = stage;\n this._drag.pointer = this._pointer(event);\n this.listenerMouseUp = this.renderer.listen(document, 'mouseup', this.bindOnDragEnd);\n this.listenerTouchEnd = this.renderer.listen(document, 'touchend', this.bindOnDragEnd);\n this.zone.runOutsideAngular(() => {\n this.listenerOneMouseMove = this.renderer.listen(document, 'mousemove', this.bindOneMouseTouchMove);\n this.listenerOneTouchMove = this.renderer.listen(document, 'touchmove', this.bindOneMouseTouchMove);\n });\n }\n /**\n * Attaches listeners to `touchmove` and `mousemove` events; initiates updating carousel after starting dragging\n * @param event event objech of mouse or touch event\n */\n _oneMouseTouchMove(event) {\n const delta = this._difference(this._drag.pointer, this._pointer(event));\n if (this.listenerATag) {\n this.listenerATag();\n }\n if (Math.abs(delta.x) < 3 && Math.abs(delta.y) < 3 && this._is('valid')) {\n return;\n }\n if (Math.abs(delta.x) < 3 && Math.abs(delta.x) < Math.abs(delta.y) && this._is('valid')) {\n return;\n }\n this.listenerOneMouseMove();\n this.listenerOneTouchMove();\n this._drag.moving = true;\n this.blockClickAnchorInDragging(event);\n this.listenerMouseMove = this.renderer.listen(document, 'mousemove', this.bindOnDragMove);\n this.listenerTouchMove = this.renderer.listen(document, 'touchmove', this.bindOnDragMove);\n event.preventDefault();\n this._enterDragging();\n this._oneDragMove$.next(event);\n // this._sendChanges();\n }\n /**\n * Attaches handler to HTMLAnchorElement for preventing click while carousel is being dragged\n * @param event event object\n */\n blockClickAnchorInDragging(event) {\n let target = event.target;\n while (target && !(target instanceof HTMLAnchorElement)) {\n target = target.parentElement;\n }\n if (target instanceof HTMLAnchorElement) {\n this.listenerATag = this.renderer.listen(target, 'click', () => false);\n }\n }\n /**\n * Handles the `touchmove` and `mousemove` events.\n * @todo #261\n * @param event - The event arguments.\n */\n _onDragMove(event) {\n let stage;\n const stageOrExit = this.carouselService.defineNewCoordsDrag(event, this._drag);\n if (stageOrExit === false) {\n return;\n }\n stage = stageOrExit;\n event.preventDefault();\n this._drag.stage.current = stage;\n this._animate(stage.x - this._drag.stage.start.x);\n }\n /**\n * Moves .owl-stage left-right\n * @param coordinate coordinate to be set to .owl-stage\n */\n _animate(coordinate) {\n this.renderer.setStyle(this.el.nativeElement.children[0], 'transform', `translate3d(${coordinate}px,0px,0px`);\n this.renderer.setStyle(this.el.nativeElement.children[0], 'transition', '0s');\n }\n /**\n * Handles the `touchend` and `mouseup` events.\n * @todo #261\n * @todo Threshold for click event\n * @param event - The event arguments.\n */\n _onDragEnd(event) {\n this.carouselService.owlDOMData.isGrab = false;\n this.listenerOneMouseMove();\n this.listenerOneTouchMove();\n if (this._drag.moving) {\n this.renderer.setStyle(this.el.nativeElement.children[0], 'transform', ``);\n this.renderer.setStyle(this.el.nativeElement.children[0], 'transition', this.carouselService.speed(+this.carouselService.settings.dragEndSpeed || this.carouselService.settings.smartSpeed) / 1000 + 's');\n this._finishDragging(event);\n this.listenerMouseMove();\n this.listenerTouchMove();\n }\n this._drag = {\n time: null,\n target: null,\n pointer: null,\n stage: {\n start: null,\n current: null\n },\n direction: null,\n active: false,\n moving: false\n };\n // this.carouselService.trigger('dragged');\n this.listenerMouseUp();\n this.listenerTouchEnd();\n }\n /**\n * Prepares data for dragging carousel. It starts after firing `touchstart` and `mousedown` events.\n * @param event - The event arguments.\n * @returns stage - object with 'x' and 'y' coordinates of .owl-stage\n */\n _prepareDragging(event) {\n return this.carouselService.prepareDragging(event);\n }\n /**\n * Attaches handler for 'click' event on any element in .owl-stage in order to prevent dragging when moving of cursor is less than 3px\n */\n _oneClickHandler = () => {\n this.listenerOneClick = this.renderer.listen(this._drag.target, 'click', () => false);\n this.listenerOneClick();\n };\n /**\n * Finishes dragging\n * @param event object event of 'mouseUp' of 'touchend' events\n */\n _finishDragging(event) {\n this.carouselService.finishDragging(event, this._drag, this._oneClickHandler);\n }\n /**\n * Gets unified pointer coordinates from event.\n * @param event The `mousedown` or `touchstart` event.\n * @returns Contains `x` and `y` coordinates of current pointer position.\n */\n _pointer(event) {\n return this.carouselService.pointer(event);\n }\n /**\n * Gets the difference of two vectors.\n * @param first The first vector.\n * @param second The second vector.\n * @returns The difference.\n */\n _difference(firstC, second) {\n return this.carouselService.difference(firstC, second);\n }\n /**\n * Checks whether the carousel is in a specific state or not.\n * @param specificState The state to check.\n * @returns The flag which indicates if the carousel is busy.\n */\n _is(specificState) {\n return this.carouselService.is(specificState);\n }\n /**\n * Enters a state.\n * @param name The state name.\n */\n _enter(name) {\n this.carouselService.enter(name);\n }\n /**\n * Sends all data needed for View.\n */\n _sendChanges() {\n this.carouselService.sendChanges();\n }\n /**\n * Handler for transitioend event\n */\n onTransitionEnd() {\n this.carouselService.onTransitionEnd();\n }\n /**\n * Enters into a 'dragging' state\n */\n _enterDragging() {\n this.carouselService.enterDragging();\n }\n /**\n * Handles the end of 'animationend' event\n * @param id Id of slides\n */\n clear(id) {\n this.animateService.clear(id);\n }\n static ɵfac = function StageComponent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || StageComponent)(i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(CarouselService), i0.ɵɵdirectiveInject(AnimateService));\n };\n static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: StageComponent,\n selectors: [[\"owl-stage\"]],\n hostBindings: function StageComponent_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"mousedown\", function StageComponent_mousedown_HostBindingHandler($event) {\n return ctx.onMouseDown($event);\n })(\"touchstart\", function StageComponent_touchstart_HostBindingHandler($event) {\n return ctx.onTouchStart($event);\n })(\"touchcancel\", function StageComponent_touchcancel_HostBindingHandler($event) {\n return ctx.onTouchCancel($event);\n })(\"dragstart\", function StageComponent_dragstart_HostBindingHandler() {\n return ctx.onDragStart();\n })(\"selectstart\", function StageComponent_selectstart_HostBindingHandler() {\n return ctx.onSelectStart();\n });\n }\n },\n inputs: {\n owlDraggable: \"owlDraggable\",\n stageData: \"stageData\",\n slidesData: \"slidesData\"\n },\n decls: 3,\n vars: 8,\n consts: [[1, \"owl-stage\", 3, \"transitionend\", \"ngStyle\"], [4, \"ngFor\", \"ngForOf\"], [1, \"owl-item\", 3, \"animationend\", \"ngClass\", \"ngStyle\"], [4, \"ngIf\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"]],\n template: function StageComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\")(1, \"div\", 0);\n i0.ɵɵlistener(\"transitionend\", function StageComponent_Template_div_transitionend_1_listener() {\n return ctx.onTransitionEnd();\n });\n i0.ɵɵtemplate(2, StageComponent_ng_container_2_Template, 3, 9, \"ng-container\", 1);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngStyle\", i0.ɵɵpureFunction5(2, _c0, ctx.stageData.width + \"px\", ctx.stageData.transform, ctx.stageData.transition, ctx.stageData.paddingL ? ctx.stageData.paddingL + \"px\" : \"\", ctx.stageData.paddingR ? ctx.stageData.paddingR + \"px\" : \"\"));\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngForOf\", ctx.slidesData);\n }\n },\n dependencies: [i3.NgClass, i3.NgForOf, i3.NgIf, i3.NgTemplateOutlet, i3.NgStyle],\n encapsulation: 2,\n data: {\n animation: [trigger('autoHeight', [state('nulled', style({\n height: 0\n })), state('full', style({\n height: '*'\n })), transition('full => nulled', [\n // style({height: '*'}),\n animate('700ms 350ms')]), transition('nulled => full', [\n // style({height: 0}),\n animate(350)])])]\n }\n });\n }\n return StageComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet CarouselComponent = /*#__PURE__*/(() => {\n class CarouselComponent {\n el;\n resizeService;\n carouselService;\n navigationService;\n autoplayService;\n lazyLoadService;\n animateService;\n autoHeightService;\n hashService;\n logger;\n changeDetectorRef;\n slides;\n translated = new EventEmitter();\n dragging = new EventEmitter();\n change = new EventEmitter();\n changed = new EventEmitter();\n initialized = new EventEmitter();\n /**\n * Width of carousel window (tag with class .owl-carousel), in wich we can see moving sliders\n */\n carouselWindowWidth;\n /**\n * Subscription to 'resize' event\n */\n resizeSubscription;\n /**\n * Subscription merge Observable, which merges all Observables in the component except 'resize' Observable and this.slides.changes()\n */\n _allObservSubscription;\n /**\n * Subscription to `this.slides.changes().\n * It could be included in 'this._allObservSubscription', but that subcription get created during the initializing of component\n * and 'this.slides' are undefined at that moment. So it's needed to wait for initialization of content.\n */\n _slidesChangesSubscription;\n /**\n * Current settings for the carousel.\n */\n owlDOMData;\n /**\n * Data of owl-stage\n */\n stageData;\n /**\n * Data of every slide\n */\n slidesData = [];\n /**\n * Data of navigation block\n */\n navData;\n /**\n * Data of dots block\n */\n dotsData;\n /**\n * Data, wich are passed out of carousel after ending of transioning of carousel\n */\n slidesOutputData;\n /**\n * Shows whether carousel is loaded of not.\n */\n carouselLoaded = false;\n /**\n * User's options\n */\n options;\n prevOptions;\n /**\n * Observable for getting current View Settings\n */\n _viewCurSettings$;\n /**\n * Observable for catching the end of transition of carousel\n */\n _translatedCarousel$;\n /**\n * Observable for catching the start of dragging of the carousel\n */\n _draggingCarousel$;\n /**\n * Observable for catching the start of changing of the carousel\n */\n _changeCarousel$;\n /**\n * Observable for catching the moment when the data about slides changed, more exactly when the position changed.\n */\n _changedCarousel$;\n /**\n * Observable for catching the initialization of changing the carousel\n */\n _initializedCarousel$;\n /**\n * Observable for merging all Observables and creating one subscription\n */\n _carouselMerge$;\n docRef;\n constructor(el, resizeService, carouselService, navigationService, autoplayService, lazyLoadService, animateService, autoHeightService, hashService, logger, changeDetectorRef, docRef) {\n this.el = el;\n this.resizeService = resizeService;\n this.carouselService = carouselService;\n this.navigationService = navigationService;\n this.autoplayService = autoplayService;\n this.lazyLoadService = lazyLoadService;\n this.animateService = animateService;\n this.autoHeightService = autoHeightService;\n this.hashService = hashService;\n this.logger = logger;\n this.changeDetectorRef = changeDetectorRef;\n this.docRef = docRef;\n }\n onVisibilityChange(ev) {\n if (!this.carouselService.settings.autoplay) return;\n switch (this.docRef.visibilityState) {\n case 'visible':\n !this.autoplayService.isAutoplayStopped && this.autoplayService.play();\n break;\n case 'hidden':\n this.autoplayService.pause();\n break;\n default:\n break;\n }\n }\n ngOnInit() {\n this.spyDataStreams();\n this.carouselWindowWidth = this.el.nativeElement.querySelector('.owl-carousel').clientWidth;\n }\n ngOnChanges() {\n if (this.prevOptions !== this.options) {\n if (this.prevOptions && this.slides?.toArray().length) {\n this.carouselService.setup(this.carouselWindowWidth, this.slides.toArray(), this.options);\n this.carouselService.initialize(this.slides.toArray());\n } else if (this.prevOptions && !this.slides?.toArray().length) {\n this.carouselLoaded = false;\n this.logger.log(`There are no slides to show. So the carousel won't be re-rendered`);\n } else {\n this.carouselLoaded = false;\n }\n this.prevOptions = this.options;\n }\n }\n ngAfterContentInit() {\n if (this.slides.toArray().length) {\n this.carouselService.setup(this.carouselWindowWidth, this.slides.toArray(), this.options);\n this.carouselService.initialize(this.slides.toArray());\n this._winResizeWatcher();\n } else {\n this.logger.log(`There are no slides to show. So the carousel won't be rendered`);\n }\n this._slidesChangesSubscription = this.slides.changes.pipe(tap(slides => {\n this.carouselService.setup(this.carouselWindowWidth, slides.toArray(), this.options);\n this.carouselService.initialize(slides.toArray());\n if (!slides.toArray().length) {\n this.carouselLoaded = false;\n }\n if (slides.toArray().length && !this.resizeSubscription) {\n this._winResizeWatcher();\n }\n })).subscribe(() => {});\n }\n ngOnDestroy() {\n if (this.resizeSubscription) {\n this.resizeSubscription.unsubscribe();\n }\n if (this._slidesChangesSubscription) {\n this._slidesChangesSubscription.unsubscribe();\n }\n if (this._allObservSubscription) {\n this._allObservSubscription.unsubscribe();\n }\n }\n /**\n * Joins the observable login in one place: sets values to some observables, merges this observables and\n * subcribes to merge func\n */\n spyDataStreams() {\n this._viewCurSettings$ = this.carouselService.getViewCurSettings().pipe(tap(data => {\n this.owlDOMData = data.owlDOMData;\n this.stageData = data.stageData;\n this.slidesData = data.slidesData;\n if (!this.carouselLoaded) {\n this.carouselLoaded = true;\n }\n this.navData = data.navData;\n this.dotsData = data.dotsData;\n this.changeDetectorRef.markForCheck();\n }));\n this._initializedCarousel$ = this.carouselService.getInitializedState().pipe(tap(() => {\n this.gatherTranslatedData();\n this.initialized.emit(this.slidesOutputData);\n // this.slidesOutputData = {};\n }));\n this._translatedCarousel$ = this.carouselService.getTranslatedState().pipe(tap(() => {\n this.gatherTranslatedData();\n this.translated.emit(this.slidesOutputData);\n // this.slidesOutputData = {};\n }));\n this._changeCarousel$ = this.carouselService.getChangeState().pipe(tap(() => {\n this.gatherTranslatedData();\n this.change.emit(this.slidesOutputData);\n // this.slidesOutputData = {};\n }));\n this._changedCarousel$ = this.carouselService.getChangeState().pipe(switchMap(value => {\n const changedPosition = of(value).pipe(filter(() => value.property.name === 'position'), switchMap(() => from(this.slidesData)), skip(value.property.value), take(this.carouselService.settings.items), map(slide => {\n const clonedIdPrefix = this.carouselService.clonedIdPrefix;\n const id = slide.id.indexOf(clonedIdPrefix) >= 0 ? slide.id.slice(clonedIdPrefix.length) : slide.id;\n return {\n ...slide,\n id: id,\n isActive: true\n };\n }), toArray(), map(slides => {\n return {\n slides: slides,\n startPosition: this.carouselService.relative(value.property.value)\n };\n }));\n // const changedSetting: Observable = of(value).pipe(\n // filter(() => value.property.name === 'settings'),\n // map(() => {\n // return {\n // slides: [],\n // startPosition: this.carouselService.relative(value.property.value)\n // }\n // })\n // )\n return merge(changedPosition);\n }), tap(slidesData => {\n this.gatherTranslatedData();\n this.changed.emit(slidesData.slides.length ? slidesData : this.slidesOutputData);\n // console.log(this.slidesOutputData);\n // this.slidesOutputData = {};\n }));\n this._draggingCarousel$ = this.carouselService.getDragState().pipe(tap(() => {\n this.gatherTranslatedData();\n this.dragging.emit({\n dragging: true,\n data: this.slidesOutputData\n });\n }), switchMap(() => this.carouselService.getDraggedState().pipe(map(() => !!this.carouselService.is('animating')))), switchMap(anim => {\n if (anim) {\n return this.carouselService.getTranslatedState().pipe(first());\n } else {\n return of('not animating');\n }\n }), tap(() => {\n this.dragging.emit({\n dragging: false,\n data: this.slidesOutputData\n });\n }));\n this._carouselMerge$ = merge(this._viewCurSettings$, this._translatedCarousel$, this._draggingCarousel$, this._changeCarousel$, this._changedCarousel$, this._initializedCarousel$);\n this._allObservSubscription = this._carouselMerge$.subscribe(() => {});\n }\n /**\n * Init subscription to resize event and attaches handler for this event\n */\n _winResizeWatcher() {\n if (Object.keys(this.carouselService._options.responsive).length) {\n this.resizeSubscription = this.resizeService.onResize$.pipe(filter(() => this.carouselWindowWidth !== this.el.nativeElement.querySelector('.owl-carousel').clientWidth), delay(this.carouselService.settings.responsiveRefreshRate)).subscribe(() => {\n this.carouselService.onResize(this.el.nativeElement.querySelector('.owl-carousel').clientWidth);\n this.carouselWindowWidth = this.el.nativeElement.querySelector('.owl-carousel').clientWidth;\n });\n }\n }\n /**\n * Handler for transitioend event\n */\n onTransitionEnd() {\n this.carouselService.onTransitionEnd();\n }\n /**\n * Handler for click event, attached to next button\n */\n next() {\n if (!this.carouselLoaded) return;\n this.navigationService.next(this.carouselService.settings.navSpeed);\n }\n /**\n * Handler for click event, attached to prev button\n */\n prev() {\n if (!this.carouselLoaded) return;\n this.navigationService.prev(this.carouselService.settings.navSpeed);\n }\n /**\n * Handler for click event, attached to dots\n */\n moveByDot(dotId) {\n if (!this.carouselLoaded) return;\n this.navigationService.moveByDot(dotId);\n }\n /**\n * rewinds carousel to slide with needed id\n * @param id fragment of url\n */\n to(id) {\n // if (!this.carouselLoaded || ((this.navData && this.navData.disabled) && (this.dotsData && this.dotsData.disabled))) return;\n if (!this.carouselLoaded) return;\n this.navigationService.toSlideById(id);\n }\n /**\n * Gathers and prepares data intended for passing to the user by means of firing event translatedCarousel\n */\n gatherTranslatedData() {\n let startPosition;\n const clonedIdPrefix = this.carouselService.clonedIdPrefix;\n const activeSlides = this.slidesData.filter(slide => slide.isActive === true).map(slide => {\n const id = slide.id.indexOf(clonedIdPrefix) >= 0 ? slide.id.slice(clonedIdPrefix.length) : slide.id;\n return {\n id: id,\n width: slide.width,\n marginL: slide.marginL,\n marginR: slide.marginR,\n center: slide.isCentered\n };\n });\n startPosition = this.carouselService.relative(this.carouselService.current());\n this.slidesOutputData = {\n startPosition: startPosition,\n slides: activeSlides\n };\n }\n /**\n * Starts pausing\n */\n startPausing() {\n this.autoplayService.startPausing();\n }\n /**\n * Starts playing after mouse leaves carousel\n */\n startPlayML() {\n this.autoplayService.startPlayingMouseLeave();\n }\n /**\n * Starts playing after touch ends\n */\n startPlayTE() {\n this.autoplayService.startPlayingTouchEnd();\n }\n stopAutoplay() {\n this.autoplayService.isAutoplayStopped = true;\n this.autoplayService.stop();\n }\n startAutoplay() {\n this.autoplayService.isAutoplayStopped = false;\n this.autoplayService.play();\n }\n static ɵfac = function CarouselComponent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CarouselComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(ResizeService), i0.ɵɵdirectiveInject(CarouselService), i0.ɵɵdirectiveInject(NavigationService), i0.ɵɵdirectiveInject(AutoplayService), i0.ɵɵdirectiveInject(LazyLoadService), i0.ɵɵdirectiveInject(AnimateService), i0.ɵɵdirectiveInject(AutoHeightService), i0.ɵɵdirectiveInject(HashService), i0.ɵɵdirectiveInject(OwlLogger), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(DOCUMENT));\n };\n static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: CarouselComponent,\n selectors: [[\"owl-carousel-o\"]],\n contentQueries: function CarouselComponent_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, CarouselSlideDirective, 4);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.slides = _t);\n }\n },\n hostBindings: function CarouselComponent_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"visibilitychange\", function CarouselComponent_visibilitychange_HostBindingHandler($event) {\n return ctx.onVisibilityChange($event);\n }, false, i0.ɵɵresolveDocument);\n }\n },\n inputs: {\n options: \"options\"\n },\n outputs: {\n translated: \"translated\",\n dragging: \"dragging\",\n change: \"change\",\n changed: \"changed\",\n initialized: \"initialized\"\n },\n features: [i0.ɵɵProvidersFeature([NavigationService, AutoplayService, CarouselService, LazyLoadService, AnimateService, AutoHeightService, HashService]), i0.ɵɵNgOnChangesFeature],\n decls: 4,\n vars: 9,\n consts: [[\"owlCarousel\", \"\"], [1, \"owl-carousel\", \"owl-theme\", 3, \"mouseover\", \"mouseleave\", \"touchstart\", \"touchend\", \"ngClass\"], [\"class\", \"owl-stage-outer\", 4, \"ngIf\"], [4, \"ngIf\"], [1, \"owl-stage-outer\"], [3, \"owlDraggable\", \"stageData\", \"slidesData\"], [1, \"owl-nav\", 3, \"ngClass\"], [1, \"owl-prev\", 3, \"click\", \"ngClass\", \"innerHTML\"], [1, \"owl-next\", 3, \"click\", \"ngClass\", \"innerHTML\"], [1, \"owl-dots\", 3, \"ngClass\"], [\"class\", \"owl-dot\", 3, \"ngClass\", \"click\", 4, \"ngFor\", \"ngForOf\"], [1, \"owl-dot\", 3, \"click\", \"ngClass\"], [3, \"innerHTML\"]],\n template: function CarouselComponent_Template(rf, ctx) {\n if (rf & 1) {\n const _r1 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"div\", 1, 0);\n i0.ɵɵlistener(\"mouseover\", function CarouselComponent_Template_div_mouseover_0_listener() {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx.startPausing());\n })(\"mouseleave\", function CarouselComponent_Template_div_mouseleave_0_listener() {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx.startPlayML());\n })(\"touchstart\", function CarouselComponent_Template_div_touchstart_0_listener() {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx.startPausing());\n })(\"touchend\", function CarouselComponent_Template_div_touchend_0_listener() {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx.startPlayTE());\n });\n i0.ɵɵtemplate(2, CarouselComponent_div_2_Template, 2, 6, \"div\", 2)(3, CarouselComponent_ng_container_3_Template, 6, 15, \"ng-container\", 3);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n i0.ɵɵproperty(\"ngClass\", i0.ɵɵpureFunction5(3, _c3, ctx.owlDOMData == null ? null : ctx.owlDOMData.rtl, ctx.owlDOMData == null ? null : ctx.owlDOMData.isLoaded, ctx.owlDOMData == null ? null : ctx.owlDOMData.isResponsive, ctx.owlDOMData == null ? null : ctx.owlDOMData.isMouseDragable, ctx.owlDOMData == null ? null : ctx.owlDOMData.isGrab));\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"ngIf\", ctx.carouselLoaded);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", ctx.slides.toArray().length);\n }\n },\n dependencies: [i3.NgClass, i3.NgForOf, i3.NgIf, StageComponent],\n styles: [\".owl-theme[_ngcontent-%COMP%]{display:block}\"],\n changeDetection: 0\n });\n }\n return CarouselComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet OwlRouterLinkDirective = /*#__PURE__*/(() => {\n class OwlRouterLinkDirective {\n router;\n route;\n // TODO(issue/24571): remove '!'.\n queryParams;\n // TODO(issue/24571): remove '!'.\n fragment;\n // TODO(issue/24571): remove '!'.\n queryParamsHandling;\n // TODO(issue/24571): remove '!'.\n preserveFragment;\n // TODO(issue/24571): remove '!'.\n skipLocationChange;\n // TODO(issue/24571): remove '!'.\n replaceUrl;\n stopLink = false;\n commands = [];\n // TODO(issue/24571): remove '!'.\n preserve;\n constructor(router, route, tabIndex, renderer, el) {\n this.router = router;\n this.route = route;\n if (tabIndex == null) {\n renderer.setAttribute(el.nativeElement, 'tabindex', '0');\n }\n }\n set owlRouterLink(commands) {\n if (commands != null) {\n this.commands = Array.isArray(commands) ? commands : [commands];\n } else {\n this.commands = [];\n }\n }\n /**\n * @deprecated 4.0.0 use `queryParamsHandling` instead.\n */\n set preserveQueryParams(value) {\n if (isDevMode() && console && console.warn) {\n console.warn('preserveQueryParams is deprecated!, use queryParamsHandling instead.');\n }\n this.preserve = value;\n }\n onClick() {\n const extras = {\n skipLocationChange: attrBoolValue(this.skipLocationChange),\n replaceUrl: attrBoolValue(this.replaceUrl)\n };\n if (this.stopLink) {\n return false;\n }\n this.router.navigateByUrl(this.urlTree, extras);\n return true;\n }\n get urlTree() {\n return this.router.createUrlTree(this.commands, {\n relativeTo: this.route,\n queryParams: this.queryParams,\n fragment: this.fragment,\n queryParamsHandling: this.queryParamsHandling,\n preserveFragment: attrBoolValue(this.preserveFragment)\n });\n }\n static ɵfac = function OwlRouterLinkDirective_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || OwlRouterLinkDirective)(i0.ɵɵdirectiveInject(i1.Router), i0.ɵɵdirectiveInject(i1.ActivatedRoute), i0.ɵɵinjectAttribute('tabindex'), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: OwlRouterLinkDirective,\n selectors: [[\"\", \"owlRouterLink\", \"\", 5, \"a\"]],\n hostBindings: function OwlRouterLinkDirective_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function OwlRouterLinkDirective_click_HostBindingHandler() {\n return ctx.onClick();\n });\n }\n },\n inputs: {\n queryParams: \"queryParams\",\n fragment: \"fragment\",\n queryParamsHandling: \"queryParamsHandling\",\n preserveFragment: \"preserveFragment\",\n skipLocationChange: \"skipLocationChange\",\n replaceUrl: \"replaceUrl\",\n stopLink: \"stopLink\",\n owlRouterLink: \"owlRouterLink\",\n preserveQueryParams: \"preserveQueryParams\"\n }\n });\n }\n return OwlRouterLinkDirective;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * @description\n *\n * Lets you link to specific routes in your app.\n *\n * See `RouterLink` for more information.\n *\n * @ngModule RouterModule\n *\n * @publicApi\n */\nlet OwlRouterLinkWithHrefDirective = /*#__PURE__*/(() => {\n class OwlRouterLinkWithHrefDirective {\n router;\n route;\n locationStrategy;\n // TODO(issue/24571): remove '!'.\n target;\n // TODO(issue/24571): remove '!'.\n queryParams;\n // TODO(issue/24571): remove '!'.\n fragment;\n // TODO(issue/24571): remove '!'.\n queryParamsHandling;\n // TODO(issue/24571): remove '!'.\n preserveFragment;\n // TODO(issue/24571): remove '!'.\n skipLocationChange;\n // TODO(issue/24571): remove '!'.\n replaceUrl;\n stopLink = false;\n commands = [];\n subscription;\n // TODO(issue/24571): remove '!'.\n preserve;\n // the url displayed on the anchor element.\n // TODO(issue/24571): remove '!'.\n href;\n constructor(router, route, locationStrategy) {\n this.router = router;\n this.route = route;\n this.locationStrategy = locationStrategy;\n this.subscription = router.events.subscribe(s => {\n if (s instanceof NavigationEnd) {\n this.updateTargetUrlAndHref();\n }\n });\n }\n set owlRouterLink(commands) {\n if (commands != null) {\n this.commands = Array.isArray(commands) ? commands : [commands];\n } else {\n this.commands = [];\n }\n }\n set preserveQueryParams(value) {\n if (isDevMode() && console && console.warn) {\n console.warn('preserveQueryParams is deprecated, use queryParamsHandling instead.');\n }\n this.preserve = value;\n }\n ngOnChanges(changes) {\n this.updateTargetUrlAndHref();\n }\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n onClick(button, ctrlKey, metaKey, shiftKey) {\n if (button !== 0 || ctrlKey || metaKey || shiftKey) {\n return true;\n }\n if (typeof this.target === 'string' && this.target !== '_self') {\n return true;\n }\n if (this.stopLink) {\n return false;\n }\n const extras = {\n skipLocationChange: attrBoolValue(this.skipLocationChange),\n replaceUrl: attrBoolValue(this.replaceUrl)\n };\n this.router.navigateByUrl(this.urlTree, extras);\n return false;\n }\n updateTargetUrlAndHref() {\n this.href = this.locationStrategy.prepareExternalUrl(this.router.serializeUrl(this.urlTree));\n }\n get urlTree() {\n return this.router.createUrlTree(this.commands, {\n relativeTo: this.route,\n queryParams: this.queryParams,\n fragment: this.fragment,\n queryParamsHandling: this.queryParamsHandling,\n preserveFragment: attrBoolValue(this.preserveFragment)\n });\n }\n static ɵfac = function OwlRouterLinkWithHrefDirective_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || OwlRouterLinkWithHrefDirective)(i0.ɵɵdirectiveInject(i1.Router), i0.ɵɵdirectiveInject(i1.ActivatedRoute), i0.ɵɵdirectiveInject(i3.LocationStrategy));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: OwlRouterLinkWithHrefDirective,\n selectors: [[\"a\", \"owlRouterLink\", \"\"]],\n hostVars: 2,\n hostBindings: function OwlRouterLinkWithHrefDirective_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function OwlRouterLinkWithHrefDirective_click_HostBindingHandler($event) {\n return ctx.onClick($event.button, $event.ctrlKey, $event.metaKey, $event.shiftKey);\n });\n }\n if (rf & 2) {\n i0.ɵɵhostProperty(\"href\", ctx.href, i0.ɵɵsanitizeUrl);\n i0.ɵɵattribute(\"target\", ctx.target);\n }\n },\n inputs: {\n target: \"target\",\n queryParams: \"queryParams\",\n fragment: \"fragment\",\n queryParamsHandling: \"queryParamsHandling\",\n preserveFragment: \"preserveFragment\",\n skipLocationChange: \"skipLocationChange\",\n replaceUrl: \"replaceUrl\",\n stopLink: \"stopLink\",\n owlRouterLink: \"owlRouterLink\",\n preserveQueryParams: \"preserveQueryParams\"\n },\n features: [i0.ɵɵNgOnChangesFeature]\n });\n }\n return OwlRouterLinkWithHrefDirective;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction attrBoolValue(s) {\n return s === '' || !!s;\n}\n\n/**\n * Data which will be passed out after ending of transition of carousel\n */\nclass SlidesOutputData {\n startPosition;\n slides;\n}\n;\nconst routes = [];\nlet CarouselModule = /*#__PURE__*/(() => {\n class CarouselModule {\n static ɵfac = function CarouselModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CarouselModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: CarouselModule\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [WINDOW_PROVIDERS, ResizeService, DOCUMENT_PROVIDERS, OwlLogger],\n imports: [CommonModule]\n });\n }\n return CarouselModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass SlideModel {\n /**\n * Id of slide\n */\n id;\n /**\n * Active state of slide. If true slide gets css-class .active\n */\n isActive;\n /**\n * TemplateRef of slide. In other words its html-markup\n */\n tplRef;\n /**\n * Number of grid parts to be used\n */\n dataMerge;\n /**\n * Width of slide\n */\n width;\n /**\n * Css-rule 'margin-left'\n */\n marginL;\n /**\n * Css-rule 'margin-right'\n */\n marginR;\n /**\n * Make slide to be on center of the carousel\n */\n isCentered;\n /**\n * Mark slide to be on center of the carousel (has .center)\n */\n center;\n /**\n * Cloned slide. It's being used when 'loop'=true\n */\n isCloned;\n /**\n * Indicates whether slide should be lazy loaded\n */\n load;\n /**\n * Css-rule 'left'\n */\n left;\n /**\n * Changeable classes of slide\n */\n classes;\n /**\n * Shows whether slide could be animated and could have css-class '.animated'\n */\n isAnimated;\n /**\n * Shows whether slide could be animated-in and could have css-class '.owl-animated-in'\n */\n isDefAnimatedIn;\n /**\n * Shows whether slide could be animated-out and could have css-class '.owl-animated-out'\n */\n isDefAnimatedOut;\n /**\n * Shows whether slide could be animated-in and could have animation css-class defined by user\n */\n isCustomAnimatedIn;\n /**\n * Shows whether slide could be animated-out and could have animation css-class defined by user\n */\n isCustomAnimatedOut;\n /**\n * State for defining the height of slide.It's values could be 'full' and 'nulled'. 'Full' sets css-height to 'auto', 'nulled' sets height to '0'.\n */\n heightState;\n /**\n * Hash (fragment) of url which corresponds to slide\n */\n hashFragment;\n}\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CarouselComponent, CarouselModule, CarouselSlideDirective, OwlRouterLinkDirective, OwlRouterLinkWithHrefDirective, SlideModel, SlidesOutputData };\n"],"mappings":"gsBAaA,IAAMA,GAAM,CAACC,EAAIC,EAAIC,EAAIC,EAAIC,KAAQ,CACnC,MAASJ,EACT,UAAaC,EACb,WAAcC,EACd,eAAgBC,EAChB,gBAAiBC,CACnB,GACMC,GAAM,CAACL,EAAIC,EAAIC,EAAIC,KAAQ,CAC/B,MAASH,EACT,cAAeC,EACf,eAAgBC,EAChB,KAAQC,CACV,GACMG,GAAM,CAACN,EAAIC,KAAQ,CACvB,UAAWD,EACX,MAAOC,CACT,GACA,SAASM,GAAuDC,EAAIC,EAAK,CAAC,CAC1E,SAASC,GAAyCF,EAAIC,EAAK,CAIzD,GAHID,EAAK,GACJG,EAAW,EAAGJ,GAAwD,EAAG,EAAG,cAAe,CAAC,EAE7FC,EAAK,EAAG,CACV,IAAMI,EAAYC,EAAc,EAC1BC,EAAWF,EAAO,UAClBG,EAAOH,EAAO,MACdI,EAAYH,EAAc,EAC7BI,EAAW,mBAAoBH,EAAS,MAAM,EAAE,0BAA8BI,EAAgB,EAAGZ,GAAKU,EAAO,mBAAmBF,CAAQ,EAAGC,CAAI,CAAC,CACrJ,CACF,CACA,SAASI,GAAuCX,EAAIC,EAAK,CACvD,GAAID,EAAK,EAAG,CACV,IAAMY,EAASC,EAAiB,EAC7BC,GAAwB,CAAC,EACzBC,EAAe,EAAG,MAAO,CAAC,EAC1BC,EAAW,eAAgB,UAA8E,CAC1G,IAAMV,EAAcW,EAAcL,CAAG,EAAE,UACjCJ,EAAYH,EAAc,EAChC,OAAUa,EAAYV,EAAO,MAAMF,EAAS,EAAE,CAAC,CACjD,CAAC,EACEH,EAAW,EAAGD,GAA0C,EAAG,EAAG,KAAM,CAAC,EACrEiB,EAAa,EACbC,GAAsB,CAC3B,CACA,GAAIpB,EAAK,EAAG,CACV,IAAMM,EAAWL,EAAI,UAClBoB,EAAU,EACVZ,EAAW,UAAWH,EAAS,OAAO,EAAE,UAAcgB,GAAgB,EAAGzB,GAAKS,EAAS,MAAQ,KAAMA,EAAS,QAAUA,EAAS,QAAU,KAAO,GAAIA,EAAS,QAAUA,EAAS,QAAU,KAAO,GAAIA,EAAS,IAAI,CAAC,EAAE,cAAeA,EAAS,WAAW,EAC1Pe,EAAU,EACVZ,EAAW,OAAQH,EAAS,IAAI,CACrC,CACF,CACA,IAAMiB,GAAM,CAAC/B,EAAIC,EAAIC,EAAIC,EAAIC,KAAQ,CACnC,UAAWJ,EACX,aAAcC,EACd,iBAAkBC,EAClB,WAAYC,EACZ,WAAYC,CACd,GACM4B,GAAM,CAAChC,EAAIC,KAAQ,CACvB,gBAAmBD,EACnB,gBAAmBC,CACrB,GACMgC,EAAMjC,IAAO,CACjB,SAAYA,CACd,GACMkC,GAAM,CAAClC,EAAIC,KAAQ,CACvB,OAAUD,EACV,eAAgBC,CAClB,GACA,SAASkC,GAAiC3B,EAAIC,EAAK,CAMjD,GALID,EAAK,IACJe,EAAe,EAAG,MAAO,CAAC,EAC1Ba,GAAU,EAAG,YAAa,CAAC,EAC3BT,EAAa,GAEdnB,EAAK,EAAG,CACV,IAAM6B,EAAYxB,EAAc,EAC7BgB,EAAU,EACVZ,EAAW,eAAmBC,EAAgB,EAAGc,GAAKK,EAAO,YAAc,KAAO,KAAOA,EAAO,WAAW,gBAAiBA,EAAO,YAAc,KAAO,KAAOA,EAAO,WAAW,eAAe,CAAC,EAAE,YAAaA,EAAO,SAAS,EAAE,aAAcA,EAAO,UAAU,CACtQ,CACF,CACA,SAASC,GAAgD9B,EAAIC,EAAK,CAChE,GAAID,EAAK,EAAG,CACV,IAAM+B,EAASlB,EAAiB,EAC7BE,EAAe,EAAG,MAAO,EAAE,EAC3BC,EAAW,QAAS,UAAgF,CACrG,IAAMgB,EAAYf,EAAcc,CAAG,EAAE,UAC/BF,EAAYxB,EAAc,CAAC,EACjC,OAAUa,EAAYW,EAAO,UAAUG,EAAO,EAAE,CAAC,CACnD,CAAC,EACEJ,GAAU,EAAG,OAAQ,EAAE,EACvBT,EAAa,CAClB,CACA,GAAInB,EAAK,EAAG,CACV,IAAMgC,EAAS/B,EAAI,UAChBQ,EAAW,UAAcC,EAAgB,EAAGgB,GAAKM,EAAO,OAAQA,EAAO,gBAAgB,CAAC,EACxFX,EAAU,EACVZ,EAAW,YAAauB,EAAO,aAAiBC,CAAc,CACnE,CACF,CACA,SAASC,GAA0ClC,EAAIC,EAAK,CAC1D,GAAID,EAAK,EAAG,CACV,IAAMmC,EAAStB,EAAiB,EAC7BC,GAAwB,CAAC,EACzBC,EAAe,EAAG,MAAO,CAAC,EAAE,EAAG,MAAO,CAAC,EACvCC,EAAW,QAAS,UAA0E,CAC5FC,EAAckB,CAAG,EACpB,IAAMN,EAAYxB,EAAc,EAChC,OAAUa,EAAYW,EAAO,KAAK,CAAC,CACrC,CAAC,EACEV,EAAa,EACbJ,EAAe,EAAG,MAAO,CAAC,EAC1BC,EAAW,QAAS,UAA0E,CAC5FC,EAAckB,CAAG,EACpB,IAAMN,EAAYxB,EAAc,EAChC,OAAUa,EAAYW,EAAO,KAAK,CAAC,CACrC,CAAC,EACEV,EAAa,EAAE,EACfJ,EAAe,EAAG,MAAO,CAAC,EAC1BZ,EAAW,EAAG2B,GAAiD,EAAG,EAAG,MAAO,EAAE,EAC9EX,EAAa,EACbC,GAAsB,CAC3B,CACA,GAAIpB,EAAK,EAAG,CACV,IAAM6B,EAAYxB,EAAc,EAC7BgB,EAAU,EACVZ,EAAW,UAAc2B,EAAgB,EAAGX,EAAKI,EAAO,SAAW,KAAO,KAAOA,EAAO,QAAQ,QAAQ,CAAC,EACzGR,EAAU,EACVZ,EAAW,UAAc2B,EAAgB,EAAGX,EAAKI,EAAO,SAAW,MAAcA,EAAO,QAAQ,MAAQ,KAA9B,KAA4CA,EAAO,QAAQ,KAAK,QAAQ,CAAC,EAAE,YAAaA,EAAO,SAAW,MAAcA,EAAO,QAAQ,MAAQ,KAA9B,KAA4CA,EAAO,QAAQ,KAAK,SAAaI,CAAc,EACtRZ,EAAU,EACVZ,EAAW,UAAc2B,EAAgB,GAAIX,EAAKI,EAAO,SAAW,MAAcA,EAAO,QAAQ,MAAQ,KAA9B,KAA4CA,EAAO,QAAQ,KAAK,QAAQ,CAAC,EAAE,YAAaA,EAAO,SAAW,MAAcA,EAAO,QAAQ,MAAQ,KAA9B,KAA4CA,EAAO,QAAQ,KAAK,SAAaI,CAAc,EACvRZ,EAAU,EACVZ,EAAW,UAAc2B,EAAgB,GAAIX,EAAKI,EAAO,UAAY,KAAO,KAAOA,EAAO,SAAS,QAAQ,CAAC,EAC5GR,EAAU,EACVZ,EAAW,UAAWoB,EAAO,UAAY,KAAO,KAAOA,EAAO,SAAS,IAAI,CAChF,CACF,CACA,IAAMQ,GAAN,KAAyB,CACvB,MAAQ,EACR,mBAAqB,GACrB,KAAO,GACP,OAAS,GACT,OAAS,GACT,UAAY,GACZ,UAAY,GACZ,SAAW,GACX,SAAW,GACX,OAAS,EACT,aAAe,EACf,MAAQ,GACR,SAAW,GACX,UAAY,GACZ,cAAgB,EAChB,IAAM,GACN,WAAa,IACb,WAAa,GACb,aAAe,GACf,WAAa,CAAC,EACd,sBAAwB,IAExB,IAAM,GACN,QAAU,CAAC,OAAQ,MAAM,EACzB,SAAW,GACX,QAAU,EACV,KAAO,GACP,SAAW,GACX,SAAW,GACX,UAAY,GAEZ,SAAW,GACX,gBAAkB,IAClB,mBAAqB,GACrB,cAAgB,GAChB,0BAA4B,EAE5B,SAAW,GACX,cAAgB,EAEhB,gBAAkB,GAClB,WAAa,GACb,UAAY,GAEZ,WAAa,GAEb,gBAAkB,GAClB,aAAc,CAAC,CACjB,EAMMC,GAAN,KAA4B,CAC1B,MAAQ,SACR,mBAAqB,UACrB,KAAO,UACP,OAAS,UACT,OAAS,UACT,UAAY,UACZ,UAAY,UACZ,SAAW,UACX,SAAW,UACX,OAAS,SACT,aAAe,SACf,MAAQ,UACR,SAAW,UACX,UAAY,UACZ,cAAgB,gBAChB,IAAM,UACN,WAAa,SACb,WAAa,UACb,aAAe,iBACf,WAAa,CAAC,EACd,sBAAwB,SAExB,IAAM,UACN,QAAU,WACV,SAAW,iBACX,QAAU,gBACV,KAAO,UACP,SAAW,iBACX,SAAW,UACX,UAAY,iBAEZ,SAAW,UACX,gBAAkB,SAClB,mBAAqB,UACrB,cAAgB,iBAChB,0BAA4B,SAE5B,SAAW,UACX,cAAgB,SAEhB,gBAAkB,SAClB,WAAa,iBACb,UAAY,iBAEZ,WAAa,UAEb,gBAAkB,UAClB,aAAc,CAAC,CACjB,EACIC,IAA0B,IAAM,CAClC,MAAMA,CAAU,CACd,aACA,YAAYC,EAAc,CACxB,KAAK,aAAeA,CACtB,CACA,IAAIC,KAAUC,EAAM,CACdC,EAAU,GACZ,QAAQ,IAAIF,EAAO,GAAGC,CAAI,CAE9B,CACA,MAAME,EAAO,CACX,KAAK,aAAa,YAAYA,CAAK,CACrC,CACA,KAAKH,KAAUC,EAAM,CACnB,QAAQ,KAAKD,EAAO,GAAGC,CAAI,CAC7B,CACA,OAAO,UAAO,SAA2BG,EAAmB,CAC1D,OAAO,IAAKA,GAAqBN,GAAcO,EAAYC,EAAY,CAAC,CAC1E,EACA,OAAO,WAA0BC,EAAmB,CAClD,MAAOT,EACP,QAASA,EAAU,SACrB,CAAC,CACH,CACA,OAAOA,CACT,GAAG,EAgBH,IAAIU,GAAoB,SAAUA,EAAM,CACtC,OAAAA,EAAK,MAAW,QAChBA,EAAK,MAAW,QACTA,CACT,EAAEA,IAAQ,CAAC,CAAC,EAMRC,EAAqB,SAAUA,EAAO,CACxC,OAAAA,EAAM,QAAa,UACnBA,EAAM,MAAW,QACjBA,EAAM,MAAW,QACVA,CACT,EAAEA,GAAS,CAAC,CAAC,EAmBb,IAAIC,GAAgC,IAAM,CACxC,MAAMA,CAAgB,CACpB,OAIA,sBAAwB,IAAIC,EAI5B,sBAAwB,IAAIA,EAI5B,yBAA2B,IAAIA,EAI/B,0BAA4B,IAAIA,EAIhC,oBAAsB,IAAIA,EAI1B,qBAAuB,IAAIA,EAI3B,iBAAmB,IAAIA,EAIvB,kBAAoB,IAAIA,EAIxB,kBAAoB,IAAIA,EAIxB,oBAAsB,IAAIA,EAI1B,eAAiB,IAAIA,EAIrB,kBAAoB,IAAIA,EAIxB,SAAW,CACT,MAAO,CACT,EAIA,WAAa,CACX,IAAK,GACL,aAAc,GACd,YAAa,GACb,SAAU,GACV,UAAW,GACX,gBAAiB,GACjB,OAAQ,GACR,gBAAiB,EACnB,EAIA,UAAY,CACV,UAAW,2BACX,WAAY,KACZ,MAAO,EACP,SAAU,EACV,SAAU,CACZ,EAIA,WAIA,QAIA,SAIA,OAIA,OAAS,CAAC,EAIV,QAAU,CAAC,EAIX,SAAW,CAAC,EAIZ,SAAW,CAAC,EAIZ,SAAW,KAIX,QAAU,CAAC,EAKX,SAAW,CAAC,EAIZ,OAAS,KAKT,aAAe,CAAC,EAKhB,YAAc,KAId,eAAiB,UAIjB,SAAW,CAAC,EAIZ,aAAe,CAAC,EAEhB,IAAI,aAAc,CAChB,OAAO,KAAK,YACd,CAIA,QAAU,CACR,QAAS,CAAC,EACV,KAAM,CACJ,aAAc,CAAC,MAAM,EACrB,UAAW,CAAC,MAAM,EAClB,SAAU,CAAC,aAAa,CAC1B,CACF,EAEA,IAAI,QAAS,CACX,OAAO,KAAK,OACd,CAIA,MAAQ,CAOR,CACE,OAAQ,CAAC,QAAS,QAAS,UAAU,EACrC,IAAKC,GAAS,CACZA,EAAM,QAAU,KAAK,QAAU,KAAK,OAAO,KAAK,SAAS,KAAK,QAAQ,CAAC,GAAG,EAC5E,CACF,EAOA,CACE,OAAQ,CAAC,QAAS,QAAS,UAAU,EACrC,IAAKA,GAAS,CACZ,IAAMC,EAAS,KAAK,SAAS,QAAU,GACrCC,EAAO,CAAC,KAAK,SAAS,UACtBC,EAAM,KAAK,SAAS,IACpBC,EAAM,CACJ,cAAeD,EAAMF,EAAS,GAC9B,eAAgBE,EAAM,GAAKF,CAC7B,EACGC,GACH,KAAK,WAAW,QAAQG,GAAS,CAC/BA,EAAM,QAAUD,EAAI,aAAa,EACjCC,EAAM,QAAUD,EAAI,cAAc,CACpC,CAAC,EAEHJ,EAAM,IAAMI,CACd,CACF,EAAG,CACD,OAAQ,CAAC,QAAS,QAAS,UAAU,EACrC,IAAKJ,GAAS,CACZ,IAAMM,EAAQ,EAAE,KAAK,MAAM,EAAI,KAAK,SAAS,OAAO,QAAQ,CAAC,EAAI,KAAK,SAAS,OAC7EJ,EAAO,CAAC,KAAK,SAAS,UACtBK,EAAS,CAAC,EACRC,EAAQ,KACVC,EAAW,KAAK,OAAO,OAKzB,IAJAT,EAAM,MAAQ,CACZ,MAAO,GACP,MAAOM,CACT,EACOG,KAAa,GAClBD,EAAQ,KAAK,SAASC,CAAQ,EAC9BD,EAAQ,KAAK,SAAS,UAAY,KAAK,IAAIA,EAAO,KAAK,SAAS,KAAK,GAAKA,EAC1ER,EAAM,MAAM,MAAQQ,EAAQ,GAAKR,EAAM,MAAM,MAC7CO,EAAOE,CAAQ,EAAKP,EAA2EI,EAAQE,EAA5E,KAAK,OAAOC,CAAQ,EAAE,MAAQ,KAAK,OAAOA,CAAQ,EAAE,MAAQH,EAEzF,KAAK,QAAUC,EACf,KAAK,WAAW,QAAQ,CAACF,EAAOK,IAAM,CACpCL,EAAM,MAAQ,KAAK,QAAQK,CAAC,EAC5BL,EAAM,QAAUL,EAAM,IAAI,cAAc,EACxCK,EAAM,QAAUL,EAAM,IAAI,aAAa,CACzC,CAAC,CACH,CACF,EAAG,CACD,OAAQ,CAAC,QAAS,UAAU,EAC5B,IAAK,IAAM,CACT,IAAMW,EAAS,CAAC,EACdC,EAAQ,KAAK,OACbC,EAAW,KAAK,SAEhBC,EAAO,KAAK,IAAID,EAAS,MAAQ,EAAG,CAAC,EACrCE,EAAO,KAAK,KAAKH,EAAM,OAAS,CAAC,EAAI,EACnCI,EAAS,CAAC,EACZC,EAAU,CAAC,EACXC,EAASL,EAAS,MAAQD,EAAM,OAASC,EAAS,OAASC,EAAO,KAAK,IAAIA,EAAMC,CAAI,EAAI,EAE3F,IADAG,GAAU,EACHA,KAAW,GAEhBP,EAAO,KAAK,KAAK,UAAUA,EAAO,OAAS,EAAG,EAAI,CAAC,EACnDK,EAAO,KAAKG,EAAA,GACP,KAAK,WAAWR,EAAOA,EAAO,OAAS,CAAC,CAAC,EAC7C,EACDA,EAAO,KAAK,KAAK,UAAUC,EAAM,OAAS,GAAKD,EAAO,OAAS,GAAK,EAAG,EAAI,CAAC,EAC5EM,EAAQ,QAAQE,EAAA,GACX,KAAK,WAAWR,EAAOA,EAAO,OAAS,CAAC,CAAC,EAC7C,EAEH,KAAK,QAAUA,EACfK,EAASA,EAAO,IAAIX,IAClBA,EAAM,GAAK,GAAG,KAAK,cAAc,GAAGA,EAAM,EAAE,GAC5CA,EAAM,SAAW,GACjBA,EAAM,SAAW,GACVA,EACR,EACDY,EAAUA,EAAQ,IAAIZ,IACpBA,EAAM,GAAK,GAAG,KAAK,cAAc,GAAGA,EAAM,EAAE,GAC5CA,EAAM,SAAW,GACjBA,EAAM,SAAW,GACVA,EACR,EACD,KAAK,WAAaY,EAAQ,OAAO,KAAK,UAAU,EAAE,OAAOD,CAAM,CACjE,CACF,EAAG,CACD,OAAQ,CAAC,QAAS,QAAS,UAAU,EACrC,IAAK,IAAM,CACT,IAAMb,EAAM,KAAK,SAAS,IAAM,EAAI,GAClCY,EAAO,KAAK,QAAQ,OAAS,KAAK,OAAO,OACzCK,EAAc,CAAC,EACbX,EAAW,GACbY,EAAW,EACXC,EAAU,EACZ,KAAO,EAAEb,EAAWM,GAClBM,EAAWD,EAAYX,EAAW,CAAC,GAAK,EACxCa,EAAU,KAAK,QAAQ,KAAK,SAASb,CAAQ,CAAC,EAAI,KAAK,SAAS,OAChEW,EAAY,KAAKC,EAAWC,EAAUnB,CAAG,EAE3C,KAAK,aAAeiB,CACtB,CACF,EAAG,CACD,OAAQ,CAAC,QAAS,QAAS,UAAU,EACrC,IAAK,IAAM,CACT,IAAMG,EAAU,KAAK,SAAS,aAC5BH,EAAc,KAAK,aACnBhB,EAAM,CACJ,MAAS,KAAK,KAAK,KAAK,IAAIgB,EAAYA,EAAY,OAAS,CAAC,CAAC,CAAC,EAAIG,EAAU,EAC9E,eAAgBA,GAAW,GAC3B,gBAAiBA,GAAW,EAC9B,EACF,KAAK,UAAU,MAAQnB,EAAI,MAC3B,KAAK,UAAU,SAAWA,EAAI,cAAc,EAC5C,KAAK,UAAU,SAAWA,EAAI,eAAe,CAC/C,CACF,EAAG,CAuBD,OAAQ,CAAC,QAAS,QAAS,UAAU,EACrC,IAAKJ,GAAS,CACZ,IAAIsB,EAAUtB,EAAM,QAAU,KAAK,WAAW,UAAUK,GAASA,EAAM,KAAOL,EAAM,OAAO,EAAI,EAC/FsB,EAAU,KAAK,IAAI,KAAK,QAAQ,EAAG,KAAK,IAAI,KAAK,QAAQ,EAAGA,CAAO,CAAC,EACpE,KAAK,MAAMA,CAAO,CACpB,CACF,EAAG,CACD,OAAQ,CAAC,UAAU,EACnB,IAAK,IAAM,CACT,KAAK,QAAQ,KAAK,YAAY,KAAK,QAAQ,CAAC,CAC9C,CACF,EAAG,CACD,OAAQ,CAAC,QAAS,WAAY,QAAS,UAAU,EACjD,IAAK,IAAM,CACT,IAAMnB,EAAM,KAAK,SAAS,IAAM,EAAI,GAClCoB,EAAU,KAAK,SAAS,aAAe,EACvCC,EAAU,CAAC,EACTC,EAAOC,EAAKC,EAAOC,EAAOlB,EAAGmB,EAQjC,GAPAJ,EAAQ,KAAK,YAAY,KAAK,QAAQ,CAAC,EACnC,OAAOA,GAAU,SACnBA,GAASF,EAETE,EAAQ,EAEVC,EAAMD,EAAQ,KAAK,MAAM,EAAItB,EACzBA,IAAQ,IAAM,KAAK,SAAS,OAAQ,CACtC,IAAM2B,EAAS,KAAK,aAAa,OAAOC,GAC/B,KAAK,SAAS,MAAQ,IAAM,EAAIA,GAAWN,EAAQM,EAAUN,CACrE,EACDA,EAAQK,EAAO,OAASA,EAAOA,EAAO,OAAS,CAAC,EAAIL,CACtD,CACA,IAAKf,EAAI,EAAGmB,EAAI,KAAK,aAAa,OAAQnB,EAAImB,EAAGnB,IAC/CiB,EAAQ,KAAK,KAAK,KAAK,aAAajB,EAAI,CAAC,GAAK,CAAC,EAC/CkB,EAAQ,KAAK,KAAK,KAAK,IAAI,KAAK,aAAalB,CAAC,CAAC,EAAIa,EAAUpB,CAAG,GAC5D,KAAK,IAAIwB,EAAO,KAAMF,CAAK,GAAK,KAAK,IAAIE,EAAO,IAAKD,CAAG,GAAK,KAAK,IAAIE,EAAO,IAAKH,CAAK,GAAK,KAAK,IAAIG,EAAO,IAAKF,CAAG,IACtHF,EAAQ,KAAKd,CAAC,EAGlB,KAAK,WAAW,QAAQL,IACtBA,EAAM,SAAW,GACVA,EACR,EACDmB,EAAQ,QAAQQ,GAAQ,CACtB,KAAK,WAAWA,CAAI,EAAE,SAAW,EACnC,CAAC,EACG,KAAK,SAAS,SAChB,KAAK,WAAW,QAAQ3B,IACtBA,EAAM,WAAa,GACZA,EACR,EACD,KAAK,WAAW,KAAK,QAAQ,CAAC,EAAE,WAAa,GAEjD,CACF,CAAC,EACD,YAAY4B,EAAQ,CAClB,KAAK,OAASA,CAChB,CAKA,oBAAqB,CACnB,OAAO,KAAK,sBAAsB,aAAa,CACjD,CAKA,qBAAsB,CACpB,OAAO,KAAK,sBAAsB,aAAa,CACjD,CAKA,gBAAiB,CACf,OAAO,KAAK,yBAAyB,aAAa,CACpD,CAKA,iBAAkB,CAChB,OAAO,KAAK,0BAA0B,aAAa,CACrD,CAKA,mBAAoB,CAClB,OAAO,KAAK,oBAAoB,aAAa,CAC/C,CAKA,oBAAqB,CACnB,OAAO,KAAK,qBAAqB,aAAa,CAChD,CAKA,gBAAiB,CACf,OAAO,KAAK,iBAAiB,aAAa,CAC5C,CAKA,iBAAkB,CAChB,OAAO,KAAK,kBAAkB,aAAa,CAC7C,CAKA,iBAAkB,CAChB,OAAO,KAAK,kBAAkB,aAAa,CAC7C,CAKA,mBAAoB,CAClB,OAAO,KAAK,oBAAoB,aAAa,CAC/C,CAKA,cAAe,CACb,OAAO,KAAK,eAAe,aAAa,CAC1C,CAKA,iBAAkB,CAChB,OAAO,KAAK,kBAAkB,aAAa,CAC7C,CAKA,WAAWC,EAAS,CAClB,IAAMC,EAAgB,IAAIC,GACpBC,EAAiB,KAAK,iBAAiBH,EAASC,CAAa,EACnE,KAAK,SAAWhB,IAAA,GACXgB,GACAE,EAEP,CAUA,iBAAiBH,EAASC,EAAe,CACvC,IAAME,EAAiBlB,EAAA,GAClBe,GAECI,EAAc,IAAIC,GAClBC,EAAiB,CAACC,EAAMC,KAC5B,KAAK,OAAO,IAAI,WAAWA,CAAG,oBAAoBD,CAAI,KAAKC,CAAG,IAAIR,EAAQQ,CAAG,CAAC,yBAAyBA,CAAG,IAAIP,EAAcO,CAAG,CAAC,EAAE,EAC3HP,EAAcO,CAAG,GAE1B,QAAWA,KAAOL,EAChB,GAAIA,EAAe,eAAeK,CAAG,GAEnC,GAAIJ,EAAYI,CAAG,IAAM,SACnB,KAAK,WAAWL,EAAeK,CAAG,CAAC,GACrCL,EAAeK,CAAG,EAAI,CAACL,EAAeK,CAAG,EACzCL,EAAeK,CAAG,EAAIA,IAAQ,QAAU,KAAK,eAAeL,EAAeK,CAAG,EAAGL,EAAe,kBAAkB,EAAIA,EAAeK,CAAG,GAExIL,EAAeK,CAAG,EAAIF,EAAeF,EAAYI,CAAG,EAAGA,CAAG,UAEnDJ,EAAYI,CAAG,IAAM,WAAa,OAAOL,EAAeK,CAAG,GAAM,UAC1EL,EAAeK,CAAG,EAAIF,EAAeF,EAAYI,CAAG,EAAGA,CAAG,UACjDJ,EAAYI,CAAG,IAAM,kBAAoB,CAAC,KAAK,mBAAmBL,EAAeK,CAAG,CAAC,EAC9FL,EAAeK,CAAG,EAAIF,EAAeF,EAAYI,CAAG,EAAGA,CAAG,UACjDJ,EAAYI,CAAG,IAAM,iBAAmB,CAAC,KAAK,kBAAkBL,EAAeK,CAAG,CAAC,EAC5FL,EAAeK,CAAG,EAAIF,EAAeF,EAAYI,CAAG,EAAGA,CAAG,UACjDJ,EAAYI,CAAG,IAAM,kBAAoB,CAAC,KAAK,mBAAmBL,EAAeK,CAAG,CAAC,EAC9FL,EAAeK,CAAG,EAAIF,EAAeF,EAAYI,CAAG,EAAGA,CAAG,UACjDJ,EAAYI,CAAG,IAAM,WAC9B,GAAI,MAAM,QAAQL,EAAeK,CAAG,CAAC,EAAG,CACtC,IAAIC,EAAW,GACfN,EAAeK,CAAG,EAAE,QAAQX,GAAW,CACrCY,EAAW,OAAOZ,GAAY,QAChC,CAAC,EACIY,IACHN,EAAeK,CAAG,EAAIF,EAAeF,EAAYI,CAAG,EAAGA,CAAG,EAG9D,MACEL,EAAeK,CAAG,EAAIF,EAAeF,EAAYI,CAAG,EAAGA,CAAG,EAKlE,OAAOL,CACT,CAOA,eAAezB,EAAOgC,EAAoB,CACxC,IAAId,EAASlB,EACb,OAAIA,EAAQ,KAAK,OAAO,OAClBgC,EACF,KAAK,OAAO,IAAI,qGAAuG,GAEvHd,EAAS,KAAK,OAAO,OACrB,KAAK,OAAO,IAAI,gKAAkK,GAGhLlB,IAAU,KAAK,OAAO,SAAW,KAAK,SAAS,MAAQ,KAAK,SAAS,MACvE,KAAK,OAAO,IAAI,iGAAmG,EAGhHkB,CACT,CAKA,iBAAiBxB,EAAO,CACtB,KAAK,OAASA,CAChB,CASA,MAAMuC,EAAeC,EAAQZ,EAAS,CACpC,KAAK,iBAAiBW,CAAa,EACnC,KAAK,SAASC,CAAM,EACpB,KAAK,kBAAkB,EACvB,KAAK,WAAWZ,CAAO,EACvB,KAAK,SAAWf,EAAA,GACX,KAAK,UAEV,KAAK,sBAAsB,EAC3B,KAAK,SAAS,SAAU,CACtB,SAAU,CACR,KAAM,WACN,MAAO,KAAK,QACd,CACF,CAAC,EACD,KAAK,WAAW,UAAU,EAC1B,KAAK,SAAS,UAAW,CACvB,SAAU,CACR,KAAM,WACN,MAAO,KAAK,QACd,CACF,CAAC,CACH,CAIA,uBAAwB,CACtB,IAAM4B,EAAW,KAAK,OACpBC,EAAa,KAAK,SAAS,WACzBC,EAAQ,GACZ,GAAI,CAAC,OAAO,KAAKD,CAAU,EAAE,OAC3B,OAEF,GAAI,CAACD,EAAU,CACb,KAAK,SAAS,MAAQ,EACtB,MACF,CACA,QAAWL,KAAOM,EACZA,EAAW,eAAeN,CAAG,GAC3B,CAACA,GAAOK,GAAY,CAACL,EAAMO,IAC7BA,EAAQ,OAAOP,CAAG,GAIxB,KAAK,SAAWQ,EAAA/B,IAAA,GACX,KAAK,UACL6B,EAAWC,CAAK,GAFL,CAGd,MAAOD,EAAWC,CAAK,GAAKD,EAAWC,CAAK,EAAE,MAAQ,KAAK,eAAeD,EAAWC,CAAK,EAAE,MAAO,KAAK,SAAS,kBAAkB,EAAI,KAAK,SAAS,KACvJ,GAIA,OAAO,KAAK,SAAS,WACrB,KAAK,WAAW,aAAe,GAC/B,KAAK,WAAW,gBAAkB,KAAK,SAAS,UAChD,KAAK,WAAW,gBAAkB,KAAK,SAAS,UAChD,IAAME,EAAU,CAAC,EACjB,KAAK,OAAO,QAAQnB,GAAQ,CAC1B,IAAMoB,EAAS,KAAK,SAAS,MAAQpB,EAAK,UAAY,EACtDmB,EAAQ,KAAKC,CAAM,CACrB,CAAC,EACD,KAAK,SAAWD,EAChB,KAAK,YAAcF,EACnB,KAAK,WAAW,UAAU,CAC5B,CAKA,WAAWH,EAAQ,CACjB,KAAK,MAAM,cAAc,EAEzB,KAAK,WAAW,IAAM,KAAK,SAAS,IAChC,KAAK,SAAS,SAChB,KAAK,SAAW,CAAC,GAEnBA,EAAO,QAAQd,GAAQ,CACrB,IAAMoB,EAAS,KAAK,SAAS,MAAQpB,EAAK,UAAY,EACtD,KAAK,SAAS,KAAKoB,CAAM,CAC3B,CAAC,EACD,KAAK,QAAU,CAAC,EAChB,KAAK,MAAM,KAAK,WAAW,KAAK,SAAS,aAAa,EAAI,CAAC,KAAK,SAAS,cAAgB,CAAC,EAC1F,KAAK,WAAW,OAAO,EACvB,KAAK,QAAQ,EACb,KAAK,WAAW,SAAW,GAC3B,KAAK,WAAW,gBAAkB,KAAK,SAAS,UAChD,KAAK,WAAW,gBAAkB,KAAK,SAAS,UAChD,KAAK,YAAY,EACjB,KAAK,MAAM,cAAc,EACzB,KAAK,SAAS,aAAa,CAC7B,CAIA,aAAc,CACZ,KAAK,sBAAsB,KAAK,CAC9B,WAAY,KAAK,WACjB,UAAW,KAAK,UAChB,WAAY,KAAK,WACjB,QAAS,KAAK,QACd,SAAU,KAAK,QACjB,CAAC,CACH,CAIA,eAAgB,CACV,KAAK,SAAS,YAChB,KAAK,SAAS,aAAe,EAC7B,KAAK,SAAS,MAAQ,GAE1B,CAIA,QAAS,CACP,IAAI1C,EAAI,EACFmB,EAAI,KAAK,MAAM,OACnBwB,EAASrB,GAAQ,KAAK,aAAaA,CAAI,EACvChC,EAAQ,CAAC,EACX,KAAOU,EAAImB,GAAG,CACZ,IAAMyB,EAAe,KAAK,MAAM5C,CAAC,EAAE,OAAO,OAAO2C,CAAM,GACnD,KAAK,aAAa,KAAOC,EAAa,OAAS,IACjD,KAAK,MAAM5C,CAAC,EAAE,IAAIV,CAAK,EAEzBU,GACF,CACA,KAAK,WAAW,QAAQL,GAASA,EAAM,QAAU,KAAK,mBAAmBA,CAAK,CAAC,EAC/E,KAAK,YAAY,EACjB,KAAK,aAAe,CAAC,EAChB,KAAK,GAAG,OAAO,GAClB,KAAK,MAAM,OAAO,CAEtB,CAMA,MAAMkD,EAAW,CAEf,OADAA,EAAYA,GAAaC,EAAM,QACvBD,EAAW,CACjB,KAAKC,EAAM,MACX,KAAKA,EAAM,MACT,OAAO,KAAK,OACd,QACE,OAAO,KAAK,OAAS,KAAK,SAAS,aAAe,EAAI,KAAK,SAAS,MACxE,CACF,CAIA,SAAU,CACR,KAAK,MAAM,YAAY,EACvB,KAAK,SAAS,SAAS,EACvB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EAEnB,KAAK,OAAO,EAEZ,KAAK,MAAM,YAAY,EACvB,KAAK,SAAS,WAAW,CAC3B,CAKA,SAASC,EAAU,CACjB,GAAI,CAAC,KAAK,OAAO,OACf,MAAO,GAET,KAAK,iBAAiBA,CAAQ,EAC9B,KAAK,MAAM,UAAU,EAKrB,KAAK,SAAS,QAAQ,EACtB,KAAK,WAAW,OAAO,EACvB,KAAK,QAAQ,EACb,KAAK,MAAM,UAAU,EACrB,KAAK,SAAS,SAAS,CACzB,CAQA,gBAAgBC,EAAO,CACrB,IAAIC,EAAQ,KACVC,EAOF,OAAAA,EAAe,KAAK,UAAU,UAAU,QAAQ,0BAA2B,EAAE,EAAE,MAAM,GAAG,EACxFD,EAAQ,CACN,EAAG,CAACC,EAAa,CAAC,EAClB,EAAG,CAACA,EAAa,CAAC,CACpB,EACI,KAAK,GAAG,WAAW,GACrB,KAAK,WAAW,UAAU,EAExBF,EAAM,OAAS,cACjB,KAAK,WAAW,OAAS,IAE3B,KAAK,MAAM,CAAC,EACLC,CACT,CAIA,eAAgB,CACd,KAAK,MAAM,UAAU,EACrB,KAAK,SAAS,MAAM,CACtB,CAQA,oBAAoBD,EAAOG,EAAU,CACnC,IAAIC,EAAU,KACZC,EAAU,KACVC,EAAO,KACHC,EAAQ,KAAK,WAAWJ,EAAS,QAAS,KAAK,QAAQH,CAAK,CAAC,EACjEC,EAAQ,KAAK,WAAWE,EAAS,MAAM,MAAOI,CAAK,EACrD,OAAK,KAAK,GAAG,UAAU,GAGnB,KAAK,SAAS,MAChBH,EAAU,KAAK,YAAY,KAAK,QAAQ,CAAC,EACzCC,EAAU,CAAC,KAAK,YAAY,KAAK,QAAQ,EAAI,CAAC,EAAID,EAClDH,EAAM,IAAMA,EAAM,EAAIG,GAAWC,EAAUA,GAAWA,EAAUD,IAEhEA,EAAU,KAAK,SAAS,IAAM,KAAK,YAAY,KAAK,QAAQ,CAAC,EAAI,KAAK,YAAY,KAAK,QAAQ,CAAC,EAChGC,EAAU,KAAK,SAAS,IAAM,KAAK,YAAY,KAAK,QAAQ,CAAC,EAAI,KAAK,YAAY,KAAK,QAAQ,CAAC,EAChGC,EAAO,KAAK,SAAS,SAAW,GAAKC,EAAM,EAAI,EAAI,EACnDN,EAAM,EAAI,KAAK,IAAI,KAAK,IAAIA,EAAM,EAAGG,EAAUE,CAAI,EAAGD,EAAUC,CAAI,GAE/DL,GAZE,EAaX,CASA,eAAeD,EAAOQ,EAASC,EAAe,CAC5C,IAAMC,EAAa,CAAC,QAAS,MAAM,EACjCH,EAAQ,KAAK,WAAWC,EAAQ,QAAS,KAAK,QAAQR,CAAK,CAAC,EAC5DC,EAAQO,EAAQ,MAAM,QACtBG,EAAYD,EAAW,EAAE,KAAK,SAAS,IAAMH,EAAM,EAAI,CAAC,KAAK,SAAS,IAAMA,EAAM,EAAI,CAAC,KAAK,SAAS,IAAI,EACvGK,EAAehD,EAASiD,GACxBN,EAAM,IAAM,GAAK,KAAK,GAAG,UAAU,GAAK,CAAC,KAAK,GAAG,OAAO,KAC1D,KAAK,MAAM,CAAC,KAAK,SAAS,cAAgB,KAAK,SAAS,UAAU,EAClEK,EAAgB,KAAK,QAAQX,EAAM,EAAGM,EAAM,IAAM,EAAII,EAAYH,EAAQ,SAAS,EACnF5C,EAAU,KAAK,QAAQ,EACvBiD,EAAa,KAAK,QAAQD,IAAkB,GAAK,OAAYA,CAAa,EACtEhD,IAAYiD,IACd,KAAK,WAAW,UAAU,EAC1B,KAAK,OAAO,GAEdL,EAAQ,UAAYG,GAChB,KAAK,IAAIJ,EAAM,CAAC,EAAI,GAAK,IAAI,KAAK,EAAE,QAAQ,EAAIC,EAAQ,KAAO,MACjEC,EAAc,GAGb,KAAK,GAAG,UAAU,IAGvB,KAAK,MAAM,UAAU,EACrB,KAAK,SAAS,SAAS,EACzB,CAQA,QAAQK,EAAYH,EAAW,CAC7B,IACE/D,EAAQ,KAAK,MAAM,EACjBc,EAAc,KAAK,YAAY,EACjCqD,EAAW,GACT,KAAK,SAAS,SAChBrD,EAAcA,EAAY,IAAIY,IACxBA,IAAS,IACXA,GAAQ,MAEHA,EACR,GAQH,QAAStB,EAAI,EAAGA,EAAIU,EAAY,SAC1BiD,IAAc,QAAUG,EAAapD,EAAYV,CAAC,EAAI,IAAQ8D,EAAapD,EAAYV,CAAC,EAAI,GAC9F+D,EAAW/D,EAGF2D,IAAc,SAAWG,EAAapD,EAAYV,CAAC,EAAIJ,EAAQ,IAAQkE,EAAapD,EAAYV,CAAC,EAAIJ,EAAQ,GACtHmE,EAAW/D,EAAI,EACN,KAAK,IAAI8D,EAAY,IAAKpD,EAAYV,CAAC,CAAC,GAAK,KAAK,IAAI8D,EAAY,IAAKpD,EAAYV,EAAI,CAAC,GAAKU,EAAYV,CAAC,EAAIJ,CAAK,EAC5HmE,EAAWJ,IAAc,OAAS3D,EAAI,EAAIA,EACjC2D,IAAc,MAAQG,EAAapD,EAAYV,CAAC,EAAI,IAAQ8D,EAAapD,EAAYV,CAAC,EAAI,KACnG+D,EAAW/D,GAET+D,IAAa,IAZqB/D,IAYtC,CAMF,OAAK,KAAK,SAAS,OAEb,KAAK,IAAI8D,EAAY,IAAKpD,EAAY,KAAK,QAAQ,CAAC,CAAC,EACvDqD,EAAWD,EAAa,KAAK,QAAQ,EAC5B,KAAK,IAAIA,EAAY,IAAKpD,EAAY,KAAK,QAAQ,CAAC,CAAC,IAC9DqD,EAAWD,EAAa,KAAK,QAAQ,IAGlCC,CACT,CAMA,QAAQD,EAAY,CAClB,IAAME,EAAU,KAAK,MAAM,EAAI,EAC3B,KAAK,GAAG,WAAW,GACrB,KAAK,gBAAgB,EAEnBA,IACF,KAAK,MAAM,WAAW,EACtB,KAAK,SAAS,WAAW,GAE3B,KAAK,UAAU,UAAY,eAAiBF,EAAa,cACzD,KAAK,UAAU,WAAa,KAAK,MAAM,EAAI,IAAO,KAAO,KAAK,SAAS,gBAAkB,IAAM,KAAK,SAAS,gBAAkB,GAEjI,CAMA,GAAGG,EAAO,CACR,OAAO,KAAK,QAAQ,QAAQA,CAAK,GAAK,KAAK,QAAQ,QAAQA,CAAK,EAAI,CACtE,CAMA,QAAQF,EAAU,CAChB,GAAIA,IAAa,OACf,OAAO,KAAK,SAEd,GAAI,KAAK,OAAO,SAAW,EAI3B,IADAA,EAAW,KAAK,UAAUA,CAAQ,EAC9B,KAAK,WAAaA,EAAU,CAC9B,IAAMf,EAAQ,KAAK,SAAS,SAAU,CACpC,SAAU,CACR,KAAM,WACN,MAAOe,CACT,CACF,CAAC,EAID,KAAK,SAAWA,EAChB,KAAK,WAAW,UAAU,EAC1B,KAAK,SAAS,UAAW,CACvB,SAAU,CACR,KAAM,WACN,MAAO,KAAK,QACd,CACF,CAAC,CACH,CACA,OAAO,KAAK,SACd,CAMA,WAAWG,EAAM,CACf,OAAI,OAAOA,GAAS,WAClB,KAAK,aAAaA,CAAI,EAAI,GACtB,KAAK,GAAG,OAAO,GACjB,KAAK,MAAM,OAAO,GAGf,OAAO,KAAK,KAAK,YAAY,CACtC,CAKA,MAAMH,EAAU,CACdA,EAAW,KAAK,UAAUA,CAAQ,EAC9BA,IAAa,SAGjB,KAAK,OAAS,EACd,KAAK,SAAWA,EAChB,KAAK,UAAU,CAAC,YAAa,YAAY,CAAC,EAC1C,KAAK,QAAQ,KAAK,YAAYA,CAAQ,CAAC,EACvC,KAAK,SAAS,CAAC,YAAa,YAAY,CAAC,EAC3C,CAOA,UAAUA,EAAUI,EAAU,CAC5B,IAAMhD,EAAI,KAAK,OAAO,OACpBiD,EAAID,EAAW,EAAI,KAAK,QAAQ,OAClC,MAAI,CAAC,KAAK,WAAWJ,CAAQ,GAAK5C,EAAI,EACpC4C,EAAW,QACFA,EAAW,GAAKA,GAAY5C,EAAIiD,KACzCL,IAAaA,EAAWK,EAAI,GAAKjD,EAAIA,GAAKA,EAAIiD,EAAI,GAE7CL,CACT,CAMA,SAASA,EAAU,CACjB,OAAAA,GAAY,KAAK,QAAQ,OAAS,EAC3B,KAAK,UAAUA,EAAU,EAAI,CACtC,CAMA,QAAQI,EAAW,GAAO,CACxB,IAAMhE,EAAW,KAAK,SAClBkD,EAAU,KAAK,aAAa,OAC9BtD,EACAsE,EACAC,EACF,GAAInE,EAAS,KACXkD,EAAU,KAAK,QAAQ,OAAS,EAAI,KAAK,OAAO,OAAS,UAChDlD,EAAS,WAAaA,EAAS,MAAO,CAI/C,IAHAJ,EAAW,KAAK,OAAO,OACvBsE,EAAuB,KAAK,WAAW,EAAEtE,CAAQ,EAAE,MACnDuE,EAAe,KAAK,OACbvE,KAAa,IAElBsE,GAAwB,CAAC,KAAK,WAAWtE,CAAQ,EAAE,MAAQ,KAAK,SAAS,OACrE,EAAAsE,EAAuBC,KAA3B,CAIFjB,EAAUtD,EAAW,CACvB,MAAWI,EAAS,OAClBkD,EAAU,KAAK,OAAO,OAAS,EAE/BA,EAAU,KAAK,OAAO,OAASlD,EAAS,MAE1C,OAAIgE,IACFd,GAAW,KAAK,QAAQ,OAAS,GAE5B,KAAK,IAAIA,EAAS,CAAC,CAC5B,CAMA,QAAQc,EAAW,GAAO,CACxB,OAAOA,EAAW,EAAI,KAAK,QAAQ,OAAS,CAC9C,CAMA,MAAMJ,EAAU,CACd,OAAIA,IAAa,OACR,KAAK,OAAO,MAAM,GAE3BA,EAAW,KAAK,UAAUA,EAAU,EAAI,EACjC,CAAC,KAAK,OAAOA,CAAQ,CAAC,EAC/B,CAMA,QAAQA,EAAU,CAChB,OAAIA,IAAa,OACR,KAAK,SAAS,MAAM,GAE7BA,EAAW,KAAK,UAAUA,EAAU,EAAI,EACjC,KAAK,SAASA,CAAQ,EAC/B,CAMA,OAAOA,EAAU,CACf,IAAMQ,EAAM,KAAK,QAAQ,OAAS,EAChCC,EAAOD,EAAM,KAAK,OAAO,OACzBE,EAAMC,GAASA,EAAQ,IAAM,EAAIF,EAAOE,EAAQ,EAAIH,GAAOG,EAAQ,GAAK,EAC1E,OAAIX,IAAa,OACR,KAAK,QAAQ,IAAI,CAACY,EAAG3E,IAAMyE,EAAIzE,CAAC,CAAC,EAEnC,KAAK,QAAQ,IAAI,CAAC2E,EAAG3E,IAAM2E,IAAMZ,EAAWU,EAAIzE,CAAC,EAAI,IAAI,EAAE,OAAOsB,GAAQA,CAAI,CACvF,CAMA,MAAMsD,EAAO,CACX,OAAIA,IAAU,SACZ,KAAK,OAASA,GAET,KAAK,MACd,CAOA,YAAYb,EAAU,CACpB,IAAIc,EAAa,EACfC,EAAcf,EAAW,EACzBD,EACA1C,EACF,OAAI2C,IAAa,QACf3C,EAAS,KAAK,aAAa,IAAI,CAACE,EAAMoD,IAC7B,KAAK,YAAYA,CAAK,CAC9B,EACMtD,IAEL,KAAK,SAAS,QACZ,KAAK,SAAS,MAChByD,EAAa,GACbC,EAAcf,EAAW,GAE3BD,EAAa,KAAK,aAAaC,CAAQ,EACvCD,IAAe,KAAK,MAAM,EAAIA,GAAc,KAAK,aAAagB,CAAW,GAAK,IAAM,EAAID,GAExFf,EAAa,KAAK,aAAagB,CAAW,GAAK,EAEjDhB,EAAa,KAAK,KAAKA,CAAU,EAC1BA,EACT,CAQA,UAAUiB,EAAMC,EAAIC,EAAQ,CAC1B,OAAIA,IAAW,EACN,EAEF,KAAK,IAAI,KAAK,IAAI,KAAK,IAAID,EAAKD,CAAI,EAAG,CAAC,EAAG,CAAC,EAAI,KAAK,IAAI,CAACE,GAAU,KAAK,SAAS,UAAU,CACrG,CAMA,GAAGlB,EAAUa,EAAO,CAClB,IAAIhE,EAAU,KAAK,QAAQ,EACzBsE,EAAS,KACTC,EAAWpB,EAAW,KAAK,SAASnD,CAAO,EAC3CyC,EAAU,KAAK,QAAQ,EACvB+B,EAAe,EACXzB,EAAY,EAAEwB,EAAW,GAAK,EAAEA,EAAW,GAC/CjF,EAAQ,KAAK,OAAO,OACpBkD,EAAU,KAAK,QAAQ,EACrB,KAAK,SAAS,MACZ,CAAC,KAAK,SAAS,QAAU,KAAK,IAAI+B,CAAQ,EAAIjF,EAAQ,IACxDiF,GAAYxB,EAAY,GAAKzD,GAE/B6D,EAAWnD,EAAUuE,EACrBD,IAAWnB,EAAWX,GAAWlD,EAAQA,GAASA,EAAQkD,EACtD8B,IAAWnB,GAAYmB,EAASC,GAAY9B,GAAW6B,EAASC,EAAW,IAC7EvE,EAAUsE,EAASC,EACnBpB,EAAWmB,EACXE,EAAe,GACf,KAAK,MAAMxE,CAAO,EAClB,KAAK,YAAY,IAEV,KAAK,SAAS,QACvByC,GAAW,EACXU,GAAYA,EAAWV,EAAUA,GAAWA,GAE5CU,EAAW,KAAK,IAAIX,EAAS,KAAK,IAAIC,EAASU,CAAQ,CAAC,EAE1D,WAAW,IAAM,CACf,KAAK,MAAM,KAAK,UAAUnD,EAASmD,EAAUa,CAAK,CAAC,EACnD,KAAK,QAAQb,CAAQ,EACrB,KAAK,OAAO,CACd,EAAGqB,CAAY,CACjB,CAKA,KAAKR,EAAO,CACVA,EAAQA,GAAS,GACjB,KAAK,GAAG,KAAK,SAAS,KAAK,QAAQ,CAAC,EAAI,EAAGA,CAAK,CAClD,CAKA,KAAKA,EAAO,CACVA,EAAQA,GAAS,GACjB,KAAK,GAAG,KAAK,SAAS,KAAK,QAAQ,CAAC,EAAI,EAAGA,CAAK,CAClD,CAKA,gBAAgB5B,EAAO,CAErB,GAAIA,IAAU,OAMZ,MAAO,GAET,KAAK,MAAM,WAAW,EACtB,KAAK,SAAS,YAAY,CAC5B,CAKA,WAAY,CACV,IAAIpD,EACJ,OAAI,KAAK,OACPA,EAAQ,KAAK,OAEb,KAAK,OAAO,IAAI,gCAAgC,EAE3CA,CACT,CAKA,SAASyF,EAAS,CAChB,KAAK,OAASA,CAChB,CAIA,mBAAoB,CAKlB,IAAIC,EACA,KAAK,YAAc,KAAK,WAAW,SACrCA,EAAU,IAAI,IACd,KAAK,WAAW,QAAQhE,GAAQ,CAC1BA,EAAK,MACPgE,EAAQ,IAAIhE,EAAK,GAAIA,EAAK,IAAI,CAElC,CAAC,GAEH,KAAK,WAAa,KAAK,OAAO,IAAI3B,IACzB,CACL,GAAI,GAAGA,EAAM,EAAE,GACf,SAAU,GACV,OAAQA,EAAM,OACd,UAAWA,EAAM,UACjB,MAAO,EACP,SAAU,GACV,KAAM2F,EAAUA,EAAQ,IAAI3F,EAAM,EAAE,EAAI,GACxC,aAAcA,EAAM,QACtB,EACD,CACH,CAMA,mBAAmBA,EAAO,CAExB,IAAM4F,EAAiB,CACrB,OAAU5F,EAAM,SAChB,OAAUA,EAAM,WAChB,OAAUA,EAAM,SAChB,SAAYA,EAAM,WAClB,kBAAmBA,EAAM,gBACzB,mBAAoBA,EAAM,gBAC5B,EACA,OAAI,KAAK,SAAS,YAChB4F,EAAe,KAAK,SAAS,SAAS,EAAI5F,EAAM,oBAE9C,KAAK,SAAS,aAChB4F,EAAe,KAAK,SAAS,UAAU,EAAI5F,EAAM,qBAE5C4F,CACT,CAQA,IAAIC,EAAGC,EAAGC,EAAG,CACX,IAAMjG,EAAM,KAAK,SAAS,IAC1B,OAAQgG,EAAG,CACT,IAAK,IACH,OAAOhG,EAAM+F,EAAIE,EAAIF,EAAIE,EAC3B,IAAK,IACH,OAAOjG,EAAM+F,EAAIE,EAAIF,EAAIE,EAC3B,IAAK,KACH,OAAOjG,EAAM+F,GAAKE,EAAIF,GAAKE,EAC7B,IAAK,KACH,OAAOjG,EAAM+F,GAAKE,EAAIF,GAAKE,EAC7B,QACE,KACJ,CACF,CAUA,SAASC,EAAMC,EAAMC,EAAW5B,EAAO6B,EAAO,CAC5C,OAAQH,EAAM,CACZ,IAAK,cACH,KAAK,sBAAsB,KAAKA,CAAI,EACpC,MACF,IAAK,SACH,KAAK,yBAAyB,KAAKC,CAAI,EACvC,MACF,IAAK,UACH,KAAK,0BAA0B,KAAKA,CAAI,EACxC,MACF,IAAK,OACH,KAAK,eAAe,KAAKD,CAAI,EAC7B,MACF,IAAK,UACH,KAAK,kBAAkB,KAAKA,CAAI,EAChC,MACF,IAAK,SACH,KAAK,iBAAiB,KAAKA,CAAI,EAC/B,MACF,IAAK,UACH,KAAK,kBAAkB,KAAKA,CAAI,EAChC,MACF,IAAK,UACH,KAAK,kBAAkB,KAAKA,CAAI,EAChC,MACF,IAAK,YACH,KAAK,oBAAoB,KAAKA,CAAI,EAClC,MACF,IAAK,YACH,KAAK,oBAAoB,KAAKA,CAAI,EAClC,MACF,IAAK,aACH,KAAK,qBAAqB,KAAKA,CAAI,EACnC,MACF,QACE,KACJ,CACF,CAKA,MAAMA,EAAM,CACV,CAACA,CAAI,EAAE,OAAO,KAAK,QAAQ,KAAKA,CAAI,GAAK,CAAC,CAAC,EAAE,QAAQI,GAAa,CAC5D,KAAK,QAAQ,QAAQA,CAAS,IAAM,SACtC,KAAK,QAAQ,QAAQA,CAAS,EAAI,GAEpC,KAAK,QAAQ,QAAQA,CAAS,GAChC,CAAC,CACH,CAKA,MAAMJ,EAAM,CACV,CAACA,CAAI,EAAE,OAAO,KAAK,QAAQ,KAAKA,CAAI,GAAK,CAAC,CAAC,EAAE,QAAQI,GAAa,EAC5D,KAAK,QAAQ,QAAQA,CAAS,IAAM,GAAO,KAAK,QAAQ,QAAQA,CAAS,IAC3E,KAAK,QAAQ,QAAQA,CAAS,GAElC,CAAC,CACH,CAKA,SAASC,EAAQ,CACXA,EAAO,OAASC,GAAK,QAClB,KAAK,QAAQ,KAAKD,EAAO,IAAI,EAGhC,KAAK,QAAQ,KAAKA,EAAO,IAAI,EAAI,KAAK,QAAQ,KAAKA,EAAO,IAAI,EAAE,OAAOA,EAAO,IAAI,EAFlF,KAAK,QAAQ,KAAKA,EAAO,IAAI,EAAIA,EAAO,KAI1C,KAAK,QAAQ,KAAKA,EAAO,IAAI,EAAI,KAAK,QAAQ,KAAKA,EAAO,IAAI,EAAE,OAAO,CAACE,EAAK,IACpE,KAAK,QAAQ,KAAKF,EAAO,IAAI,EAAE,QAAQE,CAAG,IAAM,CACxD,EAEL,CAKA,UAAUC,EAAQ,CAChBA,EAAO,QAAQnD,GAAS,CACtB,KAAK,SAASA,CAAK,EAAI,EACzB,CAAC,CACH,CAKA,SAASmD,EAAQ,CACfA,EAAO,QAAQnD,GAAS,CACtB,OAAO,KAAK,SAASA,CAAK,CAC5B,CAAC,CACH,CAOA,QAAQA,EAAO,CACb,IAAM5B,EAAS,CACb,EAAG,KACH,EAAG,IACL,EACA,OAAA4B,EAAQA,EAAM,eAAiBA,GAAS,OAAO,MAC/CA,EAAQA,EAAM,SAAWA,EAAM,QAAQ,OAASA,EAAM,QAAQ,CAAC,EAAIA,EAAM,gBAAkBA,EAAM,eAAe,OAASA,EAAM,eAAe,CAAC,EAAIA,EAC/IA,EAAM,OACR5B,EAAO,EAAI4B,EAAM,MACjB5B,EAAO,EAAI4B,EAAM,QAEjB5B,EAAO,EAAI4B,EAAM,QACjB5B,EAAO,EAAI4B,EAAM,SAEZ5B,CACT,CAMA,WAAWgF,EAAQ,CACjB,MAAO,CAAC,MAAM,WAAWA,CAAM,CAAC,CAClC,CAMA,mBAAmBC,EAAO,CACxB,OAAO,KAAK,WAAWA,CAAK,GAAK,OAAOA,GAAU,SACpD,CAMA,kBAAkBA,EAAO,CACvB,OAAO,KAAK,WAAWA,CAAK,GAAK,OAAOA,GAAU,QACpD,CAMA,mBAAmBA,EAAO,CACxB,OAAO,OAAOA,GAAU,UAAY,OAAOA,GAAU,SACvD,CAQA,WAAWC,EAAOC,EAAQ,CACxB,OAAaD,IAAT,MAA2BC,IAAT,KACb,CACL,EAAG,EACH,EAAG,CACL,EAEK,CACL,EAAGD,EAAM,EAAIC,EAAO,EACpB,EAAGD,EAAM,EAAIC,EAAO,CACtB,CACF,CACA,OAAO,UAAO,SAAiCC,EAAmB,CAChE,OAAO,IAAKA,GAAqBpH,GAAoBqH,EAASC,EAAS,CAAC,CAC1E,EACA,OAAO,WAA0BC,EAAmB,CAClD,MAAOvH,EACP,QAASA,EAAgB,SAC3B,CAAC,CACH,CACA,OAAOA,CACT,GAAG,EAICwH,IAAkC,IAAM,CAC1C,MAAMA,CAAkB,CACtB,gBAIA,gBAIA,aAAe,GAIf,OAAS,CAAC,EAIV,SAAW,CACT,SAAU,GACV,KAAM,CACJ,SAAU,GACV,SAAU,EACZ,EACA,KAAM,CACJ,SAAU,GACV,SAAU,EACZ,CACF,EAIA,UAAY,CACV,SAAU,GACV,KAAM,CAAC,CACT,EACA,YAAYC,EAAiB,CAC3B,KAAK,gBAAkBA,EACvB,KAAK,eAAe,CACtB,CACA,aAAc,CACZ,KAAK,gBAAgB,YAAY,CACnC,CAIA,gBAAiB,CACf,IAAMC,EAAuB,KAAK,gBAAgB,oBAAoB,EAAE,KAAKC,EAAI9C,GAAS,CACxF,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,KAAK,EACV,KAAK,OAAO,EACZ,KAAK,gBAAgB,YAAY,CACnC,CAAC,CAAC,EAGI+C,EAAmB,KAAK,gBAAgB,gBAAgB,EAAE,KAAKrE,EAAOiD,GAAQA,EAAK,SAAS,OAAS,UAAU,EAAGmB,EAAInB,GAAQ,CAClI,KAAK,OAAO,CAOd,CAAC,CAAC,EACIqB,EAAqB,KAAK,gBAAgB,kBAAkB,EAAE,KAAKF,EAAI,IAAM,CACjF,KAAK,gBAAgB,EACrB,KAAK,KAAK,EACV,KAAK,OAAO,EACZ,KAAK,gBAAgB,YAAY,CACnC,CAAC,CAAC,EACIG,EAAYpH,EAAMgH,EAAsBE,EAAkBC,CAAkB,EAClF,KAAK,gBAAkBC,EAAU,UAAU,IAAM,CAAC,CAAC,CACrD,CAIA,YAAa,CACX,KAAK,SAAS,SAAW,GACzB,KAAK,SAAS,KAAK,SAAW,KAAK,gBAAgB,SAAS,QAAQ,CAAC,EACrE,KAAK,SAAS,KAAK,SAAW,KAAK,gBAAgB,SAAS,QAAQ,CAAC,EACrE,KAAK,UAAU,SAAW,GAC1B,KAAK,gBAAgB,QAAU,KAAK,SACpC,KAAK,gBAAgB,SAAW,KAAK,SACvC,CAIA,iBAAkB,CAChB,IAAIlH,EAAGmH,EAAGC,EACJC,EAAQ,KAAK,gBAAgB,OAAO,EAAE,OAAS,EACnDC,EAAQD,EAAQ,KAAK,gBAAgB,MAAM,EAAE,OAC7ChE,EAAU,KAAK,gBAAgB,QAAQ,EAAI,EAC3CkE,EAAQ,CAAC,EACTpH,EAAW,KAAK,gBAAgB,SAC9BE,EAAOF,EAAS,QAAUA,EAAS,WAAaA,EAAS,SAAW,EAAI,KAAK,MAAM,OAAOA,EAAS,QAAQ,CAAC,GAAK,KAAK,MAAMA,EAAS,KAAK,EAK9I,GAJAE,EAAO,CAACA,EACJF,EAAS,UAAY,SACvBA,EAAS,QAAU,KAAK,IAAI,CAACA,EAAS,QAASA,EAAS,KAAK,GAE3DA,EAAS,MAAQA,EAAS,UAAY,OACxC,IAAKH,EAAIqH,EAAOF,EAAI,EAAGC,EAAI,EAAGpH,EAAIsH,EAAOtH,IAAK,CAC5C,GAAImH,GAAK9G,GAAQ8G,IAAM,EAAG,CAKxB,GAJAI,EAAM,KAAK,CACT,MAAO,KAAK,IAAIlE,EAASrD,EAAIqH,CAAK,EAClC,IAAKrH,EAAIqH,EAAQhH,EAAO,CAC1B,CAAC,EACG,KAAK,IAAIgD,EAASrD,EAAIqH,CAAK,IAAMhE,EACnC,MAEF8D,EAAI,EAAG,EAAEC,CACX,CACAD,GAAK,KAAK,gBAAgB,QAAQ,KAAK,gBAAgB,SAASnH,CAAC,CAAC,CACpE,CAEF,KAAK,OAASuH,CAChB,CAKA,MAAO,CACL,IAAIC,EACErH,EAAW,KAAK,gBAAgB,SACpCD,EAAQ,KAAK,gBAAgB,MAAM,EACnCuH,EAAWvH,EAAM,QAAUC,EAAS,MAGtC,GAFA,KAAK,SAAS,SAAW,CAACA,EAAS,KAAOsH,EAC1C,KAAK,UAAU,SAAW,CAACtH,EAAS,MAAQsH,EACxCtH,EAAS,KAEX,GADAqH,EAAa,KAAK,OAAO,OAAS,KAAK,UAAU,KAAK,OAClDrH,EAAS,UAAYqH,IAAe,EACtC,KAAK,UAAU,KAAO,CAAC,EACvBtH,EAAM,QAAQoB,GAAQ,CACpB,KAAK,UAAU,KAAK,KAAK,CACvB,OAAQ,GACR,GAAI,OAAOA,EAAK,EAAE,GAClB,aAAcA,EAAK,WACnB,iBAAkB,EACpB,CAAC,CACH,CAAC,UACQkG,EAAa,EAAG,CACzB,IAAME,EAAS,KAAK,UAAU,KAAK,OAAS,EAAI,KAAK,UAAU,KAAK,OAAS,EAC7E,QAAS1H,EAAI,EAAGA,EAAIwH,EAAYxH,IAC9B,KAAK,UAAU,KAAK,KAAK,CACvB,OAAQ,GACR,GAAI,OAAOA,EAAI0H,CAAM,GACrB,aAAc,GACd,iBAAkB,EACpB,CAAC,CAEL,MAAWF,EAAa,GACtB,KAAK,UAAU,KAAK,OAAOA,EAAY,KAAK,IAAIA,CAAU,CAAC,EAG/D,KAAK,gBAAgB,QAAU,KAAK,SACpC,KAAK,gBAAgB,SAAW,KAAK,SACvC,CAIA,QAAS,CACP,KAAK,kBAAkB,EACvB,KAAK,YAAY,CACnB,CAIA,mBAAoB,CAClB,IAAMrH,EAAW,KAAK,gBAAgB,SACpCwH,EAAOxH,EAAS,MAAQA,EAAS,OACjCuE,EAAQ,KAAK,gBAAgB,SAAS,KAAK,gBAAgB,QAAQ,CAAC,EAClEvE,EAAS,MACX,KAAK,SAAS,KAAK,SAAW,CAACwH,GAAQjD,GAAS,KAAK,gBAAgB,QAAQ,EAAI,EACjF,KAAK,SAAS,KAAK,SAAW,CAACiD,GAAQjD,GAAS,KAAK,gBAAgB,QAAQ,EAAI,GAEnF,KAAK,gBAAgB,QAAU,KAAK,QACtC,CAIA,aAAc,CACZ,IAAIkD,EACC,KAAK,gBAAgB,SAAS,OAGnC,KAAK,UAAU,KAAK,QAAQtG,GAAQ,CAC9BA,EAAK,SAAW,KAClBA,EAAK,OAAS,GAElB,CAAC,EACDsG,EAAgB,KAAK,SAAS,EAC1B,KAAK,UAAU,KAAK,SACtB,KAAK,UAAU,KAAKA,CAAa,EAAE,OAAS,IAE9C,KAAK,gBAAgB,SAAW,KAAK,UACvC,CAKA,UAAW,CACT,IAAMhH,EAAU,KAAK,gBAAgB,SAAS,KAAK,gBAAgB,QAAQ,CAAC,EACxEiH,EACEN,EAAQ,KAAK,OAAO,OAAO,CAACO,EAAMpD,IAC/BoD,EAAK,OAASlH,GAAWkH,EAAK,KAAOlH,CAC7C,EAAE,IAAI,EACP,OAAAiH,EAAe,KAAK,OAAO,UAAUC,GAC5BA,EAAK,QAAUP,EAAM,OAASO,EAAK,MAAQP,EAAM,GACzD,EACMM,CACT,CAMA,aAAaE,EAAW,CACtB,IAAIhE,EAAUiE,EACR7H,EAAW,KAAK,gBAAgB,SACtC,OAAIA,EAAS,UAAY,QACvB4D,EAAW,KAAK,SAAS,EACzBiE,EAAS,KAAK,OAAO,OACrBD,EAAY,EAAEhE,EAAW,EAAEA,EAC3BA,EAAW,KAAK,QAAQA,EAAWiE,EAASA,GAAUA,CAAM,EAAE,QAE9DjE,EAAW,KAAK,gBAAgB,SAAS,KAAK,gBAAgB,QAAQ,CAAC,EACvEiE,EAAS,KAAK,gBAAgB,MAAM,EAAE,OACtCD,EAAYhE,GAAY,CAAC5D,EAAS,QAAU4D,GAAY,CAAC5D,EAAS,SAE7D4D,CACT,CAKA,KAAKa,EAAO,CACV,KAAK,gBAAgB,GAAG,KAAK,aAAa,EAAI,EAAGA,CAAK,CACxD,CAKA,KAAKA,EAAO,CACV,KAAK,gBAAgB,GAAG,KAAK,aAAa,EAAK,EAAGA,CAAK,CACzD,CAOA,GAAGb,EAAUa,EAAOqD,EAAU,CAC5B,IAAID,EACA,CAACC,GAAY,KAAK,OAAO,QAC3BD,EAAS,KAAK,OAAO,OACrB,KAAK,gBAAgB,GAAG,KAAK,QAAQjE,EAAWiE,EAASA,GAAUA,CAAM,EAAE,MAAOpD,CAAK,GAEvF,KAAK,gBAAgB,GAAGb,EAAUa,CAAK,CAE3C,CAIA,UAAUsD,EAAO,CACf,IAAMxD,EAAQ,KAAK,UAAU,KAAK,UAAUyD,GAAOD,IAAUC,EAAI,EAAE,EACnE,KAAK,GAAGzD,EAAO,KAAK,gBAAgB,SAAS,SAAS,CACxD,CAKA,YAAY0D,EAAI,CACd,IAAMrE,EAAW,KAAK,gBAAgB,WAAW,UAAUpE,GAASA,EAAM,KAAOyI,GAAMzI,EAAM,WAAa,EAAK,EAC3GoE,IAAa,IAAMA,IAAa,KAAK,gBAAgB,QAAQ,GAGjE,KAAK,gBAAgB,GAAG,KAAK,gBAAgB,SAASA,CAAQ,EAAG,EAAK,CACxE,CACA,OAAO,UAAO,SAAmCyC,EAAmB,CAClE,OAAO,IAAKA,GAAqBI,GAAsBH,EAASrH,CAAe,CAAC,CAClF,EACA,OAAO,WAA0BuH,EAAmB,CAClD,MAAOC,EACP,QAASA,EAAkB,SAC7B,CAAC,CACH,CACA,OAAOA,CACT,GAAG,EAmBGyB,GAAS,IAAIC,GAAe,aAAa,EAIzCC,EAAN,KAAgB,CACd,IAAI,cAAe,CACjB,MAAM,IAAI,MAAM,kBAAkB,CACpC,CACF,EAIIC,IAAiC,IAAM,CACzC,MAAMA,UAAyBD,CAAU,CACvC,aAAc,CACZ,MAAM,CACR,CAIA,IAAI,cAAe,CACjB,OAAO,MACT,CACA,OAAO,UAAO,SAAkC/B,EAAmB,CACjE,OAAO,IAAKA,GAAqBgC,EACnC,EACA,OAAO,WAA0B7B,EAAmB,CAClD,MAAO6B,EACP,QAASA,EAAiB,SAC5B,CAAC,CACH,CACA,OAAOA,CACT,GAAG,EAUH,SAASC,GAAcC,EAAkBC,EAAY,CACnD,OAAIC,EAAkBD,CAAU,EACvBD,EAAiB,aAEd,CACV,WAAY,CAACG,EAAMC,IAAS,CAAC,EAC7B,aAActD,GAAK,CAAC,CACtB,CAEF,CAIA,IAAMuD,GAAwB,CAC5B,QAASR,EACT,SAAUC,EACZ,EAIMQ,GAAiB,CACrB,QAASX,GACT,WAAYI,GACZ,KAAM,CAACF,EAAWU,CAAW,CAC/B,EAIMC,GAAmB,CAACH,GAAuBC,EAAc,EAKzDG,GAAW,IAAIb,GAAe,eAAe,EAI7Cc,EAAN,KAAkB,CAChB,IAAI,gBAAiB,CACnB,MAAM,IAAI,MAAM,kBAAkB,CACpC,CACF,EAIIC,IAAmC,IAAM,CAC3C,MAAMA,UAA2BD,CAAY,CAC3C,aAAc,CACZ,MAAM,CACR,CAIA,IAAI,gBAAiB,CACnB,OAAO,QACT,CACA,OAAO,UAAO,SAAoC5C,EAAmB,CACnE,OAAO,IAAKA,GAAqB6C,EACnC,EACA,OAAO,WAA0B1C,EAAmB,CAClD,MAAO0C,EACP,QAASA,EAAmB,SAC9B,CAAC,CACH,CACA,OAAOA,CACT,GAAG,EAUH,SAASC,GAAgBC,EAAoBZ,EAAY,CACvD,OAAIC,EAAkBD,CAAU,EACvBY,EAAmB,eAEhB,CACV,OAAQ,GACR,gBAAiB,SACnB,CAEF,CAIA,IAAMC,GAA0B,CAC9B,QAASJ,EACT,SAAUC,EACZ,EAIMI,GAAmB,CACvB,QAASN,GACT,WAAYG,GACZ,KAAM,CAACF,EAAaH,CAAW,CACjC,EAIMS,GAAqB,CAACF,GAAyBC,EAAgB,EACjEE,IAAgC,IAAM,CACxC,MAAMA,CAAgB,CACpB,gBACA,OAIA,qBAIA,SAAW,KAIX,QAAU,GAIV,6BAKA,mBAAqB,GACrB,IAAI,mBAAoB,CACtB,OAAO,KAAK,kBACd,CACA,IAAI,kBAAkBtD,EAAO,CAC3B,KAAK,mBAAqBA,CAC5B,CACA,OACA,OACA,YAAYQ,EAAiB+C,EAAQC,EAAQC,EAAQ,CACnD,KAAK,gBAAkBjD,EACvB,KAAK,OAASiD,EACd,KAAK,OAASF,EACd,KAAK,OAASC,EACd,KAAK,eAAe,CACtB,CACA,aAAc,CACZ,KAAK,qBAAqB,YAAY,CACxC,CAIA,gBAAiB,CACf,IAAM/C,EAAuB,KAAK,gBAAgB,oBAAoB,EAAE,KAAKC,EAAI,IAAM,CACjF,KAAK,gBAAgB,SAAS,UAChC,KAAK,KAAK,CAEd,CAAC,CAAC,EACIC,EAAmB,KAAK,gBAAgB,gBAAgB,EAAE,KAAKD,EAAInB,GAAQ,CAC/E,KAAK,wBAAwBA,CAAI,CACnC,CAAC,CAAC,EACImE,EAAW,KAAK,gBAAgB,gBAAgB,EAAE,KAAKhD,EAAI,IAAM,CACjE,KAAK,gBAAgB,SAAS,UAAY,CAAC,KAAK,mBAClD,KAAK,KAAK,EAEV,KAAK,KAAK,CAEd,CAAC,CAAC,EAGIiD,EAAiBlK,EAAMgH,EAAsBE,EAAkB+C,CAAQ,EAC7E,KAAK,qBAAuBC,EAAe,UAAU,IAAM,CAAC,CAAC,CAC/D,CAMA,KAAKC,EAASrF,EAAO,CACf,KAAK,UACP,KAAK,QAAU,GACf,KAAK,qBAAqB,KAAK,gBAAgB,SAAS,yBAAyB,GAE/E,MAAK,gBAAgB,GAAG,UAAU,IAGtC,KAAK,gBAAgB,MAAM,UAAU,EACrC,KAAK,qBAAqB,EAC5B,CAOA,gBAAgBqF,EAASrF,EAAO,CAC9B,OAAI,KAAK,UACP,KAAK,OAAO,aAAa,KAAK,QAAQ,EAExC,KAAK,6BAA+B,EAAAqF,EAC7B,KAAK,OAAO,kBAAkB,IAC5B,KAAK,OAAO,WAAW,IAAM,CAClC,KAAK,OAAO,IAAI,IAAM,CAChB,KAAK,SAAW,KAAK,gBAAgB,GAAG,MAAM,GAAK,KAAK,gBAAgB,GAAG,aAAa,GAAK,KAAK,OAAO,QAG7G,KAAK,gBAAgB,KAAKrF,GAAS,KAAK,gBAAgB,SAAS,aAAa,CAChF,CAAC,CACH,EAAGqF,GAAW,KAAK,gBAAgB,SAAS,eAAe,CAC5D,CACH,CAIA,qBAAqBA,EAAS,CAC5B,KAAK,SAAW,KAAK,gBAAgBA,CAAO,CAC9C,CAIA,MAAO,CACA,KAAK,gBAAgB,GAAG,UAAU,IAGvC,KAAK,QAAU,GACf,KAAK,OAAO,aAAa,KAAK,QAAQ,EACtC,KAAK,gBAAgB,MAAM,UAAU,EACvC,CAIA,OAAQ,CACD,KAAK,gBAAgB,GAAG,UAAU,IAGvC,KAAK,QAAU,GACjB,CAKA,wBAAwBrE,EAAM,CACxBA,EAAK,SAAS,OAAS,WACrB,KAAK,gBAAgB,SAAS,SAChC,KAAK,KAAK,EAEV,KAAK,KAAK,EAEHA,EAAK,SAAS,OAAS,YAE5B,KAAK,gBAAgB,SAAS,UAChC,KAAK,qBAAqB,CAGhC,CAIA,sBAAuB,CACrBsE,EAAG,YAAY,EAAE,KAAKC,EAAUvE,GAAQ,KAAK,gBAAgB,mBAAmB,CAAC,EAAGU,EAAM,EAAG3D,EAAO,IAAM,KAAK,4BAA4B,EAAGoE,EAAI,IAAM,KAAK,qBAAqB,CAAC,CAAC,EAAE,UAAU,IAAM,CAAC,CAAC,CAC1M,CAIA,cAAe,CACT,KAAK,gBAAgB,SAAS,oBAAsB,KAAK,gBAAgB,GAAG,UAAU,GACxF,KAAK,MAAM,CAEf,CAIA,wBAAyB,CACnB,KAAK,gBAAgB,SAAS,oBAAsB,KAAK,gBAAgB,GAAG,UAAU,IACxF,KAAK,KAAK,EACV,KAAK,qBAAqB,EAE9B,CAIA,sBAAuB,CACjB,KAAK,gBAAgB,SAAS,oBAAsB,KAAK,gBAAgB,GAAG,UAAU,IACxF,KAAK,KAAK,EACV,KAAK,qBAAqB,EAE9B,CACA,OAAO,UAAO,SAAiCP,EAAmB,CAChE,OAAO,IAAKA,GAAqBmD,GAAoBlD,EAASrH,CAAe,EAAMqH,EAAS4B,EAAM,EAAM5B,EAAS0C,EAAQ,EAAM1C,EAAY2D,EAAM,CAAC,CACpJ,EACA,OAAO,WAA0BzD,EAAmB,CAClD,MAAOgD,EACP,QAASA,EAAgB,SAC3B,CAAC,CACH,CACA,OAAOA,CACT,GAAG,EAICU,IAAgC,IAAM,CACxC,MAAMA,CAAgB,CACpB,gBAIA,qBACA,YAAYxD,EAAiB,CAC3B,KAAK,gBAAkBA,EACvB,KAAK,eAAe,CACtB,CACA,aAAc,CACZ,KAAK,qBAAqB,YAAY,CACxC,CAIA,gBAAiB,CACf,IAAMC,EAAuB,KAAK,gBAAgB,oBAAoB,EAAE,KAAKC,EAAI,IAAM,CACrF,IAAMuD,EAAa,KAAK,gBAAgB,UAAY,CAAC,KAAK,gBAAgB,SAAS,SACnF,KAAK,gBAAgB,WAAW,QAAQhJ,GAAQA,EAAK,KAAO,EAAAgJ,CAAyB,CACvF,CAAC,CAAC,EACIC,EAAkB,KAAK,gBAAgB,eAAe,EACtDC,EAAmB,KAAK,gBAAgB,gBAAgB,EACxDC,EAAiB3K,EAAMgH,EAAsByD,EAAiBC,CAAgB,EAAE,KAAKzD,EAAInB,GAAQ,KAAK,sBAAsBA,CAAI,CAAC,CAAC,EACxI,KAAK,qBAAuB6E,EAAe,UAAU,IAAM,CAAC,CAAC,CAC/D,CACA,sBAAsB7E,EAAM,CAC1B,GAAI,GAAC,KAAK,gBAAgB,UAAY,CAAC,KAAK,gBAAgB,SAAS,YAGjEA,EAAK,UAAYA,EAAK,SAAS,OAAS,YAAcA,IAAS,eAAiBA,IAAS,WAAW,CACtG,IAAMzF,EAAW,KAAK,gBAAgB,SACpCF,EAAS,KAAK,gBAAgB,OAAO,EAAE,OACrCkB,EAAIhB,EAAS,QAAU,KAAK,KAAKA,EAAS,MAAQ,CAAC,GAAKA,EAAS,MACnEH,EAAIG,EAAS,QAAUgB,EAAI,IAAM,EACjC4C,GAAY6B,EAAK,UAAYA,EAAK,SAAS,QAAU,OAAYA,EAAK,SAAS,MAAQ,KAAK,gBAAgB,QAAQ,GAAK5F,EAW3H,IARIG,EAAS,cAAgB,IAC3BgB,GAAKhB,EAAS,cAEVA,EAAS,OACX4D,GAAY5D,EAAS,cACrBgB,MAGGnB,IAAMmB,GACX,KAAK,MAAMlB,EAAS,EAAI,KAAK,gBAAgB,SAAS8D,CAAQ,CAAC,EAC3D9D,GACF,KAAK,gBAAgB,OAAO,KAAK,gBAAgB,SAAS8D,CAAQ,CAAC,EAAE,QAAQsC,GAAS,KAAK,MAAMA,CAAK,CAAC,EAEzGtC,GAEJ,CACF,CAKA,MAAMA,EAAU,CACV,KAAK,gBAAgB,WAAWA,CAAQ,EAAE,OAG9C,KAAK,gBAAgB,WAAWA,CAAQ,EAAE,KAAO,GACnD,CACA,OAAO,UAAO,SAAiCyC,EAAmB,CAChE,OAAO,IAAKA,GAAqB6D,GAAoB5D,EAASrH,CAAe,CAAC,CAChF,EACA,OAAO,WAA0BuH,EAAmB,CAClD,MAAO0D,EACP,QAASA,EAAgB,SAC3B,CAAC,CACH,CACA,OAAOA,CACT,GAAG,EAICK,IAA+B,IAAM,CACvC,MAAMA,CAAe,CACnB,gBAIA,oBAIA,SAAW,GAIX,SAAW,OAIX,KAAO,OACP,YAAY7D,EAAiB,CAC3B,KAAK,gBAAkBA,EACvB,KAAK,eAAe,CACtB,CACA,aAAc,CACZ,KAAK,oBAAoB,YAAY,CACvC,CAIA,gBAAiB,CACf,IAAM0D,EAAkB,KAAK,gBAAgB,eAAe,EAAE,KAAKxD,EAAInB,GAAQ,CACzEA,EAAK,SAAS,OAAS,aACzB,KAAK,SAAW,KAAK,gBAAgB,QAAQ,EAC7C,KAAK,KAAOA,EAAK,SAAS,MAE9B,CAAC,CAAC,EACI+E,EAAgB,KAAK,gBAAgB,aAAa,EAClDC,EAAmB,KAAK,gBAAgB,gBAAgB,EACxDC,EAAsB,KAAK,gBAAgB,mBAAmB,EAC9DC,EAAuBhL,EAAM6K,EAAeC,EAAkBC,CAAmB,EAAE,KAAK9D,EAAInB,GAAQ,KAAK,SAAWA,IAAS,YAAY,CAAC,EAC1ImF,EAAqB,KAAK,gBAAgB,kBAAkB,EAAE,KAAKhE,EAAInB,GAAQ,CAC/E,KAAK,WAAa,KAAK,gBAAgB,SAAS,YAAc,KAAK,gBAAgB,SAAS,YAC9F,KAAK,MAAM,CAEf,CAAC,CAAC,EACIoF,EAAgBlL,EAAMyK,EAAiBQ,EAAoBD,CAAoB,EAAE,KAAK,EAC5F,KAAK,oBAAsBE,EAAc,UAAU,IAAM,CAAC,CAAC,CAC7D,CAKA,OAAQ,CACN,GAAI,KAAK,gBAAgB,SAAS,QAAU,EAC1C,OAKF,KAAK,gBAAgB,MAAM,CAAC,EAC5B,IAAIC,EACEtK,EAAW,KAAK,gBAAgB,WAAW,KAAK,QAAQ,EAC5DuK,EAAO,KAAK,gBAAgB,WAAW,KAAK,IAAI,EAChDC,EAAW,KAAK,gBAAgB,SAAS,UACzCC,EAAW,KAAK,gBAAgB,SAAS,WACvC,KAAK,gBAAgB,QAAQ,IAAM,KAAK,WAGxCA,IACFH,EAAO,CAAC,KAAK,gBAAgB,YAAY,KAAK,QAAQ,EAAI,CAAC,KAAK,gBAAgB,YAAY,KAAK,IAAI,EACrG,KAAK,gBAAgB,WAAW,QAAQtL,GAAS,CAC3CA,EAAM,KAAOgB,EAAS,KACxBhB,EAAM,KAAO,GAAGsL,CAAI,KACpBtL,EAAM,WAAa,GACnBA,EAAM,iBAAmB,GACzBA,EAAM,oBAAsB,GAEhC,CAAC,GAECwL,GACF,KAAK,gBAAgB,WAAW,QAAQxL,GAAS,CAC3CA,EAAM,KAAOuL,EAAK,KACpBvL,EAAM,WAAa,GACnBA,EAAM,gBAAkB,GACxBA,EAAM,mBAAqB,GAE/B,CAAC,EAEL,CAKA,MAAMyI,EAAI,CACR,KAAK,gBAAgB,WAAW,QAAQzI,GAAS,CAC3CA,EAAM,KAAOyI,IACfzI,EAAM,KAAO,GACbA,EAAM,WAAa,GACnBA,EAAM,iBAAmB,GACzBA,EAAM,oBAAsB,GAC5BA,EAAM,gBAAkB,GACxBA,EAAM,mBAAqB,GAC3BA,EAAM,QAAU,KAAK,gBAAgB,mBAAmBA,CAAK,EAEjE,CAAC,EACD,KAAK,gBAAgB,gBAAgB,CACvC,CACA,OAAO,UAAO,SAAgC6G,EAAmB,CAC/D,OAAO,IAAKA,GAAqBkE,GAAmBjE,EAASrH,CAAe,CAAC,CAC/E,EACA,OAAO,WAA0BuH,EAAmB,CAClD,MAAO+D,EACP,QAASA,EAAe,SAC1B,CAAC,CACH,CACA,OAAOA,CACT,GAAG,EAICW,IAAkC,IAAM,CAC1C,MAAMA,CAAkB,CACtB,gBAIA,uBACA,YAAYxE,EAAiB,CAC3B,KAAK,gBAAkBA,EACvB,KAAK,eAAe,CACtB,CACA,aAAc,CACZ,KAAK,uBAAuB,YAAY,CAC1C,CAIA,gBAAiB,CACf,IAAMC,EAAuB,KAAK,gBAAgB,oBAAoB,EAAE,KAAKC,EAAInB,GAAQ,CACnF,KAAK,gBAAgB,SAAS,WAChC,KAAK,OAAO,EAEZ,KAAK,gBAAgB,WAAW,QAAQjG,GAASA,EAAM,YAAc,MAAM,CAE/E,CAAC,CAAC,EACIqH,EAAmB,KAAK,gBAAgB,gBAAgB,EAAE,KAAKD,EAAInB,GAAQ,CAC3E,KAAK,gBAAgB,SAAS,YAAcA,EAAK,SAAS,OAAS,YACrE,KAAK,OAAO,CAEhB,CAAC,CAAC,EACIqB,EAAqB,KAAK,gBAAgB,kBAAkB,EAAE,KAAKF,EAAInB,GAAQ,CAC/E,KAAK,gBAAgB,SAAS,YAChC,KAAK,OAAO,CAEhB,CAAC,CAAC,EACI0F,EAAcxL,EAAMgH,EAAsBE,EAAkBC,CAAkB,EACpF,KAAK,uBAAyBqE,EAAY,UAAU,IAAM,CAAC,CAAC,CAC9D,CAIA,QAAS,CACP,IAAMpL,EAAQ,KAAK,gBAAgB,SAAS,MACxCqL,EAAQ,KAAK,gBAAgB,QAAQ,EACvCvK,EAAMuK,EAAQrL,EACZ,KAAK,gBAAgB,SAAS,SAChCqL,EAAQrL,EAAQ,IAAM,EAAIqL,GAASrL,EAAQ,GAAK,EAAIqL,EAAQrL,EAAQ,EACpEc,EAAMd,EAAQ,IAAM,EAAIqL,EAAQrL,EAAQqL,EAAQrL,EAAQ,GAE1D,KAAK,gBAAgB,WAAW,QAAQ,CAACP,EAAOK,IAAM,CACpDL,EAAM,YAAcK,GAAKuL,GAASvL,EAAIgB,EAAM,OAAS,QACvD,CAAC,CACH,CACA,OAAO,UAAO,SAAmCwF,EAAmB,CAClE,OAAO,IAAKA,GAAqB6E,GAAsB5E,EAASrH,CAAe,CAAC,CAClF,EACA,OAAO,WAA0BuH,EAAmB,CAClD,MAAO0E,EACP,QAASA,EAAkB,SAC7B,CAAC,CACH,CACA,OAAOA,CACT,GAAG,EAICG,IAA4B,IAAM,CACpC,MAAMA,CAAY,CAChB,gBACA,MACA,OAIA,iBAIA,oBACA,YAAY3E,EAAiB4E,EAAOC,EAAQ,CAC1C,KAAK,gBAAkB7E,EACvB,KAAK,MAAQ4E,EACb,KAAK,OAASC,EACd,KAAK,eAAe,EACf,KAAK,QACR,KAAK,MAAQ,CACX,SAAUxB,EAAG,UAAU,EAAE,KAAKyB,EAAK,CAAC,CAAC,CACvC,GAGG,KAAK,SACR,KAAK,OAAS,CACZ,SAAU,CAACC,EAAUC,IAAW,CAEhC,CACF,EAEJ,CACA,aAAc,CACZ,KAAK,iBAAiB,YAAY,CACpC,CAIA,gBAAiB,CACf,IAAM/E,EAAuB,KAAK,gBAAgB,oBAAoB,EAAE,KAAKC,EAAI,IAAM,KAAK,cAAc,CAAC,CAAC,EACtGC,EAAmB,KAAK,gBAAgB,gBAAgB,EAAE,KAAKD,EAAInB,GAAQ,CAC/E,GAAI,KAAK,gBAAgB,SAAS,iBAAmBA,EAAK,SAAS,OAAS,WAAY,CACtF,IAAMkG,EAAc,KAAK,gBAAgB,QAAQ,EAC3CC,EAAiB,KAAK,gBAAgB,WAAWD,CAAW,EAAE,aACpE,GAAI,CAACC,GAAkBA,IAAmB,KAAK,oBAC7C,OAEF,KAAK,OAAO,SAAS,CAAC,IAAI,EAAG,CAC3B,SAAUA,EACV,WAAY,KAAK,KACnB,CAAC,CACH,CACF,CAAC,CAAC,EACIC,EAAgBlM,EAAMgH,EAAsBE,CAAgB,EAClE,KAAK,iBAAmBgF,EAAc,UAAU,IAAM,CAAC,CAAC,CAC1D,CAKA,OAAOC,EAAU,CACf,IAAMlI,EAAW,KAAK,gBAAgB,WAAW,UAAUpE,GAASA,EAAM,eAAiBsM,GAAYtM,EAAM,WAAa,EAAK,EAC3HoE,IAAa,IAAMA,IAAa,KAAK,gBAAgB,QAAQ,GAGjE,KAAK,gBAAgB,GAAG,KAAK,gBAAgB,SAASA,CAAQ,EAAG,EAAK,CACxE,CAIA,eAAgB,CACd,IAAMmI,EAAQ,KAAK,gBAAgB,SAAS,gBAAkB,UAAY,EAAI,EAC9E,KAAK,MAAM,SAAS,KAAKC,GAAKD,CAAK,CAAC,EAAE,UAAUD,GAAY,CAC1D,KAAK,oBAAsBA,EAC3B,KAAK,OAAOA,CAAQ,CACtB,CAAC,CACH,CACA,OAAO,UAAO,SAA6BzF,EAAmB,CAC5D,OAAO,IAAKA,GAAqBgF,GAAgB/E,EAASrH,CAAe,EAAMqH,EAAY2F,EAAgB,CAAC,EAAM3F,EAAY4F,EAAQ,CAAC,CAAC,CAC1I,EACA,OAAO,WAA0B1F,EAAmB,CAClD,MAAO6E,EACP,QAASA,EAAY,SACvB,CAAC,CACH,CACA,OAAOA,CACT,GAAG,EAICc,GAAS,EACTC,IAAuC,IAAM,CAC/C,MAAMA,CAAuB,CAC3B,OAKA,GAAK,aAAaD,IAAQ,GAK1B,WAAa,EACb,IAAI,UAAU1G,EAAM,CAClB,KAAK,WAAa,KAAK,UAAUA,CAAI,EAAIA,EAAO,CAClD,CACA,IAAI,WAAY,CACd,OAAO,KAAK,UACd,CAIA,MAAQ,EAIR,WAAa,GAIb,SAAW,GACX,YAAY4G,EAAQ,CAClB,KAAK,OAASA,CAChB,CAMA,UAAUpG,EAAQ,CAChB,MAAO,CAAC,MAAM,WAAWA,CAAM,CAAC,CAClC,CACA,OAAO,UAAO,SAAwCI,EAAmB,CACvE,OAAO,IAAKA,GAAqB+F,GAA2BE,EAAqBC,EAAW,CAAC,CAC/F,EACA,OAAO,UAAyBC,EAAkB,CAChD,KAAMJ,EACN,UAAW,CAAC,CAAC,cAAe,gBAAiB,EAAE,CAAC,EAChD,OAAQ,CACN,GAAI,KACJ,UAAW,YACX,MAAO,QACP,WAAY,aACZ,SAAU,UACZ,CACF,CAAC,CACH,CACA,OAAOA,CACT,GAAG,EAICK,IAA8B,IAAM,CACtC,MAAMA,CAAc,CAClB,kBAKA,IAAI,WAAY,CACd,OAAO,KAAK,iBACd,CACA,YAAYhD,EAAQjB,EAAY,CAC9B,KAAK,kBAAoBC,EAAkBD,CAAU,EAAIkE,GAAUjD,EAAQ,QAAQ,EAAI,IAAIvK,EAAQ,EAAE,aAAa,CACpH,CACA,OAAO,UAAO,SAA+BmH,EAAmB,CAC9D,OAAO,IAAKA,GAAqBoG,GAAkBnG,EAAS4B,EAAM,EAAM5B,EAASwC,CAAW,CAAC,CAC/F,EACA,OAAO,WAA0BtC,EAAmB,CAClD,MAAOiG,EACP,QAASA,EAAc,SACzB,CAAC,CACH,CACA,OAAOA,CACT,GAAG,EAICE,IAA+B,IAAM,CACvC,MAAMA,CAAe,CACnB,KACA,GACA,SACA,gBACA,eAIA,aAIA,UAIA,WAIA,kBAIA,kBAIA,qBAIA,qBAIA,gBAIA,iBAIA,iBACA,aAIA,MAAQ,CACN,KAAM,KACN,OAAQ,KACR,QAAS,KACT,MAAO,CACL,MAAO,KACP,QAAS,IACX,EACA,UAAW,KACX,OAAQ,GACR,OAAQ,EACV,EAIA,cAAgB,IAAIzN,EAIpB,oBACA,mBAAqBM,GAAS,CAC5B,IAAMoN,EAAWtM,EAAA,GACZd,GAEL,cAAOoN,EAAS,OACTA,CACT,EACA,YAAYC,EAAMC,EAAIC,EAAUrG,EAAiBsG,EAAgB,CAC/D,KAAK,KAAOH,EACZ,KAAK,GAAKC,EACV,KAAK,SAAWC,EAChB,KAAK,gBAAkBrG,EACvB,KAAK,eAAiBsG,CACxB,CACA,YAAYnK,EAAO,CACb,KAAK,aAAa,iBACpB,KAAK,aAAaA,CAAK,CAE3B,CACA,aAAaA,EAAO,CAClB,GAAIA,EAAM,cAAc,QAAU,EAChC,MAAO,GAEL,KAAK,aAAa,iBACpB,KAAK,aAAaA,CAAK,CAE3B,CACA,cAAcA,EAAO,CACnB,KAAK,WAAWA,CAAK,CACvB,CACA,aAAc,CACZ,GAAI,KAAK,aAAa,gBACpB,MAAO,EAEX,CACA,eAAgB,CACd,GAAI,KAAK,aAAa,gBACpB,MAAO,EAEX,CACA,UAAW,CACT,KAAK,oBAAsB,KAAK,cAAc,KAAKsD,EAAM,CAAC,EAAE,UAAU,IAAM,CAC1E,KAAK,aAAa,CACpB,CAAC,CACH,CACA,aAAc,CACZ,KAAK,oBAAoB,YAAY,CACvC,CAIA,sBAAwB8G,GAAM,CAC5B,KAAK,mBAAmBA,CAAE,CAC5B,EAIA,eAAiBA,GAAM,CACrB,KAAK,YAAYA,CAAE,CACrB,EAIA,cAAgBA,GAAM,CAEpB,KAAK,WAAWA,CAAE,CAEpB,EAOA,aAAapK,EAAO,CAClB,IAAIC,EAAQ,KACRD,EAAM,QAAU,IAGpBC,EAAQ,KAAK,iBAAiBD,CAAK,EACnC,KAAK,MAAM,KAAO,IAAI,KAAK,EAAE,QAAQ,EACrC,KAAK,MAAM,OAASA,EAAM,OAC1B,KAAK,MAAM,MAAM,MAAQC,EACzB,KAAK,MAAM,MAAM,QAAUA,EAC3B,KAAK,MAAM,QAAU,KAAK,SAASD,CAAK,EACxC,KAAK,gBAAkB,KAAK,SAAS,OAAO,SAAU,UAAW,KAAK,aAAa,EACnF,KAAK,iBAAmB,KAAK,SAAS,OAAO,SAAU,WAAY,KAAK,aAAa,EACrF,KAAK,KAAK,kBAAkB,IAAM,CAChC,KAAK,qBAAuB,KAAK,SAAS,OAAO,SAAU,YAAa,KAAK,qBAAqB,EAClG,KAAK,qBAAuB,KAAK,SAAS,OAAO,SAAU,YAAa,KAAK,qBAAqB,CACpG,CAAC,EACH,CAKA,mBAAmBA,EAAO,CACxB,IAAMO,EAAQ,KAAK,YAAY,KAAK,MAAM,QAAS,KAAK,SAASP,CAAK,CAAC,EACnE,KAAK,cACP,KAAK,aAAa,EAEhB,OAAK,IAAIO,EAAM,CAAC,EAAI,GAAK,KAAK,IAAIA,EAAM,CAAC,EAAI,GAAK,KAAK,IAAI,OAAO,KAGlE,KAAK,IAAIA,EAAM,CAAC,EAAI,GAAK,KAAK,IAAIA,EAAM,CAAC,EAAI,KAAK,IAAIA,EAAM,CAAC,GAAK,KAAK,IAAI,OAAO,IAGtF,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,MAAM,OAAS,GACpB,KAAK,2BAA2BP,CAAK,EACrC,KAAK,kBAAoB,KAAK,SAAS,OAAO,SAAU,YAAa,KAAK,cAAc,EACxF,KAAK,kBAAoB,KAAK,SAAS,OAAO,SAAU,YAAa,KAAK,cAAc,EACxFA,EAAM,eAAe,EACrB,KAAK,eAAe,EACpB,KAAK,cAAc,KAAKA,CAAK,GAE/B,CAKA,2BAA2BA,EAAO,CAChC,IAAIqK,EAASrK,EAAM,OACnB,KAAOqK,GAAU,EAAEA,aAAkB,oBACnCA,EAASA,EAAO,cAEdA,aAAkB,oBACpB,KAAK,aAAe,KAAK,SAAS,OAAOA,EAAQ,QAAS,IAAM,EAAK,EAEzE,CAMA,YAAYrK,EAAO,CACjB,IAAIC,EACEqK,EAAc,KAAK,gBAAgB,oBAAoBtK,EAAO,KAAK,KAAK,EAC1EsK,IAAgB,KAGpBrK,EAAQqK,EACRtK,EAAM,eAAe,EACrB,KAAK,MAAM,MAAM,QAAUC,EAC3B,KAAK,SAASA,EAAM,EAAI,KAAK,MAAM,MAAM,MAAM,CAAC,EAClD,CAKA,SAASa,EAAY,CACnB,KAAK,SAAS,SAAS,KAAK,GAAG,cAAc,SAAS,CAAC,EAAG,YAAa,eAAeA,CAAU,YAAY,EAC5G,KAAK,SAAS,SAAS,KAAK,GAAG,cAAc,SAAS,CAAC,EAAG,aAAc,IAAI,CAC9E,CAOA,WAAWd,EAAO,CAChB,KAAK,gBAAgB,WAAW,OAAS,GACzC,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EACtB,KAAK,MAAM,SACb,KAAK,SAAS,SAAS,KAAK,GAAG,cAAc,SAAS,CAAC,EAAG,YAAa,EAAE,EACzE,KAAK,SAAS,SAAS,KAAK,GAAG,cAAc,SAAS,CAAC,EAAG,aAAc,KAAK,gBAAgB,MAAM,CAAC,KAAK,gBAAgB,SAAS,cAAgB,KAAK,gBAAgB,SAAS,UAAU,EAAI,IAAO,GAAG,EACxM,KAAK,gBAAgBA,CAAK,EAC1B,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GAEzB,KAAK,MAAQ,CACX,KAAM,KACN,OAAQ,KACR,QAAS,KACT,MAAO,CACL,MAAO,KACP,QAAS,IACX,EACA,UAAW,KACX,OAAQ,GACR,OAAQ,EACV,EAEA,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,CACxB,CAMA,iBAAiBA,EAAO,CACtB,OAAO,KAAK,gBAAgB,gBAAgBA,CAAK,CACnD,CAIA,iBAAmB,IAAM,CACvB,KAAK,iBAAmB,KAAK,SAAS,OAAO,KAAK,MAAM,OAAQ,QAAS,IAAM,EAAK,EACpF,KAAK,iBAAiB,CACxB,EAKA,gBAAgBA,EAAO,CACrB,KAAK,gBAAgB,eAAeA,EAAO,KAAK,MAAO,KAAK,gBAAgB,CAC9E,CAMA,SAASA,EAAO,CACd,OAAO,KAAK,gBAAgB,QAAQA,CAAK,CAC3C,CAOA,YAAYuK,EAAQhH,EAAQ,CAC1B,OAAO,KAAK,gBAAgB,WAAWgH,EAAQhH,CAAM,CACvD,CAMA,IAAIiH,EAAe,CACjB,OAAO,KAAK,gBAAgB,GAAGA,CAAa,CAC9C,CAKA,OAAO7H,EAAM,CACX,KAAK,gBAAgB,MAAMA,CAAI,CACjC,CAIA,cAAe,CACb,KAAK,gBAAgB,YAAY,CACnC,CAIA,iBAAkB,CAChB,KAAK,gBAAgB,gBAAgB,CACvC,CAIA,gBAAiB,CACf,KAAK,gBAAgB,cAAc,CACrC,CAKA,MAAMyC,EAAI,CACR,KAAK,eAAe,MAAMA,CAAE,CAC9B,CACA,OAAO,UAAO,SAAgC5B,EAAmB,CAC/D,OAAO,IAAKA,GAAqBsG,GAAmBL,EAAqBrC,EAAM,EAAMqC,EAAqBgB,CAAU,EAAMhB,EAAqBiB,EAAS,EAAMjB,EAAkBrN,CAAe,EAAMqN,EAAkB/B,EAAc,CAAC,CACxO,EACA,OAAO,UAAyBiD,GAAkB,CAChD,KAAMb,EACN,UAAW,CAAC,CAAC,WAAW,CAAC,EACzB,aAAc,SAAqCc,EAAIC,EAAK,CACtDD,EAAK,GACJE,EAAW,YAAa,SAAqDC,EAAQ,CACtF,OAAOF,EAAI,YAAYE,CAAM,CAC/B,CAAC,EAAE,aAAc,SAAsDA,EAAQ,CAC7E,OAAOF,EAAI,aAAaE,CAAM,CAChC,CAAC,EAAE,cAAe,SAAuDA,EAAQ,CAC/E,OAAOF,EAAI,cAAcE,CAAM,CACjC,CAAC,EAAE,YAAa,UAAuD,CACrE,OAAOF,EAAI,YAAY,CACzB,CAAC,EAAE,cAAe,UAAyD,CACzE,OAAOA,EAAI,cAAc,CAC3B,CAAC,CAEL,EACA,OAAQ,CACN,aAAc,eACd,UAAW,YACX,WAAY,YACd,EACA,MAAO,EACP,KAAM,EACN,OAAQ,CAAC,CAAC,EAAG,YAAa,EAAG,gBAAiB,SAAS,EAAG,CAAC,EAAG,QAAS,SAAS,EAAG,CAAC,EAAG,WAAY,EAAG,eAAgB,UAAW,SAAS,EAAG,CAAC,EAAG,MAAM,EAAG,CAAC,EAAG,mBAAoB,yBAAyB,CAAC,EAC5M,SAAU,SAAiCD,EAAIC,EAAK,CAC9CD,EAAK,IACJI,EAAe,EAAG,KAAK,EAAE,EAAG,MAAO,CAAC,EACpCF,EAAW,gBAAiB,UAAgE,CAC7F,OAAOD,EAAI,gBAAgB,CAC7B,CAAC,EACEI,EAAW,EAAGC,GAAwC,EAAG,EAAG,eAAgB,CAAC,EAC7EC,EAAa,EAAE,GAEhBP,EAAK,IACJQ,EAAU,EACVC,EAAW,UAAcC,GAAgB,EAAGC,GAAKV,EAAI,UAAU,MAAQ,KAAMA,EAAI,UAAU,UAAWA,EAAI,UAAU,WAAYA,EAAI,UAAU,SAAWA,EAAI,UAAU,SAAW,KAAO,GAAIA,EAAI,UAAU,SAAWA,EAAI,UAAU,SAAW,KAAO,EAAE,CAAC,EACzPO,EAAU,EACVC,EAAW,UAAWR,EAAI,UAAU,EAE3C,EACA,aAAc,CAAIW,GAAYC,GAAYC,GAASC,GAAqBC,EAAO,EAC/E,cAAe,EACf,KAAM,CACJ,UAAW,CAACC,GAAQ,aAAc,CAAC5K,GAAM,SAAU6K,GAAM,CACvD,OAAQ,CACV,CAAC,CAAC,EAAG7K,GAAM,OAAQ6K,GAAM,CACvB,OAAQ,GACV,CAAC,CAAC,EAAGC,GAAW,iBAAkB,CAElC/K,GAAQ,aAAa,CAAC,CAAC,EAAG+K,GAAW,iBAAkB,CAEvD/K,GAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAClB,CACF,CAAC,CACH,CACA,OAAO8I,CACT,GAAG,EAICkC,IAAkC,IAAM,CAC1C,MAAMA,CAAkB,CACtB,GACA,cACA,gBACA,kBACA,gBACA,gBACA,eACA,kBACA,YACA,OACA,kBACA,OACA,WAAa,IAAIC,EACjB,SAAW,IAAIA,EACf,OAAS,IAAIA,EACb,QAAU,IAAIA,EACd,YAAc,IAAIA,EAIlB,oBAIA,mBAIA,uBAMA,2BAIA,WAIA,UAIA,WAAa,CAAC,EAId,QAIA,SAIA,iBAIA,eAAiB,GAIjB,QACA,YAIA,kBAIA,qBAIA,mBAIA,iBAIA,kBAIA,sBAIA,gBACA,OACA,YAAYhC,EAAIiC,EAAerI,EAAiBsI,EAAmBC,EAAiBC,EAAiBlC,EAAgBmC,EAAmBC,EAAahO,EAAQiO,EAAmB3F,GAAQ,CACtL,KAAK,GAAKoD,EACV,KAAK,cAAgBiC,EACrB,KAAK,gBAAkBrI,EACvB,KAAK,kBAAoBsI,EACzB,KAAK,gBAAkBC,EACvB,KAAK,gBAAkBC,EACvB,KAAK,eAAiBlC,EACtB,KAAK,kBAAoBmC,EACzB,KAAK,YAAcC,EACnB,KAAK,OAAShO,EACd,KAAK,kBAAoBiO,EACzB,KAAK,OAAS3F,EAChB,CACA,mBAAmBuD,EAAI,CACrB,GAAK,KAAK,gBAAgB,SAAS,SACnC,OAAQ,KAAK,OAAO,gBAAiB,CACnC,IAAK,UACH,CAAC,KAAK,gBAAgB,mBAAqB,KAAK,gBAAgB,KAAK,EACrE,MACF,IAAK,SACH,KAAK,gBAAgB,MAAM,EAC3B,MACF,QACE,KACJ,CACF,CACA,UAAW,CACT,KAAK,eAAe,EACpB,KAAK,oBAAsB,KAAK,GAAG,cAAc,cAAc,eAAe,EAAE,WAClF,CACA,aAAc,CACR,KAAK,cAAgB,KAAK,UACxB,KAAK,aAAe,KAAK,QAAQ,QAAQ,EAAE,QAC7C,KAAK,gBAAgB,MAAM,KAAK,oBAAqB,KAAK,OAAO,QAAQ,EAAG,KAAK,OAAO,EACxF,KAAK,gBAAgB,WAAW,KAAK,OAAO,QAAQ,CAAC,GAC5C,KAAK,aAAe,CAAC,KAAK,QAAQ,QAAQ,EAAE,QACrD,KAAK,eAAiB,GACtB,KAAK,OAAO,IAAI,mEAAmE,GAEnF,KAAK,eAAiB,GAExB,KAAK,YAAc,KAAK,QAE5B,CACA,oBAAqB,CACf,KAAK,OAAO,QAAQ,EAAE,QACxB,KAAK,gBAAgB,MAAM,KAAK,oBAAqB,KAAK,OAAO,QAAQ,EAAG,KAAK,OAAO,EACxF,KAAK,gBAAgB,WAAW,KAAK,OAAO,QAAQ,CAAC,EACrD,KAAK,kBAAkB,GAEvB,KAAK,OAAO,IAAI,gEAAgE,EAElF,KAAK,2BAA6B,KAAK,OAAO,QAAQ,KAAKrG,EAAI3E,GAAU,CACvE,KAAK,gBAAgB,MAAM,KAAK,oBAAqBA,EAAO,QAAQ,EAAG,KAAK,OAAO,EACnF,KAAK,gBAAgB,WAAWA,EAAO,QAAQ,CAAC,EAC3CA,EAAO,QAAQ,EAAE,SACpB,KAAK,eAAiB,IAEpBA,EAAO,QAAQ,EAAE,QAAU,CAAC,KAAK,oBACnC,KAAK,kBAAkB,CAE3B,CAAC,CAAC,EAAE,UAAU,IAAM,CAAC,CAAC,CACxB,CACA,aAAc,CACR,KAAK,oBACP,KAAK,mBAAmB,YAAY,EAElC,KAAK,4BACP,KAAK,2BAA2B,YAAY,EAE1C,KAAK,wBACP,KAAK,uBAAuB,YAAY,CAE5C,CAKA,gBAAiB,CACf,KAAK,kBAAoB,KAAK,gBAAgB,mBAAmB,EAAE,KAAK2E,EAAInB,GAAQ,CAClF,KAAK,WAAaA,EAAK,WACvB,KAAK,UAAYA,EAAK,UACtB,KAAK,WAAaA,EAAK,WAClB,KAAK,iBACR,KAAK,eAAiB,IAExB,KAAK,QAAUA,EAAK,QACpB,KAAK,SAAWA,EAAK,SACrB,KAAK,kBAAkB,aAAa,CACtC,CAAC,CAAC,EACF,KAAK,sBAAwB,KAAK,gBAAgB,oBAAoB,EAAE,KAAKmB,EAAI,IAAM,CACrF,KAAK,qBAAqB,EAC1B,KAAK,YAAY,KAAK,KAAK,gBAAgB,CAE7C,CAAC,CAAC,EACF,KAAK,qBAAuB,KAAK,gBAAgB,mBAAmB,EAAE,KAAKA,EAAI,IAAM,CACnF,KAAK,qBAAqB,EAC1B,KAAK,WAAW,KAAK,KAAK,gBAAgB,CAE5C,CAAC,CAAC,EACF,KAAK,iBAAmB,KAAK,gBAAgB,eAAe,EAAE,KAAKA,EAAI,IAAM,CAC3E,KAAK,qBAAqB,EAC1B,KAAK,OAAO,KAAK,KAAK,gBAAgB,CAExC,CAAC,CAAC,EACF,KAAK,kBAAoB,KAAK,gBAAgB,eAAe,EAAE,KAAKoD,EAAU9D,GAAS,CACrF,IAAMoJ,EAAkBvF,EAAG7D,CAAK,EAAE,KAAK1D,EAAO,IAAM0D,EAAM,SAAS,OAAS,UAAU,EAAG8D,EAAU,IAAMpF,GAAK,KAAK,UAAU,CAAC,EAAGoH,GAAK9F,EAAM,SAAS,KAAK,EAAGsF,EAAK,KAAK,gBAAgB,SAAS,KAAK,EAAGlH,EAAI9E,GAAS,CACnN,IAAM+P,EAAiB,KAAK,gBAAgB,eACtCtH,EAAKzI,EAAM,GAAG,QAAQ+P,CAAc,GAAK,EAAI/P,EAAM,GAAG,MAAM+P,EAAe,MAAM,EAAI/P,EAAM,GACjG,OAAO6C,EAAA/B,EAAA,GACFd,GADE,CAEL,GAAIyI,EACJ,SAAU,EACZ,EACF,CAAC,EAAGuH,GAAQ,EAAGlL,EAAIrC,IACV,CACL,OAAQA,EACR,cAAe,KAAK,gBAAgB,SAASiE,EAAM,SAAS,KAAK,CACnE,EACD,CAAC,EAUF,OAAOvG,EAAM2P,CAAe,CAC9B,CAAC,EAAG1I,EAAI6I,GAAc,CACpB,KAAK,qBAAqB,EAC1B,KAAK,QAAQ,KAAKA,EAAW,OAAO,OAASA,EAAa,KAAK,gBAAgB,CAGjF,CAAC,CAAC,EACF,KAAK,mBAAqB,KAAK,gBAAgB,aAAa,EAAE,KAAK7I,EAAI,IAAM,CAC3E,KAAK,qBAAqB,EAC1B,KAAK,SAAS,KAAK,CACjB,SAAU,GACV,KAAM,KAAK,gBACb,CAAC,CACH,CAAC,EAAGoD,EAAU,IAAM,KAAK,gBAAgB,gBAAgB,EAAE,KAAK1F,EAAI,IAAM,CAAC,CAAC,KAAK,gBAAgB,GAAG,WAAW,CAAC,CAAC,CAAC,EAAG0F,EAAU0F,GACzHA,EACK,KAAK,gBAAgB,mBAAmB,EAAE,KAAKvJ,EAAM,CAAC,EAEtD4D,EAAG,eAAe,CAE5B,EAAGnD,EAAI,IAAM,CACZ,KAAK,SAAS,KAAK,CACjB,SAAU,GACV,KAAM,KAAK,gBACb,CAAC,CACH,CAAC,CAAC,EACF,KAAK,gBAAkBjH,EAAM,KAAK,kBAAmB,KAAK,qBAAsB,KAAK,mBAAoB,KAAK,iBAAkB,KAAK,kBAAmB,KAAK,qBAAqB,EAClL,KAAK,uBAAyB,KAAK,gBAAgB,UAAU,IAAM,CAAC,CAAC,CACvE,CAIA,mBAAoB,CACd,OAAO,KAAK,KAAK,gBAAgB,SAAS,UAAU,EAAE,SACxD,KAAK,mBAAqB,KAAK,cAAc,UAAU,KAAK6C,EAAO,IAAM,KAAK,sBAAwB,KAAK,GAAG,cAAc,cAAc,eAAe,EAAE,WAAW,EAAGmN,GAAM,KAAK,gBAAgB,SAAS,qBAAqB,CAAC,EAAE,UAAU,IAAM,CACnP,KAAK,gBAAgB,SAAS,KAAK,GAAG,cAAc,cAAc,eAAe,EAAE,WAAW,EAC9F,KAAK,oBAAsB,KAAK,GAAG,cAAc,cAAc,eAAe,EAAE,WAClF,CAAC,EAEL,CAIA,iBAAkB,CAChB,KAAK,gBAAgB,gBAAgB,CACvC,CAIA,MAAO,CACA,KAAK,gBACV,KAAK,kBAAkB,KAAK,KAAK,gBAAgB,SAAS,QAAQ,CACpE,CAIA,MAAO,CACA,KAAK,gBACV,KAAK,kBAAkB,KAAK,KAAK,gBAAgB,SAAS,QAAQ,CACpE,CAIA,UAAU5H,EAAO,CACV,KAAK,gBACV,KAAK,kBAAkB,UAAUA,CAAK,CACxC,CAKA,GAAGE,EAAI,CAEA,KAAK,gBACV,KAAK,kBAAkB,YAAYA,CAAE,CACvC,CAIA,sBAAuB,CACrB,IAAI2H,EACEL,EAAiB,KAAK,gBAAgB,eACtCM,EAAe,KAAK,WAAW,OAAOrQ,GAASA,EAAM,WAAa,EAAI,EAAE,IAAIA,IAEzE,CACL,GAFSA,EAAM,GAAG,QAAQ+P,CAAc,GAAK,EAAI/P,EAAM,GAAG,MAAM+P,EAAe,MAAM,EAAI/P,EAAM,GAG/F,MAAOA,EAAM,MACb,QAASA,EAAM,QACf,QAASA,EAAM,QACf,OAAQA,EAAM,UAChB,EACD,EACDoQ,EAAgB,KAAK,gBAAgB,SAAS,KAAK,gBAAgB,QAAQ,CAAC,EAC5E,KAAK,iBAAmB,CACtB,cAAeA,EACf,OAAQC,CACV,CACF,CAIA,cAAe,CACb,KAAK,gBAAgB,aAAa,CACpC,CAIA,aAAc,CACZ,KAAK,gBAAgB,uBAAuB,CAC9C,CAIA,aAAc,CACZ,KAAK,gBAAgB,qBAAqB,CAC5C,CACA,cAAe,CACb,KAAK,gBAAgB,kBAAoB,GACzC,KAAK,gBAAgB,KAAK,CAC5B,CACA,eAAgB,CACd,KAAK,gBAAgB,kBAAoB,GACzC,KAAK,gBAAgB,KAAK,CAC5B,CACA,OAAO,UAAO,SAAmCxJ,EAAmB,CAClE,OAAO,IAAKA,GAAqBwI,GAAsBvC,EAAqBgB,CAAU,EAAMhB,EAAkBG,EAAa,EAAMH,EAAkBrN,CAAe,EAAMqN,EAAkB7F,EAAiB,EAAM6F,EAAkB9C,EAAe,EAAM8C,EAAkBpC,EAAe,EAAMoC,EAAkB/B,EAAc,EAAM+B,EAAkBpB,EAAiB,EAAMoB,EAAkBjB,EAAW,EAAMiB,EAAkB/F,EAAS,EAAM+F,EAAqBwD,EAAiB,EAAMxD,EAAkBtD,EAAQ,CAAC,CAC3f,EACA,OAAO,UAAyBwE,GAAkB,CAChD,KAAMqB,EACN,UAAW,CAAC,CAAC,gBAAgB,CAAC,EAC9B,eAAgB,SAA0CpB,EAAIC,EAAKqC,EAAU,CAI3E,GAHItC,EAAK,GACJuC,GAAeD,EAAU3D,GAAwB,CAAC,EAEnDqB,EAAK,EAAG,CACV,IAAIwC,EACDC,GAAeD,EAAQE,GAAY,CAAC,IAAMzC,EAAI,OAASuC,EAC5D,CACF,EACA,aAAc,SAAwCxC,EAAIC,EAAK,CACzDD,EAAK,GACJE,EAAW,mBAAoB,SAA+DC,EAAQ,CACvG,OAAOF,EAAI,mBAAmBE,CAAM,CACtC,EAAG,GAAUwC,EAAiB,CAElC,EACA,OAAQ,CACN,QAAS,SACX,EACA,QAAS,CACP,WAAY,aACZ,SAAU,WACV,OAAQ,SACR,QAAS,UACT,YAAa,aACf,EACA,SAAU,CAAIC,GAAmB,CAAC5J,GAAmB+C,GAAiBvK,EAAiBiL,GAAiBK,GAAgBW,GAAmBG,EAAW,CAAC,EAAMiF,EAAoB,EACjL,MAAO,EACP,KAAM,EACN,OAAQ,CAAC,CAAC,cAAe,EAAE,EAAG,CAAC,EAAG,eAAgB,YAAa,EAAG,YAAa,aAAc,aAAc,WAAY,SAAS,EAAG,CAAC,QAAS,kBAAmB,EAAG,MAAM,EAAG,CAAC,EAAG,MAAM,EAAG,CAAC,EAAG,iBAAiB,EAAG,CAAC,EAAG,eAAgB,YAAa,YAAY,EAAG,CAAC,EAAG,UAAW,EAAG,SAAS,EAAG,CAAC,EAAG,WAAY,EAAG,QAAS,UAAW,WAAW,EAAG,CAAC,EAAG,WAAY,EAAG,QAAS,UAAW,WAAW,EAAG,CAAC,EAAG,WAAY,EAAG,SAAS,EAAG,CAAC,QAAS,UAAW,EAAG,UAAW,QAAS,EAAG,QAAS,SAAS,EAAG,CAAC,EAAG,UAAW,EAAG,QAAS,SAAS,EAAG,CAAC,EAAG,WAAW,CAAC,EACniB,SAAU,SAAoC7C,EAAIC,EAAK,CACrD,GAAID,EAAK,EAAG,CACV,IAAM8C,EAASC,EAAiB,EAC7B3C,EAAe,EAAG,MAAO,EAAG,CAAC,EAC7BF,EAAW,YAAa,UAA+D,CACxF,OAAG8C,EAAcF,CAAG,EACVG,EAAYhD,EAAI,aAAa,CAAC,CAC1C,CAAC,EAAE,aAAc,UAAgE,CAC/E,OAAG+C,EAAcF,CAAG,EACVG,EAAYhD,EAAI,YAAY,CAAC,CACzC,CAAC,EAAE,aAAc,UAAgE,CAC/E,OAAG+C,EAAcF,CAAG,EACVG,EAAYhD,EAAI,aAAa,CAAC,CAC1C,CAAC,EAAE,WAAY,UAA8D,CAC3E,OAAG+C,EAAcF,CAAG,EACVG,EAAYhD,EAAI,YAAY,CAAC,CACzC,CAAC,EACEI,EAAW,EAAG6C,GAAkC,EAAG,EAAG,MAAO,CAAC,EAAE,EAAGC,GAA2C,EAAG,GAAI,eAAgB,CAAC,EACtI5C,EAAa,CAClB,CACIP,EAAK,IACJS,EAAW,UAAcC,GAAgB,EAAG0C,GAAKnD,EAAI,YAAc,KAAO,KAAOA,EAAI,WAAW,IAAKA,EAAI,YAAc,KAAO,KAAOA,EAAI,WAAW,SAAUA,EAAI,YAAc,KAAO,KAAOA,EAAI,WAAW,aAAcA,EAAI,YAAc,KAAO,KAAOA,EAAI,WAAW,gBAAiBA,EAAI,YAAc,KAAO,KAAOA,EAAI,WAAW,MAAM,CAAC,EACjVO,EAAU,CAAC,EACXC,EAAW,OAAQR,EAAI,cAAc,EACrCO,EAAU,EACVC,EAAW,OAAQR,EAAI,OAAO,QAAQ,EAAE,MAAM,EAErD,EACA,aAAc,CAAIW,GAAYC,GAAYC,GAAM5B,EAAc,EAC9D,OAAQ,CAAC,8CAA8C,EACvD,gBAAiB,CACnB,CAAC,CACH,CACA,OAAOkC,CACT,GAAG,EAICiC,IAAuC,IAAM,CAC/C,MAAMA,CAAuB,CAC3B,OACA,MAEA,YAEA,SAEA,oBAEA,iBAEA,mBAEA,WACA,SAAW,GACX,SAAW,CAAC,EAEZ,SACA,YAAYvF,EAAQD,EAAOyF,EAAUhE,EAAUD,EAAI,CACjD,KAAK,OAASvB,EACd,KAAK,MAAQD,EACTyF,GAAY,MACdhE,EAAS,aAAaD,EAAG,cAAe,WAAY,GAAG,CAE3D,CACA,IAAI,cAAcrB,EAAU,CACtBA,GAAY,KACd,KAAK,SAAW,MAAM,QAAQA,CAAQ,EAAIA,EAAW,CAACA,CAAQ,EAE9D,KAAK,SAAW,CAAC,CAErB,CAIA,IAAI,oBAAoBvF,EAAO,CACzB8K,EAAU,GAAK,SAAW,QAAQ,MACpC,QAAQ,KAAK,sEAAsE,EAErF,KAAK,SAAW9K,CAClB,CACA,SAAU,CACR,IAAMwF,EAAS,CACb,mBAAoBuF,EAAc,KAAK,kBAAkB,EACzD,WAAYA,EAAc,KAAK,UAAU,CAC3C,EACA,OAAI,KAAK,SACA,IAET,KAAK,OAAO,cAAc,KAAK,QAASvF,CAAM,EACvC,GACT,CACA,IAAI,SAAU,CACZ,OAAO,KAAK,OAAO,cAAc,KAAK,SAAU,CAC9C,WAAY,KAAK,MACjB,YAAa,KAAK,YAClB,SAAU,KAAK,SACf,oBAAqB,KAAK,oBAC1B,iBAAkBuF,EAAc,KAAK,gBAAgB,CACvD,CAAC,CACH,CACA,OAAO,UAAO,SAAwC5K,EAAmB,CACvE,OAAO,IAAKA,GAAqByK,GAA2BxE,EAAqBJ,CAAM,EAAMI,EAAqBL,CAAc,EAAMiF,GAAkB,UAAU,EAAM5E,EAAqBiB,EAAS,EAAMjB,EAAqBgB,CAAU,CAAC,CAC9O,EACA,OAAO,UAAyBd,EAAkB,CAChD,KAAMsE,EACN,UAAW,CAAC,CAAC,GAAI,gBAAiB,GAAI,EAAG,GAAG,CAAC,EAC7C,aAAc,SAA6CrD,EAAIC,EAAK,CAC9DD,EAAK,GACJE,EAAW,QAAS,UAA2D,CAChF,OAAOD,EAAI,QAAQ,CACrB,CAAC,CAEL,EACA,OAAQ,CACN,YAAa,cACb,SAAU,WACV,oBAAqB,sBACrB,iBAAkB,mBAClB,mBAAoB,qBACpB,WAAY,aACZ,SAAU,WACV,cAAe,gBACf,oBAAqB,qBACvB,CACF,CAAC,CACH,CACA,OAAOoD,CACT,GAAG,EAeCK,IAA+C,IAAM,CACvD,MAAMA,CAA+B,CACnC,OACA,MACA,iBAEA,OAEA,YAEA,SAEA,oBAEA,iBAEA,mBAEA,WACA,SAAW,GACX,SAAW,CAAC,EACZ,aAEA,SAGA,KACA,YAAY5F,EAAQD,EAAO8F,EAAkB,CAC3C,KAAK,OAAS7F,EACd,KAAK,MAAQD,EACb,KAAK,iBAAmB8F,EACxB,KAAK,aAAe7F,EAAO,OAAO,UAAU,GAAK,CAC3C,aAAa8F,IACf,KAAK,uBAAuB,CAEhC,CAAC,CACH,CACA,IAAI,cAAc5F,EAAU,CACtBA,GAAY,KACd,KAAK,SAAW,MAAM,QAAQA,CAAQ,EAAIA,EAAW,CAACA,CAAQ,EAE9D,KAAK,SAAW,CAAC,CAErB,CACA,IAAI,oBAAoBvF,EAAO,CACzB8K,EAAU,GAAK,SAAW,QAAQ,MACpC,QAAQ,KAAK,qEAAqE,EAEpF,KAAK,SAAW9K,CAClB,CACA,YAAYoL,EAAS,CACnB,KAAK,uBAAuB,CAC9B,CACA,aAAc,CACZ,KAAK,aAAa,YAAY,CAChC,CACA,QAAQC,EAAQC,EAASC,EAASC,EAAU,CAI1C,GAHIH,IAAW,GAAKC,GAAWC,GAAWC,GAGtC,OAAO,KAAK,QAAW,UAAY,KAAK,SAAW,QACrD,MAAO,GAET,GAAI,KAAK,SACP,MAAO,GAET,IAAMhG,EAAS,CACb,mBAAoBuF,EAAc,KAAK,kBAAkB,EACzD,WAAYA,EAAc,KAAK,UAAU,CAC3C,EACA,YAAK,OAAO,cAAc,KAAK,QAASvF,CAAM,EACvC,EACT,CACA,wBAAyB,CACvB,KAAK,KAAO,KAAK,iBAAiB,mBAAmB,KAAK,OAAO,aAAa,KAAK,OAAO,CAAC,CAC7F,CACA,IAAI,SAAU,CACZ,OAAO,KAAK,OAAO,cAAc,KAAK,SAAU,CAC9C,WAAY,KAAK,MACjB,YAAa,KAAK,YAClB,SAAU,KAAK,SACf,oBAAqB,KAAK,oBAC1B,iBAAkBuF,EAAc,KAAK,gBAAgB,CACvD,CAAC,CACH,CACA,OAAO,UAAO,SAAgD5K,EAAmB,CAC/E,OAAO,IAAKA,GAAqB8K,GAAmC7E,EAAqBJ,CAAM,EAAMI,EAAqBL,CAAc,EAAMK,EAAqBqF,EAAgB,CAAC,CACtL,EACA,OAAO,UAAyBnF,EAAkB,CAChD,KAAM2E,EACN,UAAW,CAAC,CAAC,IAAK,gBAAiB,EAAE,CAAC,EACtC,SAAU,EACV,aAAc,SAAqD1D,EAAIC,EAAK,CACtED,EAAK,GACJE,EAAW,QAAS,SAAiEC,EAAQ,CAC9F,OAAOF,EAAI,QAAQE,EAAO,OAAQA,EAAO,QAASA,EAAO,QAASA,EAAO,QAAQ,CACnF,CAAC,EAECH,EAAK,IACJmE,GAAe,OAAQlE,EAAI,KAASmE,EAAa,EACjDC,GAAY,SAAUpE,EAAI,MAAM,EAEvC,EACA,OAAQ,CACN,OAAQ,SACR,YAAa,cACb,SAAU,WACV,oBAAqB,sBACrB,iBAAkB,mBAClB,mBAAoB,qBACpB,WAAY,aACZ,SAAU,WACV,cAAe,gBACf,oBAAqB,qBACvB,EACA,SAAU,CAAI4C,EAAoB,CACpC,CAAC,CACH,CACA,OAAOa,CACT,GAAG,EAIH,SAASF,EAAcc,EAAG,CACxB,OAAOA,IAAM,IAAM,CAAC,CAACA,CACvB,CAWA,IAAIC,IAA+B,IAAM,CACvC,MAAMA,CAAe,CACnB,OAAO,UAAO,SAAgCC,EAAmB,CAC/D,OAAO,IAAKA,GAAqBD,EACnC,EACA,OAAO,UAAyBE,GAAiB,CAC/C,KAAMF,CACR,CAAC,EACD,OAAO,UAAyBG,GAAiB,CAC/C,UAAW,CAACC,GAAkBC,GAAeC,GAAoBC,EAAS,EAC1E,QAAS,CAACC,EAAY,CACxB,CAAC,CACH,CACA,OAAOR,CACT,GAAG","names":["_c0","a0","a1","a2","a3","a4","_c1","_c2","StageComponent_ng_container_2_2_ng_template_0_Template","rf","ctx","StageComponent_ng_container_2_2_Template","ɵɵtemplate","ctx_r3","ɵɵnextContext","slide_r2","i_r5","ctx_r2","ɵɵproperty","ɵɵpureFunction2","StageComponent_ng_container_2_Template","_r1","ɵɵgetCurrentView","ɵɵelementContainerStart","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","ɵɵresetView","ɵɵelementEnd","ɵɵelementContainerEnd","ɵɵadvance","ɵɵpureFunction4","_c3","_c4","_c5","_c6","CarouselComponent_div_2_Template","ɵɵelement","ctx_r1","CarouselComponent_ng_container_3_div_5_Template","_r4","dot_r5","ɵɵsanitizeHtml","CarouselComponent_ng_container_3_Template","_r3","ɵɵpureFunction1","OwlCarouselOConfig","OwlOptionsMockedTypes","OwlLogger","errorHandler","value","rest","isDevMode","error","__ngFactoryType__","ɵɵinject","ErrorHandler","ɵɵdefineInjectable","Type","Width","CarouselService","Subject","cache","margin","grid","rtl","css","slide","width","widths","merge","iterator","i","clones","items","settings","view","size","append","prepend","repeat","__spreadValues","coordinates","previous","current","padding","matches","begin","end","inner","outer","n","result","element","item","logger","options","configOptions","OwlCarouselOConfig","checkedOptions","mockedTypes","OwlOptionsMockedTypes","setRightOption","type","key","isString","skip_validateItems","carouselWidth","slides","viewport","overwrites","match","__spreadProps","mergers","mergeN","filter","filteredPipe","dimension","Width","curWidth","event","stage","transformArr","dragData","minimum","maximum","pull","delta","dragObj","clickAttacher","directions","direction","currentSlideI","newCurrent","coordinate","position","animate","state","part","relative","m","reciprocalItemsWidth","elementWidth","odd","even","map","index","v","speed","multiplier","newPosition","from","to","factor","revert","distance","delayForLoop","content","loadMap","currentClasses","a","o","b","name","data","namespace","enter","stateName","object","Type","tag","events","number","value","first","second","__ngFactoryType__","ɵɵinject","OwlLogger","ɵɵdefineInjectable","NavigationService","carouselService","initializedCarousel$","tap","changedSettings$","refreshedCarousel$","navMerge$","j","k","lower","upper","pages","difference","disabled","startI","loop","curActiveDotI","finalCurrent","page","successor","length","standard","dotId","dot","id","WINDOW","InjectionToken","WindowRef","BrowserWindowRef","windowFactory","browserWindowRef","platformId","isPlatformBrowser","func","time","browserWindowProvider","windowProvider","PLATFORM_ID","WINDOW_PROVIDERS","DOCUMENT","DocumentRef","BrowserDocumentRef","documentFactory","browserDocumentRef","browserDocumentProvider","documentProvider","DOCUMENT_PROVIDERS","AutoplayService","winRef","docRef","ngZone","resized$","autoplayMerge$","timeout","of","switchMap","NgZone","LazyLoadService","isLazyLoad","changeSettings$","resizedCarousel$","lazyLoadMerge$","AnimateService","dragCarousel$","draggedCarousel$","translatedCarousel$","dragTranslatedMerge$","translateCarousel$","animateMerge$","left","next","incoming","outgoing","AutoHeightService","autoHeight$","start","HashService","route","router","take","commands","extras","newCurSlide","newCurFragment","hashFragment$","fragment","count","skip","ActivatedRoute","Router","nextId","CarouselSlideDirective","tplRef","ɵɵdirectiveInject","TemplateRef","ɵɵdefineDirective","ResizeService","fromEvent","StageComponent","newSlide","zone","el","renderer","animateService","ev","target","stageOrExit","firstC","specificState","ElementRef","Renderer2","ɵɵdefineComponent","rf","ctx","ɵɵlistener","$event","ɵɵelementStart","ɵɵtemplate","StageComponent_ng_container_2_Template","ɵɵelementEnd","ɵɵadvance","ɵɵproperty","ɵɵpureFunction5","_c0","NgClass","NgForOf","NgIf","NgTemplateOutlet","NgStyle","trigger","style","transition","CarouselComponent","EventEmitter","resizeService","navigationService","autoplayService","lazyLoadService","autoHeightService","hashService","changeDetectorRef","changedPosition","clonedIdPrefix","toArray","slidesData","anim","delay","startPosition","activeSlides","ChangeDetectorRef","dirIndex","ɵɵcontentQuery","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵresolveDocument","ɵɵProvidersFeature","ɵɵNgOnChangesFeature","_r1","ɵɵgetCurrentView","ɵɵrestoreView","ɵɵresetView","CarouselComponent_div_2_Template","CarouselComponent_ng_container_3_Template","_c3","OwlRouterLinkDirective","tabIndex","isDevMode","attrBoolValue","ɵɵinjectAttribute","OwlRouterLinkWithHrefDirective","locationStrategy","NavigationEnd","changes","button","ctrlKey","metaKey","shiftKey","LocationStrategy","ɵɵhostProperty","ɵɵsanitizeUrl","ɵɵattribute","s","CarouselModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","WINDOW_PROVIDERS","ResizeService","DOCUMENT_PROVIDERS","OwlLogger","CommonModule"],"x_google_ignoreList":[0]}