{"version":3,"sources":["webpack:///webpack/bootstrap fcf5652d4a1d57089aaa","webpack:///external \"jQuery\"","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/fizzy-ui-utils/utils.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/flickity.js","webpack:///./scripts/util/helper.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/ev-emitter/ev-emitter.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/unipointer/unipointer.js","webpack:///./scripts/components/alert.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/get-size/get-size.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/swiper/swiper-bundle.js","webpack:///./scripts/components/language.js","webpack:///./scripts/main.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/dist/flickity.pkgd.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/overlayscrollbars/js/jquery.overlayScrollbars.js","webpack:///./scripts/vendor/flickity-fullscreen.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/index.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/desandro-matches-selector/matches-selector.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/cell.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/slide.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/animate.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/drag.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/unidragger/unidragger.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/prev-next-button.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/page-dots.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/player.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/add-remove-cell.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/lazyload.js","webpack:///./scripts/vendor/jquery.txtTruncate.js","webpack:///./scripts/autoload/_bootstrap.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/bootstrap/dist/js/bootstrap.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/popper.js/dist/esm/popper.js","webpack:///(webpack)/buildin/global.js","webpack:///./scripts/util/Router.js","webpack:///./scripts/util/camelCase.js","webpack:///./scripts/routes/common.js","webpack:///./scripts/components/modal.js","webpack:///./scripts/components/nav.js","webpack:///./scripts/components/headroom.js","webpack:///./scripts/vendor/headroom.js","webpack:///./scripts/components/cookie.js","webpack:///./scripts/components/filter.js","webpack:///./scripts/components/dropdown.js","webpack:///./scripts/components/picker.js","webpack:///./scripts/components/video.js","webpack:///./scripts/components/sidebar.js","webpack:///./scripts/components/size-guide.js","webpack:///./scripts/components/instagram.js","webpack:///./scripts/components/newsletter.js","webpack:///./scripts/util/Rule.js","webpack:///./scripts/components/unshippable.js","webpack:///./scripts/components/category.js","webpack:///./scripts/components/product-selected.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/sticky-sidebar/dist/sticky-sidebar.js","webpack:///./scripts/components/product.js","webpack:///./scripts/components/cart.js","webpack:///./scripts/components/search.js","webpack:///./scripts/components/checkout.js","webpack:///./scripts/components/scroll.js","webpack:///./scripts/components/backgroundSwitch.js","webpack:///./scripts/components/articles.js","webpack:///./scripts/components/text-banner.js","webpack:///./scripts/components/forms.js","webpack:///./scripts/components/hero.js","webpack:///./scripts/components/store-locator.js","webpack:///./scripts/components/bullet-list.js","webpack:///./scripts/components/bundles.js","webpack:///./scripts/tracking/hotjar.js","webpack:///./scripts/components/text-editor.js","webpack:///./scripts/tracking/gtag.js","webpack:///./scripts/components/top-banner.js","webpack:///./scripts/components/sliders/index.js","webpack:///./scripts/components/sliders/product-selected.js","webpack:///./scripts/components/sliders/product-slider.js","webpack:///./scripts/components/sliders/feature-slider.js","webpack:///./scripts/components/sliders/article-slider.js","webpack:///./scripts/components/sliders/article-listing.js","webpack:///./scripts/components/sliders/trustbar-slider.js","webpack:///./scripts/components/sliders/cart-slider.js","webpack:///./scripts/components/sliders/category-promo-slider.js","webpack:///./scripts/components/sliders/sub-navigation.js","webpack:///./scripts/components/sliders/product-bundle-page-slider.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/vanilla-lazyload/dist/lazyload.min.js","webpack:///./scripts/util/plusItem.js","webpack:///./scripts/util/crossPlatform.js","webpack:///./scripts/util/autoPadding.js","webpack:///./scripts/util/ellipsis.js","webpack:///./scripts/util/backgroundSwitcher.js","webpack:///./scripts/util/articleFilter.js","webpack:///./scripts/util/checkTouch.js","webpack:///./scripts/util/displayProp.js","webpack:///./scripts/util/disableBodyScroll.js","webpack:///./styles/main.scss"],"names":["const","let","this","arguments"],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA;;;;;;;AC7DA,wB;;;;;;ACAA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,uBAA4C;AAClD,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uBAAuB;AACzC;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL,GAAG;AACH;;AAEA;;AAEA;;AAEA,CAAC;;;;;;;AChPD;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,sBAAuB;AAC7B,MAAM,sBAAmB;AACzB,MAAM,sBAAsB;AAC5B,MAAM,uBAAQ;AACd,MAAM,uBAAS;AACf,MAAM,uBAAW;AACjB,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAiC;AACjC,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iCAAiC;AAC5C,aAAa,MAAM;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,cAAc;AAC3B;AACA;AACA;AACA,gBAAgB,uBAAuB;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,yBAAyB;AACpC,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iCAAiC,wBAAwB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,oCAAoC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,sBAAsB;AAC5C;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A;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,sBAAsB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,CAAC;;;;;;;AC/GD;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,sBAAuB;AAC7B,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AAC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AO,GAAG,KAAK,C;;;;;;;AClEtB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,oCAAQ,OAAO;AAAA;AAAA;AAAA;AAAA,oGAAE;AACrB,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,CAAC;;;;;;;AC9MD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI,KAA4D;AAChE;AACA;AACA,CAAC,qBAAqB;;AAEtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iCAAiC,UAAU;AAC3C;AACA,uEAAuE;AACvE;AACA;AACA,OAAO;AACP;;AAEA;AACA,cAAc;;AAEd,2BAA2B;;AAE3B,8BAA8B;;AAE9B;AACA,iBAAiB;;AAEjB;AACA,OAAO;;AAEP;AACA;AACA,OAAO;;AAEP;AACA;AACA,OAAO;;AAEP;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB,2BAA2B;;AAE3B;AACA;AACA;;AAEA;AACA,OAAO;;AAEP;AACA;AACA,OAAO;;AAEP;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,yBAAyB;;AAEzB,sBAAsB;;AAEtB,eAAe;;AAEf;;AAEA,OAAO;AACP;AACA;AACA,OAAO;;AAEP,2BAA2B;;AAE3B,8BAA8B;;AAE9B;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;;AAEP,gBAAgB;;AAEhB,eAAe;;AAEf,gBAAgB;;AAEhB,qBAAqB;;AAErB,uBAAuB;;AAEvB;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;;AAEP;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,qBAAqB,gBAAgB;AACrC;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,qBAAqB,gBAAgB;AACrC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yBAAyB,kCAAkC;AAC3D;AACA;AACA,SAAS;AACT;AACA,SAAS;;AAET,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA,0BAA0B;;AAE1B;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;;;AAGP,qBAAqB,iBAAiB;AACtC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,qBAAqB,iBAAiB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA,qBAAqB,iBAAiB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA,qBAAqB,iBAAiB;AACtC,6EAA6E,SAAS;AACtF;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4EAA4E;AAC5E,8CAA8C;;AAE9C,yBAAyB,oBAAoB;AAC7C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,qBAAqB,iBAAiB;AACtC;;AAEA;AACA,qBAAqB,mBAAmB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA,qBAAqB,mBAAmB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,qBAAqB,mBAAmB;AACxC;;AAEA,uBAAuB,iBAAiB;AACxC;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA,6CAA6C,QAAQ;AACrD;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,qBAAqB,mBAAmB;AACxC;;AAEA,uBAAuB,iBAAiB;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT,mBAAmB,iBAAiB;AACpC,qBAAqB,iBAAiB;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,qBAAqB,iBAAiB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,qBAAqB,iBAAiB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,wBAAwB;AAC3C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,mBAAmB,wBAAwB;AAC3C;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,cAAc;;AAEd;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,gBAAgB;AACrC;;AAEA,uBAAuB,iBAAiB;AACxC;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX,2BAA2B,qBAAqB;AAChD;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iBAAiB,iBAAiB;AAClC;AACA;AACA;;AAEA,iDAAiD,QAAQ;AACzD;AACA;AACA,SAAS;AACT,qBAAqB,qBAAqB;AAC1C;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,2CAA2C;;AAE3C;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,+CAA+C;;AAE/C;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;;AAEA;AACA,yBAAyB;;AAEzB,qBAAqB,iBAAiB;AACtC;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,yBAAyB;;AAEzB,qBAAqB,iBAAiB;AACtC,wCAAwC;;AAExC;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,yBAAyB;;AAEzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,qBAAqB,iBAAiB;AACtC;;AAEA,uBAAuB,kBAAkB;AACzC;AACA;AACA;;AAEA;AACA;;AAEA;AACA,0BAA0B;;AAE1B,qBAAqB,iBAAiB;AACtC;;AAEA,uBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,qBAAqB,iBAAiB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY;AACrB;;AAEA;AACA;AACA,SAAS,YAAY;AACrB;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS,4DAA4D;AACrE;;;AAGA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA,uEAAuE;AACvE,6EAA6E;AAC7E;AACA;;AAEA;AACA;AACA,uEAAuE;AACvE,6EAA6E;AAC7E;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,iBAAiB;AACtC;;AAEA;AACA;;AAEA,yDAAyD,iBAAiB;AAC1E;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,eAAe;AACf;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;;AAEA,aAAa;AACb;AACA,WAAW,YAAY;AACvB;;AAEA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,KAAK,KAAK;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,oBAAoB;;AAE9D;AACA;AACA;AACA;AACA,0CAA0C;;AAE1C;;AAEA,oEAAoE,YAAY,GAAG,aAAa;AAChG;AACA;AACA;AACA,OAAO;;;AAGP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;;;AAGP;AACA;;AAEA,qCAAqC;AACrC;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,yBAAyB,6BAA6B;AACtD;AACA;AACA,SAAS;;;AAGT;AACA;AACA,SAAS,EAAE;;AAEX;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,OAAO;;AAEP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA,OAAO;;;AAGP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;;AAGT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,6CAA6C,yBAAyB;AACtE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,yCAAyC;;AAEzC;AACA;AACA;AACA;AACA,OAAO,EAAE;AACT;AACA;AACA;AACA,OAAO,EAAE;;AAET;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,OAAO;;;AAGP;AACA;AACA;AACA,OAAO;;AAEP,qBAAqB,kBAAkB;AACvC;AACA;;AAEA;AACA;AACA;;AAEA,sDAAsD;;AAEtD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAS;AACT;AACA;;AAEA;AACA,6DAA6D,UAAU;AACvE;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,oBAAoB,yCAAyC;AAC7D,SAAS;AACT;;AAEA;AACA;AACA,2CAA2C,yCAAyC;AACpF,SAAS;AACT;;AAEA;AACA;AACA,OAAO;;;AAGP;AACA;;AAEA,uBAAuB,qBAAqB;AAC5C;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAS;AACT,oBAAoB,aAAa;AACjC,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA,+EAA+E,aAAa;AAC5F,8EAA8E,kEAAkE;AAChJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,QAAQ;;;AAGR;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT,qBAAqB,4CAA4C;AACjE;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;;;AAGP,iBAAiB,yBAAyB;AAC1C;AACA;AACA;AACA;AACA,OAAO;;;AAGP,wDAAwD,UAAU;AAClE;;AAEA;AACA;AACA;;AAEA,qBAAqB,mBAAmB;AACxC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,wCAAwC;;AAExC;AACA;AACA;;AAEA,qBAAqB,mBAAmB;AACxC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,wDAAwD;;AAExD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,4BAA4B,wBAAwB,GAAG,sBAAsB,GAAG,sBAAsB,GAAG,iCAAiC,GAAG,+BAA+B,GAAG,+BAA+B;AAC9M;;AAEA;AACA,iDAAiD,kBAAkB,4BAA4B,YAAY;AAC3G,OAAO;AACP;AACA,OAAO;;;AAGP;;AAEA;AACA;AACA;AACA,kCAAkC,kBAAkB,QAAQ,2BAA2B,6BAA6B,UAAU;AAC9H,SAAS;AACT,kCAAkC,kBAAkB,GAAG,2BAA2B,4BAA4B,UAAU;AACxH;AACA,OAAO;;;AAGP,8CAA8C,kBAAkB;;AAEhE;AACA;AACA;AACA,OAAO;;;AAGP,8CAA8C,kBAAkB;;AAEhE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kCAAkC,kBAAkB,QAAQ,2BAA2B,6BAA6B,0CAA0C;AAC9J,SAAS;AACT,kCAAkC,kBAAkB,GAAG,2BAA2B,4BAA4B,0CAA0C;AACxJ;;AAEA;AACA,kCAAkC,kBAAkB,QAAQ,2BAA2B,6BAA6B,0CAA0C;AAC9J,SAAS;AACT,kCAAkC,kBAAkB,GAAG,2BAA2B,4BAA4B,0CAA0C;AACxJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,uBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;;;AAGT;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;;;AAGP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4CAA4C,kBAAkB;AAC9D;AACA;;AAEA;AACA,uBAAuB,0BAA0B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP,4CAA4C,EAAE,MAAM,EAAE,MAAM,EAAE;AAC9D;;AAEA;AACA,uDAAuD;;AAEvD;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;AACA;AACA,mFAAmF,kFAAkF,8BAA8B;;AAEnM;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA,sDAAsD,mDAAmD;AACzG;;AAEA,+BAA+B,KAAK;;AAEpC;AACA;AACA,6CAA6C,KAAK;AAClD;AACA;;AAEA,4CAA4C,KAAK;;AAEjD;AACA,4CAA4C,KAAK;AACjD,SAAS;AACT,4CAA4C,KAAK;AACjD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mGAAmG,aAAa;AAChH;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA;;AAEA;AACA,gGAAgG,MAAM;AACtG,SAAS;AACT;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6CAA6C;;AAE7C,uCAAuC;;AAEvC;AACA,uBAAuB,uBAAuB;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;;;AAGP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uDAAuD,sDAAsD,yBAAyB;;AAEtI;AACA,6CAA6C;;AAE7C;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,yBAAyB;;AAEzB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA,yBAAyB;;AAEzB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,mDAAmD,kBAAkB,4BAA4B,UAAU,UAAU,2BAA2B;AAChJ;AACA;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA,iDAAiD,kBAAkB,4BAA4B,UAAU,UAAU,2BAA2B;AAC9I;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,UAAU;;AAEjB,8BAA8B,kBAAkB,GAAG,2BAA2B;AAC9E,2CAA2C,kBAAkB;;AAE7D;AACA;;AAEA;AACA,yBAAyB,oBAAoB;AAC7C,2EAA2E,kBAAkB,GAAG,uBAAuB;AACvH;AACA;;AAEA,2CAA2C,kBAAkB;AAC7D;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,OAAO;;AAEP,qBAAqB,yBAAyB;AAC9C;AACA;;AAEA,4CAA4C,QAAQ;AACpD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,yDAAyD;;AAEzD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,8BAA8B,kBAAkB,GAAG,2BAA2B,IAAI,kBAAkB,GAAG,uBAAuB;AAC9H;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iDAAiD;;AAEjD;;AAEA;AACA;AACA;;AAEA,0FAA0F,sBAAsB;AAChH,iEAAiE;;AAEjE;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,sCAAsC;;AAEtC;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,yCAAyC;;AAEzC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA,OAAO;;;AAGP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAO;;;AAGP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA,yDAAyD;;AAEzD;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;;;AAGP,mDAAmD;;AAEnD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;;;AAGP;AACA;AACA,OAAO;;;AAGP;AACA,0DAA0D;;AAE1D;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;;;AAGP;AACA;;AAEA,qBAAqB,uBAAuB;AAC5C;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;;;AAGP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qFAAqF;AACrF;;AAEA;AACA,wFAAwF;AACxF;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,6CAA6C;;AAE7C;AACA;AACA,OAAO;;;AAGP;AACA;AACA;AACA;AACA,OAAO,UAAU;;AAEjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA,OAAO;;;AAGP;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA,OAAO;;;AAGP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,kCAAkC;;AAElC;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA,OAAO;;;AAGP;AACA;AACA;;AAEA;AACA;AACA,OAAO;;;AAGP;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,uFAAuF;;AAEvF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B,8BAA8B,OAAO,8BAA8B;AAC9F;AACA,OAAO;AACP,wBAAwB,8BAA8B;;AAEtD;AACA,0BAA0B,8BAA8B;AACxD;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA,qBAAqB,mBAAmB;AACxC;AACA;AACA;AACA,SAAS;;AAET;AACA,+CAA+C,MAAM;AACrD;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,UAAU;;AAEjB;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,qBAAqB,gCAAgC;AACrD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2CAA2C;AAC3C;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA,0BAA0B;AAC1B;;AAEA;AACA;AACA;AACA,uCAAuC;AACvC;AACA,aAAa;AACb;AACA,WAAW;AACX;AACA,SAAS;;;AAGT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS,EAAE;;AAEX,sCAAsC,8BAA8B;;AAEpE,iCAAiC;AACjC,yCAAyC;AACzC,uCAAuC,UAAU;;AAEjD;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA,SAAS;;;AAGT,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA,WAAW;;AAEX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,SAAS;AACT,+BAA+B;;AAE/B;AACA;AACA,SAAS;;;AAGT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA,uCAAuC,mBAAmB;AAC1D;AACA;AACA;AACA;AACA;AACA;;AAEA,uCAAuC,QAAQ;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,yCAAyC,mBAAmB;AAC5D;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,yCAAyC,QAAQ;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU;;AAEnB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kCAAkC,qCAAqC,EAAE,iBAAiB,eAAe,qCAAqC,EAAE,aAAa;AAC7J;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA,wCAAwC;;AAExC;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,qBAAqB,+DAA+D;AACpF;;AAEA;AACA;AACA,6EAA6E;;AAE7E;;AAEA;AACA;;AAEA;AACA,UAAU;;;AAGV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,yBAAyB;AACpD;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kCAAkC;;AAElC;AACA;AACA,SAAS;;;AAGT,4BAA4B;;AAE5B;AACA;AACA,SAAS;;;AAGT,4BAA4B;;AAE5B;;AAEA;AACA;AACA,SAAS;;;AAGT;AACA;AACA;;AAEA;AACA;AACA,SAAS;;;AAGT;AACA;AACA,SAAS;AACT;AACA,SAAS;;;AAGT,8BAA8B;;AAE9B,kCAAkC;;AAElC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA,qCAAqC;;AAErC,mCAAmC;;AAEnC,8BAA8B;;AAE9B;AACA;AACA,SAAS;;;AAGT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,+BAA+B;;AAE/B;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,kHAAkH,yBAAyB,6BAA6B,MAAM,IAAI,MAAM;AACxL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA,sDAAsD;AACtD;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,6CAA6C,OAAO;AACpD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gCAAgC,SAAS;AACzC;AACA;;AAEA;AACA,aAAa;AACb,WAAW;;AAEX;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,qCAAqC,yBAAyB;AAC9D,SAAS;AACT,oCAAoC,iBAAiB;AACrD;AACA,yCAAyC,yBAAyB,4BAA4B,EAAE;AAChG;AACA;AACA;;AAEA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,uEAAuE,OAAO;AAC9E;AACA;;AAEA;AACA;AACA,yBAAyB,mBAAmB;AAC5C;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB,mBAAmB;AAC5C;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gDAAgD,QAAQ;AACxD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kCAAkC,qCAAqC;AACvE;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,uEAAuE,mBAAmB;AAC1F;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,iDAAiD;;AAEjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;;AAEtC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,6BAA6B;;AAE7B,qCAAqC,yBAAyB,wCAAwC,+BAA+B;AACrI;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yBAAyB,wBAAwB;AACjD;;AAEA;AACA,6DAA6D;;AAE7D;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,qDAAqD;AACrD;;AAEA;AACA;AACA,SAAS;AACT;AACA,qDAAqD;AACrD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA,mBAAmB;AACnB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;;AAGT;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,SAAS;;;AAGT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;;;AAGA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;;;AAGT,qDAAqD;;AAErD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,iDAAiD;;AAEjD;AACA;AACA;;AAEA;AACA;AACA,gGAAgG;AAChG,WAAW,8EAA8E;AACzF,SAAS;AACT;AACA;;AAEA;AACA,0CAA0C;;AAE1C;AACA;AACA,kFAAkF;AAClF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;;AAEZ;AACA,sCAAsC;AACtC;;AAEA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;;;AAGA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C;AAC1C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,KAAK,aAAa;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;;;AAGb,sDAAsD;;AAEtD,6GAA6G;;AAE7G;AACA;AACA;;AAEA,iDAAiD;AACjD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAAkD,gBAAgB;;AAElE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA,iBAAiB;AACjB,sBAAsB;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,IAAI;AAC9B,gCAAgC,IAAI;AACpC,4BAA4B,IAAI;AAChC,2BAA2B,IAAI;AAC/B,yBAAyB,IAAI;AAC7B,0BAA0B,IAAI;AAC9B,mCAAmC,IAAI;AACvC,uCAAuC,IAAI;AAC3C,6BAA6B,IAAI;AACjC,wBAAwB,IAAI;AAC5B,8BAA8B,IAAI;AAClC,4BAA4B,IAAI;AAChC;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT,0CAA0C,kBAAkB,GAAG,SAAS,2BAA2B,kBAAkB,GAAG,SAAS,GAAG,SAAS;AAC7I;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;;AAE1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;;;AAGT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mEAAmE,6CAA6C;;AAEhH;AACA;;AAEA;AACA;AACA,eAAe;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,2GAA2G,yBAAyB,EAAE,OAAO;;AAE7I;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC,yBAAyB;AAC/D;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sCAAsC,gBAAgB;AACtD,0CAA0C,yBAAyB;AACnE;;AAEA;AACA;AACA,yDAAyD,QAAQ;AACjE,+DAA+D,yBAAyB;AACxF;;AAEA,yFAAyF,yBAAyB;AAClH,iBAAiB;AACjB;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uEAAuE,cAAc;AACrF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;;AAEA,0GAA0G,OAAO,WAAW,OAAO;AACnI;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,yBAAyB,qBAAqB;AAC9C;AACA;AACA,aAAa;AACb,oCAAoC,qBAAqB,UAAU,mBAAmB,MAAM,qBAAqB;AACjH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX,6CAA6C,oBAAoB,qCAAqC,kBAAkB;AACxH;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX,6CAA6C,4BAA4B;AACzE;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA,2CAA2C;;AAE3C;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,0BAA0B,qBAAqB,EAAE,YAAY;AAC7D;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA,2CAA2C,OAAO;AAClD,sCAAsC,QAAQ;AAC9C,SAAS;AACT,gDAAgD,OAAO;AACvD,uCAAuC,QAAQ;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA,sCAAsC,SAAS;AAC/C,SAAS;AACT,uCAAuC,SAAS;AAChD;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mCAAmC,kCAAkC;;AAErE;AACA,qCAAqC,kCAAkC;AACvE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA,iBAAiB,uCAAuC;AACxD,SAAS;AACT,iBAAiB,yBAAyB;AAC1C;;AAEA;AACA,iBAAiB,2BAA2B;AAC5C,SAAS;AACT,iBAAiB,aAAa;AAC9B;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,EAAE,IAAI,EAAE;AAC/C,SAAS;AACT;AACA,uCAAuC,EAAE,IAAI,EAAE,eAAe,aAAa;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;;AAGP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qDAAqD,yBAAyB;AAC9E;AACA,uDAAuD,sBAAsB;AAC7E,6DAA6D,sBAAsB;AACnF;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+DAA+D,WAAW;AAC1E;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,+FAA+F,WAAW;AAC1G;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;;AAGT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;;AAGT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,eAAe,MAAM,eAAe;AAC1F;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;;AAEhE;AACA;AACA;AACA;AACA,sCAAsC;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF,eAAe,MAAM,eAAe;AACvH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD,yBAAyB;AAChF;;AAEA;AACA;AACA,gEAAgE,+BAA+B;AAC/F,aAAa;AACb;AACA;AACA;;AAEA,uDAAuD,sBAAsB;AAC7E,6DAA6D,sBAAsB;AACnF;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,qCAAqC,wBAAwB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA,sEAAsE,WAAW,MAAM,WAAW;AAClG,+EAA+E,WAAW;AAC1F;;AAEA;AACA;AACA;;AAEA;AACA;AACA,8DAA8D,+BAA+B;AAC7F,WAAW;AACX;AACA;;AAEA,uDAAuD,sBAAsB;AAC7E,6DAA6D,sBAAsB;AACnF;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wCAAwC,wBAAwB;AAChE;AACA,OAAO;;;AAGP;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,yBAAyB;AAC5C;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;;;AAGP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,iDAAiD;;AAEjD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;;AAGT,0DAA0D,kCAAkC;AAC5F;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,iDAAiD;;AAEjD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;;AAGT,2DAA2D,kCAAkC;AAC7F;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oEAAoE,yBAAyB,4BAA4B,MAAM;AAC/H,0CAA0C,oBAAoB,QAAQ,mBAAmB,SAAS,oBAAoB;;AAEtH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uDAAuD,WAAW;AAClE;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,8BAA8B,sBAAsB;;AAEpD;AACA;;AAEA;AACA,8FAA8F,mBAAmB,UAAU,kCAAkC;AAC7J;AACA,eAAe;AACf,uEAAuE,kCAAkC,4BAA4B,mBAAmB;AACxJ;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,wCAAwC,wBAAwB,4BAA4B,MAAM;AAClG;AACA;AACA,WAAW;;AAEX;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,kCAAkC,+BAA+B;AACjE;AACA;AACA,WAAW;AACX,SAAS;AACT,mCAAmC,iCAAiC;AACpE;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,8EAA8E;;AAE9E,qDAAqD,cAAc;AACnE;AACA,aAAa;;;AAGb,kCAAkC,iBAAiB;AACnD;AACA;AACA,WAAW;AACX,sDAAsD,4BAA4B;AAClF;AACA,sDAAsD,4BAA4B;AAClF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA,uBAAuB,wBAAwB;AAC/C;;AAEA;AACA,2DAA2D;;AAE3D;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;;AAEA,qCAAqC,kBAAkB;AACvD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,eAAe;AACf;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA,sCAAsC;AACtC;AACA;;AAEA;AACA;;AAEA;AACA,4BAA4B;;AAE5B;AACA,sBAAsB;AACtB;;AAEA;AACA;;AAEA;AACA,OAAO;;;AAGP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAsC;AACtC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB,uBAAuB;AAChD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,aAAa;AACb;AACA;;AAEA;AACA,qBAAqB,uBAAuB;AAC5C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,OAAO;AACzD,gCAAgC,OAAO,KAAK,cAAc;AAC1D;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,8EAA8E,EAAE,OAAO,EAAE;AACzF;AACA,WAAW;AACX;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC;;AAEtC;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;;AAGT;AACA,qEAAqE,oBAAoB;AACzF;AACA;AACA,oCAAoC;;AAEpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uEAAuE,EAAE,OAAO,EAAE,8BAA8B,EAAE,cAAc,EAAE;AAClI;AACA,SAAS,EAAE;;AAEX;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;;AAGT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;;AAGT;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,qCAAqC;AAC5E,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,KAAK,GAAG,IAAI,GAAG,MAAM;AAC1C,SAAS;AACT,qBAAqB,IAAI,GAAG,MAAM;AAClC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA,wDAAwD,YAAY;AACpE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;;AAEA;AACA,0DAA0D,yBAAyB,cAAc,QAAQ;AACzG;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,sDAAsD,uDAAuD;AAC7G;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,wDAAwD,YAAY;AACpE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;;AAEA,sEAAsE;AACtE;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA,6BAA6B;;AAE7B;AACA;AACA;;AAEA,gGAAgG,aAAa;AAC7G,gGAAgG,aAAa;AAC7G,yEAAyE,oEAAoE,uFAAuF;AACpO;;AAEA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT,qDAAqD;AACrD;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,qCAAqC;;AAErC;AACA;AACA,aAAa;;;AAGb,oHAAoH,iBAAiB;AACrI,oHAAoH,iBAAiB;;AAErI;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;;AAEA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,aAAa;;AAEb;AACA;AACA,SAAS;;;AAGT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,yBAAyB,sBAAsB;AAC/C,0EAA0E,qBAAqB;AAC/F;AACA,SAAS;AACT,yBAAyB,sBAAsB;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,SAAS,UAAU;;AAEnB;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU;;AAEnB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb;;;AAGA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA,WAAW;AACX;;AAEA,2BAA2B,qBAAqB;AAChD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb,WAAW;;;AAGX;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe;AACf;AACA,eAAe;AACf;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,eAAe;AACf,aAAa;AACb,WAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS,sBAAsB;;AAE/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA,kFAAkF,aAAa;AAC/F;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,2CAA2C,kCAAkC;AAC7E,SAAS;;AAET;AACA;AACA;;AAEA,yBAAyB,qBAAqB;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;;AAEA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;;AAEA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA,gDAAgD,kBAAkB;AAClE;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;;AAEA;AACA,OAAO;AACP;AACA;;AAEA,qBAAqB,yBAAyB;AAC9C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA,gDAAgD,kBAAkB;AAClE;;AAEA;AACA;;AAEA;AACA,uBAAuB,0BAA0B;AACjD;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,0BAA0B;AAC/C;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,kCAAkC,qCAAqC,EAAE,OAAO;;AAEhF;AACA,oCAAoC,qCAAqC;AACzE;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,yBAAyB,0BAA0B;AACnD;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA,SAAS;AACT;;AAEA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,2BAA2B,GAAG,MAAM,GAAG;AAClD;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB,YAAY;AACrC,aAAa;AACb,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB,mBAAmB;AAC1C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,uCAAuC,+BAA+B,eAAe,8BAA8B,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG;;AAE3J;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kEAAkE,8BAA8B;AAChG;AACA;;AAEA;AACA,iEAAiE,kCAAkC;AACnG;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kDAAkD,eAAe;AACjE,0CAA0C,eAAe;AACzD,SAAS;;AAET;AACA;AACA,wDAAwD,sCAAsC,MAAM,iBAAiB,yCAAyC,mBAAmB;AACjL,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,+CAA+C,OAAO,OAAO,OAAO,qBAAqB,0BAA0B,MAAM,2BAA2B;AACpJ;AACA;;AAEA;AACA,kDAAkD,QAAQ,cAAc,0CAA0C,eAAe,2CAA2C;AAC5K;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA,gDAAgD,WAAW,KAAK,OAAO;AACvE;AACA,oDAAoD,YAAY;;AAEhE;AACA,wDAAwD,WAAW,KAAK,OAAO;AAC/E;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA,uBAAuB,mBAAmB;AAC1C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,2CAA2C,GAAG,MAAM,GAAG,mBAAmB,QAAQ,eAAe,QAAQ;AACzG;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,uCAAuC;;AAEvC,+CAA+C,YAAY;AAC3D;AACA;AACA;AACA;AACA;AACA,qEAAqE;;AAErE;AACA,uCAAuC;;AAEvC;AACA;AACA;;AAEA;AACA;AACA,0EAA0E;;AAE1E;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,WAAW,KAAK,WAAW,KAAK,WAAW,eAAe,QAAQ,eAAe,QAAQ,aAAa,MAAM;AAC5J;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,kBAAkB,MAAM;AACxB;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;;AAET,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;;;AAGX;AACA,+BAA+B,MAAM,QAAQ,yCAAyC,KAAK,gCAAgC;AAC3H,WAAW,EAAE;;AAEb;AACA;AACA,WAAW;AACX;AACA;AACA,0CAA0C,KAAK,eAAe,KAAK,eAAe,KAAK;AACvF,8DAA8D,qDAAqD,cAAc,qDAAqD;AACtL;AACA,2CAA2C,gBAAgB,IAAI,aAAa,GAAG,YAAY,EAAE;;AAE7F;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AAC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AAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gDAAgD,IAAI;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gDAAgD,UAAU;AAC1D;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,uCAAgC,OAAO,6jBAAE;AAC7C,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA,CAAC;;;;AAID;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,sBAAsB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,uCAA4B,OAAO,yjBAAE;AACzC,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,uCAAqD,OAAO,klBAAE;AAClE,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,qBAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAA+B;AACnC,MAAM,0BAA4C;AAClD,KAAK,iCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;AAID;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uBAAuB;AACzC;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL,GAAG;AACH;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAA2B;AAC/B,MAAM,0BAAmB;AACzB,KAAK,iCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;AAID;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,uCAA4B,OAAO,yjBAAE;AACzC,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAA8B;AAClC,MAAM,0BAAsB;AAC5B,KAAK,iCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;AAID;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAA+B;AACnC,MAAM,0BAAuB;AAC7B,MAAM,0BAAmB;AACzB,MAAM,0BAAsB;AAC5B,MAAM,0BAAQ;AACd,MAAM,0BAAS;AACf,MAAM,0BAAW;AACjB,KAAK,iCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;;;AAIA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAiC;AACjC,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iCAAiC;AAC5C,aAAa,MAAM;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,cAAc;AAC3B;AACA;AACA;AACA,gBAAgB,uBAAuB;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,yBAAyB;AACpC,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iCAAiC,wBAAwB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,oCAAoC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,sBAAsB;AAC5C;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAgC;AACpC,MAAM,0BAAuB;AAC7B,KAAK,iCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;AAID;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAgC;AACpC,MAAM,0BAAuB;AAC7B,KAAK,kCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;AAID;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yBAAyB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAA2B;AAC/B,MAAM,0BAAY;AAClB,MAAM,2BAAuB;AAC7B,MAAM,0BAAsB;AAC5B,KAAK,kCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;AAID;;AAEA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa,OAAO,IAAI,YAAY,OAAO,UAAU,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB,EAAE,sBAAsB,eAAe;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAuC;AAC3C,MAAM,0BAAY;AAClB,MAAM,0BAAuB;AAC7B,MAAM,0BAAsB;AAC5B,KAAK,kCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAgC;AACpC,MAAM,0BAAY;AAClB,MAAM,0BAAuB;AAC7B,MAAM,0BAAsB;AAC5B,KAAK,kCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;;;AAIA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB,SAAS;AAChC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,CAAC;;AAED;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAA6B;AACjC,MAAM,0BAAuB;AAC7B,MAAM,0BAAsB;AAC5B,MAAM,0BAAY;AAClB,KAAK,kCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;AAID;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAsC;AAC1C,MAAM,0BAAY;AAClB,MAAM,0BAAsB;AAC5B,KAAK,kCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;AAID;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,WAAW,yBAAyB;AACpC,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAA+B;AACnC,MAAM,0BAAY;AAClB,MAAM,0BAAsB;AAC5B,KAAK,kCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAA4B;AAChC,MAAM,0BAAY;AAClB,MAAM,2BAAQ;AACd,MAAM,2BAAoB;AAC1B,MAAM,2BAAa;AACnB,MAAM,2BAAU;AAChB,MAAM,2BAAmB;AACzB,MAAM,2BAAY;AAClB,KAAK,oCAAE,OAAO;AAAA;AAAA,oHAAE;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAyC;AAC7C,MAAM,2BAAmB;AACzB,MAAM,0BAAsB;AAC5B,KAAK,oCAAE,OAAO;AAAA;AAAA;AAAA,oGAAE;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;AAID;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA,+BAA+B;AAC/B;;AAEA;;AAEA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAoC;AACxC,MAAM,0BAAuB;AAC7B,KAAK,kCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;AAEA;;;;AAIA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,WAAW,iCAAiC;AAC5C,WAAW,mBAAmB;AAC9B,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,qBAAqB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,2BAAmB;AACzB,MAAM,2BAA2B;AACjC,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,CAAC;;;;;;;;ACt+ID;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAQ,IAA0C;AAClD,QAAQ,iCAAO,CAAC,sBAAQ,CAAC,mCAAE,qBAAqB,+DAA+D,EAAE;AAAA,oGAAC;AAClH;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,EAAE;AAC1B,yBAAyB,EAAE;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,qBAAqB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,oCAAoC;AAClE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yBAAyB;AAClD;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,cAAc;AACvC;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA,yBAAyB,cAAc;AACvC;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA,yBAAyB,6BAA6B;AACtD;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA,yBAAyB,6BAA6B;AACtD;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA,yBAAyB,WAAW;AACpC;AACA;AACA,uFAAuF,2CAA2C,EAAE;AACpI,aAAa;;AAEb;AACA;AACA,yBAAyB,WAAW;AACpC;AACA;AACA,oFAAoF,gCAAgC,EAAE;AACtH,aAAa;;AAEb;AACA;AACA,yBAAyB,OAAO;AAChC;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,0BAA0B,sBAAsB;AAChD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA,yBAAyB,OAAO;AAChC;AACA;AACA,+BAA+B,oBAAoB;AACnD;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA,aAAa;;AAEb;AACA;AACA;AACA,yBAAyB,QAAQ;AACjC;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;;AAGb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,4GAA4G;;AAEtJ;AACA,8CAA8C;AAC9C;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,YAAY;;AAErC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,EAAE;AAC/D;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,gDAAgD;AAChD,wDAAwD;AACxD,iEAAiE,EAAE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mFAAmF,EAAE;;AAErF;AACA;AACA,kEAAkE;AAClE,0EAA0E;AAC1E;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA,kDAAkD,8BAA8B;AAChF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0DAA0D,4CAA4C;AACtG;AACA;AACA;AACA,8DAA8D,yDAAyD;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,EAAE;;AAE7E;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oDAAoD;;AAEpD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,aAAa;;AAEtC;AACA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB,iDAAiD,eAAe;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,qCAAqC;AAClE;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,mDAAmD,0EAA0E;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,yFAAyF,EAAE;AAC3F;AACA;AACA;AACA,6BAA6B;AAC7B,yBAAyB,YAAY;AACrC;AACA,qBAAqB;AACrB;AACA;AACA,iBAAiB;;AAEjB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0CAA0C,mCAAmC;AAC7E;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C,6CAA6C;AAC7C,2CAA2C;AAC3C,qCAAqC;AACrC,+CAA+C;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,mCAAmC;AACnC;;AAEA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,iCAAiC;AACjC,6CAA6C;AAC7C,yCAAyC;AACzC,oCAAoC;AACpC,qCAAqC;AACrC,oCAAoC;AACpC,2CAA2C;AAC3C,wCAAwC;AACxC,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0BAA0B,uBAAuB;AACjD,iEAAiE,uBAAuB;AACxF;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,+DAA+D;AACxH;AACA;AACA;AACA;AACA,iEAAiE,4EAA4E,gBAAgB;AAC7J;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0FAA0F;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iCAAiC;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iCAAiC;;AAEjC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oCAAoC,0BAA0B;AAC9D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,4BAA4B,6BAA6B;AACzD;;;AAGA;;AAEA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,+BAA+B,iBAAiB;AAChD;AACA;AACA;AACA;AACA,uCAAuC,0BAA0B;AACjE;AACA;AACA;AACA;AACA;AACA,uCAAuC,2BAA2B;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8CAA8C;AAC9C,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;;AAEA,yD;AACA;AACA;AACA,sE;AACA;AACA;;AAEA;;AAEA;AACA,6BAA6B;AAC7B;AACA,qBAAqB;;AAErB;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,oBAAoB;AAC3D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,mIAAmI;;AAEnI;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,EAAE;AAC1C;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qE;AACA,8M;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,6CAA6C;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0DAA0D;AAC1D;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,8FAA8F;;AAE9F;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,8FAA8F;AAC9F;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA,8DAA8D;;AAE9D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,6CAA6C;AAC7C,iDAAiD;;AAEjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wEAAwE;AACxE,wEAAwE;AACxE,sEAAsE;AACtE,sEAAsE;AACtE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,IAAI;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6FAA6F;AAC7F;AACA;AACA;AACA;AACA;AACA,oFAAoF;AACpF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;;AAEzC;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oDAAoD;AACpD,oDAAoD;AACpD,mDAAmD;AACnD,8CAA8C;AAC9C,2CAA2C;AAC3C,4CAA4C;AAC5C,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4DAA4D;AAC5D,kDAAkD;AAClD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kDAAkD;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,WAAW;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gLAAgL;AAChL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,mDAAmD,gBAAgB;AACnE;;;AAGA;;AAEA;AACA;AACA;AACA,6BAA6B,EAAE;AAC/B;AACA;AACA;;AAEA,mDAAmD;AACnD,2DAA2D;;AAE3D;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iCAAiC;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mHAAmH;AACnH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kJAAkJ;AAClJ;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA,8EAA8E;AAC9E;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,wFAAwF;AACxF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mHAAmH;;AAEnH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+NAA+N;AAC/N;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0HAA0H;AAC1H,iHAAiH;AACjH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B,+EAA+E;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,yCAAyC;AACzC,kDAAkD;;AAElD;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,wCAAwC;AACvG;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,mDAAmD,qBAAqB;AACxE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,OAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B,2BAA2B;AACrD;AACA,mCAAmC,2BAA2B;AAC9D;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA8B,sBAAsB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA6B,MAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA8B,mGAAmG;AACjI;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,iCAAiC;AAChE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,EAAE;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA6B,OAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA6B,EAAE;AAC/B;AACA;AACA;AACA;AACA;AACA,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA,yBAAyB,kBAAkB;AAC3C,mFAAmF,EAAE;AACrF;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA6B,EAAE;AAC/B;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,kB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iBAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA,kCAAkC;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,+BAA+B;AAC/D,qB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,sBAAsB;AACxD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAuB,eAAe;AACtC,uBAAuB,oBAAoB;AAC3C,uBAAuB,eAAe;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,qBAAqB;AACrD,6BAA6B,qBAAqB;AAClD,2BAA2B,qBAAqB;AAChD,oCAAoC,qBAAqB;AACzD,oCAAoC,qBAAqB;AACzD,yCAAyC,qBAAqB;AAC9D,kCAAkC,qBAAqB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,8BAA8B;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,2G;AACA,uCAAuC,gCAAgC;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,oBAAoB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,8CAA8C;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,EAAE;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B,+EAA+E,kCAAkC,sBAAsB,kCAAkC,qBAAqB;AAC5N;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B,wHAAwH;AACtJ;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D,4DAA4D;AAC5D,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD,kCAAkC,2BAA2B;AAC7D;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA,oDAAoD,EAAE;AACtD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,EAAE;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA,wDAAwD;AACxD,8DAA8D;AAC9D,8DAA8D;AAC9D,sDAAsD;;AAEtD;AACA,2CAA2C,EAAE;;AAE7C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,uEAAuE,oCAAoC,EAAE;AAC7G;;AAEA;AACA;AACA;AACA;AACA,kEAAkE,oBAAoB,EAAE;AACxF;AACA,gEAAgE,0BAA0B,EAAE;;AAE5F;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,EAAE;AACxD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,EAAE;;AAErD;AACA,yEAAyE,EAAE;AAC3E;;AAEA;AACA;AACA;AACA,yBAAyB,QAAQ;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,yCAAyC;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,6BAA6B,mCAAmC;AAChE;AACA;AACA,oEAAoE;AACpE;AACA,mEAAmE,EAAE,yBAAyB;AAC9F;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,yBAAyB,EAAE;AAC3B;AACA;AACA;AACA;AACA,uDAAuD,mCAAmC,EAAE;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACpxKA;;;;;;;AAOA,EAAE,UAAU,MAAM,EAAE,OAAO,GAAG;;;EAG5B,KAAK,IAAyC,GAAG;;IAE/C,iCAAQ;MACN,uBAAmB,CACrB,CAAC,oCAAE,OAAO;AAAA;AAAA;AAAA,oGAAE,CAAC;GACd,MAAM,KAAK,OAAO,MAAM,IAAI,QAAQ,IAAI,MAAM,CAAC,OAAO,GAAG;;IAExD,MAAM,CAAC,OAAO,GAAG,OAAO;MACtB,OAAO,CAAC,UAAU,CAAC;KACpB,CAAC;GACH,MAAM;;IAEL,OAAO;MACL,MAAM,CAAC,QAAQ;KAChB,CAAC;GACH;;CAEF,EAAE,MAAM,EAAE,SAAS,OAAO,EAAE,QAAQ,GAAG;;AAExC,YAAY,CAAC;;AAEb,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACjD,IAAI,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;;;AAG/B,KAAK,CAAC,iBAAiB,GAAG,WAAW;EACnC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;;EAE1B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG;IAC9B,OAAO;GACR;;EAED,IAAI,CAAC,oBAAoB,GAAG,IAAI,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;EACjE,IAAI,CAAC,oBAAoB,GAAG,IAAI,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;;EAEjE,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,uBAAuB,EAAE,CAAC;EACpD,IAAI,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,uBAAuB,EAAE,CAAC;CACvD,CAAC;;;;AAIF,KAAK,CAAC,uBAAuB,GAAG,WAAW;EACzC,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,GAAG,aAAa,GAAG,aAAa,CAAC;EAChE,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAC;EACjE,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAC;;EAEjE,IAAI,YAAY,GAAG,IAAI,CAAC,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC;EAC7D,IAAI,CAAC,oBAAoB,EAAE,YAAY,EAAE,EAAE,CAAC;EAC5C,IAAI,CAAC,oBAAoB,EAAE,YAAY,EAAE,EAAE,CAAC;CAC7C,CAAC;;;;AAIF,KAAK,CAAC,cAAc,GAAG,WAAW;EAChC,IAAI,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC;EAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;CACd,CAAC;;AAEF,KAAK,CAAC,cAAc,GAAG,WAAW;EAChC,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,CAAC;CACjC,CAAC;;AAEF,KAAK,CAAC,iBAAiB,GAAG,UAAU,MAAM,GAAG;EAC3C,KAAK,IAAI,CAAC,YAAY,IAAI,MAAM,GAAG;IACjC,OAAO;GACR;EACD,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;EAC3B,IAAI,WAAW,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;EAC5C,QAAQ,CAAC,eAAe,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC,wBAAwB,CAAC,CAAC;EAC5E,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC,eAAe,CAAC,CAAC;EACvD,IAAI,CAAC,MAAM,EAAE,CAAC;;EAEd,KAAK,IAAI,CAAC,YAAY,GAAG;IACvB,IAAI,CAAC,UAAU,EAAE,CAAC;GACnB;EACD,IAAI,CAAC,aAAa,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC;CAC5D,CAAC;;AAEF,KAAK,CAAC,gBAAgB,GAAG,WAAW;EAClC,IAAI,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;CAC9C,CAAC;;;;;AAKF,IAAI,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;AAC1C,KAAK,CAAC,cAAc,GAAG,WAAW;EAChC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG;IAClC,OAAO;GACR;EACD,KAAK,IAAI,CAAC,YAAY,GAAG;;IAEvB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;GACjC,MAAM;;IAEL,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;GAC7B;CACF,CAAC;;;;;AAKF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,GAAG,WAAW;EACzC,IAAI,CAAC,cAAc,EAAE,CAAC;CACvB,CAAC;;;;AAIF,SAAS,gBAAgB,EAAE,IAAI,EAAE,QAAQ,GAAG;EAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;EACjB,IAAI,CAAC,YAAY,EAAE,CAAC;EACpB,IAAI,CAAC,UAAU,EAAE,CAAC;;;EAGlB,IAAI,CAAC,OAAO,GAAG,WAAW;IACxB,QAAQ,EAAE,IAAI,GAAG,YAAY,EAAE,EAAE,CAAC;GACnC,CAAC;EACF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;CAC/C;;AAED,gBAAgB,CAAC,SAAS,CAAC,YAAY,GAAG,WAAW;EACnD,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;EAC9D,OAAO,CAAC,SAAS,GAAG,6CAA6C;IAC/D,6BAA6B,GAAG,IAAI,CAAC,IAAI,CAAC;;EAE5C,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;;EAEzC,IAAI,KAAK,GAAG,UAAU,EAAE,IAAI,CAAC,IAAI,GAAG,cAAc,EAAE,CAAC;EACrD,OAAO,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;EAC5C,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;CACvB,CAAC;;AAEF,SAAS,UAAU,EAAE,IAAI,GAAG;EAC1B,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;CAC9C;;AAED,IAAI,MAAM,GAAG,4BAA4B,CAAC;;AAE1C,IAAI,cAAc,GAAG;EACnB,IAAI,EAAE,0DAA0D;EAChE,IAAI,EAAE,0DAA0D;CACjE,CAAC;;AAEF,gBAAgB,CAAC,SAAS,CAAC,UAAU,GAAG,WAAW;EACjD,IAAI,GAAG,GAAG,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;EACnD,GAAG,CAAC,YAAY,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;EACpD,GAAG,CAAC,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;;EAE3C,IAAI,IAAI,GAAG,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;EACrD,IAAI,SAAS,GAAG,cAAc,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;EAC5C,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;;EAEpC,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;EACxB,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC;CACjC,CAAC;;AAEF,gBAAgB,CAAC,SAAS,CAAC,QAAQ,GAAG,WAAW;EAC/C,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;CAC7D,CAAC;;AAEF,gBAAgB,CAAC,SAAS,CAAC,UAAU,GAAG,WAAW;EACjD,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;CAChE,CAAC;;AAEF,QAAQ,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;;;;AAI7C,OAAO,QAAQ,CAAC;;CAEf,CAAC,CAAC,CAAC;;;;;;;ACpLJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,sBAAY;AAClB,MAAM,uBAAQ;AACd,MAAM,uBAAoB;AAC1B,MAAM,uBAAa;AACnB,MAAM,uBAAU;AAChB,MAAM,uBAAmB;AACzB,MAAM,uBAAY;AAClB,KAAK,oCAAE,OAAO;AAAA;AAAA;AAAA,oGAAE;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;AACA;AACA,CAAC;;;;;;;ACzCD;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,oCAAQ,OAAO;AAAA;AAAA;AAAA;AAAA,oGAAE;AACrB,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,qBAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA,CAAC;;;;;;;ACpDD;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,sBAAmB;AACzB,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,CAAC;;;;;;;ACrGD;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,oCAAQ,OAAO;AAAA;AAAA;AAAA;AAAA,oGAAE;AACrB,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA,CAAC;;;;;;;ACzED;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,sBAAsB;AAC5B,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,CAAC;;;;;;;ACxMD;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,sBAAY;AAClB,MAAM,uBAAuB;AAC7B,MAAM,sBAAsB;AAC5B,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;AAEA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa,OAAO,IAAI,YAAY,OAAO,UAAU,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB,EAAE,sBAAsB,eAAe;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,CAAC;;;;;;;ACxYD;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,sBAAuB;AAC7B,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yBAAyB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;;;;;;ACtRD;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,sBAAY;AAClB,MAAM,sBAAuB;AAC7B,MAAM,sBAAsB;AAC5B,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;;;;;;AClND;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,sBAAY;AAClB,MAAM,sBAAuB;AAC7B,MAAM,sBAAsB;AAC5B,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB,SAAS;AAChC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,CAAC;;AAED;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;;;;;;AC3LD;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,sBAAuB;AAC7B,MAAM,sBAAsB;AAC5B,MAAM,sBAAY;AAClB,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;;;;;;AC9LD;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,sBAAY;AAClB,MAAM,sBAAsB;AAC5B,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,WAAW,yBAAyB;AACpC,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,CAAC;;;;;;;AChKD;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,sBAAY;AAClB,MAAM,sBAAsB;AAC5B,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;;;;;;ACrID;;;;;;AAMA,CAAC,UAAU,CAAC,EAAE;;IAEV,YAAY,CAAC;;;;IAIb,SAAS,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE;;;QAG9B,IAAI,IAAI,GAAG,IAAI,CAAC;;QAEhB,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACxC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACtC,IAAI,CAAC,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;;;QAGpC,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;;QAE9D,IAAI,CAAC,SAAS,EAAE,CAAC;;QAEjB,IAAI,CAAC,QAAQ,EAAE,CAAC;;;;QAIhB,IAAI,OAAO,CAAC;QACZ,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,UAAU;;;YAGvB,YAAY,CAAC,OAAO,CAAC,CAAC;;;YAGtB,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;SAC3D,CAAC,CAAC;KACN;;;IAGD,SAAS,CAAC,SAAS,GAAG;;;;;;QAMlB,IAAI,EAAE,YAAY;YACd,IAAI,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;gBAC/C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;oBACf,MAAM,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK;iBAChD,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;aACpC;SACJ;;;;;;QAMD,IAAI,EAAE,YAAY;;;;YAId,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;;YAEvC,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;gBACf,MAAM,EAAE,IAAI,CAAC,UAAU;aAC1B,CAAC,CAAC;;SAEN;;;;;;QAMD,QAAQ,EAAE,YAAY,CAAC;;AAAA;;;YAGnB,IAAI,CAAC,YAAY,EAAE,CAAC;;YAEpB,IAAI,OAAO,QAAQ,IAAI,CAAC,eAAe,EAAE;gBACrC,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE;gBACtC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,YAAY,CAAC;gBACxD,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;;;YAGpD,IAAI,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;;;;gBAIpC,IAAI,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,EAAE;;;;oBAIxC,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC;;;;;oBAK7E,OAAO,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,EAAE;wBACtD,OAAO,GAAGC,MAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAC;qBACzE;;iBAEJ;;;;gBAID,OAAO,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;;;;oBAIlD,IAAI,OAAO,CAAC,MAAM,IAAI,gBAAgB,EAAE;wBACpCA,MAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;wBAC/B,MAAM;qBACT;;;oBAGD,OAAO,GAAGA,MAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;iBAC1D;aACJ;;YAED,IAAI,CAAC,YAAY,EAAE,CAAC;;SAEvB;;;;;;QAMD,SAAS,EAAE;YACP,GAAG,KAAK,GAAG;YACX,KAAK,GAAG,IAAI;SACf;;;;;;QAMD,cAAc,GAAG,YAAY;YACzB,IAAI,KAAK,GAAG,IAAI,CAAC;;;YAGjB,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE;;;gBAG5B,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC;;;gBAGlD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE;;;;oBAInC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;iBACtD;aACJ;;YAED,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC;SACtD;;;;;;QAMD,gBAAgB,EAAE,YAAY;YAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;SAC5D;;;;;;;;QAQD,YAAY,EAAE,YAAY;;;YAGtB,IAAI,CAAC,GAAG,GAAG;gBACP,MAAM,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,MAAM;gBACnD,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;gBACxC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;aAC3C,CAAC;;;YAGF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;gBACX,MAAM,MAAM,MAAM;gBAClB,SAAS,GAAG,MAAM;gBAClB,SAAS,GAAG,CAAC;aAChB,CAAC,CAAC;SACN;;;;;;QAMD,gBAAgB,EAAE,SAAS,OAAO,CAAC,CAAC;;AAAA;;;YAGhC,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACjC,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;;;YAGpC,OAAO,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,EAAE;gBAChE,OAAO,GAAGA,MAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;aAC1D;;;YAGD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,MAAM,EAAE;gBAC/B,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;aAChD;;;YAGD,IAAI,OAAO,CAAC,MAAM,IAAI,SAAS,EAAE;gBAC7B,IAAI,CAAC,eAAe,EAAE,CAAC;aAC1B;SACJ;;;;;QAKD,YAAY,EAAE,YAAY;YACtB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC5B;;;;;;QAMD,eAAe,EAAE,YAAY;YACzB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9B,OAAO,IAAI,CAAC,OAAO,CAAC;SACvB;;;;;;;QAOD,SAAS,EAAE,YAAY;;;;YAInB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;;;;gBAItB,IAAI,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC;;gBAE3D,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE;oBAC7B,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;iBACjE;;;;qBAII;oBACD,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;iBAC3B;;aAEJ;;SAEJ;;;;;;;;QAQD,mBAAmB,EAAE,UAAU,MAAM,EAAE;YACnC,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC5C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACzC,OAAO,GAAG,CAAC;SACd;;KAEJ,CAAC;;;;IAIF,CAAC,CAAC,EAAE,CAAC,WAAW,GAAG,UAAU,OAAO,EAAE;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY;YACzB,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;SAC3D,CAAC,CAAC;KACN,CAAC;;;CAGL,CAAC,MAAM,CAAC,CAAC,CAAC;;;;;;;;;AC/RX;AAAA;AAAmB;;;;;;;ACAnB;;;;;AAKA,CAAC,UAAU,MAAM,EAAE,OAAO,EAAE;EAC1B,KAA4D,GAAG,OAAO,CAAC,OAAO,EAAE,mBAAO,CAAC,CAAQ,CAAC,EAAE,mBAAO,CAAC,EAAW,CAAC,CAAC;EACxH,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC;EAChG,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,GAAG,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;CACzF,CAAC,IAAI,EAAE,UAAU,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC;;EAEnD,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;EACxD,MAAM,GAAG,MAAM,IAAI,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;;EAEjF,SAAS,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MACrC,IAAI,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;MAC1B,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,IAAI,KAAK,CAAC;MACvD,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC;MAC/B,IAAI,OAAO,IAAI,UAAU,EAAE,YAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;MACtD,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;KAC3D;GACF;;EAED,SAAS,YAAY,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE;IAC1D,IAAI,UAAU,EAAE,mBAAiB,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACrE,IAAI,WAAW,EAAE,mBAAiB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAC7D,OAAO,WAAW,CAAC;GACpB;;EAED,SAAS,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE;IACxC,IAAI,GAAG,IAAI,GAAG,EAAE;MACd,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE;QAC9B,KAAK,EAAE,KAAK;QACZ,UAAU,EAAE,IAAI;QAChB,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,IAAI;OACf,CAAC,CAAC;KACJ,MAAM;MACL,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;KAClB;;IAED,OAAO,GAAG,CAAC;GACZ;;EAED,SAAS,aAAa,CAAC,MAAM,EAAE,CAAC;;AAAA;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MACzC,IAAI,MAAM,GAAGC,WAAS,CAAC,CAAC,CAAC,IAAI,IAAI,GAAGA,WAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;MACtD,IAAI,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;MAElC,IAAI,OAAO,MAAM,CAAC,qBAAqB,KAAK,UAAU,EAAE;QACtD,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,EAAE;UAClF,OAAO,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC;SAChE,CAAC,CAAC,CAAC;OACL;;MAED,OAAO,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE;QAC7B,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;OAC3C,CAAC,CAAC;KACJ;;IAED,OAAO,MAAM,CAAC;GACf;;EAED,SAAS,cAAc,CAAC,QAAQ,EAAE,UAAU,EAAE;IAC5C,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACzD,QAAQ,CAAC,SAAS,CAAC,WAAW,GAAG,QAAQ,CAAC;IAC1C,QAAQ,CAAC,SAAS,GAAG,UAAU,CAAC;GACjC;;;;;;;;;;;;;;EAcD,IAAI,cAAc,GAAG,eAAe,CAAC;EACrC,IAAI,OAAO,GAAG,OAAO,CAAC;EACtB,IAAI,uBAAuB,GAAG,IAAI,CAAC;;EAEnC,SAAS,MAAM,CAAC,GAAG,EAAE;IACnB,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;GACpE;;EAED,SAAS,4BAA4B,GAAG;IACtC,OAAO;MACL,QAAQ,EAAE,cAAc;MACxB,YAAY,EAAE,cAAc;MAC5B,MAAM,EAAE,SAAS,MAAM,CAAC,KAAK,EAAE;QAC7B,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;UAC5B,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;SACvD;;QAED,OAAO,SAAS,CAAC;OAClB;KACF,CAAC;GACH;;EAED,SAAS,qBAAqB,CAAC,QAAQ,EAAE;IACvC,IAAI,KAAK,GAAG,IAAI,CAAC;;IAEjB,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY;MAC3C,MAAM,GAAG,IAAI,CAAC;KACf,CAAC,CAAC;IACH,UAAU,CAAC,YAAY;MACrB,IAAI,CAAC,MAAM,EAAE;QACX,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;OAClC;KACF,EAAE,QAAQ,CAAC,CAAC;IACb,OAAO,IAAI,CAAC;GACb;;EAED,SAAS,uBAAuB,GAAG;IACjC,CAAC,CAAC,EAAE,CAAC,oBAAoB,GAAG,qBAAqB,CAAC;IAClD,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,4BAA4B,EAAE,CAAC;GACvE;;;;;;;;EAQD,IAAI,IAAI,GAAG;IACT,cAAc,EAAE,iBAAiB;IACjC,MAAM,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE;MAC9B,GAAG;;QAED,MAAM,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC;OACvC,QAAQ,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;;MAE1C,OAAO,MAAM,CAAC;KACf;IACD,sBAAsB,EAAE,SAAS,sBAAsB,CAAC,OAAO,EAAE;MAC/D,IAAI,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;;MAEnD,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,GAAG,EAAE;QACjC,IAAI,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC5C,QAAQ,GAAG,QAAQ,IAAI,QAAQ,KAAK,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;OAChE;;MAED,IAAI;QACF,OAAO,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC;OAC3D,CAAC,OAAO,GAAG,EAAE;QACZ,OAAO,IAAI,CAAC;OACb;KACF;IACD,gCAAgC,EAAE,SAAS,gCAAgC,CAAC,OAAO,EAAE;MACnF,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,CAAC,CAAC;OACV;;;MAGD,IAAI,kBAAkB,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;MAC/D,IAAI,eAAe,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;MACzD,IAAI,uBAAuB,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;MAC7D,IAAI,oBAAoB,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;;MAEvD,IAAI,CAAC,uBAAuB,IAAI,CAAC,oBAAoB,EAAE;QACrD,OAAO,CAAC,CAAC;OACV;;;MAGD,kBAAkB,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;MACtD,eAAe,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;MAChD,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC,GAAG,uBAAuB,CAAC;KACjG;IACD,MAAM,EAAE,SAAS,MAAM,CAAC,OAAO,EAAE;MAC/B,OAAO,OAAO,CAAC,YAAY,CAAC;KAC7B;IACD,oBAAoB,EAAE,SAAS,oBAAoB,CAAC,OAAO,EAAE;MAC3D,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;KACpC;;IAED,qBAAqB,EAAE,SAAS,qBAAqB,GAAG;MACtD,OAAO,OAAO,CAAC,cAAc,CAAC,CAAC;KAChC;IACD,SAAS,EAAE,SAAS,SAAS,CAAC,GAAG,EAAE;MACjC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC;KACjC;IACD,eAAe,EAAE,SAAS,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE;MAC5E,KAAK,IAAI,QAAQ,IAAI,WAAW,EAAE;QAChC,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE;UAC/D,IAAI,aAAa,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;UAC1C,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;UAC7B,IAAI,SAAS,GAAG,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;;UAE3E,IAAI,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YAC9C,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE,GAAG,IAAI,GAAG,CAAC,WAAW,GAAG,QAAQ,GAAG,qBAAqB,GAAG,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,sBAAsB,GAAG,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC;WAC/K;SACF;OACF;KACF;IACD,cAAc,EAAE,SAAS,cAAc,CAAC,OAAO,EAAE;MAC/C,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY,EAAE;QAC1C,OAAO,IAAI,CAAC;OACb;;;MAGD,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,UAAU,EAAE;QAC7C,IAAI,IAAI,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QACjC,OAAO,IAAI,YAAY,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC;OACjD;;MAED,IAAI,OAAO,YAAY,UAAU,EAAE;QACjC,OAAO,OAAO,CAAC;OAChB;;;MAGD,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;QACvB,OAAO,IAAI,CAAC;OACb;;MAED,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;KAChD;GACF,CAAC;EACF,uBAAuB,EAAE,CAAC;;;;;;;;EAQ1B,IAAI,IAAI,GAAG,OAAO,CAAC;EACnB,IAAI,OAAO,GAAG,OAAO,CAAC;EACtB,IAAI,QAAQ,GAAG,UAAU,CAAC;EAC1B,IAAI,SAAS,GAAG,GAAG,GAAG,QAAQ,CAAC;EAC/B,IAAI,YAAY,GAAG,WAAW,CAAC;EAC/B,IAAI,kBAAkB,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;EACpC,IAAI,QAAQ,GAAG;IACb,OAAO,EAAE,wBAAwB;GAClC,CAAC;EACF,IAAI,KAAK,GAAG;IACV,KAAK,EAAE,OAAO,GAAG,SAAS;IAC1B,MAAM,EAAE,QAAQ,GAAG,SAAS;IAC5B,cAAc,EAAE,OAAO,GAAG,SAAS,GAAG,YAAY;GACnD,CAAC;EACF,IAAI,SAAS,GAAG;IACd,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;;;;;;;GAOb,CAAC;;EAEF,IAAI,KAAK;;EAET,YAAY;IACV,SAAS,KAAK,CAAC,OAAO,EAAE;MACtB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;KACzB;;;IAGD,IAAI,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;;;IAG7B,MAAM,CAAC,KAAK,GAAG,SAAS,KAAK,CAAC,OAAO,EAAE;MACrC,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC;;MAEhC,IAAI,OAAO,EAAE;QACX,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;OAC7C;;MAED,IAAI,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;;MAEvD,IAAI,WAAW,CAAC,kBAAkB,EAAE,EAAE;QACpC,OAAO;OACR;;MAED,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;KAClC,CAAC;;IAEF,MAAM,CAAC,OAAO,GAAG,SAAS,OAAO,GAAG;MAClC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;MACtC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;KACtB;KACA;;IAED,MAAM,CAAC,eAAe,GAAG,SAAS,eAAe,CAAC,OAAO,EAAE;MACzD,IAAI,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;MACpD,IAAI,MAAM,GAAG,KAAK,CAAC;;MAEnB,IAAI,QAAQ,EAAE;QACZ,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;OAC3C;;MAED,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;OACvD;;MAED,OAAO,MAAM,CAAC;KACf,CAAC;;IAEF,MAAM,CAAC,kBAAkB,GAAG,SAAS,kBAAkB,CAAC,OAAO,EAAE;MAC/D,IAAI,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;MACtC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;MAC/B,OAAO,UAAU,CAAC;KACnB,CAAC;;IAEF,MAAM,CAAC,cAAc,GAAG,SAAS,cAAc,CAAC,OAAO,EAAE;MACvD,IAAI,KAAK,GAAG,IAAI,CAAC;;MAEjB,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;;MAEvC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;QACxC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;;QAE9B,OAAO;OACR;;MAED,IAAI,kBAAkB,GAAG,IAAI,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC;MACxE,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,KAAK,EAAE;QACnD,OAAO,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;OAC9C,CAAC,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;KAC7C,CAAC;;IAEF,MAAM,CAAC,eAAe,GAAG,SAAS,eAAe,CAAC,OAAO,EAAE;MACzD,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;KACpD;KACA;;IAED,KAAK,CAAC,gBAAgB,GAAG,SAAS,gBAAgB,CAAC,MAAM,EAAE;MACzD,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY;QAC3B,IAAI,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;QAEnC,IAAI,CAAC,IAAI,EAAE;UACT,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;UACvB,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;SAC/B;;QAED,IAAI,MAAM,KAAK,OAAO,EAAE;UACtB,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;SACpB;OACF,CAAC,CAAC;KACJ,CAAC;;IAEF,KAAK,CAAC,cAAc,GAAG,SAAS,cAAc,CAAC,aAAa,EAAE;MAC5D,OAAO,UAAU,KAAK,EAAE;QACtB,IAAI,KAAK,EAAE;UACT,KAAK,CAAC,cAAc,EAAE,CAAC;SACxB;;QAED,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;OAC3B,CAAC;KACH,CAAC;;IAEF,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;MACzB,GAAG,EAAE,SAAS;MACd,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,OAAO,CAAC;OAChB;KACF,CAAC,CAAC,CAAC;;IAEJ,OAAO,KAAK,CAAC;GACd,EAAE,CAAC;;;;;;;;EAQJ,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC;;;;;;;EAO1F,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC;EACpC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW,GAAG,KAAK,CAAC;;EAE/B,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,YAAY;IAClC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC;IAChC,OAAO,KAAK,CAAC,gBAAgB,CAAC;GAC/B,CAAC;;;;;;;;EAQF,IAAI,MAAM,GAAG,QAAQ,CAAC;EACtB,IAAI,SAAS,GAAG,OAAO,CAAC;EACxB,IAAI,UAAU,GAAG,WAAW,CAAC;EAC7B,IAAI,WAAW,GAAG,GAAG,GAAG,UAAU,CAAC;EACnC,IAAI,cAAc,GAAG,WAAW,CAAC;EACjC,IAAI,oBAAoB,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;EACxC,IAAI,WAAW,GAAG;IAChB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,OAAO;GACf,CAAC;EACF,IAAI,UAAU,GAAG;IACf,kBAAkB,EAAE,yBAAyB;IAC7C,WAAW,EAAE,yBAAyB;IACtC,KAAK,EAAE,4BAA4B;IACnC,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,MAAM;GACf,CAAC;EACF,IAAI,OAAO,GAAG;IACZ,cAAc,EAAE,OAAO,GAAG,WAAW,GAAG,cAAc;IACtD,mBAAmB,EAAE,OAAO,GAAG,WAAW,GAAG,cAAc,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,WAAW,GAAG,cAAc,CAAC;;;;;;;GAO5G,CAAC;;EAEF,IAAI,MAAM;;EAEV,YAAY;IACV,SAAS,MAAM,CAAC,OAAO,EAAE;MACvB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;KACzB;;;IAGD,IAAI,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;;;IAG9B,MAAM,CAAC,MAAM,GAAG,SAAS,MAAM,GAAG;MAChC,IAAI,kBAAkB,GAAG,IAAI,CAAC;MAC9B,IAAI,cAAc,GAAG,IAAI,CAAC;MAC1B,IAAI,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;;MAEtE,IAAI,WAAW,EAAE;QACf,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;;QAE1D,IAAI,KAAK,EAAE;UACT,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;YAC1B,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;cACzE,kBAAkB,GAAG,KAAK,CAAC;aAC5B,MAAM;cACL,IAAI,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;;cAEjE,IAAI,aAAa,EAAE;gBACjB,CAAC,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;eAClD;aACF;WACF;;UAED,IAAI,kBAAkB,EAAE;YACtB,IAAI,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,WAAW,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;cAChK,OAAO;aACR;;YAED,KAAK,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACtE,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;WAC5B;;UAED,KAAK,CAAC,KAAK,EAAE,CAAC;UACd,cAAc,GAAG,KAAK,CAAC;SACxB;OACF;;MAED,IAAI,cAAc,EAAE;QAClB,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;OACnG;;MAED,IAAI,kBAAkB,EAAE;QACtB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;OAClD;KACF,CAAC;;IAEF,MAAM,CAAC,OAAO,GAAG,SAAS,OAAO,GAAG;MAClC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;MACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;KACtB;KACA;;IAED,MAAM,CAAC,gBAAgB,GAAG,SAAS,gBAAgB,CAAC,MAAM,EAAE;MAC1D,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY;QAC3B,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;QAEpC,IAAI,CAAC,IAAI,EAAE;UACT,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;UACxB,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;SAChC;;QAED,IAAI,MAAM,KAAK,QAAQ,EAAE;UACvB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;SAChB;OACF,CAAC,CAAC;KACJ,CAAC;;IAEF,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;MAC1B,GAAG,EAAE,SAAS;MACd,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,SAAS,CAAC;OAClB;KACF,CAAC,CAAC,CAAC;;IAEJ,OAAO,MAAM,CAAC;GACf,EAAE,CAAC;;;;;;;;EAQJ,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,UAAU,CAAC,kBAAkB,EAAE,UAAU,KAAK,EAAE;IACrF,KAAK,CAAC,cAAc,EAAE,CAAC;IACvB,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;;IAE1B,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;MAC3C,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;KAC/C;;IAED,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;GACnD,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,mBAAmB,EAAE,UAAU,CAAC,kBAAkB,EAAE,UAAU,KAAK,EAAE;IACjF,IAAI,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;GAC3E,CAAC,CAAC;;;;;;;EAOH,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC;EACvC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,WAAW,GAAG,MAAM,CAAC;;EAElC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,UAAU,GAAG,YAAY;IACpC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC;IACpC,OAAO,MAAM,CAAC,gBAAgB,CAAC;GAChC,CAAC;;;;;;;;EAQF,IAAI,MAAM,GAAG,UAAU,CAAC;EACxB,IAAI,SAAS,GAAG,OAAO,CAAC;EACxB,IAAI,UAAU,GAAG,aAAa,CAAC;EAC/B,IAAI,WAAW,GAAG,GAAG,GAAG,UAAU,CAAC;EACnC,IAAI,cAAc,GAAG,WAAW,CAAC;EACjC,IAAI,oBAAoB,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;EACxC,IAAI,kBAAkB,GAAG,EAAE,CAAC;;EAE5B,IAAI,mBAAmB,GAAG,EAAE,CAAC;;EAE7B,IAAI,sBAAsB,GAAG,GAAG,CAAC;;EAEjC,IAAI,eAAe,GAAG,EAAE,CAAC;EACzB,IAAI,OAAO,GAAG;IACZ,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,KAAK;IACZ,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;GACZ,CAAC;EACF,IAAI,WAAW,GAAG;IAChB,QAAQ,EAAE,kBAAkB;IAC5B,QAAQ,EAAE,SAAS;IACnB,KAAK,EAAE,kBAAkB;IACzB,KAAK,EAAE,kBAAkB;IACzB,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;GACjB,CAAC;EACF,IAAI,SAAS,GAAG;IACd,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;GACf,CAAC;EACF,IAAI,OAAO,GAAG;IACZ,KAAK,EAAE,OAAO,GAAG,WAAW;IAC5B,IAAI,EAAE,MAAM,GAAG,WAAW;IAC1B,OAAO,EAAE,SAAS,GAAG,WAAW;IAChC,UAAU,EAAE,YAAY,GAAG,WAAW;IACtC,UAAU,EAAE,YAAY,GAAG,WAAW;IACtC,UAAU,EAAE,YAAY,GAAG,WAAW;IACtC,SAAS,EAAE,WAAW,GAAG,WAAW;IACpC,QAAQ,EAAE,UAAU,GAAG,WAAW;IAClC,WAAW,EAAE,aAAa,GAAG,WAAW;IACxC,SAAS,EAAE,WAAW,GAAG,WAAW;IACpC,UAAU,EAAE,WAAW,GAAG,WAAW;IACrC,aAAa,EAAE,MAAM,GAAG,WAAW,GAAG,cAAc;IACpD,cAAc,EAAE,OAAO,GAAG,WAAW,GAAG,cAAc;GACvD,CAAC;EACF,IAAI,WAAW,GAAG;IAChB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,qBAAqB;IAC5B,IAAI,EAAE,oBAAoB;IAC1B,IAAI,EAAE,oBAAoB;IAC1B,IAAI,EAAE,oBAAoB;IAC1B,IAAI,EAAE,eAAe;IACrB,aAAa,EAAE,eAAe;GAC/B,CAAC;EACF,IAAI,UAAU,GAAG;IACf,MAAM,EAAE,SAAS;IACjB,WAAW,EAAE,uBAAuB;IACpC,IAAI,EAAE,gBAAgB;IACtB,QAAQ,EAAE,oBAAoB;IAC9B,SAAS,EAAE,0CAA0C;IACrD,UAAU,EAAE,sBAAsB;IAClC,UAAU,EAAE,+BAA+B;IAC3C,SAAS,EAAE,wBAAwB;GACpC,CAAC;EACF,IAAI,WAAW,GAAG;IAChB,KAAK,EAAE,OAAO;IACd,GAAG,EAAE,KAAK;;;;;;;GAOX,CAAC;;EAEF,IAAI,QAAQ;;EAEZ,YAAY;IACV,SAAS,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE;MACjC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;MACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;MACtB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;MAC3B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;MACvB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;MACxB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;MACzB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;MACrB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;MACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;MACvC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;MACxB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;MAC7E,IAAI,CAAC,eAAe,GAAG,cAAc,IAAI,QAAQ,CAAC,eAAe,IAAI,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC;MAClG,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC;;MAE3E,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;;;IAGD,IAAI,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC;;;IAGhC,MAAM,CAAC,IAAI,GAAG,SAAS,IAAI,GAAG;MAC5B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;QACpB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;OAC7B;KACF,CAAC;;IAEF,MAAM,CAAC,eAAe,GAAG,SAAS,eAAe,GAAG;;;MAGlD,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,QAAQ,EAAE;QAC1G,IAAI,CAAC,IAAI,EAAE,CAAC;OACb;KACF,CAAC;;IAEF,MAAM,CAAC,IAAI,GAAG,SAAS,IAAI,GAAG;MAC5B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;QACpB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;OAC7B;KACF,CAAC;;IAEF,MAAM,CAAC,KAAK,GAAG,SAAS,KAAK,CAAC,KAAK,EAAE;MACnC,IAAI,CAAC,KAAK,EAAE;QACV,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;OACvB;;MAED,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QACrD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;OAClB;;MAED,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;MAC9B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;KACvB,CAAC;;IAEF,MAAM,CAAC,KAAK,GAAG,SAAS,KAAK,CAAC,KAAK,EAAE;MACnC,IAAI,CAAC,KAAK,EAAE;QACV,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;OACxB;;MAED,IAAI,IAAI,CAAC,SAAS,EAAE;QAClB,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;OACvB;;MAED,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;QAC5C,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,CAAC,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;OAC/H;KACF,CAAC;;IAEF,MAAM,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC,KAAK,EAAE;MAC7B,IAAI,KAAK,GAAG,IAAI,CAAC;;MAEjB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;;MAE1E,IAAI,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;;MAE1D,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;QAC/C,OAAO;OACR;;MAED,IAAI,IAAI,CAAC,UAAU,EAAE;QACnB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,YAAY;UAC7C,OAAO,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;SACxB,CAAC,CAAC;QACH,OAAO;OACR;;MAED,IAAI,WAAW,KAAK,KAAK,EAAE;QACzB,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO;OACR;;MAED,IAAI,SAAS,GAAG,KAAK,GAAG,WAAW,GAAG,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;;MAEtE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;KAC5C,CAAC;;IAEF,MAAM,CAAC,OAAO,GAAG,SAAS,OAAO,GAAG;MAClC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;MAClC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;MACxC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;MACnB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;MACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;MACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;MACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;MACtB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;MACvB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;MAC3B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;KAChC;KACA;;IAED,MAAM,CAAC,UAAU,GAAG,SAAS,UAAU,CAAC,MAAM,EAAE;MAC9C,MAAM,GAAG,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;MAC5C,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;MAClD,OAAO,MAAM,CAAC;KACf,CAAC;;IAEF,MAAM,CAAC,YAAY,GAAG,SAAS,YAAY,GAAG;MAC5C,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;MAE3C,IAAI,SAAS,IAAI,eAAe,EAAE;QAChC,OAAO;OACR;;MAED,IAAI,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC;;MAE7C,IAAI,SAAS,GAAG,CAAC,EAAE;QACjB,IAAI,CAAC,IAAI,EAAE,CAAC;OACb;;;MAGD,IAAI,SAAS,GAAG,CAAC,EAAE;QACjB,IAAI,CAAC,IAAI,EAAE,CAAC;OACb;KACF,CAAC;;IAEF,MAAM,CAAC,kBAAkB,GAAG,SAAS,kBAAkB,GAAG;MACxD,IAAI,MAAM,GAAG,IAAI,CAAC;;MAElB,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;QACzB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,KAAK,EAAE;UACpD,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SAC/B,CAAC,CAAC;OACJ;;MAED,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,OAAO,EAAE;QAClC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,KAAK,EAAE;UACvD,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SAC5B,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,KAAK,EAAE;UACzC,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SAC5B,CAAC,CAAC;OACJ;;MAED,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;QACtB,IAAI,CAAC,uBAAuB,EAAE,CAAC;OAChC;KACF,CAAC;;IAEF,MAAM,CAAC,uBAAuB,GAAG,SAAS,uBAAuB,GAAG;MAClE,IAAI,MAAM,GAAG,IAAI,CAAC;;MAElB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;QACzB,OAAO;OACR;;MAED,IAAI,KAAK,GAAG,SAAS,KAAK,CAAC,KAAK,EAAE;QAChC,IAAI,MAAM,CAAC,aAAa,IAAI,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,EAAE;UACtF,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC;SAClD,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;UAChC,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;SAC7D;OACF,CAAC;;MAEF,IAAI,IAAI,GAAG,SAAS,IAAI,CAAC,KAAK,EAAE;;QAE9B,IAAI,KAAK,CAAC,aAAa,CAAC,OAAO,IAAI,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;UACzE,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;SACxB,MAAM;UACL,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC;SAClF;OACF,CAAC;;MAEF,IAAI,GAAG,GAAG,SAAS,GAAG,CAAC,KAAK,EAAE;QAC5B,IAAI,MAAM,CAAC,aAAa,IAAI,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,EAAE;UACtF,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC;SACvE;;QAED,MAAM,CAAC,YAAY,EAAE,CAAC;;QAEtB,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,OAAO,EAAE;;;;;;;;UAQpC,MAAM,CAAC,KAAK,EAAE,CAAC;;UAEf,IAAI,MAAM,CAAC,YAAY,EAAE;YACvB,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;WACnC;;UAED,MAAM,CAAC,YAAY,GAAG,UAAU,CAAC,UAAU,KAAK,EAAE;YAChD,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;WAC5B,EAAE,sBAAsB,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;SACtD;OACF,CAAC;;MAEF,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE;QACzF,OAAO,CAAC,CAAC,cAAc,EAAE,CAAC;OAC3B,CAAC,CAAC;;MAEH,IAAI,IAAI,CAAC,aAAa,EAAE;QACtB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,KAAK,EAAE;UACxD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC;SACrB,CAAC,CAAC;QACH,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,KAAK,EAAE;UACtD,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;SACnB,CAAC,CAAC;;QAEH,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;OACxD,MAAM;QACL,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,KAAK,EAAE;UACvD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC;SACrB,CAAC,CAAC;QACH,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,KAAK,EAAE;UACtD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;SACpB,CAAC,CAAC;QACH,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,KAAK,EAAE;UACrD,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;SACnB,CAAC,CAAC;OACJ;KACF,CAAC;;IAEF,MAAM,CAAC,QAAQ,GAAG,SAAS,QAAQ,CAAC,KAAK,EAAE;MACzC,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;QAChD,OAAO;OACR;;MAED,QAAQ,KAAK,CAAC,KAAK;QACjB,KAAK,kBAAkB;UACrB,KAAK,CAAC,cAAc,EAAE,CAAC;UACvB,IAAI,CAAC,IAAI,EAAE,CAAC;UACZ,MAAM;;QAER,KAAK,mBAAmB;UACtB,KAAK,CAAC,cAAc,EAAE,CAAC;UACvB,IAAI,CAAC,IAAI,EAAE,CAAC;UACZ,MAAM;;QAER,QAAQ;OACT;KACF,CAAC;;IAEF,MAAM,CAAC,aAAa,GAAG,SAAS,aAAa,CAAC,OAAO,EAAE;MACrD,IAAI,CAAC,MAAM,GAAG,OAAO,IAAI,OAAO,CAAC,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;MACvH,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KACrC,CAAC;;IAEF,MAAM,CAAC,mBAAmB,GAAG,SAAS,mBAAmB,CAAC,SAAS,EAAE,aAAa,EAAE;MAClF,IAAI,eAAe,GAAG,SAAS,KAAK,SAAS,CAAC,IAAI,CAAC;MACnD,IAAI,eAAe,GAAG,SAAS,KAAK,SAAS,CAAC,IAAI,CAAC;;MAEnD,IAAI,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;;MAEpD,IAAI,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;MAC3C,IAAI,aAAa,GAAG,eAAe,IAAI,WAAW,KAAK,CAAC,IAAI,eAAe,IAAI,WAAW,KAAK,aAAa,CAAC;;MAE7G,IAAI,aAAa,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;QACvC,OAAO,aAAa,CAAC;OACtB;;MAED,IAAI,KAAK,GAAG,SAAS,KAAK,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;MAClD,IAAI,SAAS,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;MAC3D,OAAO,SAAS,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;KACxF,CAAC;;IAEF,MAAM,CAAC,kBAAkB,GAAG,SAAS,kBAAkB,CAAC,aAAa,EAAE,kBAAkB,EAAE;MACzF,IAAI,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;;MAEpD,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;;MAExF,IAAI,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE;QACtC,aAAa,EAAE,aAAa;QAC5B,SAAS,EAAE,kBAAkB;QAC7B,IAAI,EAAE,SAAS;QACf,EAAE,EAAE,WAAW;OAChB,CAAC,CAAC;MACH,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;MACrC,OAAO,UAAU,CAAC;KACnB,CAAC;;IAEF,MAAM,CAAC,0BAA0B,GAAG,SAAS,0BAA0B,CAAC,OAAO,EAAE;MAC/E,IAAI,IAAI,CAAC,kBAAkB,EAAE;QAC3B,IAAI,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5F,CAAC,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;;QAE9C,IAAI,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;;QAElF,IAAI,aAAa,EAAE;UACjB,CAAC,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;SAC/C;OACF;KACF,CAAC;;IAEF,MAAM,CAAC,MAAM,GAAG,SAAS,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE;MAClD,IAAI,MAAM,GAAG,IAAI,CAAC;;MAElB,IAAI,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;;MAExE,IAAI,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;;MAE3D,IAAI,WAAW,GAAG,OAAO,IAAI,aAAa,IAAI,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;;MAEjG,IAAI,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;;MAEvD,IAAI,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;MACxC,IAAI,oBAAoB,CAAC;MACzB,IAAI,cAAc,CAAC;MACnB,IAAI,kBAAkB,CAAC;;MAEvB,IAAI,SAAS,KAAK,SAAS,CAAC,IAAI,EAAE;QAChC,oBAAoB,GAAG,WAAW,CAAC,IAAI,CAAC;QACxC,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC;QAClC,kBAAkB,GAAG,SAAS,CAAC,IAAI,CAAC;OACrC,MAAM;QACL,oBAAoB,GAAG,WAAW,CAAC,KAAK,CAAC;QACzC,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC;QAClC,kBAAkB,GAAG,SAAS,CAAC,KAAK,CAAC;OACtC;;MAED,IAAI,WAAW,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;QAC9D,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,OAAO;OACR;;MAED,IAAI,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;;MAE1E,IAAI,UAAU,CAAC,kBAAkB,EAAE,EAAE;QACnC,OAAO;OACR;;MAED,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW,EAAE;;QAElC,OAAO;OACR;;MAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;;MAEvB,IAAI,SAAS,EAAE;QACb,IAAI,CAAC,KAAK,EAAE,CAAC;OACd;;MAED,IAAI,CAAC,0BAA0B,CAAC,WAAW,CAAC,CAAC;;MAE7C,IAAI,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;QACpC,aAAa,EAAE,WAAW;QAC1B,SAAS,EAAE,kBAAkB;QAC7B,IAAI,EAAE,kBAAkB;QACxB,EAAE,EAAE,gBAAgB;OACrB,CAAC,CAAC;;MAEH,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;QAChD,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACzB,CAAC,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;QAChD,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;QAC9C,IAAI,mBAAmB,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC;;QAElF,IAAI,mBAAmB,EAAE;UACvB,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;UACrF,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,mBAAmB,CAAC;SAC7C,MAAM;UACL,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;SAC/E;;QAED,IAAI,kBAAkB,GAAG,IAAI,CAAC,gCAAgC,CAAC,aAAa,CAAC,CAAC;QAC9E,CAAC,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY;UACpD,CAAC,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,oBAAoB,GAAG,GAAG,GAAG,cAAc,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;UACrG,CAAC,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,oBAAoB,CAAC,CAAC;UACrG,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC;UAC1B,UAAU,CAAC,YAAY;YACrB,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;WAC9C,EAAE,CAAC,CAAC,CAAC;SACP,CAAC,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;OAC7C,MAAM;QACL,CAAC,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;OACrC;;MAED,IAAI,SAAS,EAAE;QACb,IAAI,CAAC,KAAK,EAAE,CAAC;OACd;KACF;KACA;;IAED,QAAQ,CAAC,gBAAgB,GAAG,SAAS,gBAAgB,CAAC,MAAM,EAAE;MAC5D,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY;QAC3B,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;QAEpC,IAAI,OAAO,GAAG,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;;QAEzD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;UAC9B,OAAO,GAAG,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;SAC9C;;QAED,IAAI,MAAM,GAAG,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;;QAEjE,IAAI,CAAC,IAAI,EAAE;UACT,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;UACnC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;SAChC;;QAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;UAC9B,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;SACjB,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;UACrC,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,WAAW,EAAE;YACvC,MAAM,IAAI,SAAS,CAAC,oBAAoB,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;WAC3D;;UAED,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;SAChB,MAAM,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE;UAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;UACb,IAAI,CAAC,KAAK,EAAE,CAAC;SACd;OACF,CAAC,CAAC;KACJ,CAAC;;IAEF,QAAQ,CAAC,oBAAoB,GAAG,SAAS,oBAAoB,CAAC,KAAK,EAAE;MACnE,IAAI,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;;MAEjD,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO;OACR;;MAED,IAAI,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;;MAE5B,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE;QACxD,OAAO;OACR;;MAED,IAAI,MAAM,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;;MAEjE,IAAI,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;;MAEpD,IAAI,UAAU,EAAE;QACd,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;OACzB;;MAED,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;;MAElD,IAAI,UAAU,EAAE;QACd,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;OAC3C;;MAED,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB,CAAC;;IAEF,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;MAC5B,GAAG,EAAE,SAAS;MACd,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,SAAS,CAAC;OAClB;KACF,EAAE;MACD,GAAG,EAAE,SAAS;MACd,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,OAAO,CAAC;OAChB;KACF,CAAC,CAAC,CAAC;;IAEJ,OAAO,QAAQ,CAAC;GACjB,EAAE,CAAC;;;;;;;;EAQJ,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAC;EAC7F,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,YAAY;IAC9C,IAAI,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;;IAE/E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;MACpD,IAAI,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;;MAEhC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;KAC7D;GACF,CAAC,CAAC;;;;;;;EAOH,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAC;EACzC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,WAAW,GAAG,QAAQ,CAAC;;EAEpC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,UAAU,GAAG,YAAY;IACpC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC;IACpC,OAAO,QAAQ,CAAC,gBAAgB,CAAC;GAClC,CAAC;;;;;;;;EAQF,IAAI,MAAM,GAAG,UAAU,CAAC;EACxB,IAAI,SAAS,GAAG,OAAO,CAAC;EACxB,IAAI,UAAU,GAAG,aAAa,CAAC;EAC/B,IAAI,WAAW,GAAG,GAAG,GAAG,UAAU,CAAC;EACnC,IAAI,cAAc,GAAG,WAAW,CAAC;EACjC,IAAI,oBAAoB,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;EACxC,IAAI,SAAS,GAAG;IACd,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,EAAE;GACX,CAAC;EACF,IAAI,aAAa,GAAG;IAClB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,kBAAkB;GAC3B,CAAC;EACF,IAAI,OAAO,GAAG;IACZ,IAAI,EAAE,MAAM,GAAG,WAAW;IAC1B,KAAK,EAAE,OAAO,GAAG,WAAW;IAC5B,IAAI,EAAE,MAAM,GAAG,WAAW;IAC1B,MAAM,EAAE,QAAQ,GAAG,WAAW;IAC9B,cAAc,EAAE,OAAO,GAAG,WAAW,GAAG,cAAc;GACvD,CAAC;EACF,IAAI,WAAW,GAAG;IAChB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,UAAU;IACpB,UAAU,EAAE,YAAY;IACxB,SAAS,EAAE,WAAW;GACvB,CAAC;EACF,IAAI,SAAS,GAAG;IACd,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;GACjB,CAAC;EACF,IAAI,UAAU,GAAG;IACf,OAAO,EAAE,oBAAoB;IAC7B,WAAW,EAAE,0BAA0B;;;;;;;GAOxC,CAAC;;EAEF,IAAI,QAAQ;;EAEZ,YAAY;IACV,SAAS,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;;AAAA;MAClC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;MAC9B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;MACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;MACvC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,qCAAqC,GAAG,OAAO,CAAC,EAAE,GAAG,MAAM,GAAG,CAAC,4CAA4C,GAAG,OAAO,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;MACjM,IAAI,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;;MAElF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;QACrD,IAAI,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,aAAa,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,SAAS,EAAE;UACjG,OAAO,SAAS,KAAK,OAAO,CAAC;SAC9B,CAAC,CAAC;;QAEH,IAAI,QAAQ,KAAK,IAAI,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;UACjDD,MAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;;UAE1BA,MAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC/B;OACF;;MAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC;;MAE9D,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACxB,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;OACnE;;MAED,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACvB,IAAI,CAAC,MAAM,EAAE,CAAC;OACf;KACF;;;IAGD,IAAI,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC;;;IAGhC,MAAM,CAAC,MAAM,GAAG,SAAS,MAAM,GAAG;MAChC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;QAC/C,IAAI,CAAC,IAAI,EAAE,CAAC;OACb,MAAM;QACL,IAAI,CAAC,IAAI,EAAE,CAAC;OACb;KACF,CAAC;;IAEF,MAAM,CAAC,IAAI,GAAG,SAAS,IAAI,GAAG;MAC5B,IAAI,KAAK,GAAG,IAAI,CAAC;;MAEjB,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;QACxE,OAAO;OACR;;MAED,IAAI,OAAO,CAAC;MACZ,IAAI,WAAW,CAAC;;MAEhB,IAAI,IAAI,CAAC,OAAO,EAAE;QAChB,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE;UAChG,IAAI,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE;YAC5C,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;WAClE;;UAED,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;SACtD,CAAC,CAAC;;QAEH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;UACxB,OAAO,GAAG,IAAI,CAAC;SAChB;OACF;;MAED,IAAI,OAAO,EAAE;QACX,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;QAE9D,IAAI,WAAW,IAAI,WAAW,CAAC,gBAAgB,EAAE;UAC/C,OAAO;SACR;OACF;;MAED,IAAI,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;MACvC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;;MAErC,IAAI,UAAU,CAAC,kBAAkB,EAAE,EAAE;QACnC,OAAO;OACR;;MAED,IAAI,OAAO,EAAE;QACX,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;;QAEvE,IAAI,CAAC,WAAW,EAAE;UAChB,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;SACnC;OACF;;MAED,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;;MAErC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;MACpF,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;;MAEnC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;QAC7B,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;OACtF;;MAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;;MAE5B,IAAI,QAAQ,GAAG,SAAS,QAAQ,GAAG;QACjC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAChH,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;;QAErC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;;QAE9B,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;OAC1C,CAAC;;MAEF,IAAI,oBAAoB,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;MAC3E,IAAI,UAAU,GAAG,QAAQ,GAAG,oBAAoB,CAAC;MACjD,IAAI,kBAAkB,GAAG,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;MAC9E,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;MAC7F,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;KACnE,CAAC;;IAEF,MAAM,CAAC,IAAI,GAAG,SAAS,IAAI,GAAG,CAAC;;AAAA;MAC7B,IAAI,MAAM,GAAG,IAAI,CAAC;;MAElB,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;QACzE,OAAO;OACR;;MAED,IAAI,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;MACvC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;;MAErC,IAAI,UAAU,CAAC,kBAAkB,EAAE,EAAE;QACnC,OAAO;OACR;;MAED,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;;MAErC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;MACzF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;MAC3B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;MAClH,IAAI,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;;MAEnD,IAAI,kBAAkB,GAAG,CAAC,EAAE;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,EAAE,CAAC,EAAE,EAAE;UAC3C,IAAI,OAAO,GAAGA,MAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;UACpC,IAAI,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;;UAEpD,IAAI,QAAQ,KAAK,IAAI,EAAE;YACrB,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;;YAElE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;cACrC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;aACzE;WACF;SACF;OACF;;MAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;;MAE5B,IAAI,QAAQ,GAAG,SAAS,QAAQ,GAAG;QACjC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;;QAE/B,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;OAC/G,CAAC;;MAEF,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;MACpC,IAAI,kBAAkB,GAAG,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;MAC9E,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;KAC9F,CAAC;;IAEF,MAAM,CAAC,gBAAgB,GAAG,SAAS,gBAAgB,CAAC,eAAe,EAAE;MACnE,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;KACzC,CAAC;;IAEF,MAAM,CAAC,OAAO,GAAG,SAAS,OAAO,GAAG;MAClC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;MACxC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;MACpB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;MACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;MACrB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;MAC1B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;KAC9B;KACA;;IAED,MAAM,CAAC,UAAU,GAAG,SAAS,UAAU,CAAC,MAAM,EAAE;MAC9C,MAAM,GAAG,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;MAC9C,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;;MAEvC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;MACpD,OAAO,MAAM,CAAC;KACf,CAAC;;IAEF,MAAM,CAAC,aAAa,GAAG,SAAS,aAAa,GAAG;MAC9C,IAAI,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;MAC1D,OAAO,QAAQ,GAAG,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC;KACtD,CAAC;;IAEF,MAAM,CAAC,UAAU,GAAG,SAAS,UAAU,GAAG;MACxC,IAAI,MAAM,GAAG,IAAI,CAAC;;MAElB,IAAI,MAAM,CAAC;;MAEX,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QACvC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;;QAE7B,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE;UACrD,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACjC;OACF,MAAM;QACL,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;OACtD;;MAED,IAAI,QAAQ,GAAG,2CAA2C,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;MACzF,IAAI,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;MAChE,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE;QACrC,MAAM,CAAC,yBAAyB,CAAC,QAAQ,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;OACtF,CAAC,CAAC;MACH,OAAO,MAAM,CAAC;KACf,CAAC;;IAEF,MAAM,CAAC,yBAAyB,GAAG,SAAS,yBAAyB,CAAC,OAAO,EAAE,YAAY,EAAE;MAC3F,IAAI,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;;MAEnD,IAAI,YAAY,CAAC,MAAM,EAAE;QACvB,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;OAC3F;KACF;KACA;;IAED,QAAQ,CAAC,qBAAqB,GAAG,SAAS,qBAAqB,CAAC,OAAO,EAAE;MACvE,IAAI,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;MACpD,OAAO,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;KAC3D,CAAC;;IAEF,QAAQ,CAAC,gBAAgB,GAAG,SAAS,gBAAgB,CAAC,MAAM,EAAE;MAC5D,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY;QAC3B,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;QAElC,IAAI,OAAO,GAAG,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,CAAC;;QAE7G,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;UACvD,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;SACxB;;QAED,IAAI,CAAC,IAAI,EAAE;UACT,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;UACnC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;SAC9B;;QAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;UAC9B,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,WAAW,EAAE;YACvC,MAAM,IAAI,SAAS,CAAC,oBAAoB,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;WAC3D;;UAED,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;SAChB;OACF,CAAC,CAAC;KACJ,CAAC;;IAEF,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;MAC5B,GAAG,EAAE,SAAS;MACd,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,SAAS,CAAC;OAClB;KACF,EAAE;MACD,GAAG,EAAE,SAAS;MACd,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,SAAS,CAAC;OAClB;KACF,CAAC,CAAC,CAAC;;IAEJ,OAAO,QAAQ,CAAC;GACjB,EAAE,CAAC;;;;;;;;EAQJ,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,UAAU,CAAC,WAAW,EAAE,UAAU,KAAK,EAAE;;IAE9E,IAAI,KAAK,CAAC,aAAa,CAAC,OAAO,KAAK,GAAG,EAAE;MACvC,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;;IAED,IAAI,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnE,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,YAAY;MAC5B,IAAI,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;MACtB,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;MACpC,IAAI,MAAM,GAAG,IAAI,GAAG,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;;MAE/C,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;KACjD,CAAC,CAAC;GACJ,CAAC,CAAC;;;;;;;EAOH,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAC;EACzC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,WAAW,GAAG,QAAQ,CAAC;;EAEpC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,UAAU,GAAG,YAAY;IACpC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC;IACpC,OAAO,QAAQ,CAAC,gBAAgB,CAAC;GAClC,CAAC;;;;;;;;EAQF,IAAI,MAAM,GAAG,UAAU,CAAC;EACxB,IAAI,SAAS,GAAG,OAAO,CAAC;EACxB,IAAI,UAAU,GAAG,aAAa,CAAC;EAC/B,IAAI,WAAW,GAAG,GAAG,GAAG,UAAU,CAAC;EACnC,IAAI,cAAc,GAAG,WAAW,CAAC;EACjC,IAAI,oBAAoB,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;EACxC,IAAI,cAAc,GAAG,EAAE,CAAC;;EAExB,IAAI,aAAa,GAAG,EAAE,CAAC;;EAEvB,IAAI,WAAW,GAAG,CAAC,CAAC;;EAEpB,IAAI,gBAAgB,GAAG,EAAE,CAAC;;EAE1B,IAAI,kBAAkB,GAAG,EAAE,CAAC;;EAE5B,IAAI,wBAAwB,GAAG,CAAC,CAAC;;EAEjC,IAAI,cAAc,GAAG,IAAI,MAAM,CAAC,gBAAgB,GAAG,GAAG,GAAG,kBAAkB,GAAG,GAAG,GAAG,cAAc,CAAC,CAAC;EACpG,IAAI,OAAO,GAAG;IACZ,IAAI,EAAE,MAAM,GAAG,WAAW;IAC1B,MAAM,EAAE,QAAQ,GAAG,WAAW;IAC9B,IAAI,EAAE,MAAM,GAAG,WAAW;IAC1B,KAAK,EAAE,OAAO,GAAG,WAAW;IAC5B,KAAK,EAAE,OAAO,GAAG,WAAW;IAC5B,cAAc,EAAE,OAAO,GAAG,WAAW,GAAG,cAAc;IACtD,gBAAgB,EAAE,SAAS,GAAG,WAAW,GAAG,cAAc;IAC1D,cAAc,EAAE,OAAO,GAAG,WAAW,GAAG,cAAc;GACvD,CAAC;EACF,IAAI,WAAW,GAAG;IAChB,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,qBAAqB;IAChC,QAAQ,EAAE,oBAAoB;IAC9B,eAAe,EAAE,iBAAiB;GACnC,CAAC;EACF,IAAI,UAAU,GAAG;IACf,WAAW,EAAE,0BAA0B;IACvC,UAAU,EAAE,gBAAgB;IAC5B,IAAI,EAAE,gBAAgB;IACtB,UAAU,EAAE,aAAa;IACzB,aAAa,EAAE,6DAA6D;GAC7E,CAAC;EACF,IAAI,aAAa,GAAG;IAClB,GAAG,EAAE,WAAW;IAChB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,cAAc;IACtB,SAAS,EAAE,YAAY;IACvB,KAAK,EAAE,aAAa;IACpB,QAAQ,EAAE,WAAW;IACrB,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,UAAU;GACpB,CAAC;EACF,IAAI,SAAS,GAAG;IACd,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,cAAc;IACxB,SAAS,EAAE,QAAQ;IACnB,OAAO,EAAE,SAAS;GACnB,CAAC;EACF,IAAI,aAAa,GAAG;IAClB,MAAM,EAAE,0BAA0B;IAClC,IAAI,EAAE,SAAS;IACf,QAAQ,EAAE,kBAAkB;IAC5B,SAAS,EAAE,kBAAkB;IAC7B,OAAO,EAAE,QAAQ;;;;;;;GAOlB,CAAC;;EAEF,IAAI,QAAQ;;EAEZ,YAAY;IACV,SAAS,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE;MACjC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;MACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;MACpB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;MACvC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;MACpC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;;MAEtC,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;;;IAGD,IAAI,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC;;;IAGhC,MAAM,CAAC,MAAM,GAAG,SAAS,MAAM,GAAG;MAChC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE;QAC7E,OAAO;OACR;;MAED,IAAI,MAAM,GAAG,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;MAE3D,IAAI,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;;MAExD,QAAQ,CAAC,WAAW,EAAE,CAAC;;MAEvB,IAAI,QAAQ,EAAE;QACZ,OAAO;OACR;;MAED,IAAI,aAAa,GAAG;QAClB,aAAa,EAAE,IAAI,CAAC,QAAQ;OAC7B,CAAC;MACF,IAAI,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;MACrD,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;;MAE7B,IAAI,SAAS,CAAC,kBAAkB,EAAE,EAAE;QAClC,OAAO;OACR;;;MAGD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;;;;;QAKnB,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;UACjC,MAAM,IAAI,SAAS,CAAC,mEAAmE,CAAC,CAAC;SAC1F;;QAED,IAAI,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC;;QAErC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE;UACvC,gBAAgB,GAAG,MAAM,CAAC;SAC3B,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;UACjD,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;;UAE1C,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,KAAK,WAAW,EAAE;YACxD,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;WAC9C;SACF;;;;;QAKD,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,cAAc,EAAE;UAC5C,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;SACjD;;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;OAClF;;;;;;MAMD,IAAI,cAAc,IAAI,QAAQ,CAAC,eAAe,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;QACvG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;OAC3D;;MAED,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;;MAEtB,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;;MAElD,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;MAC5C,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;KACxF,CAAC;;IAEF,MAAM,CAAC,IAAI,GAAG,SAAS,IAAI,GAAG;MAC5B,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;QACzH,OAAO;OACR;;MAED,IAAI,aAAa,GAAG;QAClB,aAAa,EAAE,IAAI,CAAC,QAAQ;OAC7B,CAAC;MACF,IAAI,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;;MAErD,IAAI,MAAM,GAAG,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;MAE3D,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;;MAE7B,IAAI,SAAS,CAAC,kBAAkB,EAAE,EAAE;QAClC,OAAO;OACR;;MAED,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;MAC5C,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;KACxF,CAAC;;IAEF,MAAM,CAAC,IAAI,GAAG,SAAS,IAAI,GAAG;MAC5B,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;QAC1H,OAAO;OACR;;MAED,IAAI,aAAa,GAAG;QAClB,aAAa,EAAE,IAAI,CAAC,QAAQ;OAC7B,CAAC;MACF,IAAI,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;;MAErD,IAAI,MAAM,GAAG,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;MAE3D,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;;MAE7B,IAAI,SAAS,CAAC,kBAAkB,EAAE,EAAE;QAClC,OAAO;OACR;;MAED,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;MAC5C,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;KACzF,CAAC;;IAEF,MAAM,CAAC,OAAO,GAAG,SAAS,OAAO,GAAG;MAClC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;MACxC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;MAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;MACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;;MAElB,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;QACzB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;;QAEvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;OACrB;KACF,CAAC;;IAEF,MAAM,CAAC,MAAM,GAAG,SAAS,MAAM,GAAG;MAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;;MAEtC,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;QACzB,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;OAC/B;KACF;KACA;;IAED,MAAM,CAAC,kBAAkB,GAAG,SAAS,kBAAkB,GAAG;MACxD,IAAI,KAAK,GAAG,IAAI,CAAC;;MAEjB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,KAAK,EAAE;QAClD,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,eAAe,EAAE,CAAC;;QAExB,KAAK,CAAC,MAAM,EAAE,CAAC;OAChB,CAAC,CAAC;KACJ,CAAC;;IAEF,MAAM,CAAC,UAAU,GAAG,SAAS,UAAU,CAAC,MAAM,EAAE;MAC9C,MAAM,GAAG,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;MACtF,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;MACnE,OAAO,MAAM,CAAC;KACf,CAAC;;IAEF,MAAM,CAAC,eAAe,GAAG,SAAS,eAAe,GAAG;MAClD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;QACf,IAAI,MAAM,GAAG,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;QAE3D,IAAI,MAAM,EAAE;UACV,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SACpD;OACF;;MAED,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB,CAAC;;IAEF,MAAM,CAAC,aAAa,GAAG,SAAS,aAAa,GAAG;MAC9C,IAAI,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;MAClD,IAAI,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC;;MAErC,IAAI,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;QAChD,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC;;QAE9B,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE;UACjD,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC;SAClC;OACF,MAAM,IAAI,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE;QAC1D,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC;OACjC,MAAM,IAAI,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE;QACzD,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC;OAChC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE;QACxD,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;OACrC;;MAED,OAAO,SAAS,CAAC;KAClB,CAAC;;IAEF,MAAM,CAAC,aAAa,GAAG,SAAS,aAAa,GAAG;MAC9C,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;KACvD,CAAC;;IAEF,MAAM,CAAC,UAAU,GAAG,SAAS,UAAU,GAAG;MACxC,IAAI,MAAM,GAAG,IAAI,CAAC;;MAElB,IAAI,MAAM,GAAG,EAAE,CAAC;;MAEhB,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE;QAC7C,MAAM,CAAC,EAAE,GAAG,UAAU,IAAI,EAAE;UAC1B,IAAI,CAAC,OAAO,GAAG,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;UAC3G,OAAO,IAAI,CAAC;SACb,CAAC;OACH,MAAM;QACL,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;OACrC;;MAED,OAAO,MAAM,CAAC;KACf,CAAC;;IAEF,MAAM,CAAC,gBAAgB,GAAG,SAAS,gBAAgB,GAAG;MACpD,IAAI,YAAY,GAAG;QACjB,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE;QAC/B,SAAS,EAAE;UACT,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE;UACzB,IAAI,EAAE;YACJ,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;WAC3B;UACD,eAAe,EAAE;YACf,iBAAiB,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;WACzC;SACF;;OAEF,CAAC;;MAEF,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE;QACrC,YAAY,CAAC,SAAS,CAAC,UAAU,GAAG;UAClC,OAAO,EAAE,KAAK;SACf,CAAC;OACH;;MAED,OAAO,YAAY,CAAC;KACrB;KACA;;IAED,QAAQ,CAAC,gBAAgB,GAAG,SAAS,gBAAgB,CAAC,MAAM,EAAE;MAC5D,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY;QAC3B,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;QAEpC,IAAI,OAAO,GAAG,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAC;;QAEzD,IAAI,CAAC,IAAI,EAAE;UACT,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;UACnC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;SAChC;;QAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;UAC9B,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,WAAW,EAAE;YACvC,MAAM,IAAI,SAAS,CAAC,oBAAoB,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;WAC3D;;UAED,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;SAChB;OACF,CAAC,CAAC;KACJ,CAAC;;IAEF,QAAQ,CAAC,WAAW,GAAG,SAAS,WAAW,CAAC,KAAK,EAAE;MACjD,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,wBAAwB,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,CAAC,EAAE;QAChH,OAAO;OACR;;MAED,IAAI,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;;MAE/E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;QAClD,IAAI,MAAM,GAAG,QAAQ,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;;QAExD,IAAI,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,aAAa,GAAG;UAClB,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;SAC1B,CAAC;;QAEF,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;UACnC,aAAa,CAAC,UAAU,GAAG,KAAK,CAAC;SAClC;;QAED,IAAI,CAAC,OAAO,EAAE;UACZ,SAAS;SACV;;QAED,IAAI,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;;QAEjC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;UACzC,SAAS;SACV;;QAED,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;UAClL,SAAS;SACV;;QAED,IAAI,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QACrD,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;;QAE7B,IAAI,SAAS,CAAC,kBAAkB,EAAE,EAAE;UAClC,SAAS;SACV;;;;QAID,IAAI,cAAc,IAAI,QAAQ,CAAC,eAAe,EAAE;UAC9C,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;SAC5D;;QAED,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;OACzF;KACF,CAAC;;IAEF,QAAQ,CAAC,qBAAqB,GAAG,SAAS,qBAAqB,CAAC,OAAO,EAAE;MACvE,IAAI,MAAM,CAAC;MACX,IAAI,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;;MAEpD,IAAI,QAAQ,EAAE;QACZ,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;OAC3C;;MAED,OAAO,MAAM,IAAI,OAAO,CAAC,UAAU,CAAC;KACrC;KACA;;IAED,QAAQ,CAAC,sBAAsB,GAAG,SAAS,sBAAsB,CAAC,KAAK,EAAE;;;;;;;;MAQvE,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,KAAK,aAAa,IAAI,KAAK,CAAC,KAAK,KAAK,cAAc,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,kBAAkB,IAAI,KAAK,CAAC,KAAK,KAAK,gBAAgB,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QACrR,OAAO;OACR;;MAED,KAAK,CAAC,cAAc,EAAE,CAAC;MACvB,KAAK,CAAC,eAAe,EAAE,CAAC;;MAExB,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE;QAC3D,OAAO;OACR;;MAED,IAAI,MAAM,GAAG,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;;MAElD,IAAI,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;;MAEpD,IAAI,CAAC,QAAQ,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,cAAc,IAAI,KAAK,CAAC,KAAK,KAAK,aAAa,CAAC,EAAE;QAC9F,IAAI,KAAK,CAAC,KAAK,KAAK,cAAc,EAAE;UAClC,IAAI,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;UAC1D,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;SAC5B;;QAED,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACzB,OAAO;OACR;;MAED,IAAI,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;;MAE7E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QACtB,OAAO;OACR;;MAED,IAAI,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;;MAExC,IAAI,KAAK,CAAC,KAAK,KAAK,gBAAgB,IAAI,KAAK,GAAG,CAAC,EAAE;;QAEjD,KAAK,EAAE,CAAC;OACT;;MAED,IAAI,KAAK,CAAC,KAAK,KAAK,kBAAkB,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;;QAElE,KAAK,EAAE,CAAC;OACT;;MAED,IAAI,KAAK,GAAG,CAAC,EAAE;QACb,KAAK,GAAG,CAAC,CAAC;OACX;;MAED,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;KACtB,CAAC;;IAEF,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;MAC5B,GAAG,EAAE,SAAS;MACd,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,SAAS,CAAC;OAClB;KACF,EAAE;MACD,GAAG,EAAE,SAAS;MACd,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,SAAS,CAAC;OAClB;KACF,EAAE;MACD,GAAG,EAAE,aAAa;MAClB,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,aAAa,CAAC;OACtB;KACF,CAAC,CAAC,CAAC;;IAEJ,OAAO,QAAQ,CAAC;GACjB,EAAE,CAAC;;;;;;;;EAQJ,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,UAAU,CAAC,WAAW,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,GAAG,GAAG,GAAG,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,UAAU,CAAC,WAAW,EAAE,UAAU,KAAK,EAAE;IACnU,KAAK,CAAC,cAAc,EAAE,CAAC;IACvB,KAAK,CAAC,eAAe,EAAE,CAAC;;IAExB,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;GACnD,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE;IAChE,CAAC,CAAC,eAAe,EAAE,CAAC;GACrB,CAAC,CAAC;;;;;;;EAOH,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAC;EACzC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,WAAW,GAAG,QAAQ,CAAC;;EAEpC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,UAAU,GAAG,YAAY;IACpC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC;IACpC,OAAO,QAAQ,CAAC,gBAAgB,CAAC;GAClC,CAAC;;;;;;;;EAQF,IAAI,MAAM,GAAG,OAAO,CAAC;EACrB,IAAI,SAAS,GAAG,OAAO,CAAC;EACxB,IAAI,UAAU,GAAG,UAAU,CAAC;EAC5B,IAAI,WAAW,GAAG,GAAG,GAAG,UAAU,CAAC;EACnC,IAAI,cAAc,GAAG,WAAW,CAAC;EACjC,IAAI,oBAAoB,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;EACxC,IAAI,gBAAgB,GAAG,EAAE,CAAC;;EAE1B,IAAI,SAAS,GAAG;IACd,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,IAAI;GACX,CAAC;EACF,IAAI,aAAa,GAAG;IAClB,QAAQ,EAAE,kBAAkB;IAC5B,QAAQ,EAAE,SAAS;IACnB,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,SAAS;GAChB,CAAC;EACF,IAAI,OAAO,GAAG;IACZ,IAAI,EAAE,MAAM,GAAG,WAAW;IAC1B,MAAM,EAAE,QAAQ,GAAG,WAAW;IAC9B,IAAI,EAAE,MAAM,GAAG,WAAW;IAC1B,KAAK,EAAE,OAAO,GAAG,WAAW;IAC5B,OAAO,EAAE,SAAS,GAAG,WAAW;IAChC,MAAM,EAAE,QAAQ,GAAG,WAAW;IAC9B,aAAa,EAAE,eAAe,GAAG,WAAW;IAC5C,eAAe,EAAE,iBAAiB,GAAG,WAAW;IAChD,eAAe,EAAE,iBAAiB,GAAG,WAAW;IAChD,iBAAiB,EAAE,mBAAmB,GAAG,WAAW;IACpD,cAAc,EAAE,OAAO,GAAG,WAAW,GAAG,cAAc;GACvD,CAAC;EACF,IAAI,WAAW,GAAG;IAChB,UAAU,EAAE,yBAAyB;IACrC,kBAAkB,EAAE,yBAAyB;IAC7C,QAAQ,EAAE,gBAAgB;IAC1B,IAAI,EAAE,YAAY;IAClB,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;GACb,CAAC;EACF,IAAI,UAAU,GAAG;IACf,MAAM,EAAE,eAAe;IACvB,UAAU,EAAE,aAAa;IACzB,WAAW,EAAE,uBAAuB;IACpC,YAAY,EAAE,wBAAwB;IACtC,aAAa,EAAE,mDAAmD;IAClE,cAAc,EAAE,aAAa;;;;;;;GAO9B,CAAC;;EAEF,IAAI,KAAK;;EAET,YAAY;IACV,SAAS,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE;MAC9B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;MACvC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;MACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;MACxD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;MACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;MACtB,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;MAChC,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;MAClC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;MAC9B,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;KAC1B;;;IAGD,IAAI,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;;;IAG7B,MAAM,CAAC,MAAM,GAAG,SAAS,MAAM,CAAC,aAAa,EAAE;MAC7C,OAAO,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KAC/D,CAAC;;IAEF,MAAM,CAAC,IAAI,GAAG,SAAS,IAAI,CAAC,aAAa,EAAE;MACzC,IAAI,KAAK,GAAG,IAAI,CAAC;;MAEjB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE;QAC1C,OAAO;OACR;;MAED,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;QAC/C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;OAC9B;;MAED,IAAI,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;QACpC,aAAa,EAAE,aAAa;OAC7B,CAAC,CAAC;MACH,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;;MAEpC,IAAI,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC,kBAAkB,EAAE,EAAE;QACnD,OAAO;OACR;;MAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;;MAErB,IAAI,CAAC,eAAe,EAAE,CAAC;;MAEvB,IAAI,CAAC,aAAa,EAAE,CAAC;;MAErB,IAAI,CAAC,aAAa,EAAE,CAAC;;MAErB,IAAI,CAAC,eAAe,EAAE,CAAC;;MAEvB,IAAI,CAAC,eAAe,EAAE,CAAC;;MAEvB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC,YAAY,EAAE,UAAU,KAAK,EAAE;QACnF,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;OAC1B,CAAC,CAAC;MACH,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,iBAAiB,EAAE,YAAY;QACxD,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,UAAU,KAAK,EAAE;UAC9D,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;YACtC,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC;WACnC;SACF,CAAC,CAAC;OACJ,CAAC,CAAC;;MAEH,IAAI,CAAC,aAAa,CAAC,YAAY;QAC7B,OAAO,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;OAC1C,CAAC,CAAC;KACJ,CAAC;;IAEF,MAAM,CAAC,IAAI,GAAG,SAAS,IAAI,CAAC,KAAK,EAAE;MACjC,IAAI,MAAM,GAAG,IAAI,CAAC;;MAElB,IAAI,KAAK,EAAE;QACT,KAAK,CAAC,cAAc,EAAE,CAAC;OACxB;;MAED,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE;QAC3C,OAAO;OACR;;MAED,IAAI,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;MACtC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;;MAEpC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC,kBAAkB,EAAE,EAAE;QACpD,OAAO;OACR;;MAED,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;MACtB,IAAI,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;;MAE7D,IAAI,UAAU,EAAE;QACd,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;OAC9B;;MAED,IAAI,CAAC,eAAe,EAAE,CAAC;;MAEvB,IAAI,CAAC,eAAe,EAAE,CAAC;;MAEvB,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;MACjC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;MAC/C,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;MAC5C,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;;MAE/C,IAAI,UAAU,EAAE;QACd,IAAI,kBAAkB,GAAG,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9E,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,KAAK,EAAE;UACzD,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;SACjC,CAAC,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;OAC7C,MAAM;QACL,IAAI,CAAC,UAAU,EAAE,CAAC;OACnB;KACF,CAAC;;IAEF,MAAM,CAAC,OAAO,GAAG,SAAS,OAAO,GAAG;MAClC,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,UAAU,WAAW,EAAE;QACnE,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;OACxC,CAAC,CAAC;;;;;;;MAOH,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;MACjC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;MACxC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;MACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;MACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;MACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;MACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;MACrB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;MAC/B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;MACjC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;MAC7B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;KAC7B,CAAC;;IAEF,MAAM,CAAC,YAAY,GAAG,SAAS,YAAY,GAAG;MAC5C,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;KACA;;IAED,MAAM,CAAC,UAAU,GAAG,SAAS,UAAU,CAAC,MAAM,EAAE;MAC9C,MAAM,GAAG,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;MAC9C,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;MACpD,OAAO,MAAM,CAAC;KACf,CAAC;;IAEF,MAAM,CAAC,YAAY,GAAG,SAAS,YAAY,CAAC,aAAa,EAAE;MACzD,IAAI,MAAM,GAAG,IAAI,CAAC;;MAElB,IAAI,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;;MAE7D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE;;QAExF,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;OAC1C;;MAED,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;;MAEtC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;;MAE7C,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;;MAE/C,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;QACpD,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;OACjE,MAAM;QACL,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC;OAC7B;;MAED,IAAI,UAAU,EAAE;QACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;OAC5B;;MAED,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;;MAE5C,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;QACtB,IAAI,CAAC,aAAa,EAAE,CAAC;OACtB;;MAED,IAAI,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE;QACtC,aAAa,EAAE,aAAa;OAC7B,CAAC,CAAC;;MAEH,IAAI,kBAAkB,GAAG,SAAS,kBAAkB,GAAG;QACrD,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE;UACxB,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;SACzB;;QAED,MAAM,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAChC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;OACxC,CAAC;;MAEF,IAAI,UAAU,EAAE;QACd,IAAI,kBAAkB,GAAG,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7E,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;OACvG,MAAM;QACL,kBAAkB,EAAE,CAAC;OACtB;KACF,CAAC;;IAEF,MAAM,CAAC,aAAa,GAAG,SAAS,aAAa,GAAG;MAC9C,IAAI,MAAM,GAAG,IAAI,CAAC;;MAElB,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;OAC/B,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,KAAK,EAAE;QACpC,IAAI,QAAQ,KAAK,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;UACtH,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;SACzB;OACF,CAAC,CAAC;KACJ,CAAC;;IAEF,MAAM,CAAC,eAAe,GAAG,SAAS,eAAe,GAAG;MAClD,IAAI,MAAM,GAAG,IAAI,CAAC;;MAElB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;QAC1C,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,UAAU,KAAK,EAAE;UAC5D,IAAI,KAAK,CAAC,KAAK,KAAK,gBAAgB,EAAE;YACpC,KAAK,CAAC,cAAc,EAAE,CAAC;;YAEvB,MAAM,CAAC,IAAI,EAAE,CAAC;WACf;SACF,CAAC,CAAC;OACJ,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;QACzB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;OAC/C;KACF,CAAC;;IAEF,MAAM,CAAC,eAAe,GAAG,SAAS,eAAe,GAAG;MAClD,IAAI,MAAM,GAAG,IAAI,CAAC;;MAElB,IAAI,IAAI,CAAC,QAAQ,EAAE;QACjB,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,KAAK,EAAE;UAC5C,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;SACnC,CAAC,CAAC;OACJ,MAAM;QACL,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;OAC/B;KACF,CAAC;;IAEF,MAAM,CAAC,UAAU,GAAG,SAAS,UAAU,GAAG;MACxC,IAAI,MAAM,GAAG,IAAI,CAAC;;MAElB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;;MAErC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;;MAEhD,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;;MAE5C,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;;MAE9B,IAAI,CAAC,aAAa,CAAC,YAAY;QAC7B,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;;QAE/C,MAAM,CAAC,iBAAiB,EAAE,CAAC;;QAE3B,MAAM,CAAC,eAAe,EAAE,CAAC;;QAEzB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;OAC5C,CAAC,CAAC;KACJ,CAAC;;IAEF,MAAM,CAAC,eAAe,GAAG,SAAS,eAAe,GAAG;MAClD,IAAI,IAAI,CAAC,SAAS,EAAE;QAClB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;OACvB;KACF,CAAC;;IAEF,MAAM,CAAC,aAAa,GAAG,SAAS,aAAa,CAAC,QAAQ,EAAE;MACtD,IAAI,MAAM,GAAG,IAAI,CAAC;;MAElB,IAAI,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,GAAG,EAAE,CAAC;;MAElF,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;QAC1C,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC;;QAEhD,IAAI,OAAO,EAAE;UACX,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;SACvC;;QAED,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,KAAK,EAAE;UAC1D,IAAI,MAAM,CAAC,oBAAoB,EAAE;YAC/B,MAAM,CAAC,oBAAoB,GAAG,KAAK,CAAC;YACpC,OAAO;WACR;;UAED,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,aAAa,EAAE;YACxC,OAAO;WACR;;UAED,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE;YACxC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;WACzB,MAAM;YACL,MAAM,CAAC,IAAI,EAAE,CAAC;WACf;SACF,CAAC,CAAC;;QAEH,IAAI,OAAO,EAAE;UACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC7B;;QAED,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;;QAE7C,IAAI,CAAC,QAAQ,EAAE;UACb,OAAO;SACR;;QAED,IAAI,CAAC,OAAO,EAAE;UACZ,QAAQ,EAAE,CAAC;UACX,OAAO;SACR;;QAED,IAAI,0BAA0B,GAAG,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvF,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,oBAAoB,CAAC,0BAA0B,CAAC,CAAC;OACvG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;QAC3C,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;;QAEhD,IAAI,cAAc,GAAG,SAAS,cAAc,GAAG;UAC7C,MAAM,CAAC,eAAe,EAAE,CAAC;;UAEzB,IAAI,QAAQ,EAAE;YACZ,QAAQ,EAAE,CAAC;WACZ;SACF,CAAC;;QAEF,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;UAC/C,IAAI,2BAA2B,GAAG,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;UAExF,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,oBAAoB,CAAC,2BAA2B,CAAC,CAAC;SAC9G,MAAM;UACL,cAAc,EAAE,CAAC;SAClB;OACF,MAAM,IAAI,QAAQ,EAAE;QACnB,QAAQ,EAAE,CAAC;OACZ;KACF;;;;KAIA;;IAED,MAAM,CAAC,aAAa,GAAG,SAAS,aAAa,GAAG;MAC9C,IAAI,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC;;MAE5F,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,kBAAkB,EAAE;QAClD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;OAC/D;;MAED,IAAI,IAAI,CAAC,kBAAkB,IAAI,CAAC,kBAAkB,EAAE;QAClD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;OAChE;KACF,CAAC;;IAEF,MAAM,CAAC,iBAAiB,GAAG,SAAS,iBAAiB,GAAG;MACtD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC;MACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC;KACvC,CAAC;;IAEF,MAAM,CAAC,eAAe,GAAG,SAAS,eAAe,GAAG;MAClD,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;MACjD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;MACrE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAClD,CAAC;;IAEF,MAAM,CAAC,aAAa,GAAG,SAAS,aAAa,GAAG;MAC9C,IAAI,MAAM,GAAG,IAAI,CAAC;;MAElB,IAAI,IAAI,CAAC,kBAAkB,EAAE;;;QAG3B,IAAI,YAAY,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;QACtF,IAAI,aAAa,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;;QAExF,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,OAAO,EAAE;UAC7C,IAAI,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;UAC/C,IAAI,iBAAiB,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;UACxD,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;SACrI,CAAC,CAAC;;QAEH,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,OAAO,EAAE;UAC9C,IAAI,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;UAC7C,IAAI,gBAAgB,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;UACtD,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,UAAU,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;SACjI,CAAC,CAAC;;QAEH,IAAI,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;QACrD,IAAI,iBAAiB,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC9D,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;OACzI;;MAED,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;KAC7C,CAAC;;IAEF,MAAM,CAAC,eAAe,GAAG,SAAS,eAAe,GAAG;;MAElD,IAAI,YAAY,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;MACtF,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,OAAO,EAAE;QAC7C,IAAI,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC/C,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,EAAE,CAAC;OACrD,CAAC,CAAC;;MAEH,IAAI,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;MACxF,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,OAAO,EAAE;QACzC,IAAI,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;;QAE7C,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;UACjC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;SACnE;OACF,CAAC,CAAC;;MAEH,IAAI,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;MACrD,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;MAC7C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,EAAE,CAAC;KAC3D,CAAC;;IAEF,MAAM,CAAC,kBAAkB,GAAG,SAAS,kBAAkB,GAAG;;MAExD,IAAI,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;MAC9C,SAAS,CAAC,SAAS,GAAG,WAAW,CAAC,kBAAkB,CAAC;MACrD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;MACrC,IAAI,cAAc,GAAG,SAAS,CAAC,qBAAqB,EAAE,CAAC,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC;MACrF,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;MACrC,OAAO,cAAc,CAAC;KACvB;KACA;;IAED,KAAK,CAAC,gBAAgB,GAAG,SAAS,gBAAgB,CAAC,MAAM,EAAE,aAAa,EAAE;MACxE,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY;QAC3B,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;QAEpC,IAAI,OAAO,GAAG,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,CAAC;;QAE/G,IAAI,CAAC,IAAI,EAAE;UACT,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;UAChC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;SAChC;;QAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;UAC9B,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,WAAW,EAAE;YACvC,MAAM,IAAI,SAAS,CAAC,oBAAoB,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;WAC3D;;UAED,IAAI,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC;SAC7B,MAAM,IAAI,OAAO,CAAC,IAAI,EAAE;UACvB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SAC1B;OACF,CAAC,CAAC;KACJ,CAAC;;IAEF,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;MACzB,GAAG,EAAE,SAAS;MACd,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,SAAS,CAAC;OAClB;KACF,EAAE;MACD,GAAG,EAAE,SAAS;MACd,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,SAAS,CAAC;OAClB;KACF,CAAC,CAAC,CAAC;;IAEJ,OAAO,KAAK,CAAC;GACd,EAAE,CAAC;;;;;;;;EAQJ,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,UAAU,CAAC,WAAW,EAAE,UAAU,KAAK,EAAE;IAC9E,IAAI,OAAO,GAAG,IAAI,CAAC;;IAEnB,IAAI,MAAM,CAAC;IACX,IAAI,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;;IAEjD,IAAI,QAAQ,EAAE;MACZ,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;KAC3C;;IAED,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;;IAEzG,IAAI,IAAI,CAAC,OAAO,KAAK,GAAG,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE;MACnD,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;;IAED,IAAI,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,SAAS,EAAE;MAC7D,IAAI,SAAS,CAAC,kBAAkB,EAAE,EAAE;;QAElC,OAAO;OACR;;MAED,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY;QACtC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;UAC7B,OAAO,CAAC,KAAK,EAAE,CAAC;SACjB;OACF,CAAC,CAAC;KACJ,CAAC,CAAC;;IAEH,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;GACtD,CAAC,CAAC;;;;;;;EAOH,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC;EACtC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,WAAW,GAAG,KAAK,CAAC;;EAEjC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,UAAU,GAAG,YAAY;IACpC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC;IACpC,OAAO,KAAK,CAAC,gBAAgB,CAAC;GAC/B,CAAC;;;;;;;;EAQF,IAAI,QAAQ,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;EACrG,IAAI,sBAAsB,GAAG,gBAAgB,CAAC;EAC9C,IAAI,gBAAgB,GAAG;;IAErB,GAAG,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,CAAC;IACnE,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;IACrC,IAAI,EAAE,EAAE;IACR,CAAC,EAAE,EAAE;IACL,EAAE,EAAE,EAAE;IACN,GAAG,EAAE,EAAE;IACP,IAAI,EAAE,EAAE;IACR,GAAG,EAAE,EAAE;IACP,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,CAAC,EAAE,EAAE;IACL,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;IAC/C,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,CAAC,EAAE,EAAE;IACL,GAAG,EAAE,EAAE;IACP,CAAC,EAAE,EAAE;IACL,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,EAAE;IACR,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;IACP,MAAM,EAAE,EAAE;IACV,CAAC,EAAE,EAAE;IACL,EAAE,EAAE,EAAE;;;;;;;GAOP,CAAC;EACF,IAAI,gBAAgB,GAAG,6DAA6D,CAAC;;;;;;;EAOrF,IAAI,gBAAgB,GAAG,qIAAqI,CAAC;;EAE7J,SAAS,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,EAAE;IACpD,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;;IAE3C,IAAI,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;MACjD,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;QACrC,OAAO,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;OAClG;;MAED,OAAO,IAAI,CAAC;KACb;;IAED,IAAI,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,UAAU,SAAS,EAAE;MAC5D,OAAO,SAAS,YAAY,MAAM,CAAC;KACpC,CAAC,CAAC;;IAEH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;MAC7C,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;QAC7B,OAAO,IAAI,CAAC;OACb;KACF;;IAED,OAAO,KAAK,CAAC;GACd;;EAED,SAAS,YAAY,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE;IACvD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;MAC3B,OAAO,UAAU,CAAC;KACnB;;IAED,IAAI,UAAU,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE;MAClD,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC;KAC/B;;IAED,IAAI,SAAS,GAAG,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;IACvC,IAAI,eAAe,GAAG,SAAS,CAAC,eAAe,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACzE,IAAI,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3C,IAAI,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;;IAEzE,IAAI,KAAK,GAAG,SAAS,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE;MACjC,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;MACrB,IAAI,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;;MAEvC,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE;QAC3D,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC9B,OAAO,UAAU,CAAC;OACnB;;MAED,IAAI,aAAa,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;MACjD,IAAI,qBAAqB,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;MACrF,aAAa,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE;QACpC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,qBAAqB,CAAC,EAAE;UAClD,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACnC;OACF,CAAC,CAAC;KACJ,CAAC;;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;MACnD,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;;MAEzB,IAAI,IAAI,KAAK,UAAU,EAAE,WAAS;KACnC;;IAED,OAAO,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC;GACvC;;;;;;;;EAQD,IAAI,MAAM,GAAG,SAAS,CAAC;EACvB,IAAI,SAAS,GAAG,OAAO,CAAC;EACxB,IAAI,UAAU,GAAG,YAAY,CAAC;EAC9B,IAAI,WAAW,GAAG,GAAG,GAAG,UAAU,CAAC;EACnC,IAAI,oBAAoB,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;EACxC,IAAI,YAAY,GAAG,YAAY,CAAC;EAChC,IAAI,kBAAkB,GAAG,IAAI,MAAM,CAAC,SAAS,GAAG,YAAY,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC;EAC5E,IAAI,qBAAqB,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;EACpE,IAAI,aAAa,GAAG;IAClB,SAAS,EAAE,SAAS;IACpB,QAAQ,EAAE,QAAQ;IAClB,KAAK,EAAE,2BAA2B;IAClC,OAAO,EAAE,QAAQ;IACjB,KAAK,EAAE,iBAAiB;IACxB,IAAI,EAAE,SAAS;IACf,QAAQ,EAAE,kBAAkB;IAC5B,SAAS,EAAE,mBAAmB;IAC9B,MAAM,EAAE,0BAA0B;IAClC,SAAS,EAAE,0BAA0B;IACrC,iBAAiB,EAAE,gBAAgB;IACnC,QAAQ,EAAE,kBAAkB;IAC5B,QAAQ,EAAE,SAAS;IACnB,UAAU,EAAE,iBAAiB;IAC7B,SAAS,EAAE,QAAQ;GACpB,CAAC;EACF,IAAI,eAAe,GAAG;IACpB,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;GACb,CAAC;EACF,IAAI,SAAS,GAAG;IACd,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,sCAAsC,GAAG,2BAA2B,GAAG,yCAAyC;IAC1H,OAAO,EAAE,aAAa;IACtB,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,KAAK;IACX,QAAQ,EAAE,KAAK;IACf,SAAS,EAAE,KAAK;IAChB,MAAM,EAAE,CAAC;IACT,SAAS,EAAE,KAAK;IAChB,iBAAiB,EAAE,MAAM;IACzB,QAAQ,EAAE,cAAc;IACxB,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,gBAAgB;GAC5B,CAAC;EACF,IAAI,UAAU,GAAG;IACf,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;GACX,CAAC;EACF,IAAI,OAAO,GAAG;IACZ,IAAI,EAAE,MAAM,GAAG,WAAW;IAC1B,MAAM,EAAE,QAAQ,GAAG,WAAW;IAC9B,IAAI,EAAE,MAAM,GAAG,WAAW;IAC1B,KAAK,EAAE,OAAO,GAAG,WAAW;IAC5B,QAAQ,EAAE,UAAU,GAAG,WAAW;IAClC,KAAK,EAAE,OAAO,GAAG,WAAW;IAC5B,OAAO,EAAE,SAAS,GAAG,WAAW;IAChC,QAAQ,EAAE,UAAU,GAAG,WAAW;IAClC,UAAU,EAAE,YAAY,GAAG,WAAW;IACtC,UAAU,EAAE,YAAY,GAAG,WAAW;GACvC,CAAC;EACF,IAAI,WAAW,GAAG;IAChB,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;GACb,CAAC;EACF,IAAI,UAAU,GAAG;IACf,OAAO,EAAE,UAAU;IACnB,aAAa,EAAE,gBAAgB;IAC/B,KAAK,EAAE,QAAQ;GAChB,CAAC;EACF,IAAI,OAAO,GAAG;IACZ,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;;;;;;;GAOjB,CAAC;;EAEF,IAAI,OAAO;;EAEX,YAAY;IACV,SAAS,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE;;;;;MAKhC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACjC,MAAM,IAAI,SAAS,CAAC,kEAAkE,CAAC,CAAC;OACzF;;;MAGD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;MACvB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;MAClB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;MACtB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;MACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;;MAEpB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;MACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;MACtC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;;MAEhB,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;;;IAGD,IAAI,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;;;IAG/B,MAAM,CAAC,MAAM,GAAG,SAAS,MAAM,GAAG;MAChC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;KACxB,CAAC;;IAEF,MAAM,CAAC,OAAO,GAAG,SAAS,OAAO,GAAG;MAClC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;KACzB,CAAC;;IAEF,MAAM,CAAC,aAAa,GAAG,SAAS,aAAa,GAAG;MAC9C,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;KACpC,CAAC;;IAEF,MAAM,CAAC,MAAM,GAAG,SAAS,MAAM,CAAC,KAAK,EAAE;MACrC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;QACpB,OAAO;OACR;;MAED,IAAI,KAAK,EAAE;QACT,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;QACxC,IAAI,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;QAEnD,IAAI,CAAC,OAAO,EAAE;UACZ,OAAO,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;UAC/E,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;SAC/C;;QAED,OAAO,CAAC,cAAc,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC;;QAE7D,IAAI,OAAO,CAAC,oBAAoB,EAAE,EAAE;UAClC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;SAC/B,MAAM;UACL,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;SAC/B;OACF,MAAM;QACL,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;UACtD,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;;UAExB,OAAO;SACR;;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;OACzB;KACF,CAAC;;IAEF,MAAM,CAAC,OAAO,GAAG,SAAS,OAAO,GAAG;MAClC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;MAC5B,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;MACtD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;MAChD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;;MAEvD,IAAI,IAAI,CAAC,GAAG,EAAE;QACZ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;OACtB;;MAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;MACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;MACrB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;MACxB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;;MAE3B,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;QACzB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;OACxB;;MAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;MACpB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;MACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;MACnB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;KACjB,CAAC;;IAEF,MAAM,CAAC,IAAI,GAAG,SAAS,IAAI,GAAG;MAC5B,IAAI,KAAK,GAAG,IAAI,CAAC;;MAEjB,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,MAAM,EAAE;QAC7C,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;OACxD;;MAED,IAAI,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;MAErD,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE;QAC3C,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,UAAU,GAAG,CAAC,CAAC,QAAQ,CAAC,UAAU,KAAK,IAAI,GAAG,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;;QAEzH,IAAI,SAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC,UAAU,EAAE;UACjD,OAAO;SACR;;QAED,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAC/B,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC/C,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,UAAU,EAAE,CAAC;;QAElB,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;UACzB,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SACnC;;QAED,IAAI,SAAS,GAAG,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;;QAE1I,IAAI,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;;QAEhD,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;;QAEpC,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;;QAErC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;;QAE7C,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;UACrE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;SAC5B;;QAED,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;UAC3C,SAAS,EAAE,UAAU;UACrB,SAAS,EAAE;YACT,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE;YACzB,IAAI,EAAE;cACJ,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB;aACxC;YACD,KAAK,EAAE;cACL,OAAO,EAAE,UAAU,CAAC,KAAK;aAC1B;YACD,eAAe,EAAE;cACf,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;aACxC;WACF;UACD,QAAQ,EAAE,SAAS,QAAQ,CAAC,IAAI,EAAE;YAChC,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,CAAC,SAAS,EAAE;cAC7C,KAAK,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC;aAC1C;WACF;UACD,QAAQ,EAAE,SAAS,QAAQ,CAAC,IAAI,EAAE;YAChC,OAAO,KAAK,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC;WACjD;SACF,CAAC,CAAC;QACH,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;;;;;QAKlC,IAAI,cAAc,IAAI,QAAQ,CAAC,eAAe,EAAE;UAC9C,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;SAC3D;;QAED,IAAI,QAAQ,GAAG,SAAS,QAAQ,GAAG;UACjC,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE;YAC1B,KAAK,CAAC,cAAc,EAAE,CAAC;WACxB;;UAED,IAAI,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC;UACvC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;UACzB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;;UAExD,IAAI,cAAc,KAAK,UAAU,CAAC,GAAG,EAAE;YACrC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;WAC3B;SACF,CAAC;;QAEF,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;UAC1C,IAAI,kBAAkB,GAAG,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;UACzE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;SACzF,MAAM;UACL,QAAQ,EAAE,CAAC;SACZ;OACF;KACF,CAAC;;IAEF,MAAM,CAAC,IAAI,GAAG,SAAS,IAAI,CAAC,QAAQ,EAAE;MACpC,IAAI,MAAM,GAAG,IAAI,CAAC;;MAElB,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;MAC/B,IAAI,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;MAErD,IAAI,QAAQ,GAAG,SAAS,QAAQ,GAAG;QACjC,IAAI,MAAM,CAAC,WAAW,KAAK,UAAU,CAAC,IAAI,IAAI,GAAG,CAAC,UAAU,EAAE;UAC5D,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;SACjC;;QAED,MAAM,CAAC,cAAc,EAAE,CAAC;;QAExB,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC;;QAEnD,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;;QAE3D,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE;UAC3B,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;SAC1B;;QAED,IAAI,QAAQ,EAAE;UACZ,QAAQ,EAAE,CAAC;SACZ;OACF,CAAC;;MAEF,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;;MAEnC,IAAI,SAAS,CAAC,kBAAkB,EAAE,EAAE;QAClC,OAAO;OACR;;MAED,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;;;MAGrC,IAAI,cAAc,IAAI,QAAQ,CAAC,eAAe,EAAE;QAC9C,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;OAC5D;;MAED,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;MAC3C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;MAC3C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;;MAE3C,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;QAC1C,IAAI,kBAAkB,GAAG,IAAI,CAAC,gCAAgC,CAAC,GAAG,CAAC,CAAC;QACpE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;OACpF,MAAM;QACL,QAAQ,EAAE,CAAC;OACZ;;MAED,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;KACvB,CAAC;;IAEF,MAAM,CAAC,MAAM,GAAG,SAAS,MAAM,GAAG;MAChC,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;QACzB,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;OAC/B;KACF;KACA;;IAED,MAAM,CAAC,aAAa,GAAG,SAAS,aAAa,GAAG;MAC9C,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;KACjC,CAAC;;IAEF,MAAM,CAAC,kBAAkB,GAAG,SAAS,kBAAkB,CAAC,UAAU,EAAE;MAClE,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,YAAY,GAAG,GAAG,GAAG,UAAU,CAAC,CAAC;KACnE,CAAC;;IAEF,MAAM,CAAC,aAAa,GAAG,SAAS,aAAa,GAAG;MAC9C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;MAClD,OAAO,IAAI,CAAC,GAAG,CAAC;KACjB,CAAC;;IAEF,MAAM,CAAC,UAAU,GAAG,SAAS,UAAU,GAAG;MACxC,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;MAC/B,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;MAC3F,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,GAAG,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;KAC/D,CAAC;;IAEF,MAAM,CAAC,iBAAiB,GAAG,SAAS,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE;MACvE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE;;QAEvE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;UACpB,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE;YACrC,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;WAClC;SACF,MAAM;UACL,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;SAClC;;QAED,OAAO;OACR;;MAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;QACpB,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;UACxB,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;SAChF;;QAED,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;OACxB,MAAM;QACL,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;OACxB;KACF,CAAC;;IAEF,MAAM,CAAC,QAAQ,GAAG,SAAS,QAAQ,GAAG;MACpC,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC;;MAE7D,IAAI,CAAC,KAAK,EAAE;QACV,KAAK,GAAG,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;OAC5G;;MAED,OAAO,KAAK,CAAC;KACd;KACA;;IAED,MAAM,CAAC,UAAU,GAAG,SAAS,UAAU,GAAG;MACxC,IAAI,MAAM,GAAG,IAAI,CAAC;;MAElB,IAAI,MAAM,GAAG,EAAE,CAAC;;MAEhB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;QAC5C,MAAM,CAAC,EAAE,GAAG,UAAU,IAAI,EAAE;UAC1B,IAAI,CAAC,OAAO,GAAG,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;UACzG,OAAO,IAAI,CAAC;SACb,CAAC;OACH,MAAM;QACL,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;OACpC;;MAED,OAAO,MAAM,CAAC;KACf,CAAC;;IAEF,MAAM,CAAC,aAAa,GAAG,SAAS,aAAa,GAAG;MAC9C,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,KAAK,EAAE;QACnC,OAAO,QAAQ,CAAC,IAAI,CAAC;OACtB;;MAED,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;QACzC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;OACjC;;MAED,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;KAChD,CAAC;;IAEF,MAAM,CAAC,cAAc,GAAG,SAAS,cAAc,CAAC,SAAS,EAAE;MACzD,OAAO,eAAe,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;KACjD,CAAC;;IAEF,MAAM,CAAC,aAAa,GAAG,SAAS,aAAa,GAAG;MAC9C,IAAI,MAAM,GAAG,IAAI,CAAC;;MAElB,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;MAC9C,QAAQ,CAAC,OAAO,CAAC,UAAU,OAAO,EAAE;QAClC,IAAI,OAAO,KAAK,OAAO,EAAE;UACvB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,KAAK,EAAE;YAC5F,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;WAC7B,CAAC,CAAC;SACJ,MAAM,IAAI,OAAO,KAAK,OAAO,CAAC,MAAM,EAAE;UACrC,IAAI,OAAO,GAAG,OAAO,KAAK,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC;UACjH,IAAI,QAAQ,GAAG,OAAO,KAAK,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC;UACnH,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,KAAK,EAAE;YACrE,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;WAC7B,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,KAAK,EAAE;YACvD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;WAC7B,CAAC,CAAC;SACJ;OACF,CAAC,CAAC;MACH,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,eAAe,EAAE,YAAY;QAChE,IAAI,MAAM,CAAC,OAAO,EAAE;UAClB,MAAM,CAAC,IAAI,EAAE,CAAC;SACf;OACF,CAAC,CAAC;;MAEH,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;QACxB,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;UAC3C,OAAO,EAAE,QAAQ;UACjB,QAAQ,EAAE,EAAE;SACb,CAAC,CAAC;OACJ,MAAM;QACL,IAAI,CAAC,SAAS,EAAE,CAAC;OAClB;KACF,CAAC;;IAEF,MAAM,CAAC,SAAS,GAAG,SAAS,SAAS,GAAG;MACtC,IAAI,SAAS,GAAG,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC;;MAExE,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,SAAS,KAAK,QAAQ,EAAE;QAChE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,qBAAqB,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3F,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;OACxC;KACF,CAAC;;IAEF,MAAM,CAAC,MAAM,GAAG,SAAS,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE;MAC9C,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;MACxC,OAAO,GAAG,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;MAE1D,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAC/E,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;OAC/C;;MAED,IAAI,KAAK,EAAE;QACT,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;OACzF;;MAED,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,WAAW,KAAK,UAAU,CAAC,IAAI,EAAE;QACpG,OAAO,CAAC,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC;QACtC,OAAO;OACR;;MAED,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;MAC/B,OAAO,CAAC,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC;;MAEtC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE;QACvD,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO;OACR;;MAED,OAAO,CAAC,QAAQ,GAAG,UAAU,CAAC,YAAY;QACxC,IAAI,OAAO,CAAC,WAAW,KAAK,UAAU,CAAC,IAAI,EAAE;UAC3C,OAAO,CAAC,IAAI,EAAE,CAAC;SAChB;OACF,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KAC/B,CAAC;;IAEF,MAAM,CAAC,MAAM,GAAG,SAAS,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE;MAC9C,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;MACxC,OAAO,GAAG,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;MAE1D,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAC/E,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;OAC/C;;MAED,IAAI,KAAK,EAAE;QACT,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;OAC3F;;MAED,IAAI,OAAO,CAAC,oBAAoB,EAAE,EAAE;QAClC,OAAO;OACR;;MAED,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;MAC/B,OAAO,CAAC,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC;;MAErC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE;QACvD,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO;OACR;;MAED,OAAO,CAAC,QAAQ,GAAG,UAAU,CAAC,YAAY;QACxC,IAAI,OAAO,CAAC,WAAW,KAAK,UAAU,CAAC,GAAG,EAAE;UAC1C,OAAO,CAAC,IAAI,EAAE,CAAC;SAChB;OACF,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KAC/B,CAAC;;IAEF,MAAM,CAAC,oBAAoB,GAAG,SAAS,oBAAoB,GAAG,CAAC;;AAAA;MAC7D,KAAK,IAAI,OAAO,IAAIA,MAAI,CAAC,cAAc,EAAE;QACvC,IAAIA,MAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;UAChC,OAAO,IAAI,CAAC;SACb;OACF;;MAED,OAAO,KAAK,CAAC;KACd,CAAC;;IAEF,MAAM,CAAC,UAAU,GAAG,SAAS,UAAU,CAAC,MAAM,EAAE;MAC9C,IAAI,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;MAC5C,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,UAAU,QAAQ,EAAE;QACtD,IAAI,qBAAqB,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;UAClD,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;SACjC;OACF,CAAC,CAAC;MACH,MAAM,GAAG,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,CAAC;;MAEzH,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE;QACpC,MAAM,CAAC,KAAK,GAAG;UACb,IAAI,EAAE,MAAM,CAAC,KAAK;UAClB,IAAI,EAAE,MAAM,CAAC,KAAK;SACnB,CAAC;OACH;;MAED,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE;QACpC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;OACxC;;MAED,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE;QACtC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;OAC5C;;MAED,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;;MAEnE,IAAI,MAAM,CAAC,QAAQ,EAAE;QACnB,MAAM,CAAC,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;OACtF;;MAED,OAAO,MAAM,CAAC;KACf,CAAC;;IAEF,MAAM,CAAC,kBAAkB,GAAG,SAAS,kBAAkB,GAAG,CAAC;;AAAA;MACzD,IAAI,MAAM,GAAG,EAAE,CAAC;;MAEhB,IAAI,IAAI,CAAC,MAAM,EAAE;QACf,KAAK,IAAI,GAAG,IAAIA,MAAI,CAAC,MAAM,EAAE;UAC3B,IAAIA,MAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,KAAKA,MAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YACtD,MAAM,CAAC,GAAG,CAAC,GAAGA,MAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;WAChC;SACF;OACF;;MAED,OAAO,MAAM,CAAC;KACf,CAAC;;IAEF,MAAM,CAAC,cAAc,GAAG,SAAS,cAAc,GAAG;MAChD,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;MACnC,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;;MAE5D,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,MAAM,EAAE;QACxC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;OACrC;KACF,CAAC;;IAEF,MAAM,CAAC,4BAA4B,GAAG,SAAS,4BAA4B,CAAC,UAAU,EAAE;MACtF,IAAI,cAAc,GAAG,UAAU,CAAC,QAAQ,CAAC;MACzC,IAAI,CAAC,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC;;MAEjC,IAAI,CAAC,cAAc,EAAE,CAAC;;MAEtB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;KACpE,CAAC;;IAEF,MAAM,CAAC,cAAc,GAAG,SAAS,cAAc,GAAG;MAChD,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;MAC/B,IAAI,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;;MAEhD,IAAI,GAAG,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE;QAC5C,OAAO;OACR;;MAED,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;MACrC,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;MAC9B,IAAI,CAAC,IAAI,EAAE,CAAC;MACZ,IAAI,CAAC,IAAI,EAAE,CAAC;MACZ,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,mBAAmB,CAAC;KAC7C;KACA;;IAED,OAAO,CAAC,gBAAgB,GAAG,SAAS,gBAAgB,CAAC,MAAM,EAAE;MAC3D,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY;QAC3B,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;QAEpC,IAAI,OAAO,GAAG,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC;;QAEnD,IAAI,CAAC,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;UACxC,OAAO;SACR;;QAED,IAAI,CAAC,IAAI,EAAE;UACT,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;UAClC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;SAChC;;QAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;UAC9B,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,WAAW,EAAE;YACvC,MAAM,IAAI,SAAS,CAAC,oBAAoB,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;WAC3D;;UAED,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;SAChB;OACF,CAAC,CAAC;KACJ,CAAC;;IAEF,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;MAC3B,GAAG,EAAE,SAAS;MACd,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,SAAS,CAAC;OAClB;KACF,EAAE;MACD,GAAG,EAAE,SAAS;MACd,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,SAAS,CAAC;OAClB;KACF,EAAE;MACD,GAAG,EAAE,MAAM;MACX,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,MAAM,CAAC;OACf;KACF,EAAE;MACD,GAAG,EAAE,UAAU;MACf,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,UAAU,CAAC;OACnB;KACF,EAAE;MACD,GAAG,EAAE,OAAO;MACZ,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,OAAO,CAAC;OAChB;KACF,EAAE;MACD,GAAG,EAAE,WAAW;MAChB,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,WAAW,CAAC;OACpB;KACF,EAAE;MACD,GAAG,EAAE,aAAa;MAClB,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,aAAa,CAAC;OACtB;KACF,CAAC,CAAC,CAAC;;IAEJ,OAAO,OAAO,CAAC;GAChB,EAAE,CAAC;;;;;;;;EAQJ,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;EACxC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,WAAW,GAAG,OAAO,CAAC;;EAEnC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,UAAU,GAAG,YAAY;IACpC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC;IACpC,OAAO,OAAO,CAAC,gBAAgB,CAAC;GACjC,CAAC;;;;;;;;EAQF,IAAI,MAAM,GAAG,SAAS,CAAC;EACvB,IAAI,SAAS,GAAG,OAAO,CAAC;EACxB,IAAI,UAAU,GAAG,YAAY,CAAC;EAC9B,IAAI,WAAW,GAAG,GAAG,GAAG,UAAU,CAAC;EACnC,IAAI,oBAAoB,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;EACxC,IAAI,cAAc,GAAG,YAAY,CAAC;EAClC,IAAI,oBAAoB,GAAG,IAAI,MAAM,CAAC,SAAS,GAAG,cAAc,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC;;EAEhF,IAAI,SAAS,GAAG,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,EAAE;IACjD,SAAS,EAAE,OAAO;IAClB,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE,sCAAsC,GAAG,2BAA2B,GAAG,kCAAkC,GAAG,wCAAwC;GAC/J,CAAC,CAAC;;EAEH,IAAI,aAAa,GAAG,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC,WAAW,EAAE;IACzD,OAAO,EAAE,2BAA2B;GACrC,CAAC,CAAC;;EAEH,IAAI,WAAW,GAAG;IAChB,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;GACb,CAAC;EACF,IAAI,UAAU,GAAG;IACf,KAAK,EAAE,iBAAiB;IACxB,OAAO,EAAE,eAAe;GACzB,CAAC;EACF,IAAI,OAAO,GAAG;IACZ,IAAI,EAAE,MAAM,GAAG,WAAW;IAC1B,MAAM,EAAE,QAAQ,GAAG,WAAW;IAC9B,IAAI,EAAE,MAAM,GAAG,WAAW;IAC1B,KAAK,EAAE,OAAO,GAAG,WAAW;IAC5B,QAAQ,EAAE,UAAU,GAAG,WAAW;IAClC,KAAK,EAAE,OAAO,GAAG,WAAW;IAC5B,OAAO,EAAE,SAAS,GAAG,WAAW;IAChC,QAAQ,EAAE,UAAU,GAAG,WAAW;IAClC,UAAU,EAAE,YAAY,GAAG,WAAW;IACtC,UAAU,EAAE,YAAY,GAAG,WAAW;;;;;;;GAOvC,CAAC;;EAEF,IAAI,OAAO;;EAEX,UAAU,QAAQ,EAAE;IAClB,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;;IAElC,SAAS,OAAO,GAAG;MACjB,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC;KAChD;;IAED,IAAI,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;;;IAG/B,MAAM,CAAC,aAAa,GAAG,SAAS,aAAa,GAAG;MAC9C,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;KAC9C,CAAC;;IAEF,MAAM,CAAC,kBAAkB,GAAG,SAAS,kBAAkB,CAAC,UAAU,EAAE;MAClE,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,cAAc,GAAG,GAAG,GAAG,UAAU,CAAC,CAAC;KACrE,CAAC;;IAEF,MAAM,CAAC,aAAa,GAAG,SAAS,aAAa,GAAG;MAC9C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;MAClD,OAAO,IAAI,CAAC,GAAG,CAAC;KACjB,CAAC;;IAEF,MAAM,CAAC,UAAU,GAAG,SAAS,UAAU,GAAG;MACxC,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;;MAEnC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;;MAErE,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;;MAEjC,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;QACjC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;OACtC;;MAED,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;MAC/D,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,GAAG,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;KAC7D;KACA;;IAED,MAAM,CAAC,WAAW,GAAG,SAAS,WAAW,GAAG;MAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;KACzE,CAAC;;IAEF,MAAM,CAAC,cAAc,GAAG,SAAS,cAAc,GAAG;MAChD,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;MACnC,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;;MAE9D,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;QAC5C,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;OACrC;KACF;KACA;;IAED,OAAO,CAAC,gBAAgB,GAAG,SAAS,gBAAgB,CAAC,MAAM,EAAE;MAC3D,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY;QAC3B,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;QAEpC,IAAI,OAAO,GAAG,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAC;;QAEzD,IAAI,CAAC,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;UACxC,OAAO;SACR;;QAED,IAAI,CAAC,IAAI,EAAE;UACT,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;UAClC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;SAChC;;QAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;UAC9B,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,WAAW,EAAE;YACvC,MAAM,IAAI,SAAS,CAAC,oBAAoB,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;WAC3D;;UAED,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;SAChB;OACF,CAAC,CAAC;KACJ,CAAC;;IAEF,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;MAC3B,GAAG,EAAE,SAAS;;MAEd,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,SAAS,CAAC;OAClB;KACF,EAAE;MACD,GAAG,EAAE,SAAS;MACd,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,SAAS,CAAC;OAClB;KACF,EAAE;MACD,GAAG,EAAE,MAAM;MACX,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,MAAM,CAAC;OACf;KACF,EAAE;MACD,GAAG,EAAE,UAAU;MACf,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,UAAU,CAAC;OACnB;KACF,EAAE;MACD,GAAG,EAAE,OAAO;MACZ,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,OAAO,CAAC;OAChB;KACF,EAAE;MACD,GAAG,EAAE,WAAW;MAChB,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,WAAW,CAAC;OACpB;KACF,EAAE;MACD,GAAG,EAAE,aAAa;MAClB,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,aAAa,CAAC;OACtB;KACF,CAAC,CAAC,CAAC;;IAEJ,OAAO,OAAO,CAAC;GAChB,CAAC,OAAO,CAAC,CAAC;;;;;;;;EAQX,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;EACxC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,WAAW,GAAG,OAAO,CAAC;;EAEnC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,UAAU,GAAG,YAAY;IACpC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC;IACpC,OAAO,OAAO,CAAC,gBAAgB,CAAC;GACjC,CAAC;;;;;;;;EAQF,IAAI,MAAM,GAAG,WAAW,CAAC;EACzB,IAAI,SAAS,GAAG,OAAO,CAAC;EACxB,IAAI,UAAU,GAAG,cAAc,CAAC;EAChC,IAAI,WAAW,GAAG,GAAG,GAAG,UAAU,CAAC;EACnC,IAAI,cAAc,GAAG,WAAW,CAAC;EACjC,IAAI,oBAAoB,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;EACxC,IAAI,SAAS,GAAG;IACd,MAAM,EAAE,EAAE;IACV,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,EAAE;GACX,CAAC;EACF,IAAI,aAAa,GAAG;IAClB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,kBAAkB;GAC3B,CAAC;EACF,IAAI,OAAO,GAAG;IACZ,QAAQ,EAAE,UAAU,GAAG,WAAW;IAClC,MAAM,EAAE,QAAQ,GAAG,WAAW;IAC9B,aAAa,EAAE,MAAM,GAAG,WAAW,GAAG,cAAc;GACrD,CAAC;EACF,IAAI,WAAW,GAAG;IAChB,aAAa,EAAE,eAAe;IAC9B,aAAa,EAAE,eAAe;IAC9B,MAAM,EAAE,QAAQ;GACjB,CAAC;EACF,IAAI,UAAU,GAAG;IACf,QAAQ,EAAE,qBAAqB;IAC/B,MAAM,EAAE,SAAS;IACjB,cAAc,EAAE,mBAAmB;IACnC,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IACtB,UAAU,EAAE,kBAAkB;IAC9B,QAAQ,EAAE,WAAW;IACrB,cAAc,EAAE,gBAAgB;IAChC,eAAe,EAAE,kBAAkB;GACpC,CAAC;EACF,IAAI,YAAY,GAAG;IACjB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;;;;;;;GAOrB,CAAC;;EAEF,IAAI,SAAS;;EAEb,YAAY;IACV,SAAS,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE;MAClC,IAAI,KAAK,GAAG,IAAI,CAAC;;MAEjB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;MACxB,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;MACpE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;MACvC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,GAAG,UAAU,CAAC,SAAS,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,GAAG,UAAU,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;MAC9L,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;MACnB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;MACnB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;MAC1B,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;MACvB,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,KAAK,EAAE;QACzD,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;OAC9B,CAAC,CAAC;MACH,IAAI,CAAC,OAAO,EAAE,CAAC;;MAEf,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;;;IAGD,IAAI,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC;;;IAGjC,MAAM,CAAC,OAAO,GAAG,SAAS,OAAO,GAAG;MAClC,IAAI,MAAM,GAAG,IAAI,CAAC;;MAElB,IAAI,UAAU,GAAG,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC;MAClH,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;MACrF,IAAI,UAAU,GAAG,YAAY,KAAK,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;MACnF,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;MACnB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;MACnB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;MAC7C,IAAI,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;MACvE,OAAO,CAAC,GAAG,CAAC,UAAU,OAAO,EAAE;QAC7B,IAAI,MAAM,CAAC;QACX,IAAI,cAAc,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;;QAE1D,IAAI,cAAc,EAAE;UAClB,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;SACjD;;QAED,IAAI,MAAM,EAAE;UACV,IAAI,SAAS,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;;UAE/C,IAAI,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE;;YAEvC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,GAAG,UAAU,EAAE,cAAc,CAAC,CAAC;WACrE;SACF;;QAED,OAAO,IAAI,CAAC;OACb,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE;QACxB,OAAO,IAAI,CAAC;OACb,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;QACtB,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;OACpB,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE;QACzB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;;QAE9B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;OAC/B,CAAC,CAAC;KACJ,CAAC;;IAEF,MAAM,CAAC,OAAO,GAAG,SAAS,OAAO,GAAG;MAClC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;MACxC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;MACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;MACrB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;MAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;MACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;MACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;MACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;MACrB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;MAC1B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;KAC3B;KACA;;IAED,MAAM,CAAC,UAAU,GAAG,SAAS,UAAU,CAAC,MAAM,EAAE;MAC9C,MAAM,GAAG,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,CAAC;;MAE1F,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;QACrC,IAAI,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;QAErC,IAAI,CAAC,EAAE,EAAE;UACP,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;UACzB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;SACjC;;QAED,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC;OAC1B;;MAED,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;MACpD,OAAO,MAAM,CAAC;KACf,CAAC;;IAEF,MAAM,CAAC,aAAa,GAAG,SAAS,aAAa,GAAG;MAC9C,OAAO,IAAI,CAAC,cAAc,KAAK,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;KACzG,CAAC;;IAEF,MAAM,CAAC,gBAAgB,GAAG,SAAS,gBAAgB,GAAG;MACpD,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;KACxH,CAAC;;IAEF,MAAM,CAAC,gBAAgB,GAAG,SAAS,gBAAgB,GAAG;MACpD,OAAO,IAAI,CAAC,cAAc,KAAK,MAAM,GAAG,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,CAAC,MAAM,CAAC;KACjH,CAAC;;IAEF,MAAM,CAAC,QAAQ,GAAG,SAAS,QAAQ,GAAG,CAAC;;AAAA;MACrC,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;;MAE3D,IAAI,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;;MAE3C,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;;MAE7E,IAAI,IAAI,CAAC,aAAa,KAAK,YAAY,EAAE;QACvC,IAAI,CAAC,OAAO,EAAE,CAAC;OAChB;;MAED,IAAI,SAAS,IAAI,SAAS,EAAE;QAC1B,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;;QAErD,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE;UACjC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;SACxB;;QAED,OAAO;OACR;;MAED,IAAI,IAAI,CAAC,aAAa,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;QAC9E,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;;QAE1B,IAAI,CAAC,MAAM,EAAE,CAAC;;QAEd,OAAO;OACR;;MAED,IAAI,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;;MAExC,KAAK,IAAI,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,GAAG;QAC/B,IAAI,cAAc,GAAGA,MAAI,CAAC,aAAa,KAAKA,MAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,SAAS,IAAIA,MAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAOA,MAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,WAAW,IAAI,SAAS,GAAGA,MAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;QAEnL,IAAI,cAAc,EAAE;UAClBA,MAAI,CAAC,SAAS,CAACA,MAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;SAClC;OACF;KACF,CAAC;;IAEF,MAAM,CAAC,SAAS,GAAG,SAAS,SAAS,CAAC,MAAM,EAAE;MAC5C,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;;MAE5B,IAAI,CAAC,MAAM,EAAE,CAAC;;MAEd,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,QAAQ,EAAE;QAC9D,OAAO,QAAQ,GAAG,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC;OAChG,CAAC,CAAC;;MAEH,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;;MAE3E,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE;QAC7C,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACjG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;OACpC,MAAM;;QAEL,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;;;QAGnC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;;QAEhI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;OACjI;;MAED,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE;QAC/C,aAAa,EAAE,MAAM;OACtB,CAAC,CAAC;KACJ,CAAC;;IAEF,MAAM,CAAC,MAAM,GAAG,SAAS,MAAM,GAAG;MAChC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE;QAC9E,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;OACpD,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;OAClD,CAAC,CAAC;KACJ;KACA;;IAED,SAAS,CAAC,gBAAgB,GAAG,SAAS,gBAAgB,CAAC,MAAM,EAAE;MAC7D,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY;QAC3B,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;QAEpC,IAAI,OAAO,GAAG,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC;;QAEnD,IAAI,CAAC,IAAI,EAAE;UACT,IAAI,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;UACpC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;SAChC;;QAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;UAC9B,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,WAAW,EAAE;YACvC,MAAM,IAAI,SAAS,CAAC,oBAAoB,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;WAC3D;;UAED,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;SAChB;OACF,CAAC,CAAC;KACJ,CAAC;;IAEF,YAAY,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;MAC7B,GAAG,EAAE,SAAS;MACd,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,SAAS,CAAC;OAClB;KACF,EAAE;MACD,GAAG,EAAE,SAAS;MACd,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,SAAS,CAAC;OAClB;KACF,CAAC,CAAC,CAAC;;IAEJ,OAAO,SAAS,CAAC;GAClB,EAAE,CAAC;;;;;;;;EAQJ,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,YAAY;IAC9C,IAAI,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/E,IAAI,gBAAgB,GAAG,UAAU,CAAC,MAAM,CAAC;;IAEzC,KAAK,IAAI,CAAC,GAAG,gBAAgB,EAAE,CAAC,EAAE,GAAG;MACnC,IAAI,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;;MAE5B,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;KACpD;GACF,CAAC,CAAC;;;;;;;EAOH,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,gBAAgB,CAAC;EAC1C,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,WAAW,GAAG,SAAS,CAAC;;EAErC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,UAAU,GAAG,YAAY;IACpC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC;IACpC,OAAO,SAAS,CAAC,gBAAgB,CAAC;GACnC,CAAC;;;;;;;;EAQF,IAAI,MAAM,GAAG,KAAK,CAAC;EACnB,IAAI,SAAS,GAAG,OAAO,CAAC;EACxB,IAAI,UAAU,GAAG,QAAQ,CAAC;EAC1B,IAAI,WAAW,GAAG,GAAG,GAAG,UAAU,CAAC;EACnC,IAAI,cAAc,GAAG,WAAW,CAAC;EACjC,IAAI,oBAAoB,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;EACxC,IAAI,OAAO,GAAG;IACZ,IAAI,EAAE,MAAM,GAAG,WAAW;IAC1B,MAAM,EAAE,QAAQ,GAAG,WAAW;IAC9B,IAAI,EAAE,MAAM,GAAG,WAAW;IAC1B,KAAK,EAAE,OAAO,GAAG,WAAW;IAC5B,cAAc,EAAE,OAAO,GAAG,WAAW,GAAG,cAAc;GACvD,CAAC;EACF,IAAI,WAAW,GAAG;IAChB,aAAa,EAAE,eAAe;IAC9B,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;GACb,CAAC;EACF,IAAI,UAAU,GAAG;IACf,QAAQ,EAAE,WAAW;IACrB,cAAc,EAAE,mBAAmB;IACnC,MAAM,EAAE,SAAS;IACjB,SAAS,EAAE,gBAAgB;IAC3B,WAAW,EAAE,iEAAiE;IAC9E,eAAe,EAAE,kBAAkB;IACnC,qBAAqB,EAAE,0BAA0B;;;;;;;GAOlD,CAAC;;EAEF,IAAI,GAAG;;EAEP,YAAY;IACV,SAAS,GAAG,CAAC,OAAO,EAAE;MACpB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;KACzB;;;IAGD,IAAI,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC;;;IAG3B,MAAM,CAAC,IAAI,GAAG,SAAS,IAAI,GAAG;MAC5B,IAAI,KAAK,GAAG,IAAI,CAAC;;MAEjB,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE;QAC3L,OAAO;OACR;;MAED,IAAI,MAAM,CAAC;MACX,IAAI,QAAQ,CAAC;MACb,IAAI,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;MACzE,IAAI,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;MAE1D,IAAI,WAAW,EAAE;QACf,IAAI,YAAY,GAAG,WAAW,CAAC,QAAQ,KAAK,IAAI,IAAI,WAAW,CAAC,QAAQ,KAAK,IAAI,GAAG,UAAU,CAAC,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC;QAC7H,QAAQ,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QAC1D,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;OAC1C;;MAED,IAAI,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;QACpC,aAAa,EAAE,IAAI,CAAC,QAAQ;OAC7B,CAAC,CAAC;MACH,IAAI,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;QACpC,aAAa,EAAE,QAAQ;OACxB,CAAC,CAAC;;MAEH,IAAI,QAAQ,EAAE;QACZ,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;OAChC;;MAED,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;;MAEpC,IAAI,SAAS,CAAC,kBAAkB,EAAE,IAAI,SAAS,CAAC,kBAAkB,EAAE,EAAE;QACpE,OAAO;OACR;;MAED,IAAI,QAAQ,EAAE;QACZ,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;OAC3C;;MAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;;MAE3C,IAAI,QAAQ,GAAG,SAAS,QAAQ,GAAG;QACjC,IAAI,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;UACxC,aAAa,EAAE,KAAK,CAAC,QAAQ;SAC9B,CAAC,CAAC;QACH,IAAI,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE;UACtC,aAAa,EAAE,QAAQ;SACxB,CAAC,CAAC;QACH,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACjC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;OACvC,CAAC;;MAEF,IAAI,MAAM,EAAE;QACV,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;OACrD,MAAM;QACL,QAAQ,EAAE,CAAC;OACZ;KACF,CAAC;;IAEF,MAAM,CAAC,OAAO,GAAG,SAAS,OAAO,GAAG;MAClC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;MACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;KACtB;KACA;;IAED,MAAM,CAAC,SAAS,GAAG,SAAS,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE;MAClE,IAAI,MAAM,GAAG,IAAI,CAAC;;MAElB,IAAI,cAAc,GAAG,SAAS,IAAI,CAAC,SAAS,CAAC,QAAQ,KAAK,IAAI,IAAI,SAAS,CAAC,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;MACpL,IAAI,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;MAC/B,IAAI,eAAe,GAAG,QAAQ,IAAI,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;;MAEjF,IAAI,QAAQ,GAAG,SAAS,QAAQ,GAAG;QACjC,OAAO,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;OAC9D,CAAC;;MAEF,IAAI,MAAM,IAAI,eAAe,EAAE;QAC7B,IAAI,kBAAkB,GAAG,IAAI,CAAC,gCAAgC,CAAC,MAAM,CAAC,CAAC;QACvE,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;OACrH,MAAM;QACL,QAAQ,EAAE,CAAC;OACZ;KACF,CAAC;;IAEF,MAAM,CAAC,mBAAmB,GAAG,SAAS,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;MACnF,IAAI,MAAM,EAAE;QACV,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;;QAEnF,IAAI,aAAa,EAAE;UACjB,CAAC,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;SAClD;;QAED,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE;UACzC,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;SAC7C;OACF;;MAED,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;;MAExC,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE;QAC1C,OAAO,CAAC,YAAY,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;OAC7C;;MAED,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;;MAErB,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;QAChD,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;OACzC;;MAED,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE;QACnF,IAAI,eAAe,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;;QAEjE,IAAI,eAAe,EAAE;UACnB,IAAI,kBAAkB,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC;UACrG,CAAC,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;SACpD;;QAED,OAAO,CAAC,YAAY,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;OAC7C;;MAED,IAAI,QAAQ,EAAE;QACZ,QAAQ,EAAE,CAAC;OACZ;KACF;KACA;;IAED,GAAG,CAAC,gBAAgB,GAAG,SAAS,gBAAgB,CAAC,MAAM,EAAE;MACvD,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY;QAC3B,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;QAElC,IAAI,CAAC,IAAI,EAAE;UACT,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;UACrB,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;SAC9B;;QAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;UAC9B,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,WAAW,EAAE;YACvC,MAAM,IAAI,SAAS,CAAC,oBAAoB,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;WAC3D;;UAED,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;SAChB;OACF,CAAC,CAAC;KACJ,CAAC;;IAEF,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;MACvB,GAAG,EAAE,SAAS;MACd,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,SAAS,CAAC;OAClB;KACF,CAAC,CAAC,CAAC;;IAEJ,OAAO,GAAG,CAAC;GACZ,EAAE,CAAC;;;;;;;;EAQJ,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,UAAU,CAAC,WAAW,EAAE,UAAU,KAAK,EAAE;IAC9E,KAAK,CAAC,cAAc,EAAE,CAAC;;IAEvB,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;GAC5C,CAAC,CAAC;;;;;;;EAOH,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,gBAAgB,CAAC;EACpC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC;;EAE/B,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,UAAU,GAAG,YAAY;IACpC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC;IACpC,OAAO,GAAG,CAAC,gBAAgB,CAAC;GAC7B,CAAC;;;;;;;;EAQF,IAAI,MAAM,GAAG,OAAO,CAAC;EACrB,IAAI,SAAS,GAAG,OAAO,CAAC;EACxB,IAAI,UAAU,GAAG,UAAU,CAAC;EAC5B,IAAI,WAAW,GAAG,GAAG,GAAG,UAAU,CAAC;EACnC,IAAI,oBAAoB,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;EACxC,IAAI,OAAO,GAAG;IACZ,aAAa,EAAE,eAAe,GAAG,WAAW;IAC5C,IAAI,EAAE,MAAM,GAAG,WAAW;IAC1B,MAAM,EAAE,QAAQ,GAAG,WAAW;IAC9B,IAAI,EAAE,MAAM,GAAG,WAAW;IAC1B,KAAK,EAAE,OAAO,GAAG,WAAW;GAC7B,CAAC;EACF,IAAI,WAAW,GAAG;IAChB,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;GACnB,CAAC;EACF,IAAI,aAAa,GAAG;IAClB,SAAS,EAAE,SAAS;IACpB,QAAQ,EAAE,SAAS;IACnB,KAAK,EAAE,QAAQ;GAChB,CAAC;EACF,IAAI,SAAS,GAAG;IACd,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,GAAG;GACX,CAAC;EACF,IAAI,UAAU,GAAG;IACf,YAAY,EAAE,wBAAwB;;;;;;;GAOvC,CAAC;;EAEF,IAAI,KAAK;;EAET,YAAY;IACV,SAAS,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE;MAC9B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;MACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;MACvC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;;MAErB,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;;;IAGD,IAAI,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;;;IAG7B,MAAM,CAAC,IAAI,GAAG,SAAS,IAAI,GAAG;MAC5B,IAAI,KAAK,GAAG,IAAI,CAAC;;MAEjB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;MAEvC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;QAC1B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;OAC/C;;MAED,IAAI,QAAQ,GAAG,SAAS,QAAQ,GAAG;QACjC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;;QAErD,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;;QAE/C,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;;QAEzC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE;UAC1B,KAAK,CAAC,IAAI,EAAE,CAAC;SACd;OACF,CAAC;;MAEF,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;;MAEjD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;;MAEjD,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;QAC1B,IAAI,kBAAkB,GAAG,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9E,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;OAC9F,MAAM;QACL,QAAQ,EAAE,CAAC;OACZ;KACF,CAAC;;IAEF,MAAM,CAAC,IAAI,GAAG,SAAS,IAAI,CAAC,cAAc,EAAE;MAC1C,IAAI,MAAM,GAAG,IAAI,CAAC;;MAElB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;QACvD,OAAO;OACR;;MAED,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;MAEvC,IAAI,cAAc,EAAE;QAClB,IAAI,CAAC,MAAM,EAAE,CAAC;OACf,MAAM;QACL,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,YAAY;UACrC,MAAM,CAAC,MAAM,EAAE,CAAC;SACjB,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;OACxB;KACF,CAAC;;IAEF,MAAM,CAAC,OAAO,GAAG,SAAS,OAAO,GAAG;MAClC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;MAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;;MAErB,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;QACtD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;OAClD;;MAED,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;MAC5C,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;MACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;MACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;KACrB;KACA;;IAED,MAAM,CAAC,UAAU,GAAG,SAAS,UAAU,CAAC,MAAM,EAAE;MAC9C,MAAM,GAAG,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,CAAC;MACnH,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;MACnE,OAAO,MAAM,CAAC;KACf,CAAC;;IAEF,MAAM,CAAC,aAAa,GAAG,SAAS,aAAa,GAAG;MAC9C,IAAI,MAAM,GAAG,IAAI,CAAC;;MAElB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC,YAAY,EAAE,YAAY;QAC9E,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;OAC1B,CAAC,CAAC;KACJ,CAAC;;IAEF,MAAM,CAAC,MAAM,GAAG,SAAS,MAAM,GAAG;MAChC,IAAI,MAAM,GAAG,IAAI,CAAC;;MAElB,IAAI,QAAQ,GAAG,SAAS,QAAQ,GAAG;QACjC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;;QAEhD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;OAC5C,CAAC;;MAEF,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;;MAEjD,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;QAC1B,IAAI,kBAAkB,GAAG,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9E,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;OAC9F,MAAM;QACL,QAAQ,EAAE,CAAC;OACZ;KACF;KACA;;IAED,KAAK,CAAC,gBAAgB,GAAG,SAAS,gBAAgB,CAAC,MAAM,EAAE;MACzD,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY;QAC3B,IAAI,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;QAErC,IAAI,OAAO,GAAG,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC;;QAEnD,IAAI,CAAC,IAAI,EAAE;UACT,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;UAChC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;SACjC;;QAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;UAC9B,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,WAAW,EAAE;YACvC,MAAM,IAAI,SAAS,CAAC,oBAAoB,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;WAC3D;;UAED,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;SACpB;OACF,CAAC,CAAC;KACJ,CAAC;;IAEF,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;MACzB,GAAG,EAAE,SAAS;MACd,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,SAAS,CAAC;OAClB;KACF,EAAE;MACD,GAAG,EAAE,aAAa;MAClB,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,aAAa,CAAC;OACtB;KACF,EAAE;MACD,GAAG,EAAE,SAAS;MACd,GAAG,EAAE,SAAS,GAAG,GAAG;QAClB,OAAO,SAAS,CAAC;OAClB;KACF,CAAC,CAAC,CAAC;;IAEJ,OAAO,KAAK,CAAC;GACd,EAAE,CAAC;;;;;;;;EAQJ,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC;EACtC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,WAAW,GAAG,KAAK,CAAC;;EAEjC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,UAAU,GAAG,YAAY;IACpC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC;IACpC,OAAO,KAAK,CAAC,gBAAgB,CAAC;GAC/B,CAAC;;;;;;;;;EASF,CAAC,YAAY;IACX,IAAI,OAAO,CAAC,KAAK,WAAW,EAAE;MAC5B,MAAM,IAAI,SAAS,CAAC,kGAAkG,CAAC,CAAC;KACzH;;IAED,IAAI,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnD,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,QAAQ,GAAG,CAAC,CAAC;;IAEjB,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE;MAC1J,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;KACjG;GACF,CAAC,EAAE,CAAC;;EAEL,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;EACpB,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;EACtB,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;EACxB,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;EAC5B,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;EAC5B,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;EAC5B,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;EACtB,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;EAC1B,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;EAC9B,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC;EAClB,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;EACtB,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;;EAE1B,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;;CAE/D,CAAC,CAAC,CAAC;;;;;;;;;ACj1IJ;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,kCAAkC;AACjD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,IAAI;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,YAAY,OAAO;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,oBAAoB;AAC/B;AACA,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;AAMD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA,iBAAiB,sBAAsB;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA,oBAAoB;AACpB;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,YAAY,OAAO;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,YAAY;AACvB,WAAW,OAAO;AAClB,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;;AAEA,oBAAoB;AACpB;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL,GAAG;AACH;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA,cAAc;AACd;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,YAAY;AACvB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,MAAM;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,MAAM;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,WAAW;AACtB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd,mBAAmB;AACnB,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA,iBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc,QAAQ;AACtB,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4CAA4C,gBAAgB;;AAE5D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,gBAAgB;;AAEtF;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,YAAY;AACvB,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,qBAAqB,yDAAyD;;AAE9E;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,QAAQ;AACtB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B;AAC/B,2BAA2B;AAC3B,gCAAgC;;AAEhC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gDAAgD;;AAEhD;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,QAAQ;AACtB,aAAa,MAAM;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,uCAAuC;;AAEvC;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,aAAa,MAAM;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,cAAc;AAC5B;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;;AAEA;AACA;AACA,wBAAwB;AACxB,GAAG;;AAEH;;AAEA;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,8BAA8B;AAC9B,4BAA4B;AAC5B;;AAEA,qCAAqC;AACrC;;AAEA;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,WAAW;AACzB,cAAc,OAAO;AACrB,aAAa,WAAW;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,WAAW;AAC1B;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,WAAW;AAC1B;AACA,eAAe,cAAc;AAC7B;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,WAAW;AAC1B;AACA;AACA,cAAc,MAAM;AACpB;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mBAAmB;AACjC;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,WAAW;AAC1B;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,WAAW;AAC1B;AACA,eAAe,mBAAmB;AAClC;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,WAAW;AAC1B;AACA;AACA,cAAc,aAAa;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA,cAAc,mBAAmB;AACjC;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,WAAW;AAC1B;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,WAAW;AAC1B;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,WAAW;AAC1B;AACA;AACA,cAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,WAAW;AAC1B;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA,cAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,YAAY;AAC1B,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,IAAI;AACJ;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA;;AAEA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,kCAAkC;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,kCAAkC;;AAElC;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA,WAAW,WAAW;AACtB;;AAEA;AACA;AACA,WAAW,WAAW;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,4BAA4B;AACzC,aAAa,YAAY;AACzB,aAAa,OAAO;AACpB,cAAc,OAAO;AACrB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,cAAc;AACd,8BAA8B;;AAE9B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,2BAA2B;AAC3B,iDAAiD,uCAAuC,kDAAkD;AAC1I,KAAK;;AAEL;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA,GAAG;AACH;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS;AACvB;AACA,cAAc,OAAO;AACrB;AACA,cAAc,OAAO;AACrB;AACA;;;AAGA;AACA;AACA;;AAEe,qEAAM,EAAC;AACtB;;;;;;;;ACphFA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;;ACpBA;AAAoC;;;;;;;;;;AAUpC,IAAM,MAAM,GAMV,eAAW,CAAC,MAAM,EAAE;EAClB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACvB,CAAC;;AAED;CACC;CACA;CACA;CACA;CACA;AACD,qBAAI,kBAAC,KAAK,EAAE,KAAc,EAAE,GAAG,EAAE,CAAhB;iCAAA,GAAG,MAAM;AAAQ;EAChC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,UAAU,EAAE;IAC/B,QAAQ,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE;MAC/C,OAAO,EAAE,IAAI;MACb,MAAM,EAAE;QACN,YAAK;QACL,EAAE,EAA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ACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,eAAe,mBAAmB;AAClC,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;;AAEX;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA,iDAAiD,gCAAgC;AACjF,iDAAiD,gCAAgC;;AAEjF;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,OAAO;AACxB;;AAEA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B;;AAEA,KAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB,kBAAkB;AAClB;;AAEA,KAAK;AACL;AACA;AACA;;AAEA,qBAAqB,UAAU,WAAW;AAC1C;;AAEA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;;AAEA,0CAA0C,wBAAwB,oBAAoB;AACtF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;;AAEA,4CAA4C,2BAA2B;AACvE,4CAA4C;AAC5C,kEAAkE;;AAElE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;;AAEA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,wGAAwG;;AAExG;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB,iBAAiB,OAAO;AACxB,iBAAiB,OAAO;AACxB,kBAAkB;AAClB;;AAEA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA,4FAA4F,0EAA0E;AACtK;;AAEA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA,oDAAoD,iBAAiB;AACrE,oDAAoD,iBAAiB;;AAErE;AACA;;AAEA;;AAEA,0BAA0B,UAAU,WAAW;;AAE/C,4BAA4B;AAC5B,4BAA4B;;AAE5B;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB,kBAAkB;AAClB;;AAEA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,UAAU;AAC3B,iBAAiB,OAAO;AACxB,iBAAiB,OAAO;AACxB;;AAEA,KAAK;AACL;AACA;AACA;AACA,kDAAkD,eAAe;AACjE,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;AACA;AACA,+EAA+E;AAC/E;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA,sBAAsB;;AAEtB;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,UAAU;AAC3B,iBAAiB,OAAO;AACxB;;AAEA,KAAK;AACL;AACA;AACA;AACA,kEAAkE;AAClE;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,UAAU;AAC3B,iBAAiB,OAAO;AACxB;;AAEA,KAAK;AACL;AACA;AACA;AACA,qEAAqE;AACrE;AACA;;AAEA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","file":"scripts/main.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/wp-content/themes/dailysports/dist/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 10);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap fcf5652d4a1d57089aaa","module.exports = jQuery;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"jQuery\"\n// module id = 0\n// module chunks = 0 1","/**\n * Fizzy UI utils v2.0.7\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'desandro-matches-selector/matches-selector'\n ], function( matchesSelector ) {\n return factory( window, matchesSelector );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('desandro-matches-selector')\n );\n } else {\n // browser global\n window.fizzyUIUtils = factory(\n window,\n window.matchesSelector\n );\n }\n\n}( window, function factory( window, matchesSelector ) {\n\n'use strict';\n\nvar utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n return obj;\n }\n // return empty array if undefined or null. #6\n if ( obj === null || obj === undefined ) {\n return [];\n }\n\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n if ( isArrayLike ) {\n // convert nodeList to array\n return arraySlice.call( obj );\n }\n\n // array of single index\n return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n var index = ary.indexOf( obj );\n if ( index != -1 ) {\n ary.splice( index, 1 );\n }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n while ( elem.parentNode && elem != document.body ) {\n elem = elem.parentNode;\n if ( matchesSelector( elem, selector ) ) {\n return elem;\n }\n }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n if ( typeof elem == 'string' ) {\n return document.querySelector( elem );\n }\n return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n // make array of elems\n elems = utils.makeArray( elems );\n var ffElems = [];\n\n elems.forEach( function( elem ) {\n // check that elem is an actual element\n if ( !( elem instanceof HTMLElement ) ) {\n return;\n }\n // add elem if no selector\n if ( !selector ) {\n ffElems.push( elem );\n return;\n }\n // filter & find items if we have a selector\n // filter\n if ( matchesSelector( elem, selector ) ) {\n ffElems.push( elem );\n }\n // find children\n var childElems = elem.querySelectorAll( selector );\n // concat childElems to filterFound array\n for ( var i=0; i < childElems.length; i++ ) {\n ffElems.push( childElems[i] );\n }\n });\n\n return ffElems;\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n threshold = threshold || 100;\n // original method\n var method = _class.prototype[ methodName ];\n var timeoutName = methodName + 'Timeout';\n\n _class.prototype[ methodName ] = function() {\n var timeout = this[ timeoutName ];\n clearTimeout( timeout );\n\n var args = arguments;\n var _this = this;\n this[ timeoutName ] = setTimeout( function() {\n method.apply( _this, args );\n delete _this[ timeoutName ];\n }, threshold );\n };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( callback ) {\n var readyState = document.readyState;\n if ( readyState == 'complete' || readyState == 'interactive' ) {\n // do async to allow for other scripts to run. metafizzy/flickity#441\n setTimeout( callback );\n } else {\n document.addEventListener( 'DOMContentLoaded', callback );\n }\n};\n\n// ----- htmlInit ----- //\n\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\nutils.toDashed = function( str ) {\n return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n return $1 + '-' + $2;\n }).toLowerCase();\n};\n\nvar console = window.console;\n/**\n * allow user to initialize classes via [data-namespace] or .js-namespace class\n * htmlInit( Widget, 'widgetName' )\n * options are parsed from data-namespace-options\n */\nutils.htmlInit = function( WidgetClass, namespace ) {\n utils.docReady( function() {\n var dashedNamespace = utils.toDashed( namespace );\n var dataAttr = 'data-' + dashedNamespace;\n var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );\n var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );\n var elems = utils.makeArray( dataAttrElems )\n .concat( utils.makeArray( jsDashElems ) );\n var dataOptionsAttr = dataAttr + '-options';\n var jQuery = window.jQuery;\n\n elems.forEach( function( elem ) {\n var attr = elem.getAttribute( dataAttr ) ||\n elem.getAttribute( dataOptionsAttr );\n var options;\n try {\n options = attr && JSON.parse( attr );\n } catch ( error ) {\n // log error, do not initialize\n if ( console ) {\n console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +\n ': ' + error );\n }\n return;\n }\n // initialize\n var instance = new WidgetClass( elem, options );\n // make available via $().data('namespace')\n if ( jQuery ) {\n jQuery.data( elem, namespace, instance );\n }\n });\n\n });\n};\n\n// ----- ----- //\n\nreturn utils;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/fizzy-ui-utils/utils.js\n// module id = 1\n// module chunks = 0","// Flickity main\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size',\n 'fizzy-ui-utils/utils',\n './cell',\n './slide',\n './animate'\n ], function( EvEmitter, getSize, utils, Cell, Slide, animatePrototype ) {\n return factory( window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('get-size'),\n require('fizzy-ui-utils'),\n require('./cell'),\n require('./slide'),\n require('./animate')\n );\n } else {\n // browser global\n var _Flickity = window.Flickity;\n\n window.Flickity = factory(\n window,\n window.EvEmitter,\n window.getSize,\n window.fizzyUIUtils,\n _Flickity.Cell,\n _Flickity.Slide,\n _Flickity.animatePrototype\n );\n }\n\n}( window, function factory( window, EvEmitter, getSize,\n utils, Cell, Slide, animatePrototype ) {\n\n'use strict';\n\n// vars\nvar jQuery = window.jQuery;\nvar getComputedStyle = window.getComputedStyle;\nvar console = window.console;\n\nfunction moveElements( elems, toElem ) {\n elems = utils.makeArray( elems );\n while ( elems.length ) {\n toElem.appendChild( elems.shift() );\n }\n}\n\n// -------------------------- Flickity -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Flickity intances\nvar instances = {};\n\nfunction Flickity( element, options ) {\n var queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) {\n console.error( 'Bad element for Flickity: ' + ( queryElement || element ) );\n }\n return;\n }\n this.element = queryElement;\n // do not initialize twice on same element\n if ( this.element.flickityGUID ) {\n var instance = instances[ this.element.flickityGUID ];\n instance.option( options );\n return instance;\n }\n\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n // options\n this.options = utils.extend( {}, this.constructor.defaults );\n this.option( options );\n\n // kick things off\n this._create();\n}\n\nFlickity.defaults = {\n accessibility: true,\n // adaptiveHeight: false,\n cellAlign: 'center',\n // cellSelector: undefined,\n // contain: false,\n freeScrollFriction: 0.075, // friction when free-scrolling\n friction: 0.28, // friction when selecting\n namespaceJQueryEvents: true,\n // initialIndex: 0,\n percentPosition: true,\n resize: true,\n selectedAttraction: 0.025,\n setGallerySize: true\n // watchCSS: false,\n // wrapAround: false\n};\n\n// hash of methods triggered on _create()\nFlickity.createMethods = [];\n\nvar proto = Flickity.prototype;\n// inherit EventEmitter\nutils.extend( proto, EvEmitter.prototype );\n\nproto._create = function() {\n // add id for Flickity.data\n var id = this.guid = ++GUID;\n this.element.flickityGUID = id; // expando\n instances[ id ] = this; // associate via id\n // initial properties\n this.selectedIndex = 0;\n // how many frames slider has been in same position\n this.restingFrames = 0;\n // initial physics properties\n this.x = 0;\n this.velocity = 0;\n this.originSide = this.options.rightToLeft ? 'right' : 'left';\n // create viewport & slider\n this.viewport = document.createElement('div');\n this.viewport.className = 'flickity-viewport';\n this._createSlider();\n\n if ( this.options.resize || this.options.watchCSS ) {\n window.addEventListener( 'resize', this );\n }\n\n // add listeners from on option\n for ( var eventName in this.options.on ) {\n var listener = this.options.on[ eventName ];\n this.on( eventName, listener );\n }\n\n Flickity.createMethods.forEach( function( method ) {\n this[ method ]();\n }, this );\n\n if ( this.options.watchCSS ) {\n this.watchCSS();\n } else {\n this.activate();\n }\n\n};\n\n/**\n * set options\n * @param {Object} opts\n */\nproto.option = function( opts ) {\n utils.extend( this.options, opts );\n};\n\nproto.activate = function() {\n if ( this.isActive ) {\n return;\n }\n this.isActive = true;\n this.element.classList.add('flickity-enabled');\n if ( this.options.rightToLeft ) {\n this.element.classList.add('flickity-rtl');\n }\n\n this.getSize();\n // move initial cell elements so they can be loaded as cells\n var cellElems = this._filterFindCellElements( this.element.children );\n moveElements( cellElems, this.slider );\n this.viewport.appendChild( this.slider );\n this.element.appendChild( this.viewport );\n // get cells from children\n this.reloadCells();\n\n if ( this.options.accessibility ) {\n // allow element to focusable\n this.element.tabIndex = 0;\n // listen for key presses\n this.element.addEventListener( 'keydown', this );\n }\n\n this.emitEvent('activate');\n this.selectInitialIndex();\n // flag for initial activation, for using initialIndex\n this.isInitActivated = true;\n // ready event. #493\n this.dispatchEvent('ready');\n};\n\n// slider positions the cells\nproto._createSlider = function() {\n // slider element does all the positioning\n var slider = document.createElement('div');\n slider.className = 'flickity-slider';\n slider.style[ this.originSide ] = 0;\n this.slider = slider;\n};\n\nproto._filterFindCellElements = function( elems ) {\n return utils.filterFindElements( elems, this.options.cellSelector );\n};\n\n// goes through all children\nproto.reloadCells = function() {\n // collection of item elements\n this.cells = this._makeCells( this.slider.children );\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n};\n\n/**\n * turn elements into Flickity.Cells\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - collection of new Flickity Cells\n */\nproto._makeCells = function( elems ) {\n var cellElems = this._filterFindCellElements( elems );\n\n // create new Flickity for collection\n var cells = cellElems.map( function( cellElem ) {\n return new Cell( cellElem, this );\n }, this );\n\n return cells;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.getLastSlide = function() {\n return this.slides[ this.slides.length - 1 ];\n};\n\n// positions all cells\nproto.positionCells = function() {\n // size all cells\n this._sizeCells( this.cells );\n // position all cells\n this._positionCells( 0 );\n};\n\n/**\n * position certain cells\n * @param {Integer} index - which cell to start with\n */\nproto._positionCells = function( index ) {\n index = index || 0;\n // also measure maxCellHeight\n // start 0 if positioning all cells\n this.maxCellHeight = index ? this.maxCellHeight || 0 : 0;\n var cellX = 0;\n // get cellX\n if ( index > 0 ) {\n var startCell = this.cells[ index - 1 ];\n cellX = startCell.x + startCell.size.outerWidth;\n }\n var len = this.cells.length;\n for ( var i=index; i < len; i++ ) {\n var cell = this.cells[i];\n cell.setPosition( cellX );\n cellX += cell.size.outerWidth;\n this.maxCellHeight = Math.max( cell.size.outerHeight, this.maxCellHeight );\n }\n // keep track of cellX for wrap-around\n this.slideableWidth = cellX;\n // slides\n this.updateSlides();\n // contain slides target\n this._containSlides();\n // update slidesWidth\n this.slidesWidth = len ? this.getLastSlide().target - this.slides[0].target : 0;\n};\n\n/**\n * cell.getSize() on multiple cells\n * @param {Array} cells\n */\nproto._sizeCells = function( cells ) {\n cells.forEach( function( cell ) {\n cell.getSize();\n });\n};\n\n// -------------------------- -------------------------- //\n\nproto.updateSlides = function() {\n this.slides = [];\n if ( !this.cells.length ) {\n return;\n }\n\n var slide = new Slide( this );\n this.slides.push( slide );\n var isOriginLeft = this.originSide == 'left';\n var nextMargin = isOriginLeft ? 'marginRight' : 'marginLeft';\n\n var canCellFit = this._getCanCellFit();\n\n this.cells.forEach( function( cell, i ) {\n // just add cell if first cell in slide\n if ( !slide.cells.length ) {\n slide.addCell( cell );\n return;\n }\n\n var slideWidth = ( slide.outerWidth - slide.firstMargin ) +\n ( cell.size.outerWidth - cell.size[ nextMargin ] );\n\n if ( canCellFit.call( this, i, slideWidth ) ) {\n slide.addCell( cell );\n } else {\n // doesn't fit, new slide\n slide.updateTarget();\n\n slide = new Slide( this );\n this.slides.push( slide );\n slide.addCell( cell );\n }\n }, this );\n // last slide\n slide.updateTarget();\n // update .selectedSlide\n this.updateSelectedSlide();\n};\n\nproto._getCanCellFit = function() {\n var groupCells = this.options.groupCells;\n if ( !groupCells ) {\n return function() {\n return false;\n };\n } else if ( typeof groupCells == 'number' ) {\n // group by number. 3 -> [0,1,2], [3,4,5], ...\n var number = parseInt( groupCells, 10 );\n return function( i ) {\n return ( i % number ) !== 0;\n };\n }\n // default, group by width of slide\n // parse '75%\n var percentMatch = typeof groupCells == 'string' &&\n groupCells.match(/^(\\d+)%$/);\n var percent = percentMatch ? parseInt( percentMatch[1], 10 ) / 100 : 1;\n return function( i, slideWidth ) {\n return slideWidth <= ( this.size.innerWidth + 1 ) * percent;\n };\n};\n\n// alias _init for jQuery plugin .flickity()\nproto._init =\nproto.reposition = function() {\n this.positionCells();\n this.positionSliderAtSelected();\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n this.setCellAlign();\n this.cursorPosition = this.size.innerWidth * this.cellAlign;\n};\n\nvar cellAlignShorthands = {\n // cell align, then based on origin side\n center: {\n left: 0.5,\n right: 0.5\n },\n left: {\n left: 0,\n right: 1\n },\n right: {\n right: 0,\n left: 1\n }\n};\n\nproto.setCellAlign = function() {\n var shorthand = cellAlignShorthands[ this.options.cellAlign ];\n this.cellAlign = shorthand ? shorthand[ this.originSide ] : this.options.cellAlign;\n};\n\nproto.setGallerySize = function() {\n if ( this.options.setGallerySize ) {\n var height = this.options.adaptiveHeight && this.selectedSlide ?\n this.selectedSlide.height : this.maxCellHeight;\n this.viewport.style.height = height + 'px';\n }\n};\n\nproto._getWrapShiftCells = function() {\n // only for wrap-around\n if ( !this.options.wrapAround ) {\n return;\n }\n // unshift previous cells\n this._unshiftCells( this.beforeShiftCells );\n this._unshiftCells( this.afterShiftCells );\n // get before cells\n // initial gap\n var gapX = this.cursorPosition;\n var cellIndex = this.cells.length - 1;\n this.beforeShiftCells = this._getGapCells( gapX, cellIndex, -1 );\n // get after cells\n // ending gap between last cell and end of gallery viewport\n gapX = this.size.innerWidth - this.cursorPosition;\n // start cloning at first cell, working forwards\n this.afterShiftCells = this._getGapCells( gapX, 0, 1 );\n};\n\nproto._getGapCells = function( gapX, cellIndex, increment ) {\n // keep adding cells until the cover the initial gap\n var cells = [];\n while ( gapX > 0 ) {\n var cell = this.cells[ cellIndex ];\n if ( !cell ) {\n break;\n }\n cells.push( cell );\n cellIndex += increment;\n gapX -= cell.size.outerWidth;\n }\n return cells;\n};\n\n// ----- contain ----- //\n\n// contain cell targets so no excess sliding\nproto._containSlides = function() {\n if ( !this.options.contain || this.options.wrapAround || !this.cells.length ) {\n return;\n }\n var isRightToLeft = this.options.rightToLeft;\n var beginMargin = isRightToLeft ? 'marginRight' : 'marginLeft';\n var endMargin = isRightToLeft ? 'marginLeft' : 'marginRight';\n var contentWidth = this.slideableWidth - this.getLastCell().size[ endMargin ];\n // content is less than gallery size\n var isContentSmaller = contentWidth < this.size.innerWidth;\n // bounds\n var beginBound = this.cursorPosition + this.cells[0].size[ beginMargin ];\n var endBound = contentWidth - this.size.innerWidth * ( 1 - this.cellAlign );\n // contain each cell target\n this.slides.forEach( function( slide ) {\n if ( isContentSmaller ) {\n // all cells fit inside gallery\n slide.target = contentWidth * this.cellAlign;\n } else {\n // contain to bounds\n slide.target = Math.max( slide.target, beginBound );\n slide.target = Math.min( slide.target, endBound );\n }\n }, this );\n};\n\n// ----- ----- //\n\n/**\n * emits events via eventEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n var emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n\n if ( jQuery && this.$element ) {\n // default trigger with type if no event\n type += this.options.namespaceJQueryEvents ? '.flickity' : '';\n var $event = type;\n if ( event ) {\n // create jQuery event\n var jQEvent = jQuery.Event( event );\n jQEvent.type = type;\n $event = jQEvent;\n }\n this.$element.trigger( $event, args );\n }\n};\n\n// -------------------------- select -------------------------- //\n\n/**\n * @param {Integer} index - index of the slide\n * @param {Boolean} isWrap - will wrap-around to last/first if at the end\n * @param {Boolean} isInstant - will immediately set position at selected cell\n */\nproto.select = function( index, isWrap, isInstant ) {\n if ( !this.isActive ) {\n return;\n }\n index = parseInt( index, 10 );\n this._wrapSelect( index );\n\n if ( this.options.wrapAround || isWrap ) {\n index = utils.modulo( index, this.slides.length );\n }\n // bail if invalid index\n if ( !this.slides[ index ] ) {\n return;\n }\n var prevIndex = this.selectedIndex;\n this.selectedIndex = index;\n this.updateSelectedSlide();\n if ( isInstant ) {\n this.positionSliderAtSelected();\n } else {\n this.startAnimation();\n }\n if ( this.options.adaptiveHeight ) {\n this.setGallerySize();\n }\n // events\n this.dispatchEvent( 'select', null, [ index ] );\n // change event if new index\n if ( index != prevIndex ) {\n this.dispatchEvent( 'change', null, [ index ] );\n }\n // old v1 event name, remove in v3\n this.dispatchEvent('cellSelect');\n};\n\n// wraps position for wrapAround, to move to closest slide. #113\nproto._wrapSelect = function( index ) {\n var len = this.slides.length;\n var isWrapping = this.options.wrapAround && len > 1;\n if ( !isWrapping ) {\n return index;\n }\n var wrapIndex = utils.modulo( index, len );\n // go to shortest\n var delta = Math.abs( wrapIndex - this.selectedIndex );\n var backWrapDelta = Math.abs( ( wrapIndex + len ) - this.selectedIndex );\n var forewardWrapDelta = Math.abs( ( wrapIndex - len ) - this.selectedIndex );\n if ( !this.isDragSelect && backWrapDelta < delta ) {\n index += len;\n } else if ( !this.isDragSelect && forewardWrapDelta < delta ) {\n index -= len;\n }\n // wrap position so slider is within normal area\n if ( index < 0 ) {\n this.x -= this.slideableWidth;\n } else if ( index >= len ) {\n this.x += this.slideableWidth;\n }\n};\n\nproto.previous = function( isWrap, isInstant ) {\n this.select( this.selectedIndex - 1, isWrap, isInstant );\n};\n\nproto.next = function( isWrap, isInstant ) {\n this.select( this.selectedIndex + 1, isWrap, isInstant );\n};\n\nproto.updateSelectedSlide = function() {\n var slide = this.slides[ this.selectedIndex ];\n // selectedIndex could be outside of slides, if triggered before resize()\n if ( !slide ) {\n return;\n }\n // unselect previous selected slide\n this.unselectSelectedSlide();\n // update new selected slide\n this.selectedSlide = slide;\n slide.select();\n this.selectedCells = slide.cells;\n this.selectedElements = slide.getCellElements();\n // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\n // Remove in v3?\n this.selectedCell = slide.cells[0];\n this.selectedElement = this.selectedElements[0];\n};\n\nproto.unselectSelectedSlide = function() {\n if ( this.selectedSlide ) {\n this.selectedSlide.unselect();\n }\n};\n\nproto.selectInitialIndex = function() {\n var initialIndex = this.options.initialIndex;\n // already activated, select previous selectedIndex\n if ( this.isInitActivated ) {\n this.select( this.selectedIndex, false, true );\n return;\n }\n // select with selector string\n if ( initialIndex && typeof initialIndex == 'string' ) {\n var cell = this.queryCell( initialIndex );\n if ( cell ) {\n this.selectCell( initialIndex, false, true );\n return;\n }\n }\n\n var index = 0;\n // select with number\n if ( initialIndex && this.slides[ initialIndex ] ) {\n index = initialIndex;\n }\n // select instantly\n this.select( index, false, true );\n};\n\n/**\n * select slide from number or cell element\n * @param {Element or Number} elem\n */\nproto.selectCell = function( value, isWrap, isInstant ) {\n // get cell\n var cell = this.queryCell( value );\n if ( !cell ) {\n return;\n }\n\n var index = this.getCellSlideIndex( cell );\n this.select( index, isWrap, isInstant );\n};\n\nproto.getCellSlideIndex = function( cell ) {\n // get index of slides that has cell\n for ( var i=0; i < this.slides.length; i++ ) {\n var slide = this.slides[i];\n var index = slide.cells.indexOf( cell );\n if ( index != -1 ) {\n return i;\n }\n }\n};\n\n// -------------------------- get cells -------------------------- //\n\n/**\n * get Flickity.Cell, given an Element\n * @param {Element} elem\n * @returns {Flickity.Cell} item\n */\nproto.getCell = function( elem ) {\n // loop through cells to get the one that matches\n for ( var i=0; i < this.cells.length; i++ ) {\n var cell = this.cells[i];\n if ( cell.element == elem ) {\n return cell;\n }\n }\n};\n\n/**\n * get collection of Flickity.Cells, given Elements\n * @param {Element, Array, NodeList} elems\n * @returns {Array} cells - Flickity.Cells\n */\nproto.getCells = function( elems ) {\n elems = utils.makeArray( elems );\n var cells = [];\n elems.forEach( function( elem ) {\n var cell = this.getCell( elem );\n if ( cell ) {\n cells.push( cell );\n }\n }, this );\n return cells;\n};\n\n/**\n * get cell elements\n * @returns {Array} cellElems\n */\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n });\n};\n\n/**\n * get parent cell from an element\n * @param {Element} elem\n * @returns {Flickit.Cell} cell\n */\nproto.getParentCell = function( elem ) {\n // first check if elem is cell\n var cell = this.getCell( elem );\n if ( cell ) {\n return cell;\n }\n // try to get parent cell elem\n elem = utils.getParent( elem, '.flickity-slider > *' );\n return this.getCell( elem );\n};\n\n/**\n * get cells adjacent to a slide\n * @param {Integer} adjCount - number of adjacent slides\n * @param {Integer} index - index of slide to start\n * @returns {Array} cells - array of Flickity.Cells\n */\nproto.getAdjacentCellElements = function( adjCount, index ) {\n if ( !adjCount ) {\n return this.selectedSlide.getCellElements();\n }\n index = index === undefined ? this.selectedIndex : index;\n\n var len = this.slides.length;\n if ( 1 + ( adjCount * 2 ) >= len ) {\n return this.getCellElements();\n }\n\n var cellElems = [];\n for ( var i = index - adjCount; i <= index + adjCount ; i++ ) {\n var slideIndex = this.options.wrapAround ? utils.modulo( i, len ) : i;\n var slide = this.slides[ slideIndex ];\n if ( slide ) {\n cellElems = cellElems.concat( slide.getCellElements() );\n }\n }\n return cellElems;\n};\n\n/**\n * select slide from number or cell element\n * @param {Element, Selector String, or Number} selector\n */\nproto.queryCell = function( selector ) {\n if ( typeof selector == 'number' ) {\n // use number as index\n return this.cells[ selector ];\n }\n if ( typeof selector == 'string' ) {\n // do not select invalid selectors from hash: #123, #/. #791\n if ( selector.match(/^[#\\.]?[\\d\\/]/) ) {\n return;\n }\n // use string as selector, get element\n selector = this.element.querySelector( selector );\n }\n // get cell from element\n return this.getCell( selector );\n};\n\n// -------------------------- events -------------------------- //\n\nproto.uiChange = function() {\n this.emitEvent('uiChange');\n};\n\n// keep focus on element when child UI elements are clicked\nproto.childUIPointerDown = function( event ) {\n // HACK iOS does not allow touch events to bubble up?!\n if ( event.type != 'touchstart' ) {\n event.preventDefault();\n }\n this.focus();\n};\n\n// ----- resize ----- //\n\nproto.onresize = function() {\n this.watchCSS();\n this.resize();\n};\n\nutils.debounceMethod( Flickity, 'onresize', 150 );\n\nproto.resize = function() {\n if ( !this.isActive ) {\n return;\n }\n this.getSize();\n // wrap values\n if ( this.options.wrapAround ) {\n this.x = utils.modulo( this.x, this.slideableWidth );\n }\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n this.emitEvent('resize');\n // update selected index for group slides, instant\n // TODO: position can be lost between groups of various numbers\n var selectedElement = this.selectedElements && this.selectedElements[0];\n this.selectCell( selectedElement, false, true );\n};\n\n// watches the :after property, activates/deactivates\nproto.watchCSS = function() {\n var watchOption = this.options.watchCSS;\n if ( !watchOption ) {\n return;\n }\n\n var afterContent = getComputedStyle( this.element, ':after' ).content;\n // activate if :after { content: 'flickity' }\n if ( afterContent.indexOf('flickity') != -1 ) {\n this.activate();\n } else {\n this.deactivate();\n }\n};\n\n// ----- keydown ----- //\n\n// go previous/next if left/right keys pressed\nproto.onkeydown = function( event ) {\n // only work if element is in focus\n var isNotFocused = document.activeElement && document.activeElement != this.element;\n if ( !this.options.accessibility ||isNotFocused ) {\n return;\n }\n\n var handler = Flickity.keyboardHandlers[ event.keyCode ];\n if ( handler ) {\n handler.call( this );\n }\n};\n\nFlickity.keyboardHandlers = {\n // left arrow\n 37: function() {\n var leftMethod = this.options.rightToLeft ? 'next' : 'previous';\n this.uiChange();\n this[ leftMethod ]();\n },\n // right arrow\n 39: function() {\n var rightMethod = this.options.rightToLeft ? 'previous' : 'next';\n this.uiChange();\n this[ rightMethod ]();\n },\n};\n\n// ----- focus ----- //\n\nproto.focus = function() {\n // TODO remove scrollTo once focus options gets more support\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus#Browser_compatibility\n var prevScrollY = window.pageYOffset;\n this.element.focus({ preventScroll: true });\n // hack to fix scroll jump after focus, #76\n if ( window.pageYOffset != prevScrollY ) {\n window.scrollTo( window.pageXOffset, prevScrollY );\n }\n};\n\n// -------------------------- destroy -------------------------- //\n\n// deactivate all Flickity functionality, but keep stuff available\nproto.deactivate = function() {\n if ( !this.isActive ) {\n return;\n }\n this.element.classList.remove('flickity-enabled');\n this.element.classList.remove('flickity-rtl');\n this.unselectSelectedSlide();\n // destroy cells\n this.cells.forEach( function( cell ) {\n cell.destroy();\n });\n this.element.removeChild( this.viewport );\n // move child elements back into element\n moveElements( this.slider.children, this.element );\n if ( this.options.accessibility ) {\n this.element.removeAttribute('tabIndex');\n this.element.removeEventListener( 'keydown', this );\n }\n // set flags\n this.isActive = false;\n this.emitEvent('deactivate');\n};\n\nproto.destroy = function() {\n this.deactivate();\n window.removeEventListener( 'resize', this );\n this.allOff();\n this.emitEvent('destroy');\n if ( jQuery && this.$element ) {\n jQuery.removeData( this.element, 'flickity' );\n }\n delete this.element.flickityGUID;\n delete instances[ this.guid ];\n};\n\n// -------------------------- prototype -------------------------- //\n\nutils.extend( proto, animatePrototype );\n\n// -------------------------- extras -------------------------- //\n\n/**\n * get Flickity instance from element\n * @param {Element} elem\n * @returns {Flickity}\n */\nFlickity.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n var id = elem && elem.flickityGUID;\n return id && instances[ id ];\n};\n\nutils.htmlInit( Flickity, 'flickity' );\n\nif ( jQuery && jQuery.bridget ) {\n jQuery.bridget( 'flickity', Flickity );\n}\n\n// set internal jQuery, for Webpack + jQuery v3, #478\nFlickity.setJQuery = function( jq ) {\n jQuery = jq;\n};\n\nFlickity.Cell = Cell;\nFlickity.Slide = Slide;\n\nreturn Flickity;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/flickity.js\n// module id = 2\n// module chunks = 0","// Create Element.remove() function if not exist // BECAUSE IE 11\r\nif (!('remove' in Element.prototype)) {\r\n Element.prototype.remove = function() {\r\n if (this.parentNode) {\r\n this.parentNode.removeChild(this);\r\n }\r\n };\r\n}\r\n\r\n// var stokpress = {};\r\n\r\nexport const stokpress = {\r\n init() {\r\n return true\r\n },\r\n\r\n strToBool(str) {\r\n console.log(typeof str);\r\n if(typeof str == 'boolean') {\r\n return str;\r\n }\r\n switch(str.toLowerCase().trim()){\r\n case 'true': case 'yes': case '1': return true;\r\n case 'false': case 'no': case '0': case null: return false;\r\n default: return Boolean(str);\r\n }\r\n },\r\n\r\n findAncestor(el, cls) {\r\n while ((el = el.parentElement) && !el.classList.contains(cls));\r\n return el;\r\n },\r\n\r\n isMobile() {\r\n let result = false;\r\n ( function ( a ) {\r\n result = /Android|webOS|iPhone|iPad|BlackBerry|Windows Phone|Opera Mini|IEMobile|Mobile/i.test( a );\r\n } )( navigator.userAgent || navigator.vendor || window.opera );\r\n\r\n return result;\r\n },\r\n\r\n isInView(el, view) {\r\n var rect = el.getBoundingClientRect();\r\n var html = document.documentElement;\r\n\r\n if(view == 'completely') {\r\n // to check if completely visible\r\n return (\r\n rect.top >= 0 &&\r\n rect.bottom <= (window.innerHeight || html.clientHeight)\r\n );\r\n } else if(view == 'partially') {\r\n // to check if partially visible\r\n return (\r\n rect.bottom >= 0 &&\r\n rect.top < (window.innerHeight || html.clientHeight)\r\n );\r\n } else {\r\n // if partially visible or above current fold,\r\n return (\r\n rect.top < (window.innerHeight || html.clientHeight)\r\n );\r\n }\r\n },\r\n\r\n getScript(source, callback) {\r\n var script = document.createElement( 'script' );\r\n var prior = document.getElementsByTagName( 'script' )[0];\r\n script.async = 1;\r\n\r\n script.onload = script.onreadystatechange = function ( _, isAbort ) {\r\n if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {\r\n script.onload = script.onreadystatechange = null;\r\n script = undefined;\r\n\r\n if ( !isAbort ) {\r\n if ( callback ) {\r\n callback();\r\n }\r\n }\r\n }\r\n };\r\n\r\n script.src = source;\r\n prior.parentNode.insertBefore( script, prior );\r\n },\r\n\r\n setCookie(cname, cvalue, exdays) {\r\n var d = new Date();\r\n d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));\r\n var expires = 'expires=' + d.toUTCString();\r\n document.cookie = cname + '=' + cvalue + ';' + expires + ';path=/';\r\n },\r\n\r\n getCookie(cname) {\r\n var name = cname + '=';\r\n var decodedCookie = decodeURIComponent(document.cookie);\r\n var ca = decodedCookie.split(';');\r\n for(var i = 0; i <ca.length; i++) {\r\n var c = ca[i];\r\n while (c.charAt(0) == ' ') {\r\n c = c.substring(1);\r\n }\r\n if (c.indexOf(name) == 0) {\r\n return c.substring(name.length, c.length);\r\n }\r\n }\r\n return '';\r\n },\r\n\r\n debounce(func, wait, immediate) {\r\n var timeout;\r\n\r\n return function() {\r\n var context = this, args = arguments;\r\n var later = function() {\r\n timeout = null;\r\n if (!immediate) func.apply(context, args);\r\n };\r\n var callNow = immediate && !timeout;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait);\r\n if (callNow) func.apply(context, args);\r\n };\r\n },\r\n}\r\n\r\nexport const stokpressViewPort = {\r\n init() {\r\n return true\r\n },\r\n\r\n documentWidth() {\r\n let e = window, a = 'inner';\r\n\r\n if( !( 'innerWidth' in window ) ) {\r\n a = 'client';\r\n e = document.documentElement || document.body;\r\n }\r\n\r\n return { width : e[ a+'Width' ] , height : e[ a+'Height' ] };\r\n },\r\n}\r\n\r\n// stokpress.cartItems;\r\n\r\n// stokpress.cartHeight = function() {\r\n// var e = window, a = 'inner';\r\n\r\n// if( !( 'innerHeight' in window ) ) {\r\n// a = 'client';\r\n// e = document.documentElement || document.body;\r\n// }\r\n\r\n// (function () {\r\n// if ( typeof NodeList.prototype.forEach === 'function' ) return false;\r\n// NodeList.prototype.forEach = Array.prototype.forEach;\r\n// })();\r\n\r\n// stokpress.cartItems.forEach(function(element) {\r\n// element.style.setProperty('--cartheight', e[ a+'Height' ]+'px');\r\n// });\r\n// }\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/util/helper.js","/**\n * EvEmitter v1.1.0\n * Lil' event emitter\n * MIT License\n */\n\n/* jshint unused: true, undef: true, strict: true */\n\n( function( global, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, window */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\n\"use strict\";\n\nfunction EvEmitter() {}\n\nvar proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // set events hash\n var events = this._events = this._events || {};\n // set listeners array\n var listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( listeners.indexOf( listener ) == -1 ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n var onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n var index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice(0);\n args = args || [];\n // once stuff\n var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( var i=0; i < listeners.length; i++ ) {\n var listener = listeners[i]\n var isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n};\n\nreturn EvEmitter;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/ev-emitter/ev-emitter.js\n// module id = 4\n// module chunks = 0","/*!\n * Unipointer v2.3.0\n * base class for doing one thing with pointer event\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*global define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter'\n ], function( EvEmitter ) {\n return factory( window, EvEmitter );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter')\n );\n } else {\n // browser global\n window.Unipointer = factory(\n window,\n window.EvEmitter\n );\n }\n\n}( window, function factory( window, EvEmitter ) {\n\n'use strict';\n\nfunction noop() {}\n\nfunction Unipointer() {}\n\n// inherit EvEmitter\nvar proto = Unipointer.prototype = Object.create( EvEmitter.prototype );\n\nproto.bindStartEvent = function( elem ) {\n this._bindStartEvent( elem, true );\n};\n\nproto.unbindStartEvent = function( elem ) {\n this._bindStartEvent( elem, false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd - remove if falsey\n */\nproto._bindStartEvent = function( elem, isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n\n // default to mouse events\n var startEvent = 'mousedown';\n if ( window.PointerEvent ) {\n // Pointer Events\n startEvent = 'pointerdown';\n } else if ( 'ontouchstart' in window ) {\n // Touch Events. iOS Safari\n startEvent = 'touchstart';\n }\n elem[ bindMethod ]( startEvent, this );\n};\n\n// trigger handler methods for events\nproto.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// returns the touch that we're keeping track of\nproto.getTouch = function( touches ) {\n for ( var i=0; i < touches.length; i++ ) {\n var touch = touches[i];\n if ( touch.identifier == this.pointerIdentifier ) {\n return touch;\n }\n }\n};\n\n// ----- start event ----- //\n\nproto.onmousedown = function( event ) {\n // dismiss clicks from right or middle buttons\n var button = event.button;\n if ( button && ( button !== 0 && button !== 1 ) ) {\n return;\n }\n this._pointerDown( event, event );\n};\n\nproto.ontouchstart = function( event ) {\n this._pointerDown( event, event.changedTouches[0] );\n};\n\nproto.onpointerdown = function( event ) {\n this._pointerDown( event, event );\n};\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto._pointerDown = function( event, pointer ) {\n // dismiss right click and other pointers\n // button = 0 is okay, 1-4 not\n if ( event.button || this.isPointerDown ) {\n return;\n }\n\n this.isPointerDown = true;\n // save pointer identifier to match up touch events\n this.pointerIdentifier = pointer.pointerId !== undefined ?\n // pointerId for pointer events, touch.indentifier for touch events\n pointer.pointerId : pointer.identifier;\n\n this.pointerDown( event, pointer );\n};\n\nproto.pointerDown = function( event, pointer ) {\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// hash of events to be bound after start event\nvar postStartEvents = {\n mousedown: [ 'mousemove', 'mouseup' ],\n touchstart: [ 'touchmove', 'touchend', 'touchcancel' ],\n pointerdown: [ 'pointermove', 'pointerup', 'pointercancel' ],\n};\n\nproto._bindPostStartEvents = function( event ) {\n if ( !event ) {\n return;\n }\n // get proper events to match start event\n var events = postStartEvents[ event.type ];\n // bind events to node\n events.forEach( function( eventName ) {\n window.addEventListener( eventName, this );\n }, this );\n // save these arguments\n this._boundPointerEvents = events;\n};\n\nproto._unbindPostStartEvents = function() {\n // check for _boundEvents, in case dragEnd triggered twice (old IE8 bug)\n if ( !this._boundPointerEvents ) {\n return;\n }\n this._boundPointerEvents.forEach( function( eventName ) {\n window.removeEventListener( eventName, this );\n }, this );\n\n delete this._boundPointerEvents;\n};\n\n// ----- move event ----- //\n\nproto.onmousemove = function( event ) {\n this._pointerMove( event, event );\n};\n\nproto.onpointermove = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerMove( event, event );\n }\n};\n\nproto.ontouchmove = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerMove( event, touch );\n }\n};\n\n/**\n * pointer move\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerMove = function( event, pointer ) {\n this.pointerMove( event, pointer );\n};\n\n// public\nproto.pointerMove = function( event, pointer ) {\n this.emitEvent( 'pointerMove', [ event, pointer ] );\n};\n\n// ----- end event ----- //\n\n\nproto.onmouseup = function( event ) {\n this._pointerUp( event, event );\n};\n\nproto.onpointerup = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerUp( event, event );\n }\n};\n\nproto.ontouchend = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerUp( event, touch );\n }\n};\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerUp = function( event, pointer ) {\n this._pointerDone();\n this.pointerUp( event, pointer );\n};\n\n// public\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n};\n\n// ----- pointer done ----- //\n\n// triggered on pointer up & pointer cancel\nproto._pointerDone = function() {\n this._pointerReset();\n this._unbindPostStartEvents();\n this.pointerDone();\n};\n\nproto._pointerReset = function() {\n // reset properties\n this.isPointerDown = false;\n delete this.pointerIdentifier;\n};\n\nproto.pointerDone = noop;\n\n// ----- pointer cancel ----- //\n\nproto.onpointercancel = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerCancel( event, event );\n }\n};\n\nproto.ontouchcancel = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerCancel( event, touch );\n }\n};\n\n/**\n * pointer cancel\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerCancel = function( event, pointer ) {\n this._pointerDone();\n this.pointerCancel( event, pointer );\n};\n\n// public\nproto.pointerCancel = function( event, pointer ) {\n this.emitEvent( 'pointerCancel', [ event, pointer ] );\n};\n\n// ----- ----- //\n\n// utility function for getting x/y coords from event\nUnipointer.getPointerPoint = function( pointer ) {\n return {\n x: pointer.pageX,\n y: pointer.pageY\n };\n};\n\n// ----- ----- //\n\nreturn Unipointer;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/unipointer/unipointer.js\n// module id = 5\n// module chunks = 0","var Alert = {};\r\n\r\n(function ( $ ) {\r\n var target = $( '#js-alert' ),\r\n image = target.find( '#js-alert-image' ),\r\n title = target.find( '#js-alert-title' ),\r\n text = target.find( '#js-alert-text' ),\r\n button = target.find( '#js-alert-button' ),\r\n messageContainer = target.find( '#js-alert-message-container' );\r\n\r\n Alert.show = function ( type, header, message ) {\r\n if ( target.length === 0 ) {\r\n return;\r\n }\r\n\r\n var buttonClass = button.data( 'classDefault' ),\r\n imageSource = '',\r\n messageContainerClass = '';\r\n\r\n switch ( type ) {\r\n case 'success':\r\n buttonClass = button.data( 'classSpecial' );\r\n imageSource = image.data( 'iconSuccess' );\r\n messageContainerClass = messageContainer.data( 'classSuccess' );\r\n break;\r\n case 'warning':\r\n imageSource = image.data( 'iconWarning' );\r\n messageContainerClass = messageContainer.data( 'classWarning' );\r\n break;\r\n case 'danger':\r\n imageSource = image.data( 'iconDanger' );\r\n messageContainerClass = messageContainer.data( 'classDanger' );\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n image.attr( 'src', imageSource );\r\n\r\n title.html( header );\r\n title.attr( 'class', title.data('class-'+ type) );\r\n\r\n text.html( message );\r\n text.attr( 'class', text.data('class-'+ type) );\r\n\r\n button.attr( 'class', buttonClass );\r\n\r\n messageContainer.attr( 'class', 'modal-body p-0 ' + messageContainerClass );\r\n\r\n target.modal( 'show' );\r\n };\r\n\r\n $( function () {\r\n if ( target.length === 0 ) {\r\n return;\r\n }\r\n\r\n button.click( function () {\r\n target.modal( 'hide' );\r\n } );\r\n } )\r\n\r\n})( jQuery );\r\n\r\nwindow.Alert = Alert;\r\n\r\nmodule.exports = Alert;\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/alert.js","/*!\n * getSize v2.0.3\n * measure size of elements\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n/* globals console: false */\n\n( function( window, factory ) {\n /* jshint strict: false */ /* globals define, module */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.getSize = factory();\n }\n\n})( window, function factory() {\n'use strict';\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n var num = parseFloat( value );\n // not a percent like '100%', and a number\n var isValid = value.indexOf('%') == -1 && !isNaN( num );\n return isValid && num;\n}\n\nfunction noop() {}\n\nvar logError = typeof console == 'undefined' ? noop :\n function( message ) {\n console.error( message );\n };\n\n// -------------------------- measurements -------------------------- //\n\nvar measurements = [\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'paddingBottom',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'marginBottom',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderTopWidth',\n 'borderBottomWidth'\n];\n\nvar measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n var size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0\n };\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n size[ measurement ] = 0;\n }\n return size;\n}\n\n// -------------------------- getStyle -------------------------- //\n\n/**\n * getStyle, get style of element, check for Firefox bug\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getStyle( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n logError( 'Style returned ' + style +\n '. Are you running this code in a hidden iframe on Firefox? ' +\n 'See https://bit.ly/getsizebug1' );\n }\n return style;\n}\n\n// -------------------------- setup -------------------------- //\n\nvar isSetup = false;\n\nvar isBoxSizeOuter;\n\n/**\n * setup\n * check isBoxSizerOuter\n * do on first getSize() rather than on page load for Firefox bug\n */\nfunction setup() {\n // setup once\n if ( isSetup ) {\n return;\n }\n isSetup = true;\n\n // -------------------------- box sizing -------------------------- //\n\n /**\n * Chrome & Safari measure the outer-width on style.width on border-box elems\n * IE11 & Firefox<29 measures the inner-width\n */\n var div = document.createElement('div');\n div.style.width = '200px';\n div.style.padding = '1px 2px 3px 4px';\n div.style.borderStyle = 'solid';\n div.style.borderWidth = '1px 2px 3px 4px';\n div.style.boxSizing = 'border-box';\n\n var body = document.body || document.documentElement;\n body.appendChild( div );\n var style = getStyle( div );\n // round value for browser zoom. desandro/masonry#928\n isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\n getSize.isBoxSizeOuter = isBoxSizeOuter;\n\n body.removeChild( div );\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n setup();\n\n // use querySeletor if elem is string\n if ( typeof elem == 'string' ) {\n elem = document.querySelector( elem );\n }\n\n // do not proceed on non-objects\n if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\n return;\n }\n\n var style = getStyle( elem );\n\n // if hidden, everything is 0\n if ( style.display == 'none' ) {\n return getZeroSize();\n }\n\n var size = {};\n size.width = elem.offsetWidth;\n size.height = elem.offsetHeight;\n\n var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n // get all measurements\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n var value = style[ measurement ];\n var num = parseFloat( value );\n // any 'auto', 'medium' value will be 0\n size[ measurement ] = !isNaN( num ) ? num : 0;\n }\n\n var paddingWidth = size.paddingLeft + size.paddingRight;\n var paddingHeight = size.paddingTop + size.paddingBottom;\n var marginWidth = size.marginLeft + size.marginRight;\n var marginHeight = size.marginTop + size.marginBottom;\n var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n // overwrite width and height if we can get it from style\n var styleWidth = getStyleSize( style.width );\n if ( styleWidth !== false ) {\n size.width = styleWidth +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\n }\n\n var styleHeight = getStyleSize( style.height );\n if ( styleHeight !== false ) {\n size.height = styleHeight +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\n }\n\n size.innerWidth = size.width - ( paddingWidth + borderWidth );\n size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n size.outerWidth = size.width + marginWidth;\n size.outerHeight = size.height + marginHeight;\n\n return size;\n}\n\nreturn getSize;\n\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/get-size/get-size.js\n// module id = 7\n// module chunks = 0","/**\n * Swiper 7.0.9\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2021 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: October 18, 2021\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Swiper = factory());\n}(this, (function () { 'use strict';\n\n /**\n * SSR Window 4.0.0\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: August 25, 2021\n */\n\n /* eslint-disable no-param-reassign */\n function isObject$1(obj) {\n return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;\n }\n\n function extend$1(target = {}, src = {}) {\n Object.keys(src).forEach(key => {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject$1(src[key]) && isObject$1(target[key]) && Object.keys(src[key]).length > 0) {\n extend$1(target[key], src[key]);\n }\n });\n }\n\n const ssrDocument = {\n body: {},\n\n addEventListener() {},\n\n removeEventListener() {},\n\n activeElement: {\n blur() {},\n\n nodeName: ''\n },\n\n querySelector() {\n return null;\n },\n\n querySelectorAll() {\n return [];\n },\n\n getElementById() {\n return null;\n },\n\n createEvent() {\n return {\n initEvent() {}\n\n };\n },\n\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n\n setAttribute() {},\n\n getElementsByTagName() {\n return [];\n }\n\n };\n },\n\n createElementNS() {\n return {};\n },\n\n importNode() {\n return null;\n },\n\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n }\n };\n\n function getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend$1(doc, ssrDocument);\n return doc;\n }\n\n const ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: ''\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n },\n history: {\n replaceState() {},\n\n pushState() {},\n\n go() {},\n\n back() {}\n\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n\n addEventListener() {},\n\n removeEventListener() {},\n\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n }\n\n };\n },\n\n Image() {},\n\n Date() {},\n\n screen: {},\n\n setTimeout() {},\n\n clearTimeout() {},\n\n matchMedia() {\n return {};\n },\n\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n\n return setTimeout(callback, 0);\n },\n\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n\n clearTimeout(id);\n }\n\n };\n\n function getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend$1(win, ssrWindow);\n return win;\n }\n\n /**\n * Dom7 4.0.0\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: August 25, 2021\n */\n /* eslint-disable no-proto */\n\n function makeReactive(obj) {\n const proto = obj.__proto__;\n Object.defineProperty(obj, '__proto__', {\n get() {\n return proto;\n },\n\n set(value) {\n proto.__proto__ = value;\n }\n\n });\n }\n\n class Dom7 extends Array {\n constructor(items) {\n super(...(items || []));\n makeReactive(this);\n }\n\n }\n\n function arrayFlat(arr = []) {\n const res = [];\n arr.forEach(el => {\n if (Array.isArray(el)) {\n res.push(...arrayFlat(el));\n } else {\n res.push(el);\n }\n });\n return res;\n }\n\n function arrayFilter(arr, callback) {\n return Array.prototype.filter.call(arr, callback);\n }\n\n function arrayUnique(arr) {\n const uniqueArray = [];\n\n for (let i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n\n return uniqueArray;\n }\n\n\n function qsa(selector, context) {\n if (typeof selector !== 'string') {\n return [selector];\n }\n\n const a = [];\n const res = context.querySelectorAll(selector);\n\n for (let i = 0; i < res.length; i += 1) {\n a.push(res[i]);\n }\n\n return a;\n }\n\n function $(selector, context) {\n const window = getWindow();\n const document = getDocument();\n let arr = [];\n\n if (!context && selector instanceof Dom7) {\n return selector;\n }\n\n if (!selector) {\n return new Dom7(arr);\n }\n\n if (typeof selector === 'string') {\n const html = selector.trim();\n\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n let toCreate = 'div';\n if (html.indexOf('<li') === 0) toCreate = 'ul';\n if (html.indexOf('<tr') === 0) toCreate = 'tbody';\n if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) toCreate = 'tr';\n if (html.indexOf('<tbody') === 0) toCreate = 'table';\n if (html.indexOf('<option') === 0) toCreate = 'select';\n const tempParent = document.createElement(toCreate);\n tempParent.innerHTML = html;\n\n for (let i = 0; i < tempParent.childNodes.length; i += 1) {\n arr.push(tempParent.childNodes[i]);\n }\n } else {\n arr = qsa(selector.trim(), context || document);\n } // arr = qsa(selector, document);\n\n } else if (selector.nodeType || selector === window || selector === document) {\n arr.push(selector);\n } else if (Array.isArray(selector)) {\n if (selector instanceof Dom7) return selector;\n arr = selector;\n }\n\n return new Dom7(arrayUnique(arr));\n }\n\n $.fn = Dom7.prototype; // eslint-disable-next-line\n\n function addClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.add(...classNames);\n });\n return this;\n }\n\n function removeClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.remove(...classNames);\n });\n return this;\n }\n\n function toggleClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n classNames.forEach(className => {\n el.classList.toggle(className);\n });\n });\n }\n\n function hasClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n return arrayFilter(this, el => {\n return classNames.filter(className => el.classList.contains(className)).length > 0;\n }).length > 0;\n }\n\n function attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n return undefined;\n } // Set attrs\n\n\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n for (const attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n\n return this;\n }\n\n function removeAttr(attr) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n\n return this;\n }\n\n function transform(transform) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transform = transform;\n }\n\n return this;\n }\n\n function transition$1(duration) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transitionDuration = typeof duration !== 'string' ? `${duration}ms` : duration;\n }\n\n return this;\n }\n\n function on(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n\n function handleLiveEvent(e) {\n const target = e.target;\n if (!target) return;\n const eventData = e.target.dom7EventData || [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n const parents = $(target).parents(); // eslint-disable-line\n\n for (let k = 0; k < parents.length; k += 1) {\n if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);\n }\n }\n }\n\n function handleEvent(e) {\n const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n listener.apply(this, eventData);\n }\n\n const events = eventType.split(' ');\n let j;\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7Listeners) el.dom7Listeners = {};\n if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n el.dom7Listeners[event].push({\n listener,\n proxyListener: handleEvent\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];\n el.dom7LiveListeners[event].push({\n listener,\n proxyListener: handleLiveEvent\n });\n el.addEventListener(event, handleLiveEvent, capture);\n }\n }\n }\n\n return this;\n }\n\n function off(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n const events = eventType.split(' ');\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n let handlers;\n\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n\n if (handlers && handlers.length) {\n for (let k = handlers.length - 1; k >= 0; k -= 1) {\n const handler = handlers[k];\n\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n\n return this;\n }\n\n function trigger(...args) {\n const window = getWindow();\n const events = args[0].split(' ');\n const eventData = args[1];\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n\n if (window.CustomEvent) {\n const evt = new window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true\n });\n el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n }\n\n return this;\n }\n\n function transitionEnd$1(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionend', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionend', fireCallBack);\n }\n\n return this;\n }\n\n function outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n\n return this[0].offsetWidth;\n }\n\n return null;\n }\n\n function outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n\n return this[0].offsetHeight;\n }\n\n return null;\n }\n\n function offset() {\n if (this.length > 0) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n }\n\n return null;\n }\n\n function styles() {\n const window = getWindow();\n if (this[0]) return window.getComputedStyle(this[0], null);\n return {};\n }\n\n function css(props, value) {\n const window = getWindow();\n let i;\n\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n // .css('width')\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n // .css({ width: '100px' })\n for (i = 0; i < this.length; i += 1) {\n for (const prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n\n return this;\n }\n }\n\n if (arguments.length === 2 && typeof props === 'string') {\n // .css('width', '100px')\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n\n return this;\n }\n\n return this;\n }\n\n function each(callback) {\n if (!callback) return this;\n this.forEach((el, index) => {\n callback.apply(el, [el, index]);\n });\n return this;\n }\n\n function filter(callback) {\n const result = arrayFilter(this, callback);\n return $(result);\n }\n\n function html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n\n return this;\n }\n\n function text(text) {\n if (typeof text === 'undefined') {\n return this[0] ? this[0].textContent.trim() : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n\n return this;\n }\n\n function is(selector) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n let compareWith;\n let i;\n if (!el || typeof selector === 'undefined') return false;\n\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);\n if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n compareWith = $(selector);\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n if (selector === document) {\n return el === document;\n }\n\n if (selector === window) {\n return el === window;\n }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n return false;\n }\n\n function index() {\n let child = this[0];\n let i;\n\n if (child) {\n i = 0; // eslint-disable-next-line\n\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n\n return i;\n }\n\n return undefined;\n }\n\n function eq(index) {\n if (typeof index === 'undefined') return this;\n const length = this.length;\n\n if (index > length - 1) {\n return $([]);\n }\n\n if (index < 0) {\n const returnIndex = length + index;\n if (returnIndex < 0) return $([]);\n return $([this[returnIndex]]);\n }\n\n return $([this[index]]);\n }\n\n function append(...els) {\n let newChild;\n const document = getDocument();\n\n for (let k = 0; k < els.length; k += 1) {\n newChild = els[k];\n\n for (let i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (let j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n }\n\n function prepend(newChild) {\n const document = getDocument();\n let i;\n let j;\n\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n\n return this;\n }\n\n function next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return $([this[0].nextElementSibling]);\n }\n\n return $([]);\n }\n\n if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n return $([]);\n }\n\n return $([]);\n }\n\n function nextAll(selector) {\n const nextEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(next).is(selector)) nextEls.push(next);\n } else nextEls.push(next);\n\n el = next;\n }\n\n return $(nextEls);\n }\n\n function prev(selector) {\n if (this.length > 0) {\n const el = this[0];\n\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return $([el.previousElementSibling]);\n }\n\n return $([]);\n }\n\n if (el.previousElementSibling) return $([el.previousElementSibling]);\n return $([]);\n }\n\n return $([]);\n }\n\n function prevAll(selector) {\n const prevEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(prev).is(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n\n el = prev;\n }\n\n return $(prevEls);\n }\n\n function parent(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n\n return $(parents);\n }\n\n function parents(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n let parent = this[i].parentNode; // eslint-disable-line\n\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n\n parent = parent.parentNode;\n }\n }\n\n return $(parents);\n }\n\n function closest(selector) {\n let closest = this; // eslint-disable-line\n\n if (typeof selector === 'undefined') {\n return $([]);\n }\n\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n\n return closest;\n }\n\n function find(selector) {\n const foundElements = [];\n\n for (let i = 0; i < this.length; i += 1) {\n const found = this[i].querySelectorAll(selector);\n\n for (let j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n\n return $(foundElements);\n }\n\n function children(selector) {\n const children = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n const childNodes = this[i].children;\n\n for (let j = 0; j < childNodes.length; j += 1) {\n if (!selector || $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n\n return $(children);\n }\n\n function remove() {\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n\n return this;\n }\n\n const Methods = {\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n attr,\n removeAttr,\n transform,\n transition: transition$1,\n on,\n off,\n trigger,\n transitionEnd: transitionEnd$1,\n outerWidth,\n outerHeight,\n styles,\n offset,\n css,\n each,\n html,\n text,\n is,\n index,\n eq,\n append,\n prepend,\n next,\n nextAll,\n prev,\n prevAll,\n parent,\n parents,\n closest,\n find,\n children,\n filter,\n remove\n };\n Object.keys(Methods).forEach(methodName => {\n Object.defineProperty($.fn, methodName, {\n value: Methods[methodName],\n writable: true\n });\n });\n\n function deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {// no getter for object\n }\n\n try {\n delete object[key];\n } catch (e) {// something got wrong\n }\n });\n }\n\n function nextTick(callback, delay = 0) {\n return setTimeout(callback, delay);\n }\n\n function now() {\n return Date.now();\n }\n\n function getComputedStyle$1(el) {\n const window = getWindow();\n let style;\n\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n\n if (!style) {\n style = el.style;\n }\n\n return style;\n }\n\n function getTranslate(el, axis = 'x') {\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle$1(el);\n\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n } // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n\n\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n\n return curTransform || 0;\n }\n\n function isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n }\n\n function isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n\n return node && (node.nodeType === 1 || node.nodeType === 11);\n }\n\n function extend(...args) {\n const to = Object(args[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n\n for (let i = 1; i < args.length; i += 1) {\n const nextSource = args[i];\n\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n\n return to;\n }\n\n function setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n }\n\n function animateCSSModeScroll({\n swiper,\n targetPosition,\n side\n }) {\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n\n const animate = () => {\n time = new Date().getTime();\n\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n\n animate();\n }\n\n let support;\n\n function calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch),\n passiveListener: function checkPassiveListener() {\n let supportsPassive = false;\n\n try {\n const opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get() {\n supportsPassive = true;\n }\n\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {// No support\n }\n\n return supportsPassive;\n }(),\n gestures: function checkGestures() {\n return 'ongesturestart' in window;\n }()\n };\n }\n\n function getSupport() {\n if (!support) {\n support = calcSupport();\n }\n\n return support;\n }\n\n let deviceCached;\n\n function calcDevice({\n userAgent\n } = {}) {\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel'; // iPadOs 13 fix\n\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n } // Android\n\n\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n } // Export object\n\n\n return device;\n }\n\n function getDevice(overrides = {}) {\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n\n return deviceCached;\n }\n\n let browser;\n\n function calcBrowser() {\n const window = getWindow();\n\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n\n return {\n isSafari: isSafari(),\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n };\n }\n\n function getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n\n return browser;\n }\n\n function Resize({\n swiper,\n on,\n emit\n }) {\n const window = getWindow();\n let observer = null;\n\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(({\n contentBoxSize,\n contentRect,\n target\n }) => {\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n observer.observe(swiper.el);\n };\n\n const removeObserver = () => {\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n }\n\n function Observer({\n swiper,\n extendParams,\n on,\n emit\n }) {\n const observers = [];\n const window = getWindow();\n\n const attach = (target, options = {}) => {\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n\n const init = () => {\n if (!swiper.params.observer) return;\n\n if (swiper.params.observeParents) {\n const containerParents = swiper.$el.parents();\n\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n } // Observe container\n\n\n attach(swiper.$el[0], {\n childList: swiper.params.observeSlideChildren\n }); // Observe wrapper\n\n attach(swiper.$wrapperEl[0], {\n attributes: false\n });\n };\n\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n }\n\n /* eslint-disable no-underscore-dangle */\n var eventsEmitter = {\n on(events, handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n\n once(events, handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n\n function onceHandler(...args) {\n self.off(events, onceHandler);\n\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n\n handler.apply(self, args);\n }\n\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n\n onAny(handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n\n return self;\n },\n\n offAny(handler) {\n const self = this;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n\n return self;\n },\n\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n\n emit(...args) {\n const self = this;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n\n };\n\n function updateSize() {\n const swiper = this;\n let width;\n let height;\n const $el = swiper.$el;\n\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = $el[0].clientWidth;\n }\n\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = $el[0].clientHeight;\n }\n\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n } // Subtract paddings\n\n\n width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10);\n height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n }\n\n function updateSlides() {\n const swiper = this;\n\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n } // prettier-ignore\n\n\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n\n const params = swiper.params;\n const {\n $wrapperEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n\n let offsetAfter = params.slidesOffsetAfter;\n\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n\n if (typeof swiperSize === 'undefined') {\n return;\n }\n\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n }\n\n swiper.virtualSize = -spaceBetween; // reset margins\n\n if (rtl) slides.css({\n marginLeft: '',\n marginBottom: '',\n marginTop: ''\n });else slides.css({\n marginRight: '',\n marginBottom: '',\n marginTop: ''\n }); // reset cssMode offsets\n\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', '');\n }\n\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n } // Calc slides\n\n\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n const slide = slides.eq(i);\n\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n\n if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n\n const slideStyles = getComputedStyle(slide[0]);\n const currentTransform = slide[0].style.transform;\n const currentWebKitTransform = slide[0].style.webkitTransform;\n\n if (currentTransform) {\n slide[0].style.transform = 'none';\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = 'none';\n }\n\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide[0];\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n\n if (currentTransform) {\n slide[0].style.transform = currentTransform;\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = currentWebKitTransform;\n }\n\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n if (slides[i]) {\n slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n\n slidesSizesGrid.push(slideSize);\n\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperEl.css({\n width: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (params.setWrapperSize) {\n $wrapperEl.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n } // Remove last grid elements depending on width\n\n\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n\n snapGrid = newSlidesGrid;\n\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n\n if (snapGrid.length === 0) snapGrid = [0];\n\n if (params.spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode) return true;\n\n if (slideIndex === slides.length - 1) {\n return false;\n }\n\n return true;\n }).css({\n [key]: `${spaceBetween}px`\n });\n }\n\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap < 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n }\n\n function updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides.filter(el => parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index)[0];\n }\n\n return swiper.slides.eq(index)[0];\n }; // Find slides currently in view\n\n\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n swiper.visibleSlides.each(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n } // Find new height from highest slide in view\n\n\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n } // Update Height\n\n\n if (newHeight) swiper.$wrapperEl.css('height', `${newHeight}px`);\n }\n\n function updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n }\n }\n\n function updateSlidesProgress(translate = this && this.translate || 0) {\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate; // Visible Slides\n\n slides.removeClass(params.slideVisibleClass);\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides.eq(i).addClass(params.slideVisibleClass);\n }\n\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n\n swiper.visibleSlides = $(swiper.visibleSlides);\n }\n\n function updateProgress(translate) {\n const swiper = this;\n\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line\n\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n isBeginning = progress <= 0;\n isEnd = progress >= 1;\n }\n\n Object.assign(swiper, {\n progress,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n\n swiper.emit('progress', progress);\n }\n\n function updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n $wrapperEl,\n activeIndex,\n realIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);\n let activeSlide;\n\n if (isVirtual) {\n activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`);\n } else {\n activeSlide = slides.eq(activeIndex);\n } // Active classes\n\n\n activeSlide.addClass(params.slideActiveClass);\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n }\n } // Next Slide\n\n\n let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);\n\n if (params.loop && nextSlide.length === 0) {\n nextSlide = slides.eq(0);\n nextSlide.addClass(params.slideNextClass);\n } // Prev Slide\n\n\n let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);\n\n if (params.loop && prevSlide.length === 0) {\n prevSlide = slides.eq(-1);\n prevSlide.addClass(params.slidePrevClass);\n }\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n }\n\n if (prevSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n }\n }\n\n swiper.emitSlidesClasses();\n }\n\n function updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n slidesGrid,\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n\n if (typeof activeIndex === 'undefined') {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n } // Normalize slideIndex\n\n\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n }\n\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n\n return;\n } // Get real index\n\n\n const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n Object.assign(swiper, {\n snapIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n }\n\n function updateClickedSlide(e) {\n const swiper = this;\n const params = swiper.params;\n const slide = $(e.target).closest(`.${params.slideClass}`)[0];\n let slideFound = false;\n let slideIndex;\n\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n }\n\n var update = {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n };\n\n function getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n $wrapperEl\n } = swiper;\n\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n\n if (params.cssMode) {\n return translate;\n }\n\n let currentTranslate = getTranslate($wrapperEl[0], axis);\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n }\n\n function setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n $wrapperEl,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n }\n\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress\n\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, byController);\n }\n\n function minTranslate() {\n return -this.snapGrid[0];\n }\n\n function maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n }\n\n function translateTo(translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress\n\n swiper.updateProgress(newTranslate);\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n\n if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n\n return true;\n }\n\n var translate = {\n getTranslate: getSwiperTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n };\n\n function setTransition(duration, byController) {\n const swiper = this;\n\n if (!swiper.params.cssMode) {\n swiper.$wrapperEl.transition(duration);\n }\n\n swiper.emit('setTransition', duration, byController);\n }\n\n function transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step\n }) {\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n\n swiper.emit(`transition${step}`);\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n\n swiper.emit(`slideChangeTransition${step}`);\n\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n }\n\n function transitionStart(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n }\n\n function transitionEnd(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n }\n\n var transition = {\n setTransition,\n transitionStart,\n transitionEnd\n };\n\n function slideTo(index = 0, speed = this.params.speed, runCallbacks = true, internal, initial) {\n if (typeof index !== 'number' && typeof index !== 'string') {\n throw new Error(`The 'index' argument cannot have type other than 'number' or 'string'. [${typeof index}] given.`);\n }\n\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`);\n } // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n\n\n index = indexAsNumber;\n }\n\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n return false;\n }\n\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n const translate = -snapGrid[snapIndex]; // Update progress\n\n swiper.updateProgress(translate); // Normalize slideIndex\n\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n } // Directions locks\n\n\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n return false;\n }\n\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) return false;\n }\n }\n\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index\n\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex); // Update Height\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n swiper.updateSlidesClasses();\n\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n\n return false;\n }\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._swiperImmediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n\n if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n }\n }\n\n return true;\n }\n\n function slideToLoop(index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n let newIndex = index;\n\n if (swiper.params.loop) {\n newIndex += swiper.loopedSlides;\n }\n\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n }\n\n /* eslint no-unused-vars: \"off\" */\n function slideNext(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n animating,\n enabled,\n params\n } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n }\n\n /* eslint no-unused-vars: \"off\" */\n function slidePrev(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n params,\n animating,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return swiper;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n\n let prevIndex = 0;\n\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n }\n\n /* eslint no-unused-vars: \"off\" */\n function slideReset(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n }\n\n /* eslint no-unused-vars: \"off\" */\n function slideToClosest(speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {\n const swiper = this;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n }\n\n function slideToClickedSlide() {\n const swiper = this;\n const {\n params,\n $wrapperEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n }\n\n var slide = {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n };\n\n function loopCreate() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n $wrapperEl\n } = swiper; // Remove duplicated slides\n\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n let slides = $wrapperEl.children(`.${params.slideClass}`);\n\n if (params.loopFillGroupWithBlank) {\n const blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;\n\n if (blankSlidesNum !== params.slidesPerGroup) {\n for (let i = 0; i < blankSlidesNum; i += 1) {\n const blankNode = $(document.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);\n $wrapperEl.append(blankNode);\n }\n\n slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n }\n\n if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n swiper.loopedSlides += params.loopAdditionalSlides;\n\n if (swiper.loopedSlides > slides.length) {\n swiper.loopedSlides = slides.length;\n }\n\n const prependSlides = [];\n const appendSlides = [];\n slides.each((el, index) => {\n const slide = $(el);\n\n if (index < swiper.loopedSlides) {\n appendSlides.push(el);\n }\n\n if (index < slides.length && index >= slides.length - swiper.loopedSlides) {\n prependSlides.push(el);\n }\n\n slide.attr('data-swiper-slide-index', index);\n });\n\n for (let i = 0; i < appendSlides.length; i += 1) {\n $wrapperEl.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n\n for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n $wrapperEl.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n }\n\n function loopFix() {\n const swiper = this;\n swiper.emit('beforeLoopFix');\n const {\n activeIndex,\n slides,\n loopedSlides,\n allowSlidePrev,\n allowSlideNext,\n snapGrid,\n rtlTranslate: rtl\n } = swiper;\n let newIndex;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n const snapTranslate = -snapGrid[activeIndex];\n const diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding\n\n if (activeIndex < loopedSlides) {\n newIndex = slides.length - loopedSlides * 3 + activeIndex;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n } else if (activeIndex >= slides.length - loopedSlides) {\n // Fix For Positive Oversliding\n newIndex = -slides.length + activeIndex + loopedSlides;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n }\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n }\n\n function loopDestroy() {\n const swiper = this;\n const {\n $wrapperEl,\n params,\n slides\n } = swiper;\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();\n slides.removeAttr('data-swiper-slide-index');\n }\n\n var loop = {\n loopCreate,\n loopFix,\n loopDestroy\n };\n\n function setGrabCursor(moving) {\n const swiper = this;\n if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n el.style.cursor = 'move';\n el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n }\n\n function unsetGrabCursor() {\n const swiper = this;\n\n if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n }\n\n var grabCursor = {\n setGrabCursor,\n unsetGrabCursor\n };\n\n function closestElement(selector, base = this) {\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n return found || __closestFrom(el.getRootNode().host);\n }\n\n return __closestFrom(base);\n }\n\n function onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let $targetEl = $(e.target);\n\n if (params.touchEventsTarget === 'wrapper') {\n if (!$targetEl.closest(swiper.wrapperEl).length) return;\n }\n\n data.isTouchEvent = e.type === 'touchstart';\n if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return; // change target el for shadow root component\n\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n\n if (swipingClassHasValue && e.target && e.target.shadowRoot && event.path && event.path[0]) {\n $targetEl = $(event.path[0]);\n }\n\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot); // use closestElement for shadow root element to get the actual closest for nested shadow root element\n\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, e.target) : $targetEl.closest(noSwipingSelector)[0])) {\n swiper.allowClick = true;\n return;\n }\n\n if (params.swipeHandler) {\n if (!$targetEl.closest(params.swipeHandler)[0]) return;\n }\n\n touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\n }\n\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n\n if (e.type !== 'touchstart') {\n let preventDefault = true;\n if ($targetEl.is(data.focusableElements)) preventDefault = false;\n\n if (document.activeElement && $(document.activeElement).is(data.focusableElements) && document.activeElement !== $targetEl[0]) {\n document.activeElement.blur();\n }\n\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !$targetEl[0].isContentEditable) {\n e.preventDefault();\n }\n }\n\n swiper.emit('touchStart', e);\n }\n\n function onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n return;\n }\n\n if (data.isTouchEvent && e.type !== 'touchmove') return;\n const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n\n if (!swiper.allowTouchMove) {\n // isMoved = true;\n swiper.allowClick = false;\n\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n\n return;\n }\n\n if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n\n if (data.isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n\n if (e.targetTouches && e.targetTouches.length > 1) return;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n\n if (data.isScrolling) {\n data.isTouched = false;\n return;\n }\n\n if (!data.startMoving) {\n return;\n }\n\n swiper.allowClick = false;\n\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n\n if (!data.isMoved) {\n if (params.loop && !params.cssMode) {\n swiper.loopFix();\n }\n\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n\n if (swiper.animating) {\n swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n }\n\n data.allowMomentumBounce = false; // Grab Cursor\n\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n\n swiper.emit('sliderFirstMove', e);\n }\n\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n let diff = swiper.isHorizontal() ? diffX : diffY;\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) diff = -diff;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n\n if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n } // Directions locks\n\n\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n } // Threshold\n\n\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n\n if (!params.followFinger || params.cssMode) return; // Update active index in free mode\n\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n } // Update progress\n\n\n swiper.updateProgress(data.currentTranslate); // Update translate\n\n swiper.setTranslate(data.currentTranslate);\n }\n\n function onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n\n data.allowTouchCallbacks = false;\n\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n\n data.isMoved = false;\n data.startMoving = false;\n return;\n } // Return Grab Cursor\n\n\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n } // Time diff\n\n\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click\n\n if (swiper.allowClick) {\n swiper.updateClickedSlide(e);\n swiper.emit('tap click', e);\n\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n\n if (params.cssMode) {\n return;\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n } // Find current slide\n\n\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n } // Find current slide size\n\n\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(stopIndex + increment);\n }\n\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n }\n\n function onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n } // Save locks\n\n\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper; // Disable locks on resize\n\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.run();\n } // Return locks after resize\n\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n }\n\n function onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n }\n\n function onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n } // eslint-disable-next-line\n\n\n if (swiper.translate === -0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, false);\n }\n\n let dummyEventAttached = false;\n\n function dummyEventListener() {}\n\n const events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n touchEvents,\n el,\n wrapperEl,\n device,\n support\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method; // Touch Events\n\n if (!support.touch) {\n el[domMethod](touchEvents.start, swiper.onTouchStart, false);\n document[domMethod](touchEvents.move, swiper.onTouchMove, capture);\n document[domMethod](touchEvents.end, swiper.onTouchEnd, false);\n } else {\n const passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n el[domMethod](touchEvents.start, swiper.onTouchStart, passiveListener);\n el[domMethod](touchEvents.move, swiper.onTouchMove, support.passiveListener ? {\n passive: false,\n capture\n } : capture);\n el[domMethod](touchEvents.end, swiper.onTouchEnd, passiveListener);\n\n if (touchEvents.cancel) {\n el[domMethod](touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n }\n } // Prevent Links Clicks\n\n\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n } // Resize handler\n\n\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n };\n\n function attachEvents() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n support\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n\n swiper.onClick = onClick.bind(swiper);\n\n if (support.touch && !dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n\n events(swiper, 'on');\n }\n\n function detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n }\n\n var events$1 = {\n attachEvents,\n detachEvents\n };\n\n const isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n };\n\n function setBreakpoint() {\n const swiper = this;\n const {\n activeIndex,\n initialized,\n loopedSlides = 0,\n params,\n $el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters\n\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasEnabled = params.enabled;\n\n if (wasMultiRow && !isMultiRow) {\n $el.removeClass(`${params.containerModifierClass}grid ${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n $el.addClass(`${params.containerModifierClass}grid`);\n\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n $el.addClass(`${params.containerModifierClass}grid-column`);\n }\n\n swiper.emitContainerClasses();\n }\n\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate();\n swiper.updateSlides();\n swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);\n }\n\n swiper.emit('breakpoint', breakpointParams);\n }\n\n function getBreakpoint(breakpoints, base = 'window', containerEl) {\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n\n return breakpoint || 'max';\n }\n\n var breakpoints = {\n setBreakpoint,\n getBreakpoint\n };\n\n function prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n }\n\n function addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n $el,\n device,\n support\n } = swiper; // prettier-ignore\n\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'pointer-events': !support.touch\n }, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n $el.addClass([...classNames].join(' '));\n swiper.emitContainerClasses();\n }\n\n function removeClasses() {\n const swiper = this;\n const {\n $el,\n classNames\n } = swiper;\n $el.removeClass(classNames.join(' '));\n swiper.emitContainerClasses();\n }\n\n var classes = {\n addClasses,\n removeClasses\n };\n\n function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n const window = getWindow();\n let image;\n\n function onReady() {\n if (callback) callback();\n }\n\n const isPicture = $(imageEl).parent('picture')[0];\n\n if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n\n if (sizes) {\n image.sizes = sizes;\n }\n\n if (srcset) {\n image.srcset = srcset;\n }\n\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n } else {\n // image already loaded...\n onReady();\n }\n }\n\n function preloadImages() {\n const swiper = this;\n swiper.imagesToLoad = swiper.$el.find('img');\n\n function onReady() {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n\n if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n if (swiper.params.updateOnImagesReady) swiper.update();\n swiper.emit('imagesReady');\n }\n }\n\n for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n const imageEl = swiper.imagesToLoad[i];\n swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);\n }\n }\n\n var images = {\n loadImage,\n preloadImages\n };\n\n function checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n }\n\n var checkOverflow$1 = {\n checkOverflow\n };\n\n var defaults = {\n init: true,\n direction: 'horizontal',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 0,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n loopFillGroupWithBlank: false,\n loopPreventsSlide: true,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-invisible-blank',\n slideActiveClass: 'swiper-slide-active',\n slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n slidePrevClass: 'swiper-slide-prev',\n slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n wrapperClass: 'swiper-wrapper',\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n };\n\n function moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj = {}) {\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\n params[moduleParamName] = {\n auto: true\n };\n }\n\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n }\n\n /* eslint no-param-reassign: \"off\" */\n const prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events: events$1,\n breakpoints,\n checkOverflow: checkOverflow$1,\n classes,\n images\n };\n const extendedDefaults = {};\n\n class Swiper {\n constructor(...args) {\n let el;\n let params;\n\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n\n if (params.el && $(params.el).length > 1) {\n const swipers = [];\n $(params.el).each(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n return swipers;\n } // Swiper Instance\n\n\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n }); // Extend defaults with modules params\n\n const swiperParams = extend({}, defaults, allModulesParams); // Extend defaults with passed params\n\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params); // add event listeners\n\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n } // Save Dom lib\n\n\n swiper.$ = $; // Extend Swiper\n\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: $(),\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEvents: function touchEvents() {\n const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n const desktop = ['pointerdown', 'pointermove', 'pointerup'];\n swiper.touchEventsTouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2],\n cancel: touch[3]\n };\n swiper.touchEventsDesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2]\n };\n return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n }(),\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: now(),\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n isTouchEvent: undefined,\n startMoving: undefined\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper'); // Init\n\n if (swiper.params.init) {\n swiper.init();\n } // Return app instance\n\n\n return swiper;\n }\n\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n\n swiper.emit('enable');\n }\n\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n\n swiper.emit('disable');\n }\n\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n\n getSlideClasses(slideEl) {\n const swiper = this;\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.each(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n\n slidesPerViewDynamic(view = 'current', exact = false) {\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex].swiperSlideSize;\n let breakLoop;\n\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n\n return spv;\n }\n\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n let translated;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled) {\n setTranslate();\n\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (!translated) {\n setTranslate();\n }\n }\n\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n\n swiper.emit('update');\n }\n\n changeDirection(newDirection, needUpdate = true) {\n const swiper = this;\n const currentDirection = swiper.params.direction;\n\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n\n swiper.$el.removeClass(`${swiper.params.containerModifierClass}${currentDirection}`).addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.each(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n\n mount(el) {\n const swiper = this;\n if (swiper.mounted) return true; // Find el\n\n const $el = $(el || swiper.params.el);\n el = $el[0];\n\n if (!el) {\n return false;\n }\n\n el.swiper = swiper;\n\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = $(el.shadowRoot.querySelector(getWrapperSelector())); // Children needs to return slot items\n\n res.children = options => $el.children(options);\n\n return res;\n }\n\n return $el.children(getWrapperSelector());\n }; // Find Wrapper\n\n\n let $wrapperEl = getWrapper();\n\n if ($wrapperEl.length === 0 && swiper.params.createElements) {\n const document = getDocument();\n const wrapper = document.createElement('div');\n $wrapperEl = $(wrapper);\n wrapper.className = swiper.params.wrapperClass;\n $el.append(wrapper);\n $el.children(`.${swiper.params.slideClass}`).each(slideEl => {\n $wrapperEl.append(slideEl);\n });\n }\n\n Object.assign(swiper, {\n $el,\n el,\n $wrapperEl,\n wrapperEl: $wrapperEl[0],\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n wrongRTL: $wrapperEl.css('display') === '-webkit-box'\n });\n return true;\n }\n\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit'); // Set breakpoint\n\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n } // Add Classes\n\n\n swiper.addClasses(); // Create loop\n\n if (swiper.params.loop) {\n swiper.loopCreate();\n } // Update size\n\n\n swiper.updateSize(); // Update slides\n\n swiper.updateSlides();\n\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n } // Set Grab Cursor\n\n\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n if (swiper.params.preloadImages) {\n swiper.preloadImages();\n } // Slide To Initial Slide\n\n\n if (swiper.params.loop) {\n swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n } // Attach events\n\n\n swiper.attachEvents(); // Init Flag\n\n swiper.initialized = true; // Emit\n\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n\n destroy(deleteInstance = true, cleanStyles = true) {\n const swiper = this;\n const {\n params,\n $el,\n $wrapperEl,\n slides\n } = swiper;\n\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n\n swiper.emit('beforeDestroy'); // Init Flag\n\n swiper.initialized = false; // Detach events\n\n swiper.detachEvents(); // Destroy loop\n\n if (params.loop) {\n swiper.loopDestroy();\n } // Cleanup styles\n\n\n if (cleanStyles) {\n swiper.removeClasses();\n $el.removeAttr('style');\n $wrapperEl.removeAttr('style');\n\n if (slides && slides.length) {\n slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index');\n }\n }\n\n swiper.emit('destroy'); // Detach emitter events\n\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n\n if (deleteInstance !== false) {\n swiper.$el[0].swiper = null;\n deleteProps(swiper);\n }\n\n swiper.destroyed = true;\n return null;\n }\n\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n\n static get extendedDefaults() {\n return extendedDefaults;\n }\n\n static get defaults() {\n return defaults;\n }\n\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n\n Swiper.installModule(module);\n return Swiper;\n }\n\n }\n\n Object.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n });\n Swiper.use([Resize, Observer]);\n\n function Virtual({\n swiper,\n extendParams,\n on\n }) {\n extendParams({\n virtual: {\n enabled: false,\n slides: [],\n cache: true,\n renderSlide: null,\n renderExternal: null,\n renderExternalUpdate: true,\n addSlidesBefore: 0,\n addSlidesAfter: 0\n }\n });\n let cssModeTimeout;\n swiper.virtual = {\n cache: {},\n from: undefined,\n to: undefined,\n slides: [],\n offset: 0,\n slidesGrid: []\n };\n\n function renderSlide(slide, index) {\n const params = swiper.params.virtual;\n\n if (params.cache && swiper.virtual.cache[index]) {\n return swiper.virtual.cache[index];\n }\n\n const $slideEl = params.renderSlide ? $(params.renderSlide.call(swiper, slide, index)) : $(`<div class=\"${swiper.params.slideClass}\" data-swiper-slide-index=\"${index}\">${slide}</div>`);\n if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index);\n if (params.cache) swiper.virtual.cache[index] = $slideEl;\n return $slideEl;\n }\n\n function update(force) {\n const {\n slidesPerView,\n slidesPerGroup,\n centeredSlides\n } = swiper.params;\n const {\n addSlidesBefore,\n addSlidesAfter\n } = swiper.params.virtual;\n const {\n from: previousFrom,\n to: previousTo,\n slides,\n slidesGrid: previousSlidesGrid,\n offset: previousOffset\n } = swiper.virtual;\n\n if (!swiper.params.cssMode) {\n swiper.updateActiveIndex();\n }\n\n const activeIndex = swiper.activeIndex || 0;\n let offsetProp;\n if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n let slidesAfter;\n let slidesBefore;\n\n if (centeredSlides) {\n slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\n slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n } else {\n slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter;\n slidesBefore = slidesPerGroup + addSlidesBefore;\n }\n\n const from = Math.max((activeIndex || 0) - slidesBefore, 0);\n const to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);\n const offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n Object.assign(swiper.virtual, {\n from,\n to,\n offset,\n slidesGrid: swiper.slidesGrid\n });\n\n function onRendered() {\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n if (swiper.lazy && swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n }\n\n if (previousFrom === from && previousTo === to && !force) {\n if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {\n swiper.slides.css(offsetProp, `${offset}px`);\n }\n\n swiper.updateProgress();\n return;\n }\n\n if (swiper.params.virtual.renderExternal) {\n swiper.params.virtual.renderExternal.call(swiper, {\n offset,\n from,\n to,\n slides: function getSlides() {\n const slidesToRender = [];\n\n for (let i = from; i <= to; i += 1) {\n slidesToRender.push(slides[i]);\n }\n\n return slidesToRender;\n }()\n });\n\n if (swiper.params.virtual.renderExternalUpdate) {\n onRendered();\n }\n\n return;\n }\n\n const prependIndexes = [];\n const appendIndexes = [];\n\n if (force) {\n swiper.$wrapperEl.find(`.${swiper.params.slideClass}`).remove();\n } else {\n for (let i = previousFrom; i <= previousTo; i += 1) {\n if (i < from || i > to) {\n swiper.$wrapperEl.find(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${i}\"]`).remove();\n }\n }\n }\n\n for (let i = 0; i < slides.length; i += 1) {\n if (i >= from && i <= to) {\n if (typeof previousTo === 'undefined' || force) {\n appendIndexes.push(i);\n } else {\n if (i > previousTo) appendIndexes.push(i);\n if (i < previousFrom) prependIndexes.push(i);\n }\n }\n }\n\n appendIndexes.forEach(index => {\n swiper.$wrapperEl.append(renderSlide(slides[index], index));\n });\n prependIndexes.sort((a, b) => b - a).forEach(index => {\n swiper.$wrapperEl.prepend(renderSlide(slides[index], index));\n });\n swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, `${offset}px`);\n onRendered();\n }\n\n function appendSlide(slides) {\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.push(slides[i]);\n }\n } else {\n swiper.virtual.slides.push(slides);\n }\n\n update(true);\n }\n\n function prependSlide(slides) {\n const activeIndex = swiper.activeIndex;\n let newActiveIndex = activeIndex + 1;\n let numberOfNewSlides = 1;\n\n if (Array.isArray(slides)) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.unshift(slides[i]);\n }\n\n newActiveIndex = activeIndex + slides.length;\n numberOfNewSlides = slides.length;\n } else {\n swiper.virtual.slides.unshift(slides);\n }\n\n if (swiper.params.virtual.cache) {\n const cache = swiper.virtual.cache;\n const newCache = {};\n Object.keys(cache).forEach(cachedIndex => {\n const $cachedEl = cache[cachedIndex];\n const cachedElIndex = $cachedEl.attr('data-swiper-slide-index');\n\n if (cachedElIndex) {\n $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + numberOfNewSlides);\n }\n\n newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;\n });\n swiper.virtual.cache = newCache;\n }\n\n update(true);\n swiper.slideTo(newActiveIndex, 0);\n }\n\n function removeSlide(slidesIndexes) {\n if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\n let activeIndex = swiper.activeIndex;\n\n if (Array.isArray(slidesIndexes)) {\n for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {\n swiper.virtual.slides.splice(slidesIndexes[i], 1);\n\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes[i]];\n }\n\n if (slidesIndexes[i] < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n } else {\n swiper.virtual.slides.splice(slidesIndexes, 1);\n\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes];\n }\n\n if (slidesIndexes < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n\n update(true);\n swiper.slideTo(activeIndex, 0);\n }\n\n function removeAllSlides() {\n swiper.virtual.slides = [];\n\n if (swiper.params.virtual.cache) {\n swiper.virtual.cache = {};\n }\n\n update(true);\n swiper.slideTo(0, 0);\n }\n\n on('beforeInit', () => {\n if (!swiper.params.virtual.enabled) return;\n swiper.virtual.slides = swiper.params.virtual.slides;\n swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n\n if (!swiper.params.initialSlide) {\n update();\n }\n });\n on('setTranslate', () => {\n if (!swiper.params.virtual.enabled) return;\n\n if (swiper.params.cssMode && !swiper._immediateVirtual) {\n clearTimeout(cssModeTimeout);\n cssModeTimeout = setTimeout(() => {\n update();\n }, 100);\n } else {\n update();\n }\n });\n on('init update resize', () => {\n if (!swiper.params.virtual.enabled) return;\n\n if (swiper.params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`);\n }\n });\n Object.assign(swiper.virtual, {\n appendSlide,\n prependSlide,\n removeSlide,\n removeAllSlides,\n update\n });\n }\n\n /* eslint-disable consistent-return */\n function Keyboard({\n swiper,\n extendParams,\n on,\n emit\n }) {\n const document = getDocument();\n const window = getWindow();\n swiper.keyboard = {\n enabled: false\n };\n extendParams({\n keyboard: {\n enabled: false,\n onlyInViewport: true,\n pageUpDown: true\n }\n });\n\n function handle(event) {\n if (!swiper.enabled) return;\n const {\n rtlTranslate: rtl\n } = swiper;\n let e = event;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n\n const kc = e.keyCode || e.charCode;\n const pageUpDown = swiper.params.keyboard.pageUpDown;\n const isPageUp = pageUpDown && kc === 33;\n const isPageDown = pageUpDown && kc === 34;\n const isArrowLeft = kc === 37;\n const isArrowRight = kc === 39;\n const isArrowUp = kc === 38;\n const isArrowDown = kc === 40; // Directions locks\n\n if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {\n return false;\n }\n\n if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {\n return false;\n }\n\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return undefined;\n }\n\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return undefined;\n }\n\n if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\n let inView = false; // Check that swiper should be inside of visible area of window\n\n if (swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 && swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0) {\n return undefined;\n }\n\n const $el = swiper.$el;\n const swiperWidth = $el[0].clientWidth;\n const swiperHeight = $el[0].clientHeight;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const swiperOffset = swiper.$el.offset();\n if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]];\n\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n\n if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n\n inView = true;\n }\n }\n\n if (!inView) return undefined;\n }\n\n if (swiper.isHorizontal()) {\n if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n\n if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();\n if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();\n } else {\n if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n\n if (isPageDown || isArrowDown) swiper.slideNext();\n if (isPageUp || isArrowUp) swiper.slidePrev();\n }\n\n emit('keyPress', kc);\n return undefined;\n }\n\n function enable() {\n if (swiper.keyboard.enabled) return;\n $(document).on('keydown', handle);\n swiper.keyboard.enabled = true;\n }\n\n function disable() {\n if (!swiper.keyboard.enabled) return;\n $(document).off('keydown', handle);\n swiper.keyboard.enabled = false;\n }\n\n on('init', () => {\n if (swiper.params.keyboard.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n if (swiper.keyboard.enabled) {\n disable();\n }\n });\n Object.assign(swiper.keyboard, {\n enable,\n disable\n });\n }\n\n /* eslint-disable consistent-return */\n function Mousewheel({\n swiper,\n extendParams,\n on,\n emit\n }) {\n const window = getWindow();\n extendParams({\n mousewheel: {\n enabled: false,\n releaseOnEdges: false,\n invert: false,\n forceToAxis: false,\n sensitivity: 1,\n eventsTarget: 'container',\n thresholdDelta: null,\n thresholdTime: null\n }\n });\n swiper.mousewheel = {\n enabled: false\n };\n let timeout;\n let lastScrollTime = now();\n let lastEventBeforeSnap;\n const recentWheelEvents = [];\n\n function normalize(e) {\n // Reasonable defaults\n const PIXEL_STEP = 10;\n const LINE_HEIGHT = 40;\n const PAGE_HEIGHT = 800;\n let sX = 0;\n let sY = 0; // spinX, spinY\n\n let pX = 0;\n let pY = 0; // pixelX, pixelY\n // Legacy\n\n if ('detail' in e) {\n sY = e.detail;\n }\n\n if ('wheelDelta' in e) {\n sY = -e.wheelDelta / 120;\n }\n\n if ('wheelDeltaY' in e) {\n sY = -e.wheelDeltaY / 120;\n }\n\n if ('wheelDeltaX' in e) {\n sX = -e.wheelDeltaX / 120;\n } // side scrolling on FF with DOMMouseScroll\n\n\n if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n sX = sY;\n sY = 0;\n }\n\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n\n if ('deltaY' in e) {\n pY = e.deltaY;\n }\n\n if ('deltaX' in e) {\n pX = e.deltaX;\n }\n\n if (e.shiftKey && !pX) {\n // if user scrolls with shift he wants horizontal scroll\n pX = pY;\n pY = 0;\n }\n\n if ((pX || pY) && e.deltaMode) {\n if (e.deltaMode === 1) {\n // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else {\n // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n } // Fall-back if spin cannot be determined\n\n\n if (pX && !sX) {\n sX = pX < 1 ? -1 : 1;\n }\n\n if (pY && !sY) {\n sY = pY < 1 ? -1 : 1;\n }\n\n return {\n spinX: sX,\n spinY: sY,\n pixelX: pX,\n pixelY: pY\n };\n }\n\n function handleMouseEnter() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = true;\n }\n\n function handleMouseLeave() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = false;\n }\n\n function animateSlider(newEvent) {\n if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) {\n // Prevent if delta of wheel scroll delta is below configured threshold\n return false;\n }\n\n if (swiper.params.mousewheel.thresholdTime && now() - lastScrollTime < swiper.params.mousewheel.thresholdTime) {\n // Prevent if time between scrolls is below configured threshold\n return false;\n } // If the movement is NOT big enough and\n // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n // Don't go any further (avoid insignificant scroll movement).\n\n\n if (newEvent.delta >= 6 && now() - lastScrollTime < 60) {\n // Return false as a default\n return true;\n } // If user is scrolling towards the end:\n // If the slider hasn't hit the latest slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to next slide and\n // emit a scroll event.\n // Else (the user is scrolling towards the beginning) and\n // if the slider hasn't hit the first slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to prev slide and\n // emit a scroll event.\n\n\n if (newEvent.direction < 0) {\n if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n swiper.slideNext();\n emit('scroll', newEvent.raw);\n }\n } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n swiper.slidePrev();\n emit('scroll', newEvent.raw);\n } // If you got here is because an animation has been triggered so store the current time\n\n\n lastScrollTime = new window.Date().getTime(); // Return false as a default\n\n return false;\n }\n\n function releaseScroll(newEvent) {\n const params = swiper.params.mousewheel;\n\n if (newEvent.direction < 0) {\n if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n\n return false;\n }\n\n function handle(event) {\n let e = event;\n let disableParentSwiper = true;\n if (!swiper.enabled) return;\n const params = swiper.params.mousewheel;\n\n if (swiper.params.cssMode) {\n e.preventDefault();\n }\n\n let target = swiper.$el;\n\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarget);\n }\n\n if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n\n let delta = 0;\n const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n const data = normalize(e);\n\n if (params.forceToAxis) {\n if (swiper.isHorizontal()) {\n if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true;\n } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true;\n } else {\n delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n }\n\n if (delta === 0) return true;\n if (params.invert) delta = -delta; // Get the scroll positions\n\n let positions = swiper.getTranslate() + delta * params.sensitivity;\n if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();\n if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate(); // When loop is true:\n // the disableParentSwiper will be true.\n // When loop is false:\n // if the scroll positions is not on edge,\n // then the disableParentSwiper will be true.\n // if the scroll on edge positions,\n // then the disableParentSwiper will be false.\n\n disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());\n if (disableParentSwiper && swiper.params.nested) e.stopPropagation();\n\n if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) {\n // Register the new event in a variable which stores the relevant data\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta),\n raw: event\n }; // Keep the most recent events\n\n if (recentWheelEvents.length >= 2) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n recentWheelEvents.push(newEvent); // If there is at least one previous recorded event:\n // If direction has changed or\n // if the scroll is quicker than the previous one:\n // Animate the slider.\n // Else (this is the first time the wheel is moved):\n // Animate the slider.\n\n if (prevEvent) {\n if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {\n animateSlider(newEvent);\n }\n } else {\n animateSlider(newEvent);\n } // If it's time to release the scroll:\n // Return now so you don't hit the preventDefault.\n\n\n if (releaseScroll(newEvent)) {\n return true;\n }\n } else {\n // Freemode or scrollContainer:\n // If we recently snapped after a momentum scroll, then ignore wheel events\n // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n // or if it's a new scroll (larger delta or inverse sign as last event before\n // an end-of-momentum snap).\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta)\n };\n const ignoreWheelEvents = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction;\n\n if (!ignoreWheelEvents) {\n lastEventBeforeSnap = undefined;\n\n if (swiper.params.loop) {\n swiper.loopFix();\n }\n\n let position = swiper.getTranslate() + delta * params.sensitivity;\n const wasBeginning = swiper.isBeginning;\n const wasEnd = swiper.isEnd;\n if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n swiper.setTransition(0);\n swiper.setTranslate(position);\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n\n if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeMode.sticky) {\n // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n // the end of a momentum scroll by storing recent (N=15?) wheel events.\n // 1. do all N events have decreasing or same (absolute value) delta?\n // 2. did all N events arrive in the last M (M=500?) msecs?\n // 3. does the earliest event have an (absolute value) delta that's\n // at least P (P=1?) larger than the most recent event's delta?\n // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n // If 1-4 are \"yes\" then we're near the end of a momentum scroll deceleration.\n // Snap immediately and ignore remaining wheel events in this scroll.\n // See comment above for \"remaining wheel events in this scroll\" determination.\n // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n clearTimeout(timeout);\n timeout = undefined;\n\n if (recentWheelEvents.length >= 15) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n const firstEvent = recentWheelEvents[0];\n recentWheelEvents.push(newEvent);\n\n if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {\n // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n recentWheelEvents.splice(0);\n } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) {\n // We're at the end of the deceleration of a momentum scroll, so there's no need\n // to wait for more events. Snap ASAP on the next tick.\n // Also, because there's some remaining momentum we'll bias the snap in the\n // direction of the ongoing scroll because it's better UX for the scroll to snap\n // in the same direction as the scroll instead of reversing to snap. Therefore,\n // if it's already scrolled more than 20% in the current direction, keep going.\n const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n timeout = nextTick(() => {\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 0); // no delay; move on next tick\n }\n\n if (!timeout) {\n // if we get here, then we haven't detected the end of a momentum scroll, so\n // we'll consider a scroll \"complete\" when there haven't been any wheel events\n // for 500ms.\n timeout = nextTick(() => {\n const snapToThreshold = 0.5;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 500);\n }\n } // Emit event\n\n\n if (!ignoreWheelEvents) emit('scroll', e); // Stop autoplay\n\n if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop(); // Return page scroll on edge positions\n\n if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;\n }\n }\n\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n return false;\n }\n\n function events(method) {\n let target = swiper.$el;\n\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarget);\n }\n\n target[method]('mouseenter', handleMouseEnter);\n target[method]('mouseleave', handleMouseLeave);\n target[method]('wheel', handle);\n }\n\n function enable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.removeEventListener('wheel', handle);\n return true;\n }\n\n if (swiper.mousewheel.enabled) return false;\n events('on');\n swiper.mousewheel.enabled = true;\n return true;\n }\n\n function disable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.addEventListener(event, handle);\n return true;\n }\n\n if (!swiper.mousewheel.enabled) return false;\n events('off');\n swiper.mousewheel.enabled = false;\n return true;\n }\n\n on('init', () => {\n if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n disable();\n }\n\n if (swiper.params.mousewheel.enabled) enable();\n });\n on('destroy', () => {\n if (swiper.params.cssMode) {\n enable();\n }\n\n if (swiper.mousewheel.enabled) disable();\n });\n Object.assign(swiper.mousewheel, {\n enable,\n disable\n });\n }\n\n function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n const document = getDocument();\n\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = swiper.$el.children(`.${checkProps[key]}`)[0];\n\n if (!element) {\n element = document.createElement('div');\n element.className = checkProps[key];\n swiper.$el.append(element);\n }\n\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n\n return params;\n }\n\n function Navigation({\n swiper,\n extendParams,\n on,\n emit\n }) {\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock'\n }\n });\n swiper.navigation = {\n nextEl: null,\n $nextEl: null,\n prevEl: null,\n $prevEl: null\n };\n\n function getEl(el) {\n let $el;\n\n if (el) {\n $el = $(el);\n\n if (swiper.params.uniqueNavElements && typeof el === 'string' && $el.length > 1 && swiper.$el.find(el).length === 1) {\n $el = swiper.$el.find(el);\n }\n }\n\n return $el;\n }\n\n function toggleEl($el, disabled) {\n const params = swiper.params.navigation;\n\n if ($el && $el.length > 0) {\n $el[disabled ? 'addClass' : 'removeClass'](params.disabledClass);\n if ($el[0] && $el[0].tagName === 'BUTTON') $el[0].disabled = disabled;\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n }\n\n function update() {\n // Update Navigation Buttons\n if (swiper.params.loop) return;\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n toggleEl($prevEl, swiper.isBeginning);\n toggleEl($nextEl, swiper.isEnd);\n }\n\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop) return;\n swiper.slidePrev();\n }\n\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop) return;\n swiper.slideNext();\n }\n\n function init() {\n const params = swiper.params.navigation;\n swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev'\n });\n if (!(params.nextEl || params.prevEl)) return;\n const $nextEl = getEl(params.nextEl);\n const $prevEl = getEl(params.prevEl);\n\n if ($nextEl && $nextEl.length > 0) {\n $nextEl.on('click', onNextClick);\n }\n\n if ($prevEl && $prevEl.length > 0) {\n $prevEl.on('click', onPrevClick);\n }\n\n Object.assign(swiper.navigation, {\n $nextEl,\n nextEl: $nextEl && $nextEl[0],\n $prevEl,\n prevEl: $prevEl && $prevEl[0]\n });\n\n if (!swiper.enabled) {\n if ($nextEl) $nextEl.addClass(params.lockClass);\n if ($prevEl) $prevEl.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl && $nextEl.length) {\n $nextEl.off('click', onNextClick);\n $nextEl.removeClass(swiper.params.navigation.disabledClass);\n }\n\n if ($prevEl && $prevEl.length) {\n $prevEl.off('click', onPrevClick);\n $prevEl.removeClass(swiper.params.navigation.disabledClass);\n }\n }\n\n on('init', () => {\n init();\n update();\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl) {\n $nextEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n\n if ($prevEl) {\n $prevEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n });\n on('click', (_s, e) => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n const targetEl = e.target;\n\n if (swiper.params.navigation.hideOnClick && !$(targetEl).is($prevEl) && !$(targetEl).is($nextEl)) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n let isHidden;\n\n if ($nextEl) {\n isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n } else if ($prevEl) {\n isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n }\n\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n\n if ($nextEl) {\n $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n\n if ($prevEl) {\n $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n }\n });\n Object.assign(swiper.navigation, {\n update,\n init,\n destroy\n });\n }\n\n function classesToSelector(classes = '') {\n return `.${classes.trim().replace(/([\\.:!\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n }\n\n function Pagination({\n swiper,\n extendParams,\n on,\n emit\n }) {\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`\n }\n });\n swiper.pagination = {\n el: null,\n $el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0;\n }\n\n function setSideBullets($bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n $bulletEl[position]().addClass(`${bulletActiveClass}-${position}`)[position]().addClass(`${bulletActiveClass}-${position}-${position}`);\n }\n\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el; // Current/Total\n\n let current;\n const total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n if (swiper.params.loop) {\n current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n\n if (current > slidesLength - 1 - swiper.loopedSlides * 2) {\n current -= slidesLength - swiper.loopedSlides * 2;\n }\n\n if (current > total - 1) current -= total;\n if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n } else {\n current = swiper.activeIndex || 0;\n } // Types\n\n\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n\n if (params.dynamicBullets) {\n bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n $el.css(swiper.isHorizontal() ? 'width' : 'height', `${bulletSize * (params.dynamicMainBullets + 4)}px`);\n\n if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n dynamicBulletIndex += current - swiper.previousIndex;\n\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n\n firstIndex = current - dynamicBulletIndex;\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n\n bullets.removeClass(['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`).join(' '));\n\n if ($el.length > 1) {\n bullets.each(bullet => {\n const $bullet = $(bullet);\n const bulletIndex = $bullet.index();\n\n if (bulletIndex === current) {\n $bullet.addClass(params.bulletActiveClass);\n }\n\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n $bullet.addClass(`${params.bulletActiveClass}-main`);\n }\n\n if (bulletIndex === firstIndex) {\n setSideBullets($bullet, 'prev');\n }\n\n if (bulletIndex === lastIndex) {\n setSideBullets($bullet, 'next');\n }\n }\n });\n } else {\n const $bullet = bullets.eq(current);\n const bulletIndex = $bullet.index();\n $bullet.addClass(params.bulletActiveClass);\n\n if (params.dynamicBullets) {\n const $firstDisplayedBullet = bullets.eq(firstIndex);\n const $lastDisplayedBullet = bullets.eq(lastIndex);\n\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);\n }\n\n if (swiper.params.loop) {\n if (bulletIndex >= bullets.length - params.dynamicMainBullets) {\n for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {\n bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);\n }\n\n bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`);\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n }\n }\n\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);\n }\n }\n\n if (params.type === 'fraction') {\n $el.find(classesToSelector(params.currentClass)).text(params.formatFractionCurrent(current + 1));\n $el.find(classesToSelector(params.totalClass)).text(params.formatFractionTotal(total));\n }\n\n if (params.type === 'progressbar') {\n let progressbarDirection;\n\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n\n $el.find(classesToSelector(params.progressbarFillClass)).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);\n }\n\n if (params.type === 'custom' && params.renderCustom) {\n $el.html(params.renderCustom(swiper, current + 1, total));\n emit('paginationRender', $el[0]);\n } else {\n emit('paginationUpdate', $el[0]);\n }\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el;\n let paginationHTML = '';\n\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.loop && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n paginationHTML += `<${params.bulletElement} class=\"${params.bulletClass}\"></${params.bulletElement}>`;\n }\n }\n\n $el.html(paginationHTML);\n swiper.pagination.bullets = $el.find(classesToSelector(params.bulletClass));\n }\n\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = `<span class=\"${params.currentClass}\"></span>` + ' / ' + `<span class=\"${params.totalClass}\"></span>`;\n }\n\n $el.html(paginationHTML);\n }\n\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = `<span class=\"${params.progressbarFillClass}\"></span>`;\n }\n\n $el.html(paginationHTML);\n }\n\n if (params.type !== 'custom') {\n emit('paginationRender', swiper.pagination.$el[0]);\n }\n }\n\n function init() {\n swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n el: 'swiper-pagination'\n });\n const params = swiper.params.pagination;\n if (!params.el) return;\n let $el = $(params.el);\n if ($el.length === 0) return;\n\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) {\n $el = swiper.$el.find(params.el); // check if it belongs to another nested Swiper\n\n if ($el.length > 1) {\n $el = $el.filter(el => {\n if ($(el).parents('.swiper')[0] !== swiper.el) return false;\n return true;\n });\n }\n }\n\n if (params.type === 'bullets' && params.clickable) {\n $el.addClass(params.clickableClass);\n }\n\n $el.addClass(params.modifierClass + params.type);\n $el.addClass(params.modifierClass + swiper.params.direction);\n\n if (params.type === 'bullets' && params.dynamicBullets) {\n $el.addClass(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n $el.addClass(params.progressbarOppositeClass);\n }\n\n if (params.clickable) {\n $el.on('click', classesToSelector(params.bulletClass), function onClick(e) {\n e.preventDefault();\n let index = $(this).index() * swiper.params.slidesPerGroup;\n if (swiper.params.loop) index += swiper.loopedSlides;\n swiper.slideTo(index);\n });\n }\n\n Object.assign(swiper.pagination, {\n $el,\n el: $el[0]\n });\n\n if (!swiper.enabled) {\n $el.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const $el = swiper.pagination.$el;\n $el.removeClass(params.hiddenClass);\n $el.removeClass(params.modifierClass + params.type);\n $el.removeClass(params.modifierClass + swiper.params.direction);\n if (swiper.pagination.bullets && swiper.pagination.bullets.removeClass) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n\n if (params.clickable) {\n $el.off('click', classesToSelector(params.bulletClass));\n }\n }\n\n on('init', () => {\n init();\n render();\n update();\n });\n on('activeIndexChange', () => {\n if (swiper.params.loop) {\n update();\n } else if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n if (!swiper.params.loop) {\n update();\n }\n });\n on('slidesLengthChange', () => {\n if (swiper.params.loop) {\n render();\n update();\n }\n });\n on('snapGridLengthChange', () => {\n if (!swiper.params.loop) {\n render();\n update();\n }\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const {\n $el\n } = swiper.pagination;\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.pagination.lockClass);\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n const {\n $el\n } = swiper.pagination;\n\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && $el.length > 0 && !$(targetEl).hasClass(swiper.params.pagination.bulletClass)) {\n if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n const isHidden = $el.hasClass(swiper.params.pagination.hiddenClass);\n\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n\n $el.toggleClass(swiper.params.pagination.hiddenClass);\n }\n });\n Object.assign(swiper.pagination, {\n render,\n update,\n init,\n destroy\n });\n }\n\n function Scrollbar({\n swiper,\n extendParams,\n on,\n emit\n }) {\n const document = getDocument();\n let isTouched = false;\n let timeout = null;\n let dragTimeout = null;\n let dragStartPos;\n let dragSize;\n let trackSize;\n let divider;\n extendParams({\n scrollbar: {\n el: null,\n dragSize: 'auto',\n hide: false,\n draggable: false,\n snapOnRelease: true,\n lockClass: 'swiper-scrollbar-lock',\n dragClass: 'swiper-scrollbar-drag'\n }\n });\n swiper.scrollbar = {\n el: null,\n dragEl: null,\n $el: null,\n $dragEl: null\n };\n\n function setTranslate() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar,\n rtlTranslate: rtl,\n progress\n } = swiper;\n const {\n $dragEl,\n $el\n } = scrollbar;\n const params = swiper.params.scrollbar;\n let newSize = dragSize;\n let newPos = (trackSize - dragSize) * progress;\n\n if (rtl) {\n newPos = -newPos;\n\n if (newPos > 0) {\n newSize = dragSize - newPos;\n newPos = 0;\n } else if (-newPos + dragSize > trackSize) {\n newSize = trackSize + newPos;\n }\n } else if (newPos < 0) {\n newSize = dragSize + newPos;\n newPos = 0;\n } else if (newPos + dragSize > trackSize) {\n newSize = trackSize - newPos;\n }\n\n if (swiper.isHorizontal()) {\n $dragEl.transform(`translate3d(${newPos}px, 0, 0)`);\n $dragEl[0].style.width = `${newSize}px`;\n } else {\n $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`);\n $dragEl[0].style.height = `${newSize}px`;\n }\n\n if (params.hide) {\n clearTimeout(timeout);\n $el[0].style.opacity = 1;\n timeout = setTimeout(() => {\n $el[0].style.opacity = 0;\n $el.transition(400);\n }, 1000);\n }\n }\n\n function setTransition(duration) {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.$dragEl.transition(duration);\n }\n\n function updateSize() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar\n } = swiper;\n const {\n $dragEl,\n $el\n } = scrollbar;\n $dragEl[0].style.width = '';\n $dragEl[0].style.height = '';\n trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\n\n if (swiper.params.scrollbar.dragSize === 'auto') {\n dragSize = trackSize * divider;\n } else {\n dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n }\n\n if (swiper.isHorizontal()) {\n $dragEl[0].style.width = `${dragSize}px`;\n } else {\n $dragEl[0].style.height = `${dragSize}px`;\n }\n\n if (divider >= 1) {\n $el[0].style.display = 'none';\n } else {\n $el[0].style.display = '';\n }\n\n if (swiper.params.scrollbar.hide) {\n $el[0].style.opacity = 0;\n }\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n scrollbar.$el[swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);\n }\n }\n\n function getPointerPosition(e) {\n if (swiper.isHorizontal()) {\n return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientX : e.clientX;\n }\n\n return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientY : e.clientY;\n }\n\n function setDragPosition(e) {\n const {\n scrollbar,\n rtlTranslate: rtl\n } = swiper;\n const {\n $el\n } = scrollbar;\n let positionRatio;\n positionRatio = (getPointerPosition(e) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\n\n const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n function onDragStart(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el,\n $dragEl\n } = scrollbar;\n isTouched = true;\n dragStartPos = e.target === $dragEl[0] || e.target === $dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n e.preventDefault();\n e.stopPropagation();\n $wrapperEl.transition(100);\n $dragEl.transition(100);\n setDragPosition(e);\n clearTimeout(dragTimeout);\n $el.transition(0);\n\n if (params.hide) {\n $el.css('opacity', 1);\n }\n\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', 'none');\n }\n\n emit('scrollbarDragStart', e);\n }\n\n function onDragMove(e) {\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el,\n $dragEl\n } = scrollbar;\n if (!isTouched) return;\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n setDragPosition(e);\n $wrapperEl.transition(0);\n $el.transition(0);\n $dragEl.transition(0);\n emit('scrollbarDragMove', e);\n }\n\n function onDragEnd(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el\n } = scrollbar;\n if (!isTouched) return;\n isTouched = false;\n\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', '');\n $wrapperEl.transition('');\n }\n\n if (params.hide) {\n clearTimeout(dragTimeout);\n dragTimeout = nextTick(() => {\n $el.css('opacity', 0);\n $el.transition(400);\n }, 1000);\n }\n\n emit('scrollbarDragEnd', e);\n\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n }\n\n function events(method) {\n const {\n scrollbar,\n touchEventsTouch,\n touchEventsDesktop,\n params,\n support\n } = swiper;\n const $el = scrollbar.$el;\n const target = $el[0];\n const activeListener = support.passiveListener && params.passiveListeners ? {\n passive: false,\n capture: false\n } : false;\n const passiveListener = support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n if (!target) return;\n const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n\n if (!support.touch) {\n target[eventMethod](touchEventsDesktop.start, onDragStart, activeListener);\n document[eventMethod](touchEventsDesktop.move, onDragMove, activeListener);\n document[eventMethod](touchEventsDesktop.end, onDragEnd, passiveListener);\n } else {\n target[eventMethod](touchEventsTouch.start, onDragStart, activeListener);\n target[eventMethod](touchEventsTouch.move, onDragMove, activeListener);\n target[eventMethod](touchEventsTouch.end, onDragEnd, passiveListener);\n }\n }\n\n function enableDraggable() {\n if (!swiper.params.scrollbar.el) return;\n events('on');\n }\n\n function disableDraggable() {\n if (!swiper.params.scrollbar.el) return;\n events('off');\n }\n\n function init() {\n const {\n scrollbar,\n $el: $swiperEl\n } = swiper;\n swiper.params.scrollbar = createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, {\n el: 'swiper-scrollbar'\n });\n const params = swiper.params.scrollbar;\n if (!params.el) return;\n let $el = $(params.el);\n\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {\n $el = $swiperEl.find(params.el);\n }\n\n let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`);\n\n if ($dragEl.length === 0) {\n $dragEl = $(`<div class=\"${swiper.params.scrollbar.dragClass}\"></div>`);\n $el.append($dragEl);\n }\n\n Object.assign(scrollbar, {\n $el,\n el: $el[0],\n $dragEl,\n dragEl: $dragEl[0]\n });\n\n if (params.draggable) {\n enableDraggable();\n }\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n }\n }\n\n function destroy() {\n disableDraggable();\n }\n\n on('init', () => {\n init();\n updateSize();\n setTranslate();\n });\n on('update resize observerUpdate lock unlock', () => {\n updateSize();\n });\n on('setTranslate', () => {\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n setTransition(duration);\n });\n on('enable disable', () => {\n const {\n $el\n } = swiper.scrollbar;\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n }\n });\n on('destroy', () => {\n destroy();\n });\n Object.assign(swiper.scrollbar, {\n updateSize,\n setTranslate,\n init,\n destroy\n });\n }\n\n function Parallax({\n swiper,\n extendParams,\n on\n }) {\n extendParams({\n parallax: {\n enabled: false\n }\n });\n\n const setTransform = (el, progress) => {\n const {\n rtl\n } = swiper;\n const $el = $(el);\n const rtlFactor = rtl ? -1 : 1;\n const p = $el.attr('data-swiper-parallax') || '0';\n let x = $el.attr('data-swiper-parallax-x');\n let y = $el.attr('data-swiper-parallax-y');\n const scale = $el.attr('data-swiper-parallax-scale');\n const opacity = $el.attr('data-swiper-parallax-opacity');\n\n if (x || y) {\n x = x || '0';\n y = y || '0';\n } else if (swiper.isHorizontal()) {\n x = p;\n y = '0';\n } else {\n y = p;\n x = '0';\n }\n\n if (x.indexOf('%') >= 0) {\n x = `${parseInt(x, 10) * progress * rtlFactor}%`;\n } else {\n x = `${x * progress * rtlFactor}px`;\n }\n\n if (y.indexOf('%') >= 0) {\n y = `${parseInt(y, 10) * progress}%`;\n } else {\n y = `${y * progress}px`;\n }\n\n if (typeof opacity !== 'undefined' && opacity !== null) {\n const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));\n $el[0].style.opacity = currentOpacity;\n }\n\n if (typeof scale === 'undefined' || scale === null) {\n $el.transform(`translate3d(${x}, ${y}, 0px)`);\n } else {\n const currentScale = scale - (scale - 1) * (1 - Math.abs(progress));\n $el.transform(`translate3d(${x}, ${y}, 0px) scale(${currentScale})`);\n }\n };\n\n const setTranslate = () => {\n const {\n $el,\n slides,\n progress,\n snapGrid\n } = swiper;\n $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(el => {\n setTransform(el, progress);\n });\n slides.each((slideEl, slideIndex) => {\n let slideProgress = slideEl.progress;\n\n if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);\n }\n\n slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(el => {\n setTransform(el, slideProgress);\n });\n });\n };\n\n const setTransition = (duration = swiper.params.speed) => {\n const {\n $el\n } = swiper;\n $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(parallaxEl => {\n const $parallaxEl = $(parallaxEl);\n let parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n $parallaxEl.transition(parallaxDuration);\n });\n };\n\n on('beforeInit', () => {\n if (!swiper.params.parallax.enabled) return;\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n });\n on('init', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTranslate', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTransition', (_swiper, duration) => {\n if (!swiper.params.parallax.enabled) return;\n setTransition(duration);\n });\n }\n\n function Zoom({\n swiper,\n extendParams,\n on,\n emit\n }) {\n const window = getWindow();\n extendParams({\n zoom: {\n enabled: false,\n maxRatio: 3,\n minRatio: 1,\n toggle: true,\n containerClass: 'swiper-zoom-container',\n zoomedSlideClass: 'swiper-slide-zoomed'\n }\n });\n swiper.zoom = {\n enabled: false\n };\n let currentScale = 1;\n let isScaling = false;\n let gesturesEnabled;\n let fakeGestureTouched;\n let fakeGestureMoved;\n const gesture = {\n $slideEl: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n $imageEl: undefined,\n $imageWrapEl: undefined,\n maxRatio: 3\n };\n const image = {\n isTouched: undefined,\n isMoved: undefined,\n currentX: undefined,\n currentY: undefined,\n minX: undefined,\n minY: undefined,\n maxX: undefined,\n maxY: undefined,\n width: undefined,\n height: undefined,\n startX: undefined,\n startY: undefined,\n touchesStart: {},\n touchesCurrent: {}\n };\n const velocity = {\n x: undefined,\n y: undefined,\n prevPositionX: undefined,\n prevPositionY: undefined,\n prevTime: undefined\n };\n let scale = 1;\n Object.defineProperty(swiper.zoom, 'scale', {\n get() {\n return scale;\n },\n\n set(value) {\n if (scale !== value) {\n const imageEl = gesture.$imageEl ? gesture.$imageEl[0] : undefined;\n const slideEl = gesture.$slideEl ? gesture.$slideEl[0] : undefined;\n emit('zoomChange', value, imageEl, slideEl);\n }\n\n scale = value;\n }\n\n });\n\n function getDistanceBetweenTouches(e) {\n if (e.targetTouches.length < 2) return 1;\n const x1 = e.targetTouches[0].pageX;\n const y1 = e.targetTouches[0].pageY;\n const x2 = e.targetTouches[1].pageX;\n const y2 = e.targetTouches[1].pageY;\n const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n return distance;\n } // Events\n\n\n function onGestureStart(e) {\n const support = swiper.support;\n const params = swiper.params.zoom;\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n\n if (!support.gestures) {\n if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) {\n return;\n }\n\n fakeGestureTouched = true;\n gesture.scaleStart = getDistanceBetweenTouches(e);\n }\n\n if (!gesture.$slideEl || !gesture.$slideEl.length) {\n gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('img, svg, canvas, picture, .swiper-zoom-target');\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n\n if (gesture.$imageWrapEl.length === 0) {\n gesture.$imageEl = undefined;\n return;\n }\n }\n\n if (gesture.$imageEl) {\n gesture.$imageEl.transition(0);\n }\n\n isScaling = true;\n }\n\n function onGestureChange(e) {\n const support = swiper.support;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n\n if (!support.gestures) {\n if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) {\n return;\n }\n\n fakeGestureMoved = true;\n gesture.scaleMove = getDistanceBetweenTouches(e);\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) {\n if (e.type === 'gesturechange') onGestureStart(e);\n return;\n }\n\n if (support.gestures) {\n zoom.scale = e.scale * currentScale;\n } else {\n zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale;\n }\n\n if (zoom.scale > gesture.maxRatio) {\n zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;\n }\n\n if (zoom.scale < params.minRatio) {\n zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;\n }\n\n gesture.$imageEl.transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n }\n\n function onGestureEnd(e) {\n const device = swiper.device;\n const support = swiper.support;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n\n if (!support.gestures) {\n if (!fakeGestureTouched || !fakeGestureMoved) {\n return;\n }\n\n if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2 && !device.android) {\n return;\n }\n\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n gesture.$imageEl.transition(swiper.params.speed).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n currentScale = zoom.scale;\n isScaling = false;\n if (zoom.scale === 1) gesture.$slideEl = undefined;\n }\n\n function onTouchStart(e) {\n const device = swiper.device;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n if (image.isTouched) return;\n if (device.android && e.cancelable) e.preventDefault();\n image.isTouched = true;\n image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n }\n\n function onTouchMove(e) {\n const zoom = swiper.zoom;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n swiper.allowClick = false;\n if (!image.isTouched || !gesture.$slideEl) return;\n\n if (!image.isMoved) {\n image.width = gesture.$imageEl[0].offsetWidth;\n image.height = gesture.$imageEl[0].offsetHeight;\n image.startX = getTranslate(gesture.$imageWrapEl[0], 'x') || 0;\n image.startY = getTranslate(gesture.$imageWrapEl[0], 'y') || 0;\n gesture.slideWidth = gesture.$slideEl[0].offsetWidth;\n gesture.slideHeight = gesture.$slideEl[0].offsetHeight;\n gesture.$imageWrapEl.transition(0);\n } // Define if we need image drag\n\n\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n\n if (!image.isMoved && !isScaling) {\n if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {\n image.isTouched = false;\n return;\n }\n\n if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {\n image.isTouched = false;\n return;\n }\n }\n\n if (e.cancelable) {\n e.preventDefault();\n }\n\n e.stopPropagation();\n image.isMoved = true;\n image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX;\n image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY;\n\n if (image.currentX < image.minX) {\n image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;\n }\n\n if (image.currentX > image.maxX) {\n image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;\n }\n\n if (image.currentY < image.minY) {\n image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;\n }\n\n if (image.currentY > image.maxY) {\n image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;\n } // Velocity\n\n\n if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n if (!velocity.prevTime) velocity.prevTime = Date.now();\n velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n velocity.prevPositionX = image.touchesCurrent.x;\n velocity.prevPositionY = image.touchesCurrent.y;\n velocity.prevTime = Date.now();\n gesture.$imageWrapEl.transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n }\n\n function onTouchEnd() {\n const zoom = swiper.zoom;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n if (!image.isTouched || !image.isMoved) {\n image.isTouched = false;\n image.isMoved = false;\n return;\n }\n\n image.isTouched = false;\n image.isMoved = false;\n let momentumDurationX = 300;\n let momentumDurationY = 300;\n const momentumDistanceX = velocity.x * momentumDurationX;\n const newPositionX = image.currentX + momentumDistanceX;\n const momentumDistanceY = velocity.y * momentumDurationY;\n const newPositionY = image.currentY + momentumDistanceY; // Fix duration\n\n if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n image.currentX = newPositionX;\n image.currentY = newPositionY; // Define if we need image drag\n\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n gesture.$imageWrapEl.transition(momentumDuration).transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n }\n\n function onTransitionEnd() {\n const zoom = swiper.zoom;\n\n if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {\n if (gesture.$imageEl) {\n gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');\n }\n\n if (gesture.$imageWrapEl) {\n gesture.$imageWrapEl.transform('translate3d(0,0,0)');\n }\n\n zoom.scale = 1;\n currentScale = 1;\n gesture.$slideEl = undefined;\n gesture.$imageEl = undefined;\n gesture.$imageWrapEl = undefined;\n }\n }\n\n function zoomIn(e) {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n\n if (!gesture.$slideEl) {\n if (e && e.target) {\n gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n }\n\n if (!gesture.$slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n } else {\n gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n }\n }\n\n gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('img, svg, canvas, picture, .swiper-zoom-target');\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return;\n\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.touchAction = 'none';\n }\n\n gesture.$slideEl.addClass(`${params.zoomedSlideClass}`);\n let touchX;\n let touchY;\n let offsetX;\n let offsetY;\n let diffX;\n let diffY;\n let translateX;\n let translateY;\n let imageWidth;\n let imageHeight;\n let scaledWidth;\n let scaledHeight;\n let translateMinX;\n let translateMinY;\n let translateMaxX;\n let translateMaxY;\n let slideWidth;\n let slideHeight;\n\n if (typeof image.touchesStart.x === 'undefined' && e) {\n touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;\n touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;\n } else {\n touchX = image.touchesStart.x;\n touchY = image.touchesStart.y;\n }\n\n zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n\n if (e) {\n slideWidth = gesture.$slideEl[0].offsetWidth;\n slideHeight = gesture.$slideEl[0].offsetHeight;\n offsetX = gesture.$slideEl.offset().left + window.scrollX;\n offsetY = gesture.$slideEl.offset().top + window.scrollY;\n diffX = offsetX + slideWidth / 2 - touchX;\n diffY = offsetY + slideHeight / 2 - touchY;\n imageWidth = gesture.$imageEl[0].offsetWidth;\n imageHeight = gesture.$imageEl[0].offsetHeight;\n scaledWidth = imageWidth * zoom.scale;\n scaledHeight = imageHeight * zoom.scale;\n translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\n translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\n translateMaxX = -translateMinX;\n translateMaxY = -translateMinY;\n translateX = diffX * zoom.scale;\n translateY = diffY * zoom.scale;\n\n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n\n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n } else {\n translateX = 0;\n translateY = 0;\n }\n\n gesture.$imageWrapEl.transition(300).transform(`translate3d(${translateX}px, ${translateY}px,0)`);\n gesture.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n }\n\n function zoomOut() {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n\n if (!gesture.$slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n } else {\n gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n }\n\n gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('img, svg, canvas, picture, .swiper-zoom-target');\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return;\n\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.style.touchAction = '';\n }\n\n zoom.scale = 1;\n currentScale = 1;\n gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');\n gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');\n gesture.$slideEl.removeClass(`${params.zoomedSlideClass}`);\n gesture.$slideEl = undefined;\n } // Toggle Zoom\n\n\n function zoomToggle(e) {\n const zoom = swiper.zoom;\n\n if (zoom.scale && zoom.scale !== 1) {\n // Zoom Out\n zoomOut();\n } else {\n // Zoom In\n zoomIn(e);\n }\n }\n\n function getListeners() {\n const support = swiper.support;\n const passiveListener = swiper.touchEvents.start === 'touchstart' && support.passiveListener && swiper.params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n const activeListenerWithCapture = support.passiveListener ? {\n passive: false,\n capture: true\n } : true;\n return {\n passiveListener,\n activeListenerWithCapture\n };\n }\n\n function getSlideSelector() {\n return `.${swiper.params.slideClass}`;\n }\n\n function toggleGestures(method) {\n const {\n passiveListener\n } = getListeners();\n const slideSelector = getSlideSelector();\n swiper.$wrapperEl[method]('gesturestart', slideSelector, onGestureStart, passiveListener);\n swiper.$wrapperEl[method]('gesturechange', slideSelector, onGestureChange, passiveListener);\n swiper.$wrapperEl[method]('gestureend', slideSelector, onGestureEnd, passiveListener);\n }\n\n function enableGestures() {\n if (gesturesEnabled) return;\n gesturesEnabled = true;\n toggleGestures('on');\n }\n\n function disableGestures() {\n if (!gesturesEnabled) return;\n gesturesEnabled = false;\n toggleGestures('off');\n } // Attach/Detach Events\n\n\n function enable() {\n const zoom = swiper.zoom;\n if (zoom.enabled) return;\n zoom.enabled = true;\n const support = swiper.support;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n const slideSelector = getSlideSelector(); // Scale image\n\n if (support.gestures) {\n swiper.$wrapperEl.on(swiper.touchEvents.start, enableGestures, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.end, disableGestures, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, onGestureStart, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, onGestureChange, activeListenerWithCapture);\n swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener);\n\n if (swiper.touchEvents.cancel) {\n swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, onGestureEnd, passiveListener);\n }\n } // Move image\n\n\n swiper.$wrapperEl.on(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, onTouchMove, activeListenerWithCapture);\n }\n\n function disable() {\n const zoom = swiper.zoom;\n if (!zoom.enabled) return;\n const support = swiper.support;\n zoom.enabled = false;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n const slideSelector = getSlideSelector(); // Scale image\n\n if (support.gestures) {\n swiper.$wrapperEl.off(swiper.touchEvents.start, enableGestures, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.end, disableGestures, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, onGestureStart, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, onGestureChange, activeListenerWithCapture);\n swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener);\n\n if (swiper.touchEvents.cancel) {\n swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, onGestureEnd, passiveListener);\n }\n } // Move image\n\n\n swiper.$wrapperEl.off(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, onTouchMove, activeListenerWithCapture);\n }\n\n on('init', () => {\n if (swiper.params.zoom.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n disable();\n });\n on('touchStart', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchStart(e);\n });\n on('touchEnd', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchEnd();\n });\n on('doubleTap', (_s, e) => {\n if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n zoomToggle(e);\n }\n });\n on('transitionEnd', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n onTransitionEnd();\n }\n });\n on('slideChange', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n onTransitionEnd();\n }\n });\n Object.assign(swiper.zoom, {\n enable,\n disable,\n in: zoomIn,\n out: zoomOut,\n toggle: zoomToggle\n });\n }\n\n function Lazy({\n swiper,\n extendParams,\n on,\n emit\n }) {\n extendParams({\n lazy: {\n checkInView: false,\n enabled: false,\n loadPrevNext: false,\n loadPrevNextAmount: 1,\n loadOnTransitionStart: false,\n scrollingElement: '',\n elementClass: 'swiper-lazy',\n loadingClass: 'swiper-lazy-loading',\n loadedClass: 'swiper-lazy-loaded',\n preloaderClass: 'swiper-lazy-preloader'\n }\n });\n swiper.lazy = {};\n let scrollHandlerAttached = false;\n let initialImageLoaded = false;\n\n function loadInSlide(index, loadInDuplicate = true) {\n const params = swiper.params.lazy;\n if (typeof index === 'undefined') return;\n if (swiper.slides.length === 0) return;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n const $slideEl = isVirtual ? swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${index}\"]`) : swiper.slides.eq(index);\n const $images = $slideEl.find(`.${params.elementClass}:not(.${params.loadedClass}):not(.${params.loadingClass})`);\n\n if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {\n $images.push($slideEl[0]);\n }\n\n if ($images.length === 0) return;\n $images.each(imageEl => {\n const $imageEl = $(imageEl);\n $imageEl.addClass(params.loadingClass);\n const background = $imageEl.attr('data-background');\n const src = $imageEl.attr('data-src');\n const srcset = $imageEl.attr('data-srcset');\n const sizes = $imageEl.attr('data-sizes');\n const $pictureEl = $imageEl.parent('picture');\n swiper.loadImage($imageEl[0], src || background, srcset, sizes, false, () => {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper && !swiper.params || swiper.destroyed) return;\n\n if (background) {\n $imageEl.css('background-image', `url(\"${background}\")`);\n $imageEl.removeAttr('data-background');\n } else {\n if (srcset) {\n $imageEl.attr('srcset', srcset);\n $imageEl.removeAttr('data-srcset');\n }\n\n if (sizes) {\n $imageEl.attr('sizes', sizes);\n $imageEl.removeAttr('data-sizes');\n }\n\n if ($pictureEl.length) {\n $pictureEl.children('source').each(sourceEl => {\n const $source = $(sourceEl);\n\n if ($source.attr('data-srcset')) {\n $source.attr('srcset', $source.attr('data-srcset'));\n $source.removeAttr('data-srcset');\n }\n });\n }\n\n if (src) {\n $imageEl.attr('src', src);\n $imageEl.removeAttr('data-src');\n }\n }\n\n $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);\n $slideEl.find(`.${params.preloaderClass}`).remove();\n\n if (swiper.params.loop && loadInDuplicate) {\n const slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');\n\n if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {\n const originalSlide = swiper.$wrapperEl.children(`[data-swiper-slide-index=\"${slideOriginalIndex}\"]:not(.${swiper.params.slideDuplicateClass})`);\n loadInSlide(originalSlide.index(), false);\n } else {\n const duplicatedSlide = swiper.$wrapperEl.children(`.${swiper.params.slideDuplicateClass}[data-swiper-slide-index=\"${slideOriginalIndex}\"]`);\n loadInSlide(duplicatedSlide.index(), false);\n }\n }\n\n emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n });\n emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n });\n }\n\n function load() {\n const {\n $wrapperEl,\n params: swiperParams,\n slides,\n activeIndex\n } = swiper;\n const isVirtual = swiper.virtual && swiperParams.virtual.enabled;\n const params = swiperParams.lazy;\n let slidesPerView = swiperParams.slidesPerView;\n\n if (slidesPerView === 'auto') {\n slidesPerView = 0;\n }\n\n function slideExist(index) {\n if (isVirtual) {\n if ($wrapperEl.children(`.${swiperParams.slideClass}[data-swiper-slide-index=\"${index}\"]`).length) {\n return true;\n }\n } else if (slides[index]) return true;\n\n return false;\n }\n\n function slideIndex(slideEl) {\n if (isVirtual) {\n return $(slideEl).attr('data-swiper-slide-index');\n }\n\n return $(slideEl).index();\n }\n\n if (!initialImageLoaded) initialImageLoaded = true;\n\n if (swiper.params.watchSlidesProgress) {\n $wrapperEl.children(`.${swiperParams.slideVisibleClass}`).each(slideEl => {\n const index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();\n loadInSlide(index);\n });\n } else if (slidesPerView > 1) {\n for (let i = activeIndex; i < activeIndex + slidesPerView; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n }\n } else {\n loadInSlide(activeIndex);\n }\n\n if (params.loadPrevNext) {\n if (slidesPerView > 1 || params.loadPrevNextAmount && params.loadPrevNextAmount > 1) {\n const amount = params.loadPrevNextAmount;\n const spv = slidesPerView;\n const maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);\n const minIndex = Math.max(activeIndex - Math.max(spv, amount), 0); // Next Slides\n\n for (let i = activeIndex + slidesPerView; i < maxIndex; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n } // Prev Slides\n\n\n for (let i = minIndex; i < activeIndex; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n }\n } else {\n const nextSlide = $wrapperEl.children(`.${swiperParams.slideNextClass}`);\n if (nextSlide.length > 0) loadInSlide(slideIndex(nextSlide));\n const prevSlide = $wrapperEl.children(`.${swiperParams.slidePrevClass}`);\n if (prevSlide.length > 0) loadInSlide(slideIndex(prevSlide));\n }\n }\n }\n\n function checkInViewOnLoad() {\n const window = getWindow();\n if (!swiper || swiper.destroyed) return;\n const $scrollElement = swiper.params.lazy.scrollingElement ? $(swiper.params.lazy.scrollingElement) : $(window);\n const isWindow = $scrollElement[0] === window;\n const scrollElementWidth = isWindow ? window.innerWidth : $scrollElement[0].offsetWidth;\n const scrollElementHeight = isWindow ? window.innerHeight : $scrollElement[0].offsetHeight;\n const swiperOffset = swiper.$el.offset();\n const {\n rtlTranslate: rtl\n } = swiper;\n let inView = false;\n if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiper.width, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiper.height], [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height]];\n\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n\n if (point[0] >= 0 && point[0] <= scrollElementWidth && point[1] >= 0 && point[1] <= scrollElementHeight) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n\n inView = true;\n }\n }\n\n const passiveListener = swiper.touchEvents.start === 'touchstart' && swiper.support.passiveListener && swiper.params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n\n if (inView) {\n load();\n $scrollElement.off('scroll', checkInViewOnLoad, passiveListener);\n } else if (!scrollHandlerAttached) {\n scrollHandlerAttached = true;\n $scrollElement.on('scroll', checkInViewOnLoad, passiveListener);\n }\n }\n\n on('beforeInit', () => {\n if (swiper.params.lazy.enabled && swiper.params.preloadImages) {\n swiper.params.preloadImages = false;\n }\n });\n on('init', () => {\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('scroll', () => {\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.freeMode.sticky) {\n load();\n }\n });\n on('scrollbarDragMove resize _freeModeNoMomentumRelease', () => {\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('transitionStart', () => {\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.loadOnTransitionStart || !swiper.params.lazy.loadOnTransitionStart && !initialImageLoaded) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n }\n });\n on('transitionEnd', () => {\n if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('slideChange', () => {\n const {\n lazy,\n cssMode,\n watchSlidesProgress,\n touchReleaseOnEdges,\n resistanceRatio\n } = swiper.params;\n\n if (lazy.enabled && (cssMode || watchSlidesProgress && (touchReleaseOnEdges || resistanceRatio === 0))) {\n load();\n }\n });\n Object.assign(swiper.lazy, {\n load,\n loadInSlide\n });\n }\n\n /* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\n function Controller({\n swiper,\n extendParams,\n on\n }) {\n extendParams({\n controller: {\n control: undefined,\n inverse: false,\n by: 'slide' // or 'container'\n\n }\n });\n swiper.controller = {\n control: undefined\n };\n\n function LinearSpline(x, y) {\n const binarySearch = function search() {\n let maxIndex;\n let minIndex;\n let guess;\n return (array, val) => {\n minIndex = -1;\n maxIndex = array.length;\n\n while (maxIndex - minIndex > 1) {\n guess = maxIndex + minIndex >> 1;\n\n if (array[guess] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n }\n\n return maxIndex;\n };\n }();\n\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1; // Given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n\n let i1;\n let i3;\n\n this.interpolate = function interpolate(x2) {\n if (!x2) return 0; // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1; // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n\n return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];\n };\n\n return this;\n } // xxx: for now i will just save one spline function to to\n\n\n function getInterpolateFunction(c) {\n if (!swiper.controller.spline) {\n swiper.controller.spline = swiper.params.loop ? new LinearSpline(swiper.slidesGrid, c.slidesGrid) : new LinearSpline(swiper.snapGrid, c.snapGrid);\n }\n }\n\n function setTranslate(_t, byController) {\n const controlled = swiper.controller.control;\n let multiplier;\n let controlledTranslate;\n const Swiper = swiper.constructor;\n\n function setControlledTranslate(c) {\n // this will create an Interpolate function based on the snapGrids\n // x is the Grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n\n if (swiper.params.controller.by === 'slide') {\n getInterpolateFunction(c); // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n // but it did not work out\n\n controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n }\n\n if (!controlledTranslate || swiper.params.controller.by === 'container') {\n multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();\n }\n\n if (swiper.params.controller.inverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n\n c.updateProgress(controlledTranslate);\n c.setTranslate(controlledTranslate, swiper);\n c.updateActiveIndex();\n c.updateSlidesClasses();\n }\n\n if (Array.isArray(controlled)) {\n for (let i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTranslate(controlled);\n }\n }\n\n function setTransition(duration, byController) {\n const Swiper = swiper.constructor;\n const controlled = swiper.controller.control;\n let i;\n\n function setControlledTransition(c) {\n c.setTransition(duration, swiper);\n\n if (duration !== 0) {\n c.transitionStart();\n\n if (c.params.autoHeight) {\n nextTick(() => {\n c.updateAutoHeight();\n });\n }\n\n c.$wrapperEl.transitionEnd(() => {\n if (!controlled) return;\n\n if (c.params.loop && swiper.params.controller.by === 'slide') {\n c.loopFix();\n }\n\n c.transitionEnd();\n });\n }\n }\n\n if (Array.isArray(controlled)) {\n for (i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n }\n\n function removeSpline() {\n if (!swiper.controller.control) return;\n\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n }\n\n on('beforeInit', () => {\n swiper.controller.control = swiper.params.controller.control;\n });\n on('update', () => {\n removeSpline();\n });\n on('resize', () => {\n removeSpline();\n });\n on('observerUpdate', () => {\n removeSpline();\n });\n on('setTranslate', (_s, translate, byController) => {\n if (!swiper.controller.control) return;\n swiper.controller.setTranslate(translate, byController);\n });\n on('setTransition', (_s, duration, byController) => {\n if (!swiper.controller.control) return;\n swiper.controller.setTransition(duration, byController);\n });\n Object.assign(swiper.controller, {\n setTranslate,\n setTransition\n });\n }\n\n function A11y({\n swiper,\n extendParams,\n on\n }) {\n extendParams({\n a11y: {\n enabled: true,\n notificationClass: 'swiper-notification',\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n slideLabelMessage: '{{index}} / {{slidesLength}}',\n containerMessage: null,\n containerRoleDescriptionMessage: null,\n itemRoleDescriptionMessage: null,\n slideRole: 'group'\n }\n });\n let liveRegion = null;\n\n function notify(message) {\n const notification = liveRegion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n }\n\n function getRandomNumber(size = 16) {\n const randomChar = () => Math.round(16 * Math.random()).toString(16);\n\n return 'x'.repeat(size).replace(/x/g, randomChar);\n }\n\n function makeElFocusable($el) {\n $el.attr('tabIndex', '0');\n }\n\n function makeElNotFocusable($el) {\n $el.attr('tabIndex', '-1');\n }\n\n function addElRole($el, role) {\n $el.attr('role', role);\n }\n\n function addElRoleDescription($el, description) {\n $el.attr('aria-roledescription', description);\n }\n\n function addElControls($el, controls) {\n $el.attr('aria-controls', controls);\n }\n\n function addElLabel($el, label) {\n $el.attr('aria-label', label);\n }\n\n function addElId($el, id) {\n $el.attr('id', id);\n }\n\n function addElLive($el, live) {\n $el.attr('aria-live', live);\n }\n\n function disableEl($el) {\n $el.attr('aria-disabled', true);\n }\n\n function enableEl($el) {\n $el.attr('aria-disabled', false);\n }\n\n function onEnterOrSpaceKey(e) {\n if (e.keyCode !== 13 && e.keyCode !== 32) return;\n const params = swiper.params.a11y;\n const $targetEl = $(e.target);\n\n if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n if (!(swiper.isEnd && !swiper.params.loop)) {\n swiper.slideNext();\n }\n\n if (swiper.isEnd) {\n notify(params.lastSlideMessage);\n } else {\n notify(params.nextSlideMessage);\n }\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n if (!(swiper.isBeginning && !swiper.params.loop)) {\n swiper.slidePrev();\n }\n\n if (swiper.isBeginning) {\n notify(params.firstSlideMessage);\n } else {\n notify(params.prevSlideMessage);\n }\n }\n\n if (swiper.pagination && $targetEl.is(classesToSelector(swiper.params.pagination.bulletClass))) {\n $targetEl[0].click();\n }\n }\n\n function updateNavigation() {\n if (swiper.params.loop || !swiper.navigation) return;\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($prevEl && $prevEl.length > 0) {\n if (swiper.isBeginning) {\n disableEl($prevEl);\n makeElNotFocusable($prevEl);\n } else {\n enableEl($prevEl);\n makeElFocusable($prevEl);\n }\n }\n\n if ($nextEl && $nextEl.length > 0) {\n if (swiper.isEnd) {\n disableEl($nextEl);\n makeElNotFocusable($nextEl);\n } else {\n enableEl($nextEl);\n makeElFocusable($nextEl);\n }\n }\n }\n\n function hasPagination() {\n return swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length;\n }\n\n function updatePagination() {\n const params = swiper.params.a11y;\n\n if (hasPagination()) {\n swiper.pagination.bullets.each(bulletEl => {\n const $bulletEl = $(bulletEl);\n makeElFocusable($bulletEl);\n\n if (!swiper.params.pagination.renderBullet) {\n addElRole($bulletEl, 'button');\n addElLabel($bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, $bulletEl.index() + 1));\n }\n });\n }\n }\n\n const initNavEl = ($el, wrapperId, message) => {\n makeElFocusable($el);\n\n if ($el[0].tagName !== 'BUTTON') {\n addElRole($el, 'button');\n $el.on('keydown', onEnterOrSpaceKey);\n }\n\n addElLabel($el, message);\n addElControls($el, wrapperId);\n };\n\n function init() {\n const params = swiper.params.a11y;\n swiper.$el.append(liveRegion); // Container\n\n const $containerEl = swiper.$el;\n\n if (params.containerRoleDescriptionMessage) {\n addElRoleDescription($containerEl, params.containerRoleDescriptionMessage);\n }\n\n if (params.containerMessage) {\n addElLabel($containerEl, params.containerMessage);\n } // Wrapper\n\n\n const $wrapperEl = swiper.$wrapperEl;\n const wrapperId = $wrapperEl.attr('id') || `swiper-wrapper-${getRandomNumber(16)}`;\n const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';\n addElId($wrapperEl, wrapperId);\n addElLive($wrapperEl, live); // Slide\n\n if (params.itemRoleDescriptionMessage) {\n addElRoleDescription($(swiper.slides), params.itemRoleDescriptionMessage);\n }\n\n addElRole($(swiper.slides), params.slideRole);\n const slidesLength = swiper.params.loop ? swiper.slides.filter(el => !el.classList.contains(swiper.params.slideDuplicateClass)).length : swiper.slides.length;\n swiper.slides.each((slideEl, index) => {\n const $slideEl = $(slideEl);\n const slideIndex = swiper.params.loop ? parseInt($slideEl.attr('data-swiper-slide-index'), 10) : index;\n const ariaLabelMessage = params.slideLabelMessage.replace(/\\{\\{index\\}\\}/, slideIndex + 1).replace(/\\{\\{slidesLength\\}\\}/, slidesLength);\n addElLabel($slideEl, ariaLabelMessage);\n }); // Navigation\n\n let $nextEl;\n let $prevEl;\n\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n\n if ($nextEl && $nextEl.length) {\n initNavEl($nextEl, wrapperId, params.nextSlideMessage);\n }\n\n if ($prevEl && $prevEl.length) {\n initNavEl($prevEl, wrapperId, params.prevSlideMessage);\n } // Pagination\n\n\n if (hasPagination()) {\n swiper.pagination.$el.on('keydown', classesToSelector(swiper.params.pagination.bulletClass), onEnterOrSpaceKey);\n }\n }\n\n function destroy() {\n if (liveRegion && liveRegion.length > 0) liveRegion.remove();\n let $nextEl;\n let $prevEl;\n\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n\n if ($nextEl) {\n $nextEl.off('keydown', onEnterOrSpaceKey);\n }\n\n if ($prevEl) {\n $prevEl.off('keydown', onEnterOrSpaceKey);\n } // Pagination\n\n\n if (hasPagination()) {\n swiper.pagination.$el.off('keydown', classesToSelector(swiper.params.pagination.bulletClass), onEnterOrSpaceKey);\n }\n }\n\n on('beforeInit', () => {\n liveRegion = $(`<span class=\"${swiper.params.a11y.notificationClass}\" aria-live=\"assertive\" aria-atomic=\"true\"></span>`);\n });\n on('afterInit', () => {\n if (!swiper.params.a11y.enabled) return;\n init();\n updateNavigation();\n });\n on('toEdge', () => {\n if (!swiper.params.a11y.enabled) return;\n updateNavigation();\n });\n on('fromEdge', () => {\n if (!swiper.params.a11y.enabled) return;\n updateNavigation();\n });\n on('paginationUpdate', () => {\n if (!swiper.params.a11y.enabled) return;\n updatePagination();\n });\n on('destroy', () => {\n if (!swiper.params.a11y.enabled) return;\n destroy();\n });\n }\n\n function History({\n swiper,\n extendParams,\n on\n }) {\n extendParams({\n history: {\n enabled: false,\n root: '',\n replaceState: false,\n key: 'slides'\n }\n });\n let initialized = false;\n let paths = {};\n\n const slugify = text => {\n return text.toString().replace(/\\s+/g, '-').replace(/[^\\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');\n };\n\n const getPathValues = urlOverride => {\n const window = getWindow();\n let location;\n\n if (urlOverride) {\n location = new URL(urlOverride);\n } else {\n location = window.location;\n }\n\n const pathArray = location.pathname.slice(1).split('/').filter(part => part !== '');\n const total = pathArray.length;\n const key = pathArray[total - 2];\n const value = pathArray[total - 1];\n return {\n key,\n value\n };\n };\n\n const setHistory = (key, index) => {\n const window = getWindow();\n if (!initialized || !swiper.params.history.enabled) return;\n let location;\n\n if (swiper.params.url) {\n location = new URL(swiper.params.url);\n } else {\n location = window.location;\n }\n\n const slide = swiper.slides.eq(index);\n let value = slugify(slide.attr('data-history'));\n\n if (swiper.params.history.root.length > 0) {\n let root = swiper.params.history.root;\n if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1);\n value = `${root}/${key}/${value}`;\n } else if (!location.pathname.includes(key)) {\n value = `${key}/${value}`;\n }\n\n const currentState = window.history.state;\n\n if (currentState && currentState.value === value) {\n return;\n }\n\n if (swiper.params.history.replaceState) {\n window.history.replaceState({\n value\n }, null, value);\n } else {\n window.history.pushState({\n value\n }, null, value);\n }\n };\n\n const scrollToSlide = (speed, value, runCallbacks) => {\n if (value) {\n for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n const slide = swiper.slides.eq(i);\n const slideHistory = slugify(slide.attr('data-history'));\n\n if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n const index = slide.index();\n swiper.slideTo(index, speed, runCallbacks);\n }\n }\n } else {\n swiper.slideTo(0, speed, runCallbacks);\n }\n };\n\n const setHistoryPopState = () => {\n paths = getPathValues(swiper.params.url);\n scrollToSlide(swiper.params.speed, swiper.paths.value, false);\n };\n\n const init = () => {\n const window = getWindow();\n if (!swiper.params.history) return;\n\n if (!window.history || !window.history.pushState) {\n swiper.params.history.enabled = false;\n swiper.params.hashNavigation.enabled = true;\n return;\n }\n\n initialized = true;\n paths = getPathValues(swiper.params.url);\n if (!paths.key && !paths.value) return;\n scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit);\n\n if (!swiper.params.history.replaceState) {\n window.addEventListener('popstate', setHistoryPopState);\n }\n };\n\n const destroy = () => {\n const window = getWindow();\n\n if (!swiper.params.history.replaceState) {\n window.removeEventListener('popstate', setHistoryPopState);\n }\n };\n\n on('init', () => {\n if (swiper.params.history.enabled) {\n init();\n }\n });\n on('destroy', () => {\n if (swiper.params.history.enabled) {\n destroy();\n }\n });\n on('transitionEnd _freeModeNoMomentumRelease', () => {\n if (initialized) {\n setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n });\n on('slideChange', () => {\n if (initialized && swiper.params.cssMode) {\n setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n });\n }\n\n function HashNavigation({\n swiper,\n extendParams,\n emit,\n on\n }) {\n let initialized = false;\n const document = getDocument();\n const window = getWindow();\n extendParams({\n hashNavigation: {\n enabled: false,\n replaceState: false,\n watchState: false\n }\n });\n\n const onHashChange = () => {\n emit('hashChange');\n const newHash = document.location.hash.replace('#', '');\n const activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');\n\n if (newHash !== activeSlideHash) {\n const newIndex = swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-hash=\"${newHash}\"]`).index();\n if (typeof newIndex === 'undefined') return;\n swiper.slideTo(newIndex);\n }\n };\n\n const setHash = () => {\n if (!initialized || !swiper.params.hashNavigation.enabled) return;\n\n if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {\n window.history.replaceState(null, null, `#${swiper.slides.eq(swiper.activeIndex).attr('data-hash')}` || '');\n emit('hashSet');\n } else {\n const slide = swiper.slides.eq(swiper.activeIndex);\n const hash = slide.attr('data-hash') || slide.attr('data-history');\n document.location.hash = hash || '';\n emit('hashSet');\n }\n };\n\n const init = () => {\n if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return;\n initialized = true;\n const hash = document.location.hash.replace('#', '');\n\n if (hash) {\n const speed = 0;\n\n for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n const slide = swiper.slides.eq(i);\n const slideHash = slide.attr('data-hash') || slide.attr('data-history');\n\n if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n const index = slide.index();\n swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);\n }\n }\n }\n\n if (swiper.params.hashNavigation.watchState) {\n $(window).on('hashchange', onHashChange);\n }\n };\n\n const destroy = () => {\n if (swiper.params.hashNavigation.watchState) {\n $(window).off('hashchange', onHashChange);\n }\n };\n\n on('init', () => {\n if (swiper.params.hashNavigation.enabled) {\n init();\n }\n });\n on('destroy', () => {\n if (swiper.params.hashNavigation.enabled) {\n destroy();\n }\n });\n on('transitionEnd _freeModeNoMomentumRelease', () => {\n if (initialized) {\n setHash();\n }\n });\n on('slideChange', () => {\n if (initialized && swiper.params.cssMode) {\n setHash();\n }\n });\n }\n\n /* eslint no-underscore-dangle: \"off\" */\n function Autoplay({\n swiper,\n extendParams,\n on,\n emit\n }) {\n let timeout;\n swiper.autoplay = {\n running: false,\n paused: false\n };\n extendParams({\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: true,\n stopOnLastSlide: false,\n reverseDirection: false,\n pauseOnMouseEnter: false\n }\n });\n\n function run() {\n const $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n let delay = swiper.params.autoplay.delay;\n\n if ($activeSlideEl.attr('data-swiper-autoplay')) {\n delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n }\n\n clearTimeout(timeout);\n timeout = nextTick(() => {\n let autoplayResult;\n\n if (swiper.params.autoplay.reverseDirection) {\n if (swiper.params.loop) {\n swiper.loopFix();\n autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.isBeginning) {\n autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n autoplayResult = swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n emit('autoplay');\n } else {\n stop();\n }\n } else if (swiper.params.loop) {\n swiper.loopFix();\n autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.isEnd) {\n autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n autoplayResult = swiper.slideTo(0, swiper.params.speed, true, true);\n emit('autoplay');\n } else {\n stop();\n }\n\n if (swiper.params.cssMode && swiper.autoplay.running) run();else if (autoplayResult === false) {\n run();\n }\n }, delay);\n }\n\n function start() {\n if (typeof timeout !== 'undefined') return false;\n if (swiper.autoplay.running) return false;\n swiper.autoplay.running = true;\n emit('autoplayStart');\n run();\n return true;\n }\n\n function stop() {\n if (!swiper.autoplay.running) return false;\n if (typeof timeout === 'undefined') return false;\n\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n\n swiper.autoplay.running = false;\n emit('autoplayStop');\n return true;\n }\n\n function pause(speed) {\n if (!swiper.autoplay.running) return;\n if (swiper.autoplay.paused) return;\n if (timeout) clearTimeout(timeout);\n swiper.autoplay.paused = true;\n\n if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n swiper.autoplay.paused = false;\n run();\n } else {\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].addEventListener(event, onTransitionEnd);\n });\n }\n }\n\n function onVisibilityChange() {\n const document = getDocument();\n\n if (document.visibilityState === 'hidden' && swiper.autoplay.running) {\n pause();\n }\n\n if (document.visibilityState === 'visible' && swiper.autoplay.paused) {\n run();\n swiper.autoplay.paused = false;\n }\n }\n\n function onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;\n if (e.target !== swiper.$wrapperEl[0]) return;\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n });\n swiper.autoplay.paused = false;\n\n if (!swiper.autoplay.running) {\n stop();\n } else {\n run();\n }\n }\n\n function onMouseEnter() {\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n } else {\n pause();\n }\n\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n });\n }\n\n function onMouseLeave() {\n if (swiper.params.autoplay.disableOnInteraction) {\n return;\n }\n\n swiper.autoplay.paused = false;\n run();\n }\n\n function attachMouseEvents() {\n if (swiper.params.autoplay.pauseOnMouseEnter) {\n swiper.$el.on('mouseenter', onMouseEnter);\n swiper.$el.on('mouseleave', onMouseLeave);\n }\n }\n\n function detachMouseEvents() {\n swiper.$el.off('mouseenter', onMouseEnter);\n swiper.$el.off('mouseleave', onMouseLeave);\n }\n\n on('init', () => {\n if (swiper.params.autoplay.enabled) {\n start();\n const document = getDocument();\n document.addEventListener('visibilitychange', onVisibilityChange);\n attachMouseEvents();\n }\n });\n on('beforeTransitionStart', (_s, speed, internal) => {\n if (swiper.autoplay.running) {\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.pause(speed);\n } else {\n stop();\n }\n }\n });\n on('sliderFirstMove', () => {\n if (swiper.autoplay.running) {\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n } else {\n pause();\n }\n }\n });\n on('touchEnd', () => {\n if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {\n run();\n }\n });\n on('destroy', () => {\n detachMouseEvents();\n\n if (swiper.autoplay.running) {\n stop();\n }\n\n const document = getDocument();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n });\n Object.assign(swiper.autoplay, {\n pause,\n run,\n start,\n stop\n });\n }\n\n function Thumb({\n swiper,\n extendParams,\n on\n }) {\n extendParams({\n thumbs: {\n swiper: null,\n multipleActiveThumbs: true,\n autoScrollOffset: 0,\n slideThumbActiveClass: 'swiper-slide-thumb-active',\n thumbsContainerClass: 'swiper-thumbs'\n }\n });\n let initialized = false;\n let swiperCreated = false;\n swiper.thumbs = {\n swiper: null\n };\n\n function onThumbClick() {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) return;\n const clickedIndex = thumbsSwiper.clickedIndex;\n const clickedSlide = thumbsSwiper.clickedSlide;\n if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;\n if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n let slideToIndex;\n\n if (thumbsSwiper.params.loop) {\n slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n } else {\n slideToIndex = clickedIndex;\n }\n\n if (swiper.params.loop) {\n let currentIndex = swiper.activeIndex;\n\n if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n currentIndex = swiper.activeIndex;\n }\n\n const prevIndex = swiper.slides.eq(currentIndex).prevAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n const nextIndex = swiper.slides.eq(currentIndex).nextAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;else slideToIndex = prevIndex;\n }\n\n swiper.slideTo(slideToIndex);\n }\n\n function init() {\n const {\n thumbs: thumbsParams\n } = swiper.params;\n if (initialized) return false;\n initialized = true;\n const SwiperClass = swiper.constructor;\n\n if (thumbsParams.swiper instanceof SwiperClass) {\n swiper.thumbs.swiper = thumbsParams.swiper;\n Object.assign(swiper.thumbs.swiper.originalParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n Object.assign(swiper.thumbs.swiper.params, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n } else if (isObject(thumbsParams.swiper)) {\n const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);\n Object.assign(thumbsSwiperParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);\n swiperCreated = true;\n }\n\n swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);\n swiper.thumbs.swiper.on('tap', onThumbClick);\n return true;\n }\n\n function update(initial) {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) return;\n const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;\n const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n\n if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n let currentThumbsIndex = thumbsSwiper.activeIndex;\n let newThumbsIndex;\n let direction;\n\n if (thumbsSwiper.params.loop) {\n if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {\n thumbsSwiper.loopFix(); // eslint-disable-next-line\n\n thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;\n currentThumbsIndex = thumbsSwiper.activeIndex;\n } // Find actual thumbs index to slide to\n\n\n const prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0).index();\n const nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0).index();\n\n if (typeof prevThumbsIndex === 'undefined') {\n newThumbsIndex = nextThumbsIndex;\n } else if (typeof nextThumbsIndex === 'undefined') {\n newThumbsIndex = prevThumbsIndex;\n } else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) {\n newThumbsIndex = thumbsSwiper.params.slidesPerGroup > 1 ? nextThumbsIndex : currentThumbsIndex;\n } else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) {\n newThumbsIndex = nextThumbsIndex;\n } else {\n newThumbsIndex = prevThumbsIndex;\n }\n\n direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n } else {\n newThumbsIndex = swiper.realIndex;\n direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n }\n\n if (useOffset) {\n newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n }\n\n if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n if (thumbsSwiper.params.centeredSlides) {\n if (newThumbsIndex > currentThumbsIndex) {\n newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n } else {\n newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n }\n } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) ;\n\n thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n }\n } // Activate thumbs\n\n\n let thumbsToActivate = 1;\n const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n\n if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n thumbsToActivate = swiper.params.slidesPerView;\n }\n\n if (!swiper.params.thumbs.multipleActiveThumbs) {\n thumbsToActivate = 1;\n }\n\n thumbsToActivate = Math.floor(thumbsToActivate);\n thumbsSwiper.slides.removeClass(thumbActiveClass);\n\n if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.$wrapperEl.children(`[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).addClass(thumbActiveClass);\n }\n } else {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.slides.eq(swiper.realIndex + i).addClass(thumbActiveClass);\n }\n }\n }\n\n on('beforeInit', () => {\n const {\n thumbs\n } = swiper.params;\n if (!thumbs || !thumbs.swiper) return;\n init();\n update(true);\n });\n on('slideChange update resize observerUpdate', () => {\n if (!swiper.thumbs.swiper) return;\n update();\n });\n on('setTransition', (_s, duration) => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) return;\n thumbsSwiper.setTransition(duration);\n });\n on('beforeDestroy', () => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) return;\n\n if (swiperCreated && thumbsSwiper) {\n thumbsSwiper.destroy();\n }\n });\n Object.assign(swiper.thumbs, {\n init,\n update\n });\n }\n\n function freeMode({\n swiper,\n extendParams,\n emit,\n once\n }) {\n extendParams({\n freeMode: {\n enabled: false,\n momentum: true,\n momentumRatio: 1,\n momentumBounce: true,\n momentumBounceRatio: 1,\n momentumVelocityRatio: 1,\n sticky: false,\n minimumVelocity: 0.02\n }\n });\n\n function onTouchMove() {\n const {\n touchEventsData: data,\n touches\n } = swiper; // Velocity\n\n if (data.velocities.length === 0) {\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n time: data.touchStartTime\n });\n }\n\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n time: now()\n });\n }\n\n function onTouchEnd({\n currentPos\n }) {\n const {\n params,\n $wrapperEl,\n rtlTranslate: rtl,\n snapGrid,\n touchEventsData: data\n } = swiper; // Time diff\n\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n if (currentPos < -swiper.minTranslate()) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n if (currentPos > -swiper.maxTranslate()) {\n if (swiper.slides.length < snapGrid.length) {\n swiper.slideTo(snapGrid.length - 1);\n } else {\n swiper.slideTo(swiper.slides.length - 1);\n }\n\n return;\n }\n\n if (params.freeMode.momentum) {\n if (data.velocities.length > 1) {\n const lastMoveEvent = data.velocities.pop();\n const velocityEvent = data.velocities.pop();\n const distance = lastMoveEvent.position - velocityEvent.position;\n const time = lastMoveEvent.time - velocityEvent.time;\n swiper.velocity = distance / time;\n swiper.velocity /= 2;\n\n if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) {\n swiper.velocity = 0;\n } // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n\n\n if (time > 150 || now() - lastMoveEvent.time > 300) {\n swiper.velocity = 0;\n }\n } else {\n swiper.velocity = 0;\n }\n\n swiper.velocity *= params.freeMode.momentumVelocityRatio;\n data.velocities.length = 0;\n let momentumDuration = 1000 * params.freeMode.momentumRatio;\n const momentumDistance = swiper.velocity * momentumDuration;\n let newPosition = swiper.translate + momentumDistance;\n if (rtl) newPosition = -newPosition;\n let doBounce = false;\n let afterBouncePosition;\n const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio;\n let needsLoopFix;\n\n if (newPosition < swiper.maxTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n newPosition = swiper.maxTranslate() - bounceAmount;\n }\n\n afterBouncePosition = swiper.maxTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.maxTranslate();\n }\n\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (newPosition > swiper.minTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition - swiper.minTranslate() > bounceAmount) {\n newPosition = swiper.minTranslate() + bounceAmount;\n }\n\n afterBouncePosition = swiper.minTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.minTranslate();\n }\n\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (params.freeMode.sticky) {\n let nextSlide;\n\n for (let j = 0; j < snapGrid.length; j += 1) {\n if (snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n }\n\n if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n newPosition = snapGrid[nextSlide];\n } else {\n newPosition = snapGrid[nextSlide - 1];\n }\n\n newPosition = -newPosition;\n }\n\n if (needsLoopFix) {\n once('transitionEnd', () => {\n swiper.loopFix();\n });\n } // Fix duration\n\n\n if (swiper.velocity !== 0) {\n if (rtl) {\n momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n } else {\n momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n }\n\n if (params.freeMode.sticky) {\n // If freeMode.sticky is active and the user ends a swipe with a slow-velocity\n // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n // It's easy to see this when simulating touch with mouse events. To fix this,\n // limit single-slide swipes to the default slide duration. This also has the\n // nice side effect of matching slide speed if the user stopped moving before\n // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n // For faster swipes, also apply limits (albeit higher ones).\n const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n\n if (moveDistance < currentSlideSize) {\n momentumDuration = params.speed;\n } else if (moveDistance < 2 * currentSlideSize) {\n momentumDuration = params.speed * 1.5;\n } else {\n momentumDuration = params.speed * 2.5;\n }\n }\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n }\n\n if (params.freeMode.momentumBounce && doBounce) {\n swiper.updateProgress(afterBouncePosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n swiper.animating = true;\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n emit('momentumBounce');\n swiper.setTransition(params.speed);\n setTimeout(() => {\n swiper.setTranslate(afterBouncePosition);\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }, 0);\n });\n } else if (swiper.velocity) {\n emit('_freeModeNoMomentumRelease');\n swiper.updateProgress(newPosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n\n if (!swiper.animating) {\n swiper.animating = true;\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }\n } else {\n swiper.updateProgress(newPosition);\n }\n\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n } else if (params.freeMode) {\n emit('_freeModeNoMomentumRelease');\n }\n\n if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) {\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n }\n\n Object.assign(swiper, {\n freeMode: {\n onTouchMove,\n onTouchEnd\n }\n });\n }\n\n function Grid({\n swiper,\n extendParams\n }) {\n extendParams({\n grid: {\n rows: 1,\n fill: 'column'\n }\n });\n let slidesNumberEvenToRows;\n let slidesPerRow;\n let numFullColumns;\n\n const initSlides = slidesLength => {\n const {\n slidesPerView\n } = swiper.params;\n const {\n rows,\n fill\n } = swiper.params.grid;\n slidesPerRow = slidesNumberEvenToRows / rows;\n numFullColumns = Math.floor(slidesLength / rows);\n\n if (Math.floor(slidesLength / rows) === slidesLength / rows) {\n slidesNumberEvenToRows = slidesLength;\n } else {\n slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows;\n }\n\n if (slidesPerView !== 'auto' && fill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, slidesPerView * rows);\n }\n };\n\n const updateSlide = (i, slide, slidesLength, getDirectionLabel) => {\n const {\n slidesPerGroup,\n spaceBetween\n } = swiper.params;\n const {\n rows,\n fill\n } = swiper.params.grid; // Set slides order\n\n let newSlideOrderIndex;\n let column;\n let row;\n\n if (fill === 'row' && slidesPerGroup > 1) {\n const groupIndex = Math.floor(i / (slidesPerGroup * rows));\n const slideIndexInGroup = i - rows * slidesPerGroup * groupIndex;\n const columnsInGroup = groupIndex === 0 ? slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * rows * slidesPerGroup) / rows), slidesPerGroup);\n row = Math.floor(slideIndexInGroup / columnsInGroup);\n column = slideIndexInGroup - row * columnsInGroup + groupIndex * slidesPerGroup;\n newSlideOrderIndex = column + row * slidesNumberEvenToRows / rows;\n slide.css({\n '-webkit-order': newSlideOrderIndex,\n order: newSlideOrderIndex\n });\n } else if (fill === 'column') {\n column = Math.floor(i / rows);\n row = i - column * rows;\n\n if (column > numFullColumns || column === numFullColumns && row === rows - 1) {\n row += 1;\n\n if (row >= rows) {\n row = 0;\n column += 1;\n }\n }\n } else {\n row = Math.floor(i / slidesPerRow);\n column = i - row * slidesPerRow;\n }\n\n slide.css(getDirectionLabel('margin-top'), row !== 0 ? spaceBetween && `${spaceBetween}px` : '');\n };\n\n const updateWrapperSize = (slideSize, snapGrid, getDirectionLabel) => {\n const {\n spaceBetween,\n centeredSlides,\n roundLengths\n } = swiper.params;\n const {\n rows\n } = swiper.params.grid;\n swiper.virtualSize = (slideSize + spaceBetween) * slidesNumberEvenToRows;\n swiper.virtualSize = Math.ceil(swiper.virtualSize / rows) - spaceBetween;\n swiper.$wrapperEl.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + spaceBetween}px`\n });\n\n if (centeredSlides) {\n snapGrid.splice(0, snapGrid.length);\n const newSlidesGrid = [];\n\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);\n }\n\n snapGrid.push(...newSlidesGrid);\n }\n };\n\n swiper.grid = {\n initSlides,\n updateSlide,\n updateWrapperSize\n };\n }\n\n function appendSlide(slides) {\n const swiper = this;\n const {\n $wrapperEl,\n params\n } = swiper;\n\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.append(slides[i]);\n }\n } else {\n $wrapperEl.append(slides);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!params.observer) {\n swiper.update();\n }\n }\n\n function prependSlide(slides) {\n const swiper = this;\n const {\n params,\n $wrapperEl,\n activeIndex\n } = swiper;\n\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n let newActiveIndex = activeIndex + 1;\n\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.prepend(slides[i]);\n }\n\n newActiveIndex = activeIndex + slides.length;\n } else {\n $wrapperEl.prepend(slides);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!params.observer) {\n swiper.update();\n }\n\n swiper.slideTo(newActiveIndex, 0, false);\n }\n\n function addSlide(index, slides) {\n const swiper = this;\n const {\n $wrapperEl,\n params,\n activeIndex\n } = swiper;\n let activeIndexBuffer = activeIndex;\n\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n\n const baseLength = swiper.slides.length;\n\n if (index <= 0) {\n swiper.prependSlide(slides);\n return;\n }\n\n if (index >= baseLength) {\n swiper.appendSlide(slides);\n return;\n }\n\n let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n const slidesBuffer = [];\n\n for (let i = baseLength - 1; i >= index; i -= 1) {\n const currentSlide = swiper.slides.eq(i);\n currentSlide.remove();\n slidesBuffer.unshift(currentSlide);\n }\n\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.append(slides[i]);\n }\n\n newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n } else {\n $wrapperEl.append(slides);\n }\n\n for (let i = 0; i < slidesBuffer.length; i += 1) {\n $wrapperEl.append(slidesBuffer[i]);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!params.observer) {\n swiper.update();\n }\n\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n }\n\n function removeSlide(slidesIndexes) {\n const swiper = this;\n const {\n params,\n $wrapperEl,\n activeIndex\n } = swiper;\n let activeIndexBuffer = activeIndex;\n\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n\n let newActiveIndex = activeIndexBuffer;\n let indexToRemove;\n\n if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n for (let i = 0; i < slidesIndexes.length; i += 1) {\n indexToRemove = slidesIndexes[i];\n if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n }\n\n newActiveIndex = Math.max(newActiveIndex, 0);\n } else {\n indexToRemove = slidesIndexes;\n if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!params.observer) {\n swiper.update();\n }\n\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n }\n\n function removeAllSlides() {\n const swiper = this;\n const slidesIndexes = [];\n\n for (let i = 0; i < swiper.slides.length; i += 1) {\n slidesIndexes.push(i);\n }\n\n swiper.removeSlide(slidesIndexes);\n }\n\n function Manipulation({\n swiper\n }) {\n Object.assign(swiper, {\n appendSlide: appendSlide.bind(swiper),\n prependSlide: prependSlide.bind(swiper),\n addSlide: addSlide.bind(swiper),\n removeSlide: removeSlide.bind(swiper),\n removeAllSlides: removeAllSlides.bind(swiper)\n });\n }\n\n function effectInit(params) {\n const {\n effect,\n swiper,\n on,\n setTranslate,\n setTransition,\n overwriteParams,\n perspective\n } = params;\n on('beforeInit', () => {\n if (swiper.params.effect !== effect) return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);\n\n if (perspective && perspective()) {\n swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n }\n\n const overwriteParamsResult = overwriteParams ? overwriteParams() : {};\n Object.assign(swiper.params, overwriteParamsResult);\n Object.assign(swiper.originalParams, overwriteParamsResult);\n });\n on('setTranslate', () => {\n if (swiper.params.effect !== effect) return;\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n if (swiper.params.effect !== effect) return;\n setTransition(duration);\n });\n }\n\n function effectTarget(effectParams, $slideEl) {\n if (effectParams.transformEl) {\n return $slideEl.find(effectParams.transformEl).css({\n 'backface-visibility': 'hidden',\n '-webkit-backface-visibility': 'hidden'\n });\n }\n\n return $slideEl;\n }\n\n function effectVirtualTransitionEnd({\n swiper,\n duration,\n transformEl,\n allSlides\n }) {\n const {\n slides,\n activeIndex,\n $wrapperEl\n } = swiper;\n\n if (swiper.params.virtualTranslate && duration !== 0) {\n let eventTriggered = false;\n let $transitionEndTarget;\n\n if (allSlides) {\n $transitionEndTarget = transformEl ? slides.find(transformEl) : slides;\n } else {\n $transitionEndTarget = transformEl ? slides.eq(activeIndex).find(transformEl) : slides.eq(activeIndex);\n }\n\n $transitionEndTarget.transitionEnd(() => {\n if (eventTriggered) return;\n if (!swiper || swiper.destroyed) return;\n eventTriggered = true;\n swiper.animating = false;\n const triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n\n for (let i = 0; i < triggerEvents.length; i += 1) {\n $wrapperEl.trigger(triggerEvents[i]);\n }\n });\n }\n }\n\n function EffectFade({\n swiper,\n extendParams,\n on\n }) {\n extendParams({\n fadeEffect: {\n crossFade: false,\n transformEl: null\n }\n });\n\n const setTranslate = () => {\n const {\n slides\n } = swiper;\n const params = swiper.params.fadeEffect;\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = swiper.slides.eq(i);\n const offset = $slideEl[0].swiperSlideOffset;\n let tx = -offset;\n if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n let ty = 0;\n\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n\n const slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs($slideEl[0].progress), 0) : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.css({\n opacity: slideOpacity\n }).transform(`translate3d(${tx}px, ${ty}px, 0px)`);\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.fadeEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration);\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformEl,\n allSlides: true\n });\n };\n\n effectInit({\n effect: 'fade',\n swiper,\n on,\n setTranslate,\n setTransition,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n }\n\n function EffectCube({\n swiper,\n extendParams,\n on\n }) {\n extendParams({\n cubeEffect: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94\n }\n });\n\n const setTranslate = () => {\n const {\n $el,\n $wrapperEl,\n slides,\n width: swiperWidth,\n height: swiperHeight,\n rtlTranslate: rtl,\n size: swiperSize,\n browser\n } = swiper;\n const params = swiper.params.cubeEffect;\n const isHorizontal = swiper.isHorizontal();\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let wrapperRotate = 0;\n let $cubeShadowEl;\n\n if (params.shadow) {\n if (isHorizontal) {\n $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');\n\n if ($cubeShadowEl.length === 0) {\n $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n $wrapperEl.append($cubeShadowEl);\n }\n\n $cubeShadowEl.css({\n height: `${swiperWidth}px`\n });\n } else {\n $cubeShadowEl = $el.find('.swiper-cube-shadow');\n\n if ($cubeShadowEl.length === 0) {\n $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n $el.append($cubeShadowEl);\n }\n }\n }\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n let slideIndex = i;\n\n if (isVirtual) {\n slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);\n }\n\n let slideAngle = slideIndex * 90;\n let round = Math.floor(slideAngle / 360);\n\n if (rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n\n const progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n let tx = 0;\n let ty = 0;\n let tz = 0;\n\n if (slideIndex % 4 === 0) {\n tx = -round * 4 * swiperSize;\n tz = 0;\n } else if ((slideIndex - 1) % 4 === 0) {\n tx = 0;\n tz = -round * 4 * swiperSize;\n } else if ((slideIndex - 2) % 4 === 0) {\n tx = swiperSize + round * 4 * swiperSize;\n tz = swiperSize;\n } else if ((slideIndex - 3) % 4 === 0) {\n tx = -swiperSize;\n tz = 3 * swiperSize + swiperSize * 4 * round;\n }\n\n if (rtl) {\n tx = -tx;\n }\n\n if (!isHorizontal) {\n ty = tx;\n tx = 0;\n }\n\n const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;\n\n if (progress <= 1 && progress > -1) {\n wrapperRotate = slideIndex * 90 + progress * 90;\n if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;\n }\n\n $slideEl.transform(transform);\n\n if (params.slideShadows) {\n // Set shadows\n let shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n let shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n if (shadowBefore.length === 0) {\n shadowBefore = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}\"></div>`);\n $slideEl.append(shadowBefore);\n }\n\n if (shadowAfter.length === 0) {\n shadowAfter = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}\"></div>`);\n $slideEl.append(shadowAfter);\n }\n\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n }\n }\n\n $wrapperEl.css({\n '-webkit-transform-origin': `50% 50% -${swiperSize / 2}px`,\n 'transform-origin': `50% 50% -${swiperSize / 2}px`\n });\n\n if (params.shadow) {\n if (isHorizontal) {\n $cubeShadowEl.transform(`translate3d(0px, ${swiperWidth / 2 + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`);\n } else {\n const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n const multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);\n const scale1 = params.shadowScale;\n const scale2 = params.shadowScale / multiplier;\n const offset = params.shadowOffset;\n $cubeShadowEl.transform(`scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${swiperHeight / 2 + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`);\n }\n }\n\n const zFactor = browser.isSafari || browser.isWebView ? -swiperSize / 2 : 0;\n $wrapperEl.transform(`translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`);\n };\n\n const setTransition = duration => {\n const {\n $el,\n slides\n } = swiper;\n slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n\n if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n $el.find('.swiper-cube-shadow').transition(duration);\n }\n };\n\n effectInit({\n effect: 'cube',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n resistanceRatio: 0,\n spaceBetween: 0,\n centeredSlides: false,\n virtualTranslate: true\n })\n });\n }\n\n function createShadow(params, $slideEl, side) {\n const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}`;\n const $shadowContainer = params.transformEl ? $slideEl.find(params.transformEl) : $slideEl;\n let $shadowEl = $shadowContainer.children(`.${shadowClass}`);\n\n if (!$shadowEl.length) {\n $shadowEl = $(`<div class=\"swiper-slide-shadow${side ? `-${side}` : ''}\"></div>`);\n $shadowContainer.append($shadowEl);\n }\n\n return $shadowEl;\n }\n\n function EffectFlip({\n swiper,\n extendParams,\n on\n }) {\n extendParams({\n flipEffect: {\n slideShadows: true,\n limitRotation: true,\n transformEl: null\n }\n });\n\n const setTranslate = () => {\n const {\n slides,\n rtlTranslate: rtl\n } = swiper;\n const params = swiper.params.flipEffect;\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n let progress = $slideEl[0].progress;\n\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n }\n\n const offset = $slideEl[0].swiperSlideOffset;\n const rotate = -180 * progress;\n let rotateY = rotate;\n let rotateX = 0;\n let tx = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n let ty = 0;\n\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n } else if (rtl) {\n rotateY = -rotateY;\n }\n\n $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n\n if (params.slideShadows) {\n // Set shadows\n let shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n let shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n if (shadowBefore.length === 0) {\n shadowBefore = createShadow(params, $slideEl, swiper.isHorizontal() ? 'left' : 'top');\n }\n\n if (shadowAfter.length === 0) {\n shadowAfter = createShadow(params, $slideEl, swiper.isHorizontal() ? 'right' : 'bottom');\n }\n\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n }\n\n const transform = `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(transform);\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.flipEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformEl\n });\n };\n\n effectInit({\n effect: 'flip',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n }\n\n function EffectCoverflow({\n swiper,\n extendParams,\n on\n }) {\n extendParams({\n coverflowEffect: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n scale: 1,\n modifier: 1,\n slideShadows: true,\n transformEl: null\n }\n });\n\n const setTranslate = () => {\n const {\n width: swiperWidth,\n height: swiperHeight,\n slides,\n slidesSizesGrid\n } = swiper;\n const params = swiper.params.coverflowEffect;\n const isHorizontal = swiper.isHorizontal();\n const transform = swiper.translate;\n const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;\n const rotate = isHorizontal ? params.rotate : -params.rotate;\n const translate = params.depth; // Each slide offset from center\n\n for (let i = 0, length = slides.length; i < length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideSize = slidesSizesGrid[i];\n const slideOffset = $slideEl[0].swiperSlideOffset;\n const offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * params.modifier;\n let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier; // var rotateZ = 0\n\n let translateZ = -translate * Math.abs(offsetMultiplier);\n let stretch = params.stretch; // Allow percentage to make a relative stretch for responsive sliders\n\n if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\n stretch = parseFloat(params.stretch) / 100 * slideSize;\n }\n\n let translateY = isHorizontal ? 0 : stretch * offsetMultiplier;\n let translateX = isHorizontal ? stretch * offsetMultiplier : 0;\n let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier); // Fix for ultra small values\n\n if (Math.abs(translateX) < 0.001) translateX = 0;\n if (Math.abs(translateY) < 0.001) translateY = 0;\n if (Math.abs(translateZ) < 0.001) translateZ = 0;\n if (Math.abs(rotateY) < 0.001) rotateY = 0;\n if (Math.abs(rotateX) < 0.001) rotateX = 0;\n if (Math.abs(scale) < 0.001) scale = 0;\n const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`;\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(slideTransform);\n $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n\n if (params.slideShadows) {\n // Set shadows\n let $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n let $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n if ($shadowBeforeEl.length === 0) {\n $shadowBeforeEl = createShadow(params, $slideEl, isHorizontal ? 'left' : 'top');\n }\n\n if ($shadowAfterEl.length === 0) {\n $shadowAfterEl = createShadow(params, $slideEl, isHorizontal ? 'right' : 'bottom');\n }\n\n if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;\n }\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.coverflowEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n };\n\n effectInit({\n effect: 'coverflow',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n watchSlidesProgress: true\n })\n });\n }\n\n function EffectCreative({\n swiper,\n extendParams,\n on\n }) {\n extendParams({\n creativeEffect: {\n transformEl: null,\n limitProgress: 1,\n shadowPerProgress: false,\n progressMultiplier: 1,\n perspective: true,\n prev: {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n opacity: 1,\n scale: 1\n },\n next: {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n opacity: 1,\n scale: 1\n }\n }\n });\n\n const getTranslateValue = value => {\n if (typeof value === 'string') return value;\n return `${value}px`;\n };\n\n const setTranslate = () => {\n const {\n slides\n } = swiper;\n const params = swiper.params.creativeEffect;\n const {\n progressMultiplier: multiplier\n } = params;\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideProgress = $slideEl[0].progress;\n const progress = Math.min(Math.max($slideEl[0].progress, -params.limitProgress), params.limitProgress);\n const originalProgress = Math.min(Math.max($slideEl[0].originalProgress, -params.limitProgress), params.limitProgress);\n const offset = $slideEl[0].swiperSlideOffset;\n const t = [swiper.params.cssMode ? -offset - swiper.translate : -offset, 0, 0];\n const r = [0, 0, 0];\n let custom = false;\n\n if (!swiper.isHorizontal()) {\n t[1] = t[0];\n t[0] = 0;\n }\n\n let data = {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n scale: 1,\n opacity: 1\n };\n\n if (progress < 0) {\n data = params.next;\n custom = true;\n } else if (progress > 0) {\n data = params.prev;\n custom = true;\n } // set translate\n\n\n t.forEach((value, index) => {\n t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(progress * multiplier)}))`;\n }); // set rotates\n\n r.forEach((value, index) => {\n r[index] = data.rotate[index] * Math.abs(progress * multiplier);\n });\n $slideEl[0].style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n const translateString = t.join(', ');\n const rotateString = `rotateX(${r[0]}deg) rotateY(${r[1]}deg) rotateZ(${r[2]}deg)`;\n const scaleString = originalProgress < 0 ? `scale(${1 + (1 - data.scale) * originalProgress * multiplier})` : `scale(${1 - (1 - data.scale) * originalProgress * multiplier})`;\n const opacityString = originalProgress < 0 ? 1 + (1 - data.opacity) * originalProgress * multiplier : 1 - (1 - data.opacity) * originalProgress * multiplier;\n const transform = `translate3d(${translateString}) ${rotateString} ${scaleString}`; // Set shadows\n\n if (custom && data.shadow || !custom) {\n let $shadowEl = $slideEl.children('.swiper-slide-shadow');\n\n if ($shadowEl.length === 0 && data.shadow) {\n $shadowEl = createShadow(params, $slideEl);\n }\n\n if ($shadowEl.length) {\n const shadowOpacity = params.shadowPerProgress ? progress * (1 / params.limitProgress) : progress;\n $shadowEl[0].style.opacity = Math.min(Math.max(Math.abs(shadowOpacity), 0), 1);\n }\n }\n\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(transform).css({\n opacity: opacityString\n });\n\n if (data.origin) {\n $targetEl.css('transform-origin', data.origin);\n }\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.creativeEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow').transition(duration);\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformEl,\n allSlides: true\n });\n };\n\n effectInit({\n effect: 'creative',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => swiper.params.creativeEffect.perspective,\n overwriteParams: () => ({\n watchSlidesProgress: true,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n }\n\n function EffectCards({\n swiper,\n extendParams,\n on\n }) {\n extendParams({\n cardsEffect: {\n slideShadows: true,\n transformEl: null\n }\n });\n\n const setTranslate = () => {\n const {\n slides,\n activeIndex\n } = swiper;\n const params = swiper.params.cardsEffect;\n const {\n startTranslate,\n isTouched\n } = swiper.touchEventsData;\n const currentTranslate = swiper.translate;\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideProgress = $slideEl[0].progress;\n const progress = Math.min(Math.max(slideProgress, -4), 4);\n let offset = $slideEl[0].swiperSlideOffset;\n\n if (swiper.params.centeredSlides && !swiper.params.cssMode) {\n swiper.$wrapperEl.transform(`translateX(${swiper.minTranslate()}px)`);\n }\n\n if (swiper.params.centeredSlides && swiper.params.cssMode) {\n offset -= slides[0].swiperSlideOffset;\n }\n\n let tX = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n let tY = 0;\n const tZ = -100 * Math.abs(progress);\n let scale = 1;\n let rotate = -2 * progress;\n let tXAdd = 8 - Math.abs(progress) * 0.75;\n const isSwipeToNext = (i === activeIndex || i === activeIndex - 1) && progress > 0 && progress < 1 && (isTouched || swiper.params.cssMode) && currentTranslate < startTranslate;\n const isSwipeToPrev = (i === activeIndex || i === activeIndex + 1) && progress < 0 && progress > -1 && (isTouched || swiper.params.cssMode) && currentTranslate > startTranslate;\n\n if (isSwipeToNext || isSwipeToPrev) {\n const subProgress = (1 - Math.abs((Math.abs(progress) - 0.5) / 0.5)) ** 0.5;\n rotate += -28 * progress * subProgress;\n scale += -0.5 * subProgress;\n tXAdd += 96 * subProgress;\n tY = `${-25 * subProgress * Math.abs(progress)}%`;\n }\n\n if (progress < 0) {\n // next\n tX = `calc(${tX}px + (${tXAdd * Math.abs(progress)}%))`;\n } else if (progress > 0) {\n // prev\n tX = `calc(${tX}px + (-${tXAdd * Math.abs(progress)}%))`;\n } else {\n tX = `${tX}px`;\n }\n\n if (!swiper.isHorizontal()) {\n const prevY = tY;\n tY = tX;\n tX = prevY;\n }\n\n const scaleString = progress < 0 ? `${1 + (1 - scale) * progress}` : `${1 - (1 - scale) * progress}`;\n const transform = `\n translate3d(${tX}, ${tY}, ${tZ}px)\n rotateZ(${rotate}deg)\n scale(${scaleString})\n `;\n\n if (params.slideShadows) {\n // Set shadows\n let $shadowEl = $slideEl.find('.swiper-slide-shadow');\n\n if ($shadowEl.length === 0) {\n $shadowEl = createShadow(params, $slideEl);\n }\n\n if ($shadowEl.length) $shadowEl[0].style.opacity = Math.min(Math.max((Math.abs(progress) - 0.5) / 0.5, 0), 1);\n }\n\n $slideEl[0].style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(transform);\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.cardsEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow').transition(duration);\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformEl\n });\n };\n\n effectInit({\n effect: 'cards',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n watchSlidesProgress: true,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n }\n\n // Swiper Class\n const modules = [Virtual, Keyboard, Mousewheel, Navigation, Pagination, Scrollbar, Parallax, Zoom, Lazy, Controller, A11y, History, HashNavigation, Autoplay, Thumb, freeMode, Grid, Manipulation, EffectFade, EffectCube, EffectFlip, EffectCoverflow, EffectCreative, EffectCards];\n Swiper.use(modules);\n\n return Swiper;\n\n})));\n//# sourceMappingURL=swiper-bundle.js.map\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/swiper/swiper-bundle.js\n// module id = 8\n// module chunks = 0","( function ( $ ) {\r\n\tconst changeLanguage = ( lang, url ) => {\r\n\t\t$.ajax( {\r\n\t\t\turl: '/wp-admin/admin-ajax.php',\r\n\t\t\tdata: {\r\n\t\t\t\t'action': 'process_lang_change',\r\n\t\t\t\t'lang': lang,\r\n\t\t\t},\r\n\t\t\ttype: 'POST',\r\n\t\t\tdataType: 'JSON',\r\n\t\t\tsuccess: function () {\r\n\t\t\t\tdocument.location.href = url;\r\n\t\t\t},\r\n\t\t} );\r\n\t};\r\n\r\n\t$( 'div.js-language' ).on('click', e => changeLanguage( e.currentTarget.dataset.slug, e.currentTarget.dataset.value ) );\r\n\r\n\t$( 'select.js-language' ).on('change', e => {\r\n\t\tconst option = e.currentTarget.querySelector( 'option:checked' );\r\n\r\n\t\tchangeLanguage( option.dataset.slug, option.dataset.value );\r\n\t} );\r\n\r\n\t$( 'div.js-shipping' ).on('click', function () {\r\n\t\twindow.Checkout.countryChangeProcess( this.dataset.value, false, true );\r\n\t} );\r\n\r\n\t$( 'select.js-shipping' ).on('change', e => window.Checkout.countryChangeProcess( e.currentTarget.value, false, true ) );\r\n} )( jQuery );\r\n\r\nlet Language = {};\r\n\r\nLanguage.init = function () {\r\n\tlet languageOverlay = $( '.js-language-overlay' );\r\n\r\n\t// Cart Overlay\r\n\tif ( !$( 'body' ).is( '.isApple, .AndroidOS' ) ) {\r\n\t\tlanguageOverlay.hover( function () {\r\n\t\t\t$( 'body' ).addClass( 'language-overlay' );\r\n\t\t}, function () {\r\n\t\t\t$( 'body' ).removeClass( 'language-overlay' );\r\n\t\t} );\r\n\t}\r\n};\r\n\r\nLanguage.init();\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/language.js","// import external dependencies\r\nimport 'jquery';\r\n\r\n// Require/Import vendors\r\nrequire('../../../node_modules/flickity/dist/flickity.pkgd')\r\nrequire('../../../node_modules/overlayscrollbars/js/jquery.overlayScrollbars');\r\nrequire('./vendor/flickity-fullscreen');\r\nrequire('./vendor/jquery.txtTruncate');\r\n\r\n// Import everything from autoload\r\nimport './autoload/_bootstrap.js'\r\n\r\n// import local dependencies/utils\r\nimport Router from './util/Router';\r\nimport common from './routes/common';\r\nimport { sliders } from './components/sliders';\r\nimport LazyLoad from 'vanilla-lazyload';\r\nimport { stokpress } from './util/helper';\r\n\r\nwindow.stokpress = stokpress;\r\n\r\nrequire('./util/plusItem');\r\nrequire('./util/crossPlatform');\r\nrequire('./util/autoPadding');\r\nrequire('./util/ellipsis');\r\nrequire('./util/backgroundSwitcher');\r\nrequire('./util/articleFilter');\r\nrequire('./util/checkTouch');\r\nrequire('./util/displayProp');\r\nrequire('./util/disableBodyScroll');\r\n\r\n// Require Components\r\n// components are now on common. See routes below\r\n// routes will be found on routes folder\r\n\r\n/** Populate Router instance with DOM routes */\r\nconst routes = new Router({\r\n // All pages\r\n common,\r\n});\r\n\r\n// Load Events\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n routes.loadEvents();\r\n\tsliders.init();\r\n\r\n $('body').autoPadding({\r\n source: $('.js-header'),\r\n });\r\n\r\n let lazyLoadInstance = new LazyLoad({\r\n threshold: 500,\r\n elements_selector: '.lazy',\r\n });\r\n\r\n if (lazyLoadInstance) {\r\n lazyLoadInstance.update();\r\n }\r\n\r\n\twindow.lazyLoadInstance = lazyLoadInstance;\r\n});\n\n\n// WEBPACK FOOTER //\n// ./scripts/main.js","/*!\n * Flickity PACKAGED v2.2.0\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2018 Metafizzy\n */\n\n/**\n * Bridget makes jQuery widgets\n * v2.0.1\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /* globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'jquery-bridget/jquery-bridget',[ 'jquery' ], function( jQuery ) {\n return factory( window, jQuery );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('jquery')\n );\n } else {\n // browser global\n window.jQueryBridget = factory(\n window,\n window.jQuery\n );\n }\n\n}( window, function factory( window, jQuery ) {\n'use strict';\n\n// ----- utils ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// helper function for logging errors\n// $.error breaks jQuery chaining\nvar console = window.console;\nvar logError = typeof console == 'undefined' ? function() {} :\n function( message ) {\n console.error( message );\n };\n\n// ----- jQueryBridget ----- //\n\nfunction jQueryBridget( namespace, PluginClass, $ ) {\n $ = $ || jQuery || window.jQuery;\n if ( !$ ) {\n return;\n }\n\n // add option method -> $().plugin('option', {...})\n if ( !PluginClass.prototype.option ) {\n // option setter\n PluginClass.prototype.option = function( opts ) {\n // bail out if not an object\n if ( !$.isPlainObject( opts ) ){\n return;\n }\n this.options = $.extend( true, this.options, opts );\n };\n }\n\n // make jQuery plugin\n $.fn[ namespace ] = function( arg0 /*, arg1 */ ) {\n if ( typeof arg0 == 'string' ) {\n // method call $().plugin( 'methodName', { options } )\n // shift arguments by 1\n var args = arraySlice.call( arguments, 1 );\n return methodCall( this, arg0, args );\n }\n // just $().plugin({ options })\n plainCall( this, arg0 );\n return this;\n };\n\n // $().plugin('methodName')\n function methodCall( $elems, methodName, args ) {\n var returnValue;\n var pluginMethodStr = '$().' + namespace + '(\"' + methodName + '\")';\n\n $elems.each( function( i, elem ) {\n // get instance\n var instance = $.data( elem, namespace );\n if ( !instance ) {\n logError( namespace + ' not initialized. Cannot call methods, i.e. ' +\n pluginMethodStr );\n return;\n }\n\n var method = instance[ methodName ];\n if ( !method || methodName.charAt(0) == '_' ) {\n logError( pluginMethodStr + ' is not a valid method' );\n return;\n }\n\n // apply method, get return value\n var value = method.apply( instance, args );\n // set return value if value is returned, use only first value\n returnValue = returnValue === undefined ? value : returnValue;\n });\n\n return returnValue !== undefined ? returnValue : $elems;\n }\n\n function plainCall( $elems, options ) {\n $elems.each( function( i, elem ) {\n var instance = $.data( elem, namespace );\n if ( instance ) {\n // set options & init\n instance.option( options );\n instance._init();\n } else {\n // initialize new instance\n instance = new PluginClass( elem, options );\n $.data( elem, namespace, instance );\n }\n });\n }\n\n updateJQuery( $ );\n\n}\n\n// ----- updateJQuery ----- //\n\n// set $.bridget for v1 backwards compatibility\nfunction updateJQuery( $ ) {\n if ( !$ || ( $ && $.bridget ) ) {\n return;\n }\n $.bridget = jQueryBridget;\n}\n\nupdateJQuery( jQuery || window.jQuery );\n\n// ----- ----- //\n\nreturn jQueryBridget;\n\n}));\n\n/**\n * EvEmitter v1.1.0\n * Lil' event emitter\n * MIT License\n */\n\n/* jshint unused: true, undef: true, strict: true */\n\n( function( global, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, window */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( 'ev-emitter/ev-emitter',factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\n\n\nfunction EvEmitter() {}\n\nvar proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // set events hash\n var events = this._events = this._events || {};\n // set listeners array\n var listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( listeners.indexOf( listener ) == -1 ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n var onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n var index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice(0);\n args = args || [];\n // once stuff\n var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( var i=0; i < listeners.length; i++ ) {\n var listener = listeners[i]\n var isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n};\n\nreturn EvEmitter;\n\n}));\n\n/*!\n * getSize v2.0.3\n * measure size of elements\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n/* globals console: false */\n\n( function( window, factory ) {\n /* jshint strict: false */ /* globals define, module */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'get-size/get-size',factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.getSize = factory();\n }\n\n})( window, function factory() {\n'use strict';\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n var num = parseFloat( value );\n // not a percent like '100%', and a number\n var isValid = value.indexOf('%') == -1 && !isNaN( num );\n return isValid && num;\n}\n\nfunction noop() {}\n\nvar logError = typeof console == 'undefined' ? noop :\n function( message ) {\n console.error( message );\n };\n\n// -------------------------- measurements -------------------------- //\n\nvar measurements = [\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'paddingBottom',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'marginBottom',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderTopWidth',\n 'borderBottomWidth'\n];\n\nvar measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n var size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0\n };\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n size[ measurement ] = 0;\n }\n return size;\n}\n\n// -------------------------- getStyle -------------------------- //\n\n/**\n * getStyle, get style of element, check for Firefox bug\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getStyle( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n logError( 'Style returned ' + style +\n '. Are you running this code in a hidden iframe on Firefox? ' +\n 'See https://bit.ly/getsizebug1' );\n }\n return style;\n}\n\n// -------------------------- setup -------------------------- //\n\nvar isSetup = false;\n\nvar isBoxSizeOuter;\n\n/**\n * setup\n * check isBoxSizerOuter\n * do on first getSize() rather than on page load for Firefox bug\n */\nfunction setup() {\n // setup once\n if ( isSetup ) {\n return;\n }\n isSetup = true;\n\n // -------------------------- box sizing -------------------------- //\n\n /**\n * Chrome & Safari measure the outer-width on style.width on border-box elems\n * IE11 & Firefox<29 measures the inner-width\n */\n var div = document.createElement('div');\n div.style.width = '200px';\n div.style.padding = '1px 2px 3px 4px';\n div.style.borderStyle = 'solid';\n div.style.borderWidth = '1px 2px 3px 4px';\n div.style.boxSizing = 'border-box';\n\n var body = document.body || document.documentElement;\n body.appendChild( div );\n var style = getStyle( div );\n // round value for browser zoom. desandro/masonry#928\n isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\n getSize.isBoxSizeOuter = isBoxSizeOuter;\n\n body.removeChild( div );\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n setup();\n\n // use querySeletor if elem is string\n if ( typeof elem == 'string' ) {\n elem = document.querySelector( elem );\n }\n\n // do not proceed on non-objects\n if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\n return;\n }\n\n var style = getStyle( elem );\n\n // if hidden, everything is 0\n if ( style.display == 'none' ) {\n return getZeroSize();\n }\n\n var size = {};\n size.width = elem.offsetWidth;\n size.height = elem.offsetHeight;\n\n var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n // get all measurements\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n var value = style[ measurement ];\n var num = parseFloat( value );\n // any 'auto', 'medium' value will be 0\n size[ measurement ] = !isNaN( num ) ? num : 0;\n }\n\n var paddingWidth = size.paddingLeft + size.paddingRight;\n var paddingHeight = size.paddingTop + size.paddingBottom;\n var marginWidth = size.marginLeft + size.marginRight;\n var marginHeight = size.marginTop + size.marginBottom;\n var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n // overwrite width and height if we can get it from style\n var styleWidth = getStyleSize( style.width );\n if ( styleWidth !== false ) {\n size.width = styleWidth +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\n }\n\n var styleHeight = getStyleSize( style.height );\n if ( styleHeight !== false ) {\n size.height = styleHeight +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\n }\n\n size.innerWidth = size.width - ( paddingWidth + borderWidth );\n size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n size.outerWidth = size.width + marginWidth;\n size.outerHeight = size.height + marginHeight;\n\n return size;\n}\n\nreturn getSize;\n\n});\n\n/**\n * matchesSelector v2.0.2\n * matchesSelector( element, '.selector' )\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n /*global define: false, module: false */\n 'use strict';\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'desandro-matches-selector/matches-selector',factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.matchesSelector = factory();\n }\n\n}( window, function factory() {\n 'use strict';\n\n var matchesMethod = ( function() {\n var ElemProto = window.Element.prototype;\n // check for the standard method name first\n if ( ElemProto.matches ) {\n return 'matches';\n }\n // check un-prefixed\n if ( ElemProto.matchesSelector ) {\n return 'matchesSelector';\n }\n // check vendor prefixes\n var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\n\n for ( var i=0; i < prefixes.length; i++ ) {\n var prefix = prefixes[i];\n var method = prefix + 'MatchesSelector';\n if ( ElemProto[ method ] ) {\n return method;\n }\n }\n })();\n\n return function matchesSelector( elem, selector ) {\n return elem[ matchesMethod ]( selector );\n };\n\n}));\n\n/**\n * Fizzy UI utils v2.0.7\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'fizzy-ui-utils/utils',[\n 'desandro-matches-selector/matches-selector'\n ], function( matchesSelector ) {\n return factory( window, matchesSelector );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('desandro-matches-selector')\n );\n } else {\n // browser global\n window.fizzyUIUtils = factory(\n window,\n window.matchesSelector\n );\n }\n\n}( window, function factory( window, matchesSelector ) {\n\n\n\nvar utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n return obj;\n }\n // return empty array if undefined or null. #6\n if ( obj === null || obj === undefined ) {\n return [];\n }\n\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n if ( isArrayLike ) {\n // convert nodeList to array\n return arraySlice.call( obj );\n }\n\n // array of single index\n return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n var index = ary.indexOf( obj );\n if ( index != -1 ) {\n ary.splice( index, 1 );\n }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n while ( elem.parentNode && elem != document.body ) {\n elem = elem.parentNode;\n if ( matchesSelector( elem, selector ) ) {\n return elem;\n }\n }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n if ( typeof elem == 'string' ) {\n return document.querySelector( elem );\n }\n return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n // make array of elems\n elems = utils.makeArray( elems );\n var ffElems = [];\n\n elems.forEach( function( elem ) {\n // check that elem is an actual element\n if ( !( elem instanceof HTMLElement ) ) {\n return;\n }\n // add elem if no selector\n if ( !selector ) {\n ffElems.push( elem );\n return;\n }\n // filter & find items if we have a selector\n // filter\n if ( matchesSelector( elem, selector ) ) {\n ffElems.push( elem );\n }\n // find children\n var childElems = elem.querySelectorAll( selector );\n // concat childElems to filterFound array\n for ( var i=0; i < childElems.length; i++ ) {\n ffElems.push( childElems[i] );\n }\n });\n\n return ffElems;\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n threshold = threshold || 100;\n // original method\n var method = _class.prototype[ methodName ];\n var timeoutName = methodName + 'Timeout';\n\n _class.prototype[ methodName ] = function() {\n var timeout = this[ timeoutName ];\n clearTimeout( timeout );\n\n var args = arguments;\n var _this = this;\n this[ timeoutName ] = setTimeout( function() {\n method.apply( _this, args );\n delete _this[ timeoutName ];\n }, threshold );\n };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( callback ) {\n var readyState = document.readyState;\n if ( readyState == 'complete' || readyState == 'interactive' ) {\n // do async to allow for other scripts to run. metafizzy/flickity#441\n setTimeout( callback );\n } else {\n document.addEventListener( 'DOMContentLoaded', callback );\n }\n};\n\n// ----- htmlInit ----- //\n\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\nutils.toDashed = function( str ) {\n return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n return $1 + '-' + $2;\n }).toLowerCase();\n};\n\nvar console = window.console;\n/**\n * allow user to initialize classes via [data-namespace] or .js-namespace class\n * htmlInit( Widget, 'widgetName' )\n * options are parsed from data-namespace-options\n */\nutils.htmlInit = function( WidgetClass, namespace ) {\n utils.docReady( function() {\n var dashedNamespace = utils.toDashed( namespace );\n var dataAttr = 'data-' + dashedNamespace;\n var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );\n var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );\n var elems = utils.makeArray( dataAttrElems )\n .concat( utils.makeArray( jsDashElems ) );\n var dataOptionsAttr = dataAttr + '-options';\n var jQuery = window.jQuery;\n\n elems.forEach( function( elem ) {\n var attr = elem.getAttribute( dataAttr ) ||\n elem.getAttribute( dataOptionsAttr );\n var options;\n try {\n options = attr && JSON.parse( attr );\n } catch ( error ) {\n // log error, do not initialize\n if ( console ) {\n console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +\n ': ' + error );\n }\n return;\n }\n // initialize\n var instance = new WidgetClass( elem, options );\n // make available via $().data('namespace')\n if ( jQuery ) {\n jQuery.data( elem, namespace, instance );\n }\n });\n\n });\n};\n\n// ----- ----- //\n\nreturn utils;\n\n}));\n\n// Flickity.Cell\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'flickity/js/cell',[\n 'get-size/get-size'\n ], function( getSize ) {\n return factory( window, getSize );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('get-size')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Cell = factory(\n window,\n window.getSize\n );\n }\n\n}( window, function factory( window, getSize ) {\n\n\n\nfunction Cell( elem, parent ) {\n this.element = elem;\n this.parent = parent;\n\n this.create();\n}\n\nvar proto = Cell.prototype;\n\nproto.create = function() {\n this.element.style.position = 'absolute';\n this.element.setAttribute( 'aria-hidden', 'true' );\n this.x = 0;\n this.shift = 0;\n};\n\nproto.destroy = function() {\n // reset style\n this.unselect();\n this.element.style.position = '';\n var side = this.parent.originSide;\n this.element.style[ side ] = '';\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\nproto.setPosition = function( x ) {\n this.x = x;\n this.updateTarget();\n this.renderPosition( x );\n};\n\n// setDefaultTarget v1 method, backwards compatibility, remove in v3\nproto.updateTarget = proto.setDefaultTarget = function() {\n var marginProperty = this.parent.originSide == 'left' ? 'marginLeft' : 'marginRight';\n this.target = this.x + this.size[ marginProperty ] +\n this.size.width * this.parent.cellAlign;\n};\n\nproto.renderPosition = function( x ) {\n // render position of cell with in slider\n var side = this.parent.originSide;\n this.element.style[ side ] = this.parent.getPositionValue( x );\n};\n\nproto.select = function() {\n this.element.classList.add('is-selected');\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.unselect = function() {\n this.element.classList.remove('is-selected');\n this.element.setAttribute( 'aria-hidden', 'true' );\n};\n\n/**\n * @param {Integer} factor - 0, 1, or -1\n**/\nproto.wrapShift = function( shift ) {\n this.shift = shift;\n this.renderPosition( this.x + this.parent.slideableWidth * shift );\n};\n\nproto.remove = function() {\n this.element.parentNode.removeChild( this.element );\n};\n\nreturn Cell;\n\n}));\n\n// slide\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'flickity/js/slide',factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Slide = factory();\n }\n\n}( window, function factory() {\n'use strict';\n\nfunction Slide( parent ) {\n this.parent = parent;\n this.isOriginLeft = parent.originSide == 'left';\n this.cells = [];\n this.outerWidth = 0;\n this.height = 0;\n}\n\nvar proto = Slide.prototype;\n\nproto.addCell = function( cell ) {\n this.cells.push( cell );\n this.outerWidth += cell.size.outerWidth;\n this.height = Math.max( cell.size.outerHeight, this.height );\n // first cell stuff\n if ( this.cells.length == 1 ) {\n this.x = cell.x; // x comes from first cell\n var beginMargin = this.isOriginLeft ? 'marginLeft' : 'marginRight';\n this.firstMargin = cell.size[ beginMargin ];\n }\n};\n\nproto.updateTarget = function() {\n var endMargin = this.isOriginLeft ? 'marginRight' : 'marginLeft';\n var lastCell = this.getLastCell();\n var lastMargin = lastCell ? lastCell.size[ endMargin ] : 0;\n var slideWidth = this.outerWidth - ( this.firstMargin + lastMargin );\n this.target = this.x + this.firstMargin + slideWidth * this.parent.cellAlign;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.select = function() {\n this.cells.forEach( function( cell ) {\n cell.select();\n });\n};\n\nproto.unselect = function() {\n this.cells.forEach( function( cell ) {\n cell.unselect();\n });\n};\n\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n });\n};\n\nreturn Slide;\n\n}));\n\n// animate\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'flickity/js/animate',[\n 'fizzy-ui-utils/utils'\n ], function( utils ) {\n return factory( window, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.animatePrototype = factory(\n window,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, utils ) {\n\n\n\n// -------------------------- animate -------------------------- //\n\nvar proto = {};\n\nproto.startAnimation = function() {\n if ( this.isAnimating ) {\n return;\n }\n\n this.isAnimating = true;\n this.restingFrames = 0;\n this.animate();\n};\n\nproto.animate = function() {\n this.applyDragForce();\n this.applySelectedAttraction();\n\n var previousX = this.x;\n\n this.integratePhysics();\n this.positionSlider();\n this.settle( previousX );\n // animate next frame\n if ( this.isAnimating ) {\n var _this = this;\n requestAnimationFrame( function animateFrame() {\n _this.animate();\n });\n }\n};\n\nproto.positionSlider = function() {\n var x = this.x;\n // wrap position around\n if ( this.options.wrapAround && this.cells.length > 1 ) {\n x = utils.modulo( x, this.slideableWidth );\n x = x - this.slideableWidth;\n this.shiftWrapCells( x );\n }\n\n this.setTranslateX( x, this.isAnimating );\n this.dispatchScrollEvent();\n};\n\nproto.setTranslateX = function( x, is3d ) {\n x += this.cursorPosition;\n // reverse if right-to-left and using transform\n x = this.options.rightToLeft ? -x : x;\n var translateX = this.getPositionValue( x );\n // use 3D tranforms for hardware acceleration on iOS\n // but use 2D when settled, for better font-rendering\n this.slider.style.transform = is3d ?\n 'translate3d(' + translateX + ',0,0)' : 'translateX(' + translateX + ')';\n};\n\nproto.dispatchScrollEvent = function() {\n var firstSlide = this.slides[0];\n if ( !firstSlide ) {\n return;\n }\n var positionX = -this.x - firstSlide.target;\n var progress = positionX / this.slidesWidth;\n this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\n};\n\nproto.positionSliderAtSelected = function() {\n if ( !this.cells.length ) {\n return;\n }\n this.x = -this.selectedSlide.target;\n this.velocity = 0; // stop wobble\n this.positionSlider();\n};\n\nproto.getPositionValue = function( position ) {\n if ( this.options.percentPosition ) {\n // percent position, round to 2 digits, like 12.34%\n return ( Math.round( ( position / this.size.innerWidth ) * 10000 ) * 0.01 )+ '%';\n } else {\n // pixel positioning\n return Math.round( position ) + 'px';\n }\n};\n\nproto.settle = function( previousX ) {\n // keep track of frames where x hasn't moved\n if ( !this.isPointerDown && Math.round( this.x * 100 ) == Math.round( previousX * 100 ) ) {\n this.restingFrames++;\n }\n // stop animating if resting for 3 or more frames\n if ( this.restingFrames > 2 ) {\n this.isAnimating = false;\n delete this.isFreeScrolling;\n // render position with translateX when settled\n this.positionSlider();\n this.dispatchEvent( 'settle', null, [ this.selectedIndex ] );\n }\n};\n\nproto.shiftWrapCells = function( x ) {\n // shift before cells\n var beforeGap = this.cursorPosition + x;\n this._shiftCells( this.beforeShiftCells, beforeGap, -1 );\n // shift after cells\n var afterGap = this.size.innerWidth - ( x + this.slideableWidth + this.cursorPosition );\n this._shiftCells( this.afterShiftCells, afterGap, 1 );\n};\n\nproto._shiftCells = function( cells, gap, shift ) {\n for ( var i=0; i < cells.length; i++ ) {\n var cell = cells[i];\n var cellShift = gap > 0 ? shift : 0;\n cell.wrapShift( cellShift );\n gap -= cell.size.outerWidth;\n }\n};\n\nproto._unshiftCells = function( cells ) {\n if ( !cells || !cells.length ) {\n return;\n }\n for ( var i=0; i < cells.length; i++ ) {\n cells[i].wrapShift( 0 );\n }\n};\n\n// -------------------------- physics -------------------------- //\n\nproto.integratePhysics = function() {\n this.x += this.velocity;\n this.velocity *= this.getFrictionFactor();\n};\n\nproto.applyForce = function( force ) {\n this.velocity += force;\n};\n\nproto.getFrictionFactor = function() {\n return 1 - this.options[ this.isFreeScrolling ? 'freeScrollFriction' : 'friction' ];\n};\n\nproto.getRestingPosition = function() {\n // my thanks to Steven Wittens, who simplified this math greatly\n return this.x + this.velocity / ( 1 - this.getFrictionFactor() );\n};\n\nproto.applyDragForce = function() {\n if ( !this.isDraggable || !this.isPointerDown ) {\n return;\n }\n // change the position to drag position by applying force\n var dragVelocity = this.dragX - this.x;\n var dragForce = dragVelocity - this.velocity;\n this.applyForce( dragForce );\n};\n\nproto.applySelectedAttraction = function() {\n // do not attract if pointer down or no slides\n var dragDown = this.isDraggable && this.isPointerDown;\n if ( dragDown || this.isFreeScrolling || !this.slides.length ) {\n return;\n }\n var distance = this.selectedSlide.target * -1 - this.x;\n var force = distance * this.options.selectedAttraction;\n this.applyForce( force );\n};\n\nreturn proto;\n\n}));\n\n// Flickity main\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'flickity/js/flickity',[\n 'ev-emitter/ev-emitter',\n 'get-size/get-size',\n 'fizzy-ui-utils/utils',\n './cell',\n './slide',\n './animate'\n ], function( EvEmitter, getSize, utils, Cell, Slide, animatePrototype ) {\n return factory( window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('get-size'),\n require('fizzy-ui-utils'),\n require('./cell'),\n require('./slide'),\n require('./animate')\n );\n } else {\n // browser global\n var _Flickity = window.Flickity;\n\n window.Flickity = factory(\n window,\n window.EvEmitter,\n window.getSize,\n window.fizzyUIUtils,\n _Flickity.Cell,\n _Flickity.Slide,\n _Flickity.animatePrototype\n );\n }\n\n}( window, function factory( window, EvEmitter, getSize,\n utils, Cell, Slide, animatePrototype ) {\n\n\n\n// vars\nvar jQuery = window.jQuery;\nvar getComputedStyle = window.getComputedStyle;\nvar console = window.console;\n\nfunction moveElements( elems, toElem ) {\n elems = utils.makeArray( elems );\n while ( elems.length ) {\n toElem.appendChild( elems.shift() );\n }\n}\n\n// -------------------------- Flickity -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Flickity intances\nvar instances = {};\n\nfunction Flickity( element, options ) {\n var queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) {\n console.error( 'Bad element for Flickity: ' + ( queryElement || element ) );\n }\n return;\n }\n this.element = queryElement;\n // do not initialize twice on same element\n if ( this.element.flickityGUID ) {\n var instance = instances[ this.element.flickityGUID ];\n instance.option( options );\n return instance;\n }\n\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n // options\n this.options = utils.extend( {}, this.constructor.defaults );\n this.option( options );\n\n // kick things off\n this._create();\n}\n\nFlickity.defaults = {\n accessibility: true,\n // adaptiveHeight: false,\n cellAlign: 'center',\n // cellSelector: undefined,\n // contain: false,\n freeScrollFriction: 0.075, // friction when free-scrolling\n friction: 0.28, // friction when selecting\n namespaceJQueryEvents: true,\n // initialIndex: 0,\n percentPosition: true,\n resize: true,\n selectedAttraction: 0.025,\n setGallerySize: true\n // watchCSS: false,\n // wrapAround: false\n};\n\n// hash of methods triggered on _create()\nFlickity.createMethods = [];\n\nvar proto = Flickity.prototype;\n// inherit EventEmitter\nutils.extend( proto, EvEmitter.prototype );\n\nproto._create = function() {\n // add id for Flickity.data\n var id = this.guid = ++GUID;\n this.element.flickityGUID = id; // expando\n instances[ id ] = this; // associate via id\n // initial properties\n this.selectedIndex = 0;\n // how many frames slider has been in same position\n this.restingFrames = 0;\n // initial physics properties\n this.x = 0;\n this.velocity = 0;\n this.originSide = this.options.rightToLeft ? 'right' : 'left';\n // create viewport & slider\n this.viewport = document.createElement('div');\n this.viewport.className = 'flickity-viewport';\n this._createSlider();\n\n if ( this.options.resize || this.options.watchCSS ) {\n window.addEventListener( 'resize', this );\n }\n\n // add listeners from on option\n for ( var eventName in this.options.on ) {\n var listener = this.options.on[ eventName ];\n this.on( eventName, listener );\n }\n\n Flickity.createMethods.forEach( function( method ) {\n this[ method ]();\n }, this );\n\n if ( this.options.watchCSS ) {\n this.watchCSS();\n } else {\n this.activate();\n }\n\n};\n\n/**\n * set options\n * @param {Object} opts\n */\nproto.option = function( opts ) {\n utils.extend( this.options, opts );\n};\n\nproto.activate = function() {\n if ( this.isActive ) {\n return;\n }\n this.isActive = true;\n this.element.classList.add('flickity-enabled');\n if ( this.options.rightToLeft ) {\n this.element.classList.add('flickity-rtl');\n }\n\n this.getSize();\n // move initial cell elements so they can be loaded as cells\n var cellElems = this._filterFindCellElements( this.element.children );\n moveElements( cellElems, this.slider );\n this.viewport.appendChild( this.slider );\n this.element.appendChild( this.viewport );\n // get cells from children\n this.reloadCells();\n\n if ( this.options.accessibility ) {\n // allow element to focusable\n this.element.tabIndex = 0;\n // listen for key presses\n this.element.addEventListener( 'keydown', this );\n }\n\n this.emitEvent('activate');\n this.selectInitialIndex();\n // flag for initial activation, for using initialIndex\n this.isInitActivated = true;\n // ready event. #493\n this.dispatchEvent('ready');\n};\n\n// slider positions the cells\nproto._createSlider = function() {\n // slider element does all the positioning\n var slider = document.createElement('div');\n slider.className = 'flickity-slider';\n slider.style[ this.originSide ] = 0;\n this.slider = slider;\n};\n\nproto._filterFindCellElements = function( elems ) {\n return utils.filterFindElements( elems, this.options.cellSelector );\n};\n\n// goes through all children\nproto.reloadCells = function() {\n // collection of item elements\n this.cells = this._makeCells( this.slider.children );\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n};\n\n/**\n * turn elements into Flickity.Cells\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - collection of new Flickity Cells\n */\nproto._makeCells = function( elems ) {\n var cellElems = this._filterFindCellElements( elems );\n\n // create new Flickity for collection\n var cells = cellElems.map( function( cellElem ) {\n return new Cell( cellElem, this );\n }, this );\n\n return cells;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.getLastSlide = function() {\n return this.slides[ this.slides.length - 1 ];\n};\n\n// positions all cells\nproto.positionCells = function() {\n // size all cells\n this._sizeCells( this.cells );\n // position all cells\n this._positionCells( 0 );\n};\n\n/**\n * position certain cells\n * @param {Integer} index - which cell to start with\n */\nproto._positionCells = function( index ) {\n index = index || 0;\n // also measure maxCellHeight\n // start 0 if positioning all cells\n this.maxCellHeight = index ? this.maxCellHeight || 0 : 0;\n var cellX = 0;\n // get cellX\n if ( index > 0 ) {\n var startCell = this.cells[ index - 1 ];\n cellX = startCell.x + startCell.size.outerWidth;\n }\n var len = this.cells.length;\n for ( var i=index; i < len; i++ ) {\n var cell = this.cells[i];\n cell.setPosition( cellX );\n cellX += cell.size.outerWidth;\n this.maxCellHeight = Math.max( cell.size.outerHeight, this.maxCellHeight );\n }\n // keep track of cellX for wrap-around\n this.slideableWidth = cellX;\n // slides\n this.updateSlides();\n // contain slides target\n this._containSlides();\n // update slidesWidth\n this.slidesWidth = len ? this.getLastSlide().target - this.slides[0].target : 0;\n};\n\n/**\n * cell.getSize() on multiple cells\n * @param {Array} cells\n */\nproto._sizeCells = function( cells ) {\n cells.forEach( function( cell ) {\n cell.getSize();\n });\n};\n\n// -------------------------- -------------------------- //\n\nproto.updateSlides = function() {\n this.slides = [];\n if ( !this.cells.length ) {\n return;\n }\n\n var slide = new Slide( this );\n this.slides.push( slide );\n var isOriginLeft = this.originSide == 'left';\n var nextMargin = isOriginLeft ? 'marginRight' : 'marginLeft';\n\n var canCellFit = this._getCanCellFit();\n\n this.cells.forEach( function( cell, i ) {\n // just add cell if first cell in slide\n if ( !slide.cells.length ) {\n slide.addCell( cell );\n return;\n }\n\n var slideWidth = ( slide.outerWidth - slide.firstMargin ) +\n ( cell.size.outerWidth - cell.size[ nextMargin ] );\n\n if ( canCellFit.call( this, i, slideWidth ) ) {\n slide.addCell( cell );\n } else {\n // doesn't fit, new slide\n slide.updateTarget();\n\n slide = new Slide( this );\n this.slides.push( slide );\n slide.addCell( cell );\n }\n }, this );\n // last slide\n slide.updateTarget();\n // update .selectedSlide\n this.updateSelectedSlide();\n};\n\nproto._getCanCellFit = function() {\n var groupCells = this.options.groupCells;\n if ( !groupCells ) {\n return function() {\n return false;\n };\n } else if ( typeof groupCells == 'number' ) {\n // group by number. 3 -> [0,1,2], [3,4,5], ...\n var number = parseInt( groupCells, 10 );\n return function( i ) {\n return ( i % number ) !== 0;\n };\n }\n // default, group by width of slide\n // parse '75%\n var percentMatch = typeof groupCells == 'string' &&\n groupCells.match(/^(\\d+)%$/);\n var percent = percentMatch ? parseInt( percentMatch[1], 10 ) / 100 : 1;\n return function( i, slideWidth ) {\n return slideWidth <= ( this.size.innerWidth + 1 ) * percent;\n };\n};\n\n// alias _init for jQuery plugin .flickity()\nproto._init =\nproto.reposition = function() {\n this.positionCells();\n this.positionSliderAtSelected();\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n this.setCellAlign();\n this.cursorPosition = this.size.innerWidth * this.cellAlign;\n};\n\nvar cellAlignShorthands = {\n // cell align, then based on origin side\n center: {\n left: 0.5,\n right: 0.5\n },\n left: {\n left: 0,\n right: 1\n },\n right: {\n right: 0,\n left: 1\n }\n};\n\nproto.setCellAlign = function() {\n var shorthand = cellAlignShorthands[ this.options.cellAlign ];\n this.cellAlign = shorthand ? shorthand[ this.originSide ] : this.options.cellAlign;\n};\n\nproto.setGallerySize = function() {\n if ( this.options.setGallerySize ) {\n var height = this.options.adaptiveHeight && this.selectedSlide ?\n this.selectedSlide.height : this.maxCellHeight;\n this.viewport.style.height = height + 'px';\n }\n};\n\nproto._getWrapShiftCells = function() {\n // only for wrap-around\n if ( !this.options.wrapAround ) {\n return;\n }\n // unshift previous cells\n this._unshiftCells( this.beforeShiftCells );\n this._unshiftCells( this.afterShiftCells );\n // get before cells\n // initial gap\n var gapX = this.cursorPosition;\n var cellIndex = this.cells.length - 1;\n this.beforeShiftCells = this._getGapCells( gapX, cellIndex, -1 );\n // get after cells\n // ending gap between last cell and end of gallery viewport\n gapX = this.size.innerWidth - this.cursorPosition;\n // start cloning at first cell, working forwards\n this.afterShiftCells = this._getGapCells( gapX, 0, 1 );\n};\n\nproto._getGapCells = function( gapX, cellIndex, increment ) {\n // keep adding cells until the cover the initial gap\n var cells = [];\n while ( gapX > 0 ) {\n var cell = this.cells[ cellIndex ];\n if ( !cell ) {\n break;\n }\n cells.push( cell );\n cellIndex += increment;\n gapX -= cell.size.outerWidth;\n }\n return cells;\n};\n\n// ----- contain ----- //\n\n// contain cell targets so no excess sliding\nproto._containSlides = function() {\n if ( !this.options.contain || this.options.wrapAround || !this.cells.length ) {\n return;\n }\n var isRightToLeft = this.options.rightToLeft;\n var beginMargin = isRightToLeft ? 'marginRight' : 'marginLeft';\n var endMargin = isRightToLeft ? 'marginLeft' : 'marginRight';\n var contentWidth = this.slideableWidth - this.getLastCell().size[ endMargin ];\n // content is less than gallery size\n var isContentSmaller = contentWidth < this.size.innerWidth;\n // bounds\n var beginBound = this.cursorPosition + this.cells[0].size[ beginMargin ];\n var endBound = contentWidth - this.size.innerWidth * ( 1 - this.cellAlign );\n // contain each cell target\n this.slides.forEach( function( slide ) {\n if ( isContentSmaller ) {\n // all cells fit inside gallery\n slide.target = contentWidth * this.cellAlign;\n } else {\n // contain to bounds\n slide.target = Math.max( slide.target, beginBound );\n slide.target = Math.min( slide.target, endBound );\n }\n }, this );\n};\n\n// ----- ----- //\n\n/**\n * emits events via eventEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n var emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n\n if ( jQuery && this.$element ) {\n // default trigger with type if no event\n type += this.options.namespaceJQueryEvents ? '.flickity' : '';\n var $event = type;\n if ( event ) {\n // create jQuery event\n var jQEvent = jQuery.Event( event );\n jQEvent.type = type;\n $event = jQEvent;\n }\n this.$element.trigger( $event, args );\n }\n};\n\n// -------------------------- select -------------------------- //\n\n/**\n * @param {Integer} index - index of the slide\n * @param {Boolean} isWrap - will wrap-around to last/first if at the end\n * @param {Boolean} isInstant - will immediately set position at selected cell\n */\nproto.select = function( index, isWrap, isInstant ) {\n if ( !this.isActive ) {\n return;\n }\n index = parseInt( index, 10 );\n this._wrapSelect( index );\n\n if ( this.options.wrapAround || isWrap ) {\n index = utils.modulo( index, this.slides.length );\n }\n // bail if invalid index\n if ( !this.slides[ index ] ) {\n return;\n }\n var prevIndex = this.selectedIndex;\n this.selectedIndex = index;\n this.updateSelectedSlide();\n if ( isInstant ) {\n this.positionSliderAtSelected();\n } else {\n this.startAnimation();\n }\n if ( this.options.adaptiveHeight ) {\n this.setGallerySize();\n }\n // events\n this.dispatchEvent( 'select', null, [ index ] );\n // change event if new index\n if ( index != prevIndex ) {\n this.dispatchEvent( 'change', null, [ index ] );\n }\n // old v1 event name, remove in v3\n this.dispatchEvent('cellSelect');\n};\n\n// wraps position for wrapAround, to move to closest slide. #113\nproto._wrapSelect = function( index ) {\n var len = this.slides.length;\n var isWrapping = this.options.wrapAround && len > 1;\n if ( !isWrapping ) {\n return index;\n }\n var wrapIndex = utils.modulo( index, len );\n // go to shortest\n var delta = Math.abs( wrapIndex - this.selectedIndex );\n var backWrapDelta = Math.abs( ( wrapIndex + len ) - this.selectedIndex );\n var forewardWrapDelta = Math.abs( ( wrapIndex - len ) - this.selectedIndex );\n if ( !this.isDragSelect && backWrapDelta < delta ) {\n index += len;\n } else if ( !this.isDragSelect && forewardWrapDelta < delta ) {\n index -= len;\n }\n // wrap position so slider is within normal area\n if ( index < 0 ) {\n this.x -= this.slideableWidth;\n } else if ( index >= len ) {\n this.x += this.slideableWidth;\n }\n};\n\nproto.previous = function( isWrap, isInstant ) {\n this.select( this.selectedIndex - 1, isWrap, isInstant );\n};\n\nproto.next = function( isWrap, isInstant ) {\n this.select( this.selectedIndex + 1, isWrap, isInstant );\n};\n\nproto.updateSelectedSlide = function() {\n var slide = this.slides[ this.selectedIndex ];\n // selectedIndex could be outside of slides, if triggered before resize()\n if ( !slide ) {\n return;\n }\n // unselect previous selected slide\n this.unselectSelectedSlide();\n // update new selected slide\n this.selectedSlide = slide;\n slide.select();\n this.selectedCells = slide.cells;\n this.selectedElements = slide.getCellElements();\n // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\n // Remove in v3?\n this.selectedCell = slide.cells[0];\n this.selectedElement = this.selectedElements[0];\n};\n\nproto.unselectSelectedSlide = function() {\n if ( this.selectedSlide ) {\n this.selectedSlide.unselect();\n }\n};\n\nproto.selectInitialIndex = function() {\n var initialIndex = this.options.initialIndex;\n // already activated, select previous selectedIndex\n if ( this.isInitActivated ) {\n this.select( this.selectedIndex, false, true );\n return;\n }\n // select with selector string\n if ( initialIndex && typeof initialIndex == 'string' ) {\n var cell = this.queryCell( initialIndex );\n if ( cell ) {\n this.selectCell( initialIndex, false, true );\n return;\n }\n }\n\n var index = 0;\n // select with number\n if ( initialIndex && this.slides[ initialIndex ] ) {\n index = initialIndex;\n }\n // select instantly\n this.select( index, false, true );\n};\n\n/**\n * select slide from number or cell element\n * @param {Element or Number} elem\n */\nproto.selectCell = function( value, isWrap, isInstant ) {\n // get cell\n var cell = this.queryCell( value );\n if ( !cell ) {\n return;\n }\n\n var index = this.getCellSlideIndex( cell );\n this.select( index, isWrap, isInstant );\n};\n\nproto.getCellSlideIndex = function( cell ) {\n // get index of slides that has cell\n for ( var i=0; i < this.slides.length; i++ ) {\n var slide = this.slides[i];\n var index = slide.cells.indexOf( cell );\n if ( index != -1 ) {\n return i;\n }\n }\n};\n\n// -------------------------- get cells -------------------------- //\n\n/**\n * get Flickity.Cell, given an Element\n * @param {Element} elem\n * @returns {Flickity.Cell} item\n */\nproto.getCell = function( elem ) {\n // loop through cells to get the one that matches\n for ( var i=0; i < this.cells.length; i++ ) {\n var cell = this.cells[i];\n if ( cell.element == elem ) {\n return cell;\n }\n }\n};\n\n/**\n * get collection of Flickity.Cells, given Elements\n * @param {Element, Array, NodeList} elems\n * @returns {Array} cells - Flickity.Cells\n */\nproto.getCells = function( elems ) {\n elems = utils.makeArray( elems );\n var cells = [];\n elems.forEach( function( elem ) {\n var cell = this.getCell( elem );\n if ( cell ) {\n cells.push( cell );\n }\n }, this );\n return cells;\n};\n\n/**\n * get cell elements\n * @returns {Array} cellElems\n */\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n });\n};\n\n/**\n * get parent cell from an element\n * @param {Element} elem\n * @returns {Flickit.Cell} cell\n */\nproto.getParentCell = function( elem ) {\n // first check if elem is cell\n var cell = this.getCell( elem );\n if ( cell ) {\n return cell;\n }\n // try to get parent cell elem\n elem = utils.getParent( elem, '.flickity-slider > *' );\n return this.getCell( elem );\n};\n\n/**\n * get cells adjacent to a slide\n * @param {Integer} adjCount - number of adjacent slides\n * @param {Integer} index - index of slide to start\n * @returns {Array} cells - array of Flickity.Cells\n */\nproto.getAdjacentCellElements = function( adjCount, index ) {\n if ( !adjCount ) {\n return this.selectedSlide.getCellElements();\n }\n index = index === undefined ? this.selectedIndex : index;\n\n var len = this.slides.length;\n if ( 1 + ( adjCount * 2 ) >= len ) {\n return this.getCellElements();\n }\n\n var cellElems = [];\n for ( var i = index - adjCount; i <= index + adjCount ; i++ ) {\n var slideIndex = this.options.wrapAround ? utils.modulo( i, len ) : i;\n var slide = this.slides[ slideIndex ];\n if ( slide ) {\n cellElems = cellElems.concat( slide.getCellElements() );\n }\n }\n return cellElems;\n};\n\n/**\n * select slide from number or cell element\n * @param {Element, Selector String, or Number} selector\n */\nproto.queryCell = function( selector ) {\n if ( typeof selector == 'number' ) {\n // use number as index\n return this.cells[ selector ];\n }\n if ( typeof selector == 'string' ) {\n // do not select invalid selectors from hash: #123, #/. #791\n if ( selector.match(/^[#\\.]?[\\d\\/]/) ) {\n return;\n }\n // use string as selector, get element\n selector = this.element.querySelector( selector );\n }\n // get cell from element\n return this.getCell( selector );\n};\n\n// -------------------------- events -------------------------- //\n\nproto.uiChange = function() {\n this.emitEvent('uiChange');\n};\n\n// keep focus on element when child UI elements are clicked\nproto.childUIPointerDown = function( event ) {\n // HACK iOS does not allow touch events to bubble up?!\n if ( event.type != 'touchstart' ) {\n event.preventDefault();\n }\n this.focus();\n};\n\n// ----- resize ----- //\n\nproto.onresize = function() {\n this.watchCSS();\n this.resize();\n};\n\nutils.debounceMethod( Flickity, 'onresize', 150 );\n\nproto.resize = function() {\n if ( !this.isActive ) {\n return;\n }\n this.getSize();\n // wrap values\n if ( this.options.wrapAround ) {\n this.x = utils.modulo( this.x, this.slideableWidth );\n }\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n this.emitEvent('resize');\n // update selected index for group slides, instant\n // TODO: position can be lost between groups of various numbers\n var selectedElement = this.selectedElements && this.selectedElements[0];\n this.selectCell( selectedElement, false, true );\n};\n\n// watches the :after property, activates/deactivates\nproto.watchCSS = function() {\n var watchOption = this.options.watchCSS;\n if ( !watchOption ) {\n return;\n }\n\n var afterContent = getComputedStyle( this.element, ':after' ).content;\n // activate if :after { content: 'flickity' }\n if ( afterContent.indexOf('flickity') != -1 ) {\n this.activate();\n } else {\n this.deactivate();\n }\n};\n\n// ----- keydown ----- //\n\n// go previous/next if left/right keys pressed\nproto.onkeydown = function( event ) {\n // only work if element is in focus\n var isNotFocused = document.activeElement && document.activeElement != this.element;\n if ( !this.options.accessibility ||isNotFocused ) {\n return;\n }\n\n var handler = Flickity.keyboardHandlers[ event.keyCode ];\n if ( handler ) {\n handler.call( this );\n }\n};\n\nFlickity.keyboardHandlers = {\n // left arrow\n 37: function() {\n var leftMethod = this.options.rightToLeft ? 'next' : 'previous';\n this.uiChange();\n this[ leftMethod ]();\n },\n // right arrow\n 39: function() {\n var rightMethod = this.options.rightToLeft ? 'previous' : 'next';\n this.uiChange();\n this[ rightMethod ]();\n },\n};\n\n// ----- focus ----- //\n\nproto.focus = function() {\n // TODO remove scrollTo once focus options gets more support\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus#Browser_compatibility\n var prevScrollY = window.pageYOffset;\n this.element.focus({ preventScroll: true });\n // hack to fix scroll jump after focus, #76\n if ( window.pageYOffset != prevScrollY ) {\n window.scrollTo( window.pageXOffset, prevScrollY );\n }\n};\n\n// -------------------------- destroy -------------------------- //\n\n// deactivate all Flickity functionality, but keep stuff available\nproto.deactivate = function() {\n if ( !this.isActive ) {\n return;\n }\n this.element.classList.remove('flickity-enabled');\n this.element.classList.remove('flickity-rtl');\n this.unselectSelectedSlide();\n // destroy cells\n this.cells.forEach( function( cell ) {\n cell.destroy();\n });\n this.element.removeChild( this.viewport );\n // move child elements back into element\n moveElements( this.slider.children, this.element );\n if ( this.options.accessibility ) {\n this.element.removeAttribute('tabIndex');\n this.element.removeEventListener( 'keydown', this );\n }\n // set flags\n this.isActive = false;\n this.emitEvent('deactivate');\n};\n\nproto.destroy = function() {\n this.deactivate();\n window.removeEventListener( 'resize', this );\n this.allOff();\n this.emitEvent('destroy');\n if ( jQuery && this.$element ) {\n jQuery.removeData( this.element, 'flickity' );\n }\n delete this.element.flickityGUID;\n delete instances[ this.guid ];\n};\n\n// -------------------------- prototype -------------------------- //\n\nutils.extend( proto, animatePrototype );\n\n// -------------------------- extras -------------------------- //\n\n/**\n * get Flickity instance from element\n * @param {Element} elem\n * @returns {Flickity}\n */\nFlickity.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n var id = elem && elem.flickityGUID;\n return id && instances[ id ];\n};\n\nutils.htmlInit( Flickity, 'flickity' );\n\nif ( jQuery && jQuery.bridget ) {\n jQuery.bridget( 'flickity', Flickity );\n}\n\n// set internal jQuery, for Webpack + jQuery v3, #478\nFlickity.setJQuery = function( jq ) {\n jQuery = jq;\n};\n\nFlickity.Cell = Cell;\nFlickity.Slide = Slide;\n\nreturn Flickity;\n\n}));\n\n/*!\n * Unipointer v2.3.0\n * base class for doing one thing with pointer event\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*global define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'unipointer/unipointer',[\n 'ev-emitter/ev-emitter'\n ], function( EvEmitter ) {\n return factory( window, EvEmitter );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter')\n );\n } else {\n // browser global\n window.Unipointer = factory(\n window,\n window.EvEmitter\n );\n }\n\n}( window, function factory( window, EvEmitter ) {\n\n\n\nfunction noop() {}\n\nfunction Unipointer() {}\n\n// inherit EvEmitter\nvar proto = Unipointer.prototype = Object.create( EvEmitter.prototype );\n\nproto.bindStartEvent = function( elem ) {\n this._bindStartEvent( elem, true );\n};\n\nproto.unbindStartEvent = function( elem ) {\n this._bindStartEvent( elem, false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd - remove if falsey\n */\nproto._bindStartEvent = function( elem, isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n\n // default to mouse events\n var startEvent = 'mousedown';\n if ( window.PointerEvent ) {\n // Pointer Events\n startEvent = 'pointerdown';\n } else if ( 'ontouchstart' in window ) {\n // Touch Events. iOS Safari\n startEvent = 'touchstart';\n }\n elem[ bindMethod ]( startEvent, this );\n};\n\n// trigger handler methods for events\nproto.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// returns the touch that we're keeping track of\nproto.getTouch = function( touches ) {\n for ( var i=0; i < touches.length; i++ ) {\n var touch = touches[i];\n if ( touch.identifier == this.pointerIdentifier ) {\n return touch;\n }\n }\n};\n\n// ----- start event ----- //\n\nproto.onmousedown = function( event ) {\n // dismiss clicks from right or middle buttons\n var button = event.button;\n if ( button && ( button !== 0 && button !== 1 ) ) {\n return;\n }\n this._pointerDown( event, event );\n};\n\nproto.ontouchstart = function( event ) {\n this._pointerDown( event, event.changedTouches[0] );\n};\n\nproto.onpointerdown = function( event ) {\n this._pointerDown( event, event );\n};\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto._pointerDown = function( event, pointer ) {\n // dismiss right click and other pointers\n // button = 0 is okay, 1-4 not\n if ( event.button || this.isPointerDown ) {\n return;\n }\n\n this.isPointerDown = true;\n // save pointer identifier to match up touch events\n this.pointerIdentifier = pointer.pointerId !== undefined ?\n // pointerId for pointer events, touch.indentifier for touch events\n pointer.pointerId : pointer.identifier;\n\n this.pointerDown( event, pointer );\n};\n\nproto.pointerDown = function( event, pointer ) {\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// hash of events to be bound after start event\nvar postStartEvents = {\n mousedown: [ 'mousemove', 'mouseup' ],\n touchstart: [ 'touchmove', 'touchend', 'touchcancel' ],\n pointerdown: [ 'pointermove', 'pointerup', 'pointercancel' ],\n};\n\nproto._bindPostStartEvents = function( event ) {\n if ( !event ) {\n return;\n }\n // get proper events to match start event\n var events = postStartEvents[ event.type ];\n // bind events to node\n events.forEach( function( eventName ) {\n window.addEventListener( eventName, this );\n }, this );\n // save these arguments\n this._boundPointerEvents = events;\n};\n\nproto._unbindPostStartEvents = function() {\n // check for _boundEvents, in case dragEnd triggered twice (old IE8 bug)\n if ( !this._boundPointerEvents ) {\n return;\n }\n this._boundPointerEvents.forEach( function( eventName ) {\n window.removeEventListener( eventName, this );\n }, this );\n\n delete this._boundPointerEvents;\n};\n\n// ----- move event ----- //\n\nproto.onmousemove = function( event ) {\n this._pointerMove( event, event );\n};\n\nproto.onpointermove = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerMove( event, event );\n }\n};\n\nproto.ontouchmove = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerMove( event, touch );\n }\n};\n\n/**\n * pointer move\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerMove = function( event, pointer ) {\n this.pointerMove( event, pointer );\n};\n\n// public\nproto.pointerMove = function( event, pointer ) {\n this.emitEvent( 'pointerMove', [ event, pointer ] );\n};\n\n// ----- end event ----- //\n\n\nproto.onmouseup = function( event ) {\n this._pointerUp( event, event );\n};\n\nproto.onpointerup = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerUp( event, event );\n }\n};\n\nproto.ontouchend = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerUp( event, touch );\n }\n};\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerUp = function( event, pointer ) {\n this._pointerDone();\n this.pointerUp( event, pointer );\n};\n\n// public\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n};\n\n// ----- pointer done ----- //\n\n// triggered on pointer up & pointer cancel\nproto._pointerDone = function() {\n this._pointerReset();\n this._unbindPostStartEvents();\n this.pointerDone();\n};\n\nproto._pointerReset = function() {\n // reset properties\n this.isPointerDown = false;\n delete this.pointerIdentifier;\n};\n\nproto.pointerDone = noop;\n\n// ----- pointer cancel ----- //\n\nproto.onpointercancel = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerCancel( event, event );\n }\n};\n\nproto.ontouchcancel = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerCancel( event, touch );\n }\n};\n\n/**\n * pointer cancel\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerCancel = function( event, pointer ) {\n this._pointerDone();\n this.pointerCancel( event, pointer );\n};\n\n// public\nproto.pointerCancel = function( event, pointer ) {\n this.emitEvent( 'pointerCancel', [ event, pointer ] );\n};\n\n// ----- ----- //\n\n// utility function for getting x/y coords from event\nUnipointer.getPointerPoint = function( pointer ) {\n return {\n x: pointer.pageX,\n y: pointer.pageY\n };\n};\n\n// ----- ----- //\n\nreturn Unipointer;\n\n}));\n\n/*!\n * Unidragger v2.3.0\n * Draggable base class\n * MIT license\n */\n\n/*jshint browser: true, unused: true, undef: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'unidragger/unidragger',[\n 'unipointer/unipointer'\n ], function( Unipointer ) {\n return factory( window, Unipointer );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('unipointer')\n );\n } else {\n // browser global\n window.Unidragger = factory(\n window,\n window.Unipointer\n );\n }\n\n}( window, function factory( window, Unipointer ) {\n\n\n\n// -------------------------- Unidragger -------------------------- //\n\nfunction Unidragger() {}\n\n// inherit Unipointer & EvEmitter\nvar proto = Unidragger.prototype = Object.create( Unipointer.prototype );\n\n// ----- bind start ----- //\n\nproto.bindHandles = function() {\n this._bindHandles( true );\n};\n\nproto.unbindHandles = function() {\n this._bindHandles( false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd\n */\nproto._bindHandles = function( isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n // bind each handle\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n var touchAction = isAdd ? this._touchActionValue : '';\n for ( var i=0; i < this.handles.length; i++ ) {\n var handle = this.handles[i];\n this._bindStartEvent( handle, isAdd );\n handle[ bindMethod ]( 'click', this );\n // touch-action: none to override browser touch gestures. metafizzy/flickity#540\n if ( window.PointerEvent ) {\n handle.style.touchAction = touchAction;\n }\n }\n};\n\n// prototype so it can be overwriteable by Flickity\nproto._touchActionValue = 'none';\n\n// ----- start event ----- //\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerDown = function( event, pointer ) {\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n // track start event position\n this.pointerDownPointer = pointer;\n\n event.preventDefault();\n this.pointerDownBlur();\n // bind move and end events\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// nodes that have text fields\nvar cursorNodes = {\n TEXTAREA: true,\n INPUT: true,\n SELECT: true,\n OPTION: true,\n};\n\n// input types that do not have text fields\nvar clickTypes = {\n radio: true,\n checkbox: true,\n button: true,\n submit: true,\n image: true,\n file: true,\n};\n\n// dismiss inputs with text fields. flickity#403, flickity#404\nproto.okayPointerDown = function( event ) {\n var isCursorNode = cursorNodes[ event.target.nodeName ];\n var isClickType = clickTypes[ event.target.type ];\n var isOkay = !isCursorNode || isClickType;\n if ( !isOkay ) {\n this._pointerReset();\n }\n return isOkay;\n};\n\n// kludge to blur previously focused input\nproto.pointerDownBlur = function() {\n var focused = document.activeElement;\n // do not blur body for IE10, metafizzy/flickity#117\n var canBlur = focused && focused.blur && focused != document.body;\n if ( canBlur ) {\n focused.blur();\n }\n};\n\n// ----- move event ----- //\n\n/**\n * drag move\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\n// base pointer move logic\nproto._dragPointerMove = function( event, pointer ) {\n var moveVector = {\n x: pointer.pageX - this.pointerDownPointer.pageX,\n y: pointer.pageY - this.pointerDownPointer.pageY\n };\n // start drag if pointer has moved far enough to start drag\n if ( !this.isDragging && this.hasDragStarted( moveVector ) ) {\n this._dragStart( event, pointer );\n }\n return moveVector;\n};\n\n// condition if pointer has moved far enough to start drag\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > 3 || Math.abs( moveVector.y ) > 3;\n};\n\n// ----- end event ----- //\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto._dragPointerUp = function( event, pointer ) {\n if ( this.isDragging ) {\n this._dragEnd( event, pointer );\n } else {\n // pointer didn't move enough for drag to start\n this._staticClick( event, pointer );\n }\n};\n\n// -------------------------- drag -------------------------- //\n\n// dragStart\nproto._dragStart = function( event, pointer ) {\n this.isDragging = true;\n // prevent clicks\n this.isPreventingClicks = true;\n this.dragStart( event, pointer );\n};\n\nproto.dragStart = function( event, pointer ) {\n this.emitEvent( 'dragStart', [ event, pointer ] );\n};\n\n// dragMove\nproto._dragMove = function( event, pointer, moveVector ) {\n // do not drag if not dragging yet\n if ( !this.isDragging ) {\n return;\n }\n\n this.dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n event.preventDefault();\n this.emitEvent( 'dragMove', [ event, pointer, moveVector ] );\n};\n\n// dragEnd\nproto._dragEnd = function( event, pointer ) {\n // set flags\n this.isDragging = false;\n // re-enable clicking async\n setTimeout( function() {\n delete this.isPreventingClicks;\n }.bind( this ) );\n\n this.dragEnd( event, pointer );\n};\n\nproto.dragEnd = function( event, pointer ) {\n this.emitEvent( 'dragEnd', [ event, pointer ] );\n};\n\n// ----- onclick ----- //\n\n// handle all clicks and prevent clicks when dragging\nproto.onclick = function( event ) {\n if ( this.isPreventingClicks ) {\n event.preventDefault();\n }\n};\n\n// ----- staticClick ----- //\n\n// triggered after pointer down & up with no/tiny movement\nproto._staticClick = function( event, pointer ) {\n // ignore emulated mouse up clicks\n if ( this.isIgnoringMouseUp && event.type == 'mouseup' ) {\n return;\n }\n\n this.staticClick( event, pointer );\n\n // set flag for emulated clicks 300ms after touchend\n if ( event.type != 'mouseup' ) {\n this.isIgnoringMouseUp = true;\n // reset flag after 300ms\n setTimeout( function() {\n delete this.isIgnoringMouseUp;\n }.bind( this ), 400 );\n }\n};\n\nproto.staticClick = function( event, pointer ) {\n this.emitEvent( 'staticClick', [ event, pointer ] );\n};\n\n// ----- utils ----- //\n\nUnidragger.getPointerPoint = Unipointer.getPointerPoint;\n\n// ----- ----- //\n\nreturn Unidragger;\n\n}));\n\n// drag\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'flickity/js/drag',[\n './flickity',\n 'unidragger/unidragger',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, Unidragger, utils ) {\n return factory( window, Flickity, Unidragger, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unidragger'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = factory(\n window,\n window.Flickity,\n window.Unidragger,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unidragger, utils ) {\n\n\n\n// ----- defaults ----- //\n\nutils.extend( Flickity.defaults, {\n draggable: '>1',\n dragThreshold: 3,\n});\n\n// ----- create ----- //\n\nFlickity.createMethods.push('_createDrag');\n\n// -------------------------- drag prototype -------------------------- //\n\nvar proto = Flickity.prototype;\nutils.extend( proto, Unidragger.prototype );\nproto._touchActionValue = 'pan-y';\n\n// -------------------------- -------------------------- //\n\nvar isTouch = 'createTouch' in document;\nvar isTouchmoveScrollCanceled = false;\n\nproto._createDrag = function() {\n this.on( 'activate', this.onActivateDrag );\n this.on( 'uiChange', this._uiChangeDrag );\n this.on( 'deactivate', this.onDeactivateDrag );\n this.on( 'cellChange', this.updateDraggable );\n // TODO updateDraggable on resize? if groupCells & slides change\n // HACK - add seemingly innocuous handler to fix iOS 10 scroll behavior\n // #457, RubaXa/Sortable#973\n if ( isTouch && !isTouchmoveScrollCanceled ) {\n window.addEventListener( 'touchmove', function() {});\n isTouchmoveScrollCanceled = true;\n }\n};\n\nproto.onActivateDrag = function() {\n this.handles = [ this.viewport ];\n this.bindHandles();\n this.updateDraggable();\n};\n\nproto.onDeactivateDrag = function() {\n this.unbindHandles();\n this.element.classList.remove('is-draggable');\n};\n\nproto.updateDraggable = function() {\n // disable dragging if less than 2 slides. #278\n if ( this.options.draggable == '>1' ) {\n this.isDraggable = this.slides.length > 1;\n } else {\n this.isDraggable = this.options.draggable;\n }\n if ( this.isDraggable ) {\n this.element.classList.add('is-draggable');\n } else {\n this.element.classList.remove('is-draggable');\n }\n};\n\n// backwards compatibility\nproto.bindDrag = function() {\n this.options.draggable = true;\n this.updateDraggable();\n};\n\nproto.unbindDrag = function() {\n this.options.draggable = false;\n this.updateDraggable();\n};\n\nproto._uiChangeDrag = function() {\n delete this.isFreeScrolling;\n};\n\n// -------------------------- pointer events -------------------------- //\n\nproto.pointerDown = function( event, pointer ) {\n if ( !this.isDraggable ) {\n this._pointerDownDefault( event, pointer );\n return;\n }\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n\n this._pointerDownPreventDefault( event );\n this.pointerDownFocus( event );\n // blur\n if ( document.activeElement != this.element ) {\n // do not blur if already focused\n this.pointerDownBlur();\n }\n\n // stop if it was moving\n this.dragX = this.x;\n this.viewport.classList.add('is-pointer-down');\n // track scrolling\n this.pointerDownScroll = getScrollPosition();\n window.addEventListener( 'scroll', this );\n\n this._pointerDownDefault( event, pointer );\n};\n\n// default pointerDown logic, used for staticClick\nproto._pointerDownDefault = function( event, pointer ) {\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. #779\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n // bind move and end events\n this._bindPostStartEvents( event );\n this.dispatchEvent( 'pointerDown', event, [ pointer ] );\n};\n\nvar focusNodes = {\n INPUT: true,\n TEXTAREA: true,\n SELECT: true,\n};\n\nproto.pointerDownFocus = function( event ) {\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isFocusNode ) {\n this.focus();\n }\n};\n\nproto._pointerDownPreventDefault = function( event ) {\n var isTouchStart = event.type == 'touchstart';\n var isTouchPointer = event.pointerType == 'touch';\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isTouchStart && !isTouchPointer && !isFocusNode ) {\n event.preventDefault();\n }\n};\n\n// ----- move ----- //\n\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > this.options.dragThreshold;\n};\n\n// ----- up ----- //\n\nproto.pointerUp = function( event, pointer ) {\n delete this.isTouchScrolling;\n this.viewport.classList.remove('is-pointer-down');\n this.dispatchEvent( 'pointerUp', event, [ pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto.pointerDone = function() {\n window.removeEventListener( 'scroll', this );\n delete this.pointerDownScroll;\n};\n\n// -------------------------- dragging -------------------------- //\n\nproto.dragStart = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n this.dragStartPosition = this.x;\n this.startAnimation();\n window.removeEventListener( 'scroll', this );\n this.dispatchEvent( 'dragStart', event, [ pointer ] );\n};\n\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.dispatchEvent( 'pointerMove', event, [ pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n if ( !this.isDraggable ) {\n return;\n }\n event.preventDefault();\n\n this.previousDragX = this.dragX;\n // reverse if right-to-left\n var direction = this.options.rightToLeft ? -1 : 1;\n if ( this.options.wrapAround ) {\n // wrap around move. #589\n moveVector.x = moveVector.x % this.slideableWidth;\n }\n var dragX = this.dragStartPosition + moveVector.x * direction;\n\n if ( !this.options.wrapAround && this.slides.length ) {\n // slow drag\n var originBound = Math.max( -this.slides[0].target, this.dragStartPosition );\n dragX = dragX > originBound ? ( dragX + originBound ) * 0.5 : dragX;\n var endBound = Math.min( -this.getLastSlide().target, this.dragStartPosition );\n dragX = dragX < endBound ? ( dragX + endBound ) * 0.5 : dragX;\n }\n\n this.dragX = dragX;\n\n this.dragMoveTime = new Date();\n this.dispatchEvent( 'dragMove', event, [ pointer, moveVector ] );\n};\n\nproto.dragEnd = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n if ( this.options.freeScroll ) {\n this.isFreeScrolling = true;\n }\n // set selectedIndex based on where flick will end up\n var index = this.dragEndRestingSelect();\n\n if ( this.options.freeScroll && !this.options.wrapAround ) {\n // if free-scroll & not wrap around\n // do not free-scroll if going outside of bounding slides\n // so bounding slides can attract slider, and keep it in bounds\n var restingX = this.getRestingPosition();\n this.isFreeScrolling = -restingX > this.slides[0].target &&\n -restingX < this.getLastSlide().target;\n } else if ( !this.options.freeScroll && index == this.selectedIndex ) {\n // boost selection if selected index has not changed\n index += this.dragEndBoostSelect();\n }\n delete this.previousDragX;\n // apply selection\n // TODO refactor this, selecting here feels weird\n // HACK, set flag so dragging stays in correct direction\n this.isDragSelect = this.options.wrapAround;\n this.select( index );\n delete this.isDragSelect;\n this.dispatchEvent( 'dragEnd', event, [ pointer ] );\n};\n\nproto.dragEndRestingSelect = function() {\n var restingX = this.getRestingPosition();\n // how far away from selected slide\n var distance = Math.abs( this.getSlideDistance( -restingX, this.selectedIndex ) );\n // get closet resting going up and going down\n var positiveResting = this._getClosestResting( restingX, distance, 1 );\n var negativeResting = this._getClosestResting( restingX, distance, -1 );\n // use closer resting for wrap-around\n var index = positiveResting.distance < negativeResting.distance ?\n positiveResting.index : negativeResting.index;\n return index;\n};\n\n/**\n * given resting X and distance to selected cell\n * get the distance and index of the closest cell\n * @param {Number} restingX - estimated post-flick resting position\n * @param {Number} distance - distance to selected cell\n * @param {Integer} increment - +1 or -1, going up or down\n * @returns {Object} - { distance: {Number}, index: {Integer} }\n */\nproto._getClosestResting = function( restingX, distance, increment ) {\n var index = this.selectedIndex;\n var minDistance = Infinity;\n var condition = this.options.contain && !this.options.wrapAround ?\n // if contain, keep going if distance is equal to minDistance\n function( d, md ) { return d <= md; } : function( d, md ) { return d < md; };\n while ( condition( distance, minDistance ) ) {\n // measure distance to next cell\n index += increment;\n minDistance = distance;\n distance = this.getSlideDistance( -restingX, index );\n if ( distance === null ) {\n break;\n }\n distance = Math.abs( distance );\n }\n return {\n distance: minDistance,\n // selected was previous index\n index: index - increment\n };\n};\n\n/**\n * measure distance between x and a slide target\n * @param {Number} x\n * @param {Integer} index - slide index\n */\nproto.getSlideDistance = function( x, index ) {\n var len = this.slides.length;\n // wrap around if at least 2 slides\n var isWrapAround = this.options.wrapAround && len > 1;\n var slideIndex = isWrapAround ? utils.modulo( index, len ) : index;\n var slide = this.slides[ slideIndex ];\n if ( !slide ) {\n return null;\n }\n // add distance for wrap-around slides\n var wrap = isWrapAround ? this.slideableWidth * Math.floor( index / len ) : 0;\n return x - ( slide.target + wrap );\n};\n\nproto.dragEndBoostSelect = function() {\n // do not boost if no previousDragX or dragMoveTime\n if ( this.previousDragX === undefined || !this.dragMoveTime ||\n // or if drag was held for 100 ms\n new Date() - this.dragMoveTime > 100 ) {\n return 0;\n }\n\n var distance = this.getSlideDistance( -this.dragX, this.selectedIndex );\n var delta = this.previousDragX - this.dragX;\n if ( distance > 0 && delta > 0 ) {\n // boost to next if moving towards the right, and positive velocity\n return 1;\n } else if ( distance < 0 && delta < 0 ) {\n // boost to previous if moving towards the left, and negative velocity\n return -1;\n }\n return 0;\n};\n\n// ----- staticClick ----- //\n\nproto.staticClick = function( event, pointer ) {\n // get clickedCell, if cell was clicked\n var clickedCell = this.getParentCell( event.target );\n var cellElem = clickedCell && clickedCell.element;\n var cellIndex = clickedCell && this.cells.indexOf( clickedCell );\n this.dispatchEvent( 'staticClick', event, [ pointer, cellElem, cellIndex ] );\n};\n\n// ----- scroll ----- //\n\nproto.onscroll = function() {\n var scroll = getScrollPosition();\n var scrollMoveX = this.pointerDownScroll.x - scroll.x;\n var scrollMoveY = this.pointerDownScroll.y - scroll.y;\n // cancel click/tap if scroll is too much\n if ( Math.abs( scrollMoveX ) > 3 || Math.abs( scrollMoveY ) > 3 ) {\n this._pointerDone();\n }\n};\n\n// ----- utils ----- //\n\nfunction getScrollPosition() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n}\n\n// ----- ----- //\n\nreturn Flickity;\n\n}));\n\n// prev/next buttons\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'flickity/js/prev-next-button',[\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n'use strict';\n\nvar svgURI = 'http://www.w3.org/2000/svg';\n\n// -------------------------- PrevNextButton -------------------------- //\n\nfunction PrevNextButton( direction, parent ) {\n this.direction = direction;\n this.parent = parent;\n this._create();\n}\n\nPrevNextButton.prototype = Object.create( Unipointer.prototype );\n\nPrevNextButton.prototype._create = function() {\n // properties\n this.isEnabled = true;\n this.isPrevious = this.direction == -1;\n var leftDirection = this.parent.options.rightToLeft ? 1 : -1;\n this.isLeft = this.direction == leftDirection;\n\n var element = this.element = document.createElement('button');\n element.className = 'flickity-button flickity-prev-next-button';\n element.className += this.isPrevious ? ' previous' : ' next';\n // prevent button from submitting form http://stackoverflow.com/a/10836076/182183\n element.setAttribute( 'type', 'button' );\n // init as disabled\n this.disable();\n\n element.setAttribute( 'aria-label', this.isPrevious ? 'Previous' : 'Next' );\n\n // create arrow\n var svg = this.createSVG();\n element.appendChild( svg );\n // events\n this.parent.on( 'select', this.update.bind( this ) );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPrevNextButton.prototype.activate = function() {\n this.bindStartEvent( this.element );\n this.element.addEventListener( 'click', this );\n // add to DOM\n this.parent.element.appendChild( this.element );\n};\n\nPrevNextButton.prototype.deactivate = function() {\n // remove from DOM\n this.parent.element.removeChild( this.element );\n // click events\n this.unbindStartEvent( this.element );\n this.element.removeEventListener( 'click', this );\n};\n\nPrevNextButton.prototype.createSVG = function() {\n var svg = document.createElementNS( svgURI, 'svg');\n svg.setAttribute( 'class', 'flickity-button-icon' );\n svg.setAttribute( 'viewBox', '0 0 100 100' );\n var path = document.createElementNS( svgURI, 'path');\n var pathMovements = getArrowMovements( this.parent.options.arrowShape );\n path.setAttribute( 'd', pathMovements );\n path.setAttribute( 'class', 'arrow' );\n // rotate arrow\n if ( !this.isLeft ) {\n path.setAttribute( 'transform', 'translate(100, 100) rotate(180) ' );\n }\n svg.appendChild( path );\n return svg;\n};\n\n// get SVG path movmement\nfunction getArrowMovements( shape ) {\n // use shape as movement if string\n if ( typeof shape == 'string' ) {\n return shape;\n }\n // create movement string\n return 'M ' + shape.x0 + ',50' +\n ' L ' + shape.x1 + ',' + ( shape.y1 + 50 ) +\n ' L ' + shape.x2 + ',' + ( shape.y2 + 50 ) +\n ' L ' + shape.x3 + ',50 ' +\n ' L ' + shape.x2 + ',' + ( 50 - shape.y2 ) +\n ' L ' + shape.x1 + ',' + ( 50 - shape.y1 ) +\n ' Z';\n}\n\nPrevNextButton.prototype.handleEvent = utils.handleEvent;\n\nPrevNextButton.prototype.onclick = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.parent.uiChange();\n var method = this.isPrevious ? 'previous' : 'next';\n this.parent[ method ]();\n};\n\n// ----- ----- //\n\nPrevNextButton.prototype.enable = function() {\n if ( this.isEnabled ) {\n return;\n }\n this.element.disabled = false;\n this.isEnabled = true;\n};\n\nPrevNextButton.prototype.disable = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.element.disabled = true;\n this.isEnabled = false;\n};\n\nPrevNextButton.prototype.update = function() {\n // index of first or last slide, if previous or next\n var slides = this.parent.slides;\n // enable is wrapAround and at least 2 slides\n if ( this.parent.options.wrapAround && slides.length > 1 ) {\n this.enable();\n return;\n }\n var lastIndex = slides.length ? slides.length - 1 : 0;\n var boundIndex = this.isPrevious ? 0 : lastIndex;\n var method = this.parent.selectedIndex == boundIndex ? 'disable' : 'enable';\n this[ method ]();\n};\n\nPrevNextButton.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\n// -------------------------- Flickity prototype -------------------------- //\n\nutils.extend( Flickity.defaults, {\n prevNextButtons: true,\n arrowShape: {\n x0: 10,\n x1: 60, y1: 50,\n x2: 70, y2: 40,\n x3: 30\n }\n});\n\nFlickity.createMethods.push('_createPrevNextButtons');\nvar proto = Flickity.prototype;\n\nproto._createPrevNextButtons = function() {\n if ( !this.options.prevNextButtons ) {\n return;\n }\n\n this.prevButton = new PrevNextButton( -1, this );\n this.nextButton = new PrevNextButton( 1, this );\n\n this.on( 'activate', this.activatePrevNextButtons );\n};\n\nproto.activatePrevNextButtons = function() {\n this.prevButton.activate();\n this.nextButton.activate();\n this.on( 'deactivate', this.deactivatePrevNextButtons );\n};\n\nproto.deactivatePrevNextButtons = function() {\n this.prevButton.deactivate();\n this.nextButton.deactivate();\n this.off( 'deactivate', this.deactivatePrevNextButtons );\n};\n\n// -------------------------- -------------------------- //\n\nFlickity.PrevNextButton = PrevNextButton;\n\nreturn Flickity;\n\n}));\n\n// page dots\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'flickity/js/page-dots',[\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n\n// -------------------------- PageDots -------------------------- //\n\n\n\nfunction PageDots( parent ) {\n this.parent = parent;\n this._create();\n}\n\nPageDots.prototype = Object.create( Unipointer.prototype );\n\nPageDots.prototype._create = function() {\n // create holder element\n this.holder = document.createElement('ol');\n this.holder.className = 'flickity-page-dots';\n // create dots, array of elements\n this.dots = [];\n // events\n this.handleClick = this.onClick.bind( this );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPageDots.prototype.activate = function() {\n this.setDots();\n this.holder.addEventListener( 'click', this.handleClick );\n this.bindStartEvent( this.holder );\n // add to DOM\n this.parent.element.appendChild( this.holder );\n};\n\nPageDots.prototype.deactivate = function() {\n this.holder.removeEventListener( 'click', this.handleClick );\n this.unbindStartEvent( this.holder );\n // remove from DOM\n this.parent.element.removeChild( this.holder );\n};\n\nPageDots.prototype.setDots = function() {\n // get difference between number of slides and number of dots\n var delta = this.parent.slides.length - this.dots.length;\n if ( delta > 0 ) {\n this.addDots( delta );\n } else if ( delta < 0 ) {\n this.removeDots( -delta );\n }\n};\n\nPageDots.prototype.addDots = function( count ) {\n var fragment = document.createDocumentFragment();\n var newDots = [];\n var length = this.dots.length;\n var max = length + count;\n\n for ( var i = length; i < max; i++ ) {\n var dot = document.createElement('li');\n dot.className = 'dot';\n dot.setAttribute( 'aria-label', 'Page dot ' + ( i + 1 ) );\n fragment.appendChild( dot );\n newDots.push( dot );\n }\n\n this.holder.appendChild( fragment );\n this.dots = this.dots.concat( newDots );\n};\n\nPageDots.prototype.removeDots = function( count ) {\n // remove from this.dots collection\n var removeDots = this.dots.splice( this.dots.length - count, count );\n // remove from DOM\n removeDots.forEach( function( dot ) {\n this.holder.removeChild( dot );\n }, this );\n};\n\nPageDots.prototype.updateSelected = function() {\n // remove selected class on previous\n if ( this.selectedDot ) {\n this.selectedDot.className = 'dot';\n this.selectedDot.removeAttribute('aria-current');\n }\n // don't proceed if no dots\n if ( !this.dots.length ) {\n return;\n }\n this.selectedDot = this.dots[ this.parent.selectedIndex ];\n this.selectedDot.className = 'dot is-selected';\n this.selectedDot.setAttribute( 'aria-current', 'step' );\n};\n\nPageDots.prototype.onTap = // old method name, backwards-compatible\nPageDots.prototype.onClick = function( event ) {\n var target = event.target;\n // only care about dot clicks\n if ( target.nodeName != 'LI' ) {\n return;\n }\n\n this.parent.uiChange();\n var index = this.dots.indexOf( target );\n this.parent.select( index );\n};\n\nPageDots.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\nFlickity.PageDots = PageDots;\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pageDots: true\n});\n\nFlickity.createMethods.push('_createPageDots');\n\nvar proto = Flickity.prototype;\n\nproto._createPageDots = function() {\n if ( !this.options.pageDots ) {\n return;\n }\n this.pageDots = new PageDots( this );\n // events\n this.on( 'activate', this.activatePageDots );\n this.on( 'select', this.updateSelectedPageDots );\n this.on( 'cellChange', this.updatePageDots );\n this.on( 'resize', this.updatePageDots );\n this.on( 'deactivate', this.deactivatePageDots );\n};\n\nproto.activatePageDots = function() {\n this.pageDots.activate();\n};\n\nproto.updateSelectedPageDots = function() {\n this.pageDots.updateSelected();\n};\n\nproto.updatePageDots = function() {\n this.pageDots.setDots();\n};\n\nproto.deactivatePageDots = function() {\n this.pageDots.deactivate();\n};\n\n// ----- ----- //\n\nFlickity.PageDots = PageDots;\n\nreturn Flickity;\n\n}));\n\n// player & autoPlay\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'flickity/js/player',[\n 'ev-emitter/ev-emitter',\n 'fizzy-ui-utils/utils',\n './flickity'\n ], function( EvEmitter, utils, Flickity ) {\n return factory( EvEmitter, utils, Flickity );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('ev-emitter'),\n require('fizzy-ui-utils'),\n require('./flickity')\n );\n } else {\n // browser global\n factory(\n window.EvEmitter,\n window.fizzyUIUtils,\n window.Flickity\n );\n }\n\n}( window, function factory( EvEmitter, utils, Flickity ) {\n\n\n\n// -------------------------- Player -------------------------- //\n\nfunction Player( parent ) {\n this.parent = parent;\n this.state = 'stopped';\n // visibility change event handler\n this.onVisibilityChange = this.visibilityChange.bind( this );\n this.onVisibilityPlay = this.visibilityPlay.bind( this );\n}\n\nPlayer.prototype = Object.create( EvEmitter.prototype );\n\n// start play\nPlayer.prototype.play = function() {\n if ( this.state == 'playing' ) {\n return;\n }\n // do not play if page is hidden, start playing when page is visible\n var isPageHidden = document.hidden;\n if ( isPageHidden ) {\n document.addEventListener( 'visibilitychange', this.onVisibilityPlay );\n return;\n }\n\n this.state = 'playing';\n // listen to visibility change\n document.addEventListener( 'visibilitychange', this.onVisibilityChange );\n // start ticking\n this.tick();\n};\n\nPlayer.prototype.tick = function() {\n // do not tick if not playing\n if ( this.state != 'playing' ) {\n return;\n }\n\n var time = this.parent.options.autoPlay;\n // default to 3 seconds\n time = typeof time == 'number' ? time : 3000;\n var _this = this;\n // HACK: reset ticks if stopped and started within interval\n this.clear();\n this.timeout = setTimeout( function() {\n _this.parent.next( true );\n _this.tick();\n }, time );\n};\n\nPlayer.prototype.stop = function() {\n this.state = 'stopped';\n this.clear();\n // remove visibility change event\n document.removeEventListener( 'visibilitychange', this.onVisibilityChange );\n};\n\nPlayer.prototype.clear = function() {\n clearTimeout( this.timeout );\n};\n\nPlayer.prototype.pause = function() {\n if ( this.state == 'playing' ) {\n this.state = 'paused';\n this.clear();\n }\n};\n\nPlayer.prototype.unpause = function() {\n // re-start play if paused\n if ( this.state == 'paused' ) {\n this.play();\n }\n};\n\n// pause if page visibility is hidden, unpause if visible\nPlayer.prototype.visibilityChange = function() {\n var isPageHidden = document.hidden;\n this[ isPageHidden ? 'pause' : 'unpause' ]();\n};\n\nPlayer.prototype.visibilityPlay = function() {\n this.play();\n document.removeEventListener( 'visibilitychange', this.onVisibilityPlay );\n};\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pauseAutoPlayOnHover: true\n});\n\nFlickity.createMethods.push('_createPlayer');\nvar proto = Flickity.prototype;\n\nproto._createPlayer = function() {\n this.player = new Player( this );\n\n this.on( 'activate', this.activatePlayer );\n this.on( 'uiChange', this.stopPlayer );\n this.on( 'pointerDown', this.stopPlayer );\n this.on( 'deactivate', this.deactivatePlayer );\n};\n\nproto.activatePlayer = function() {\n if ( !this.options.autoPlay ) {\n return;\n }\n this.player.play();\n this.element.addEventListener( 'mouseenter', this );\n};\n\n// Player API, don't hate the ... thanks I know where the door is\n\nproto.playPlayer = function() {\n this.player.play();\n};\n\nproto.stopPlayer = function() {\n this.player.stop();\n};\n\nproto.pausePlayer = function() {\n this.player.pause();\n};\n\nproto.unpausePlayer = function() {\n this.player.unpause();\n};\n\nproto.deactivatePlayer = function() {\n this.player.stop();\n this.element.removeEventListener( 'mouseenter', this );\n};\n\n// ----- mouseenter/leave ----- //\n\n// pause auto-play on hover\nproto.onmouseenter = function() {\n if ( !this.options.pauseAutoPlayOnHover ) {\n return;\n }\n this.player.pause();\n this.element.addEventListener( 'mouseleave', this );\n};\n\n// resume auto-play on hover off\nproto.onmouseleave = function() {\n this.player.unpause();\n this.element.removeEventListener( 'mouseleave', this );\n};\n\n// ----- ----- //\n\nFlickity.Player = Player;\n\nreturn Flickity;\n\n}));\n\n// add, remove cell\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'flickity/js/add-remove-cell',[\n './flickity',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n\n\n\n// append cells to a document fragment\nfunction getCellsFragment( cells ) {\n var fragment = document.createDocumentFragment();\n cells.forEach( function( cell ) {\n fragment.appendChild( cell.element );\n });\n return fragment;\n}\n\n// -------------------------- add/remove cell prototype -------------------------- //\n\nvar proto = Flickity.prototype;\n\n/**\n * Insert, prepend, or append cells\n * @param {Element, Array, NodeList} elems\n * @param {Integer} index\n */\nproto.insert = function( elems, index ) {\n var cells = this._makeCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n var len = this.cells.length;\n // default to append\n index = index === undefined ? len : index;\n // add cells with document fragment\n var fragment = getCellsFragment( cells );\n // append to slider\n var isAppend = index == len;\n if ( isAppend ) {\n this.slider.appendChild( fragment );\n } else {\n var insertCellElement = this.cells[ index ].element;\n this.slider.insertBefore( fragment, insertCellElement );\n }\n // add to this.cells\n if ( index === 0 ) {\n // prepend, add to start\n this.cells = cells.concat( this.cells );\n } else if ( isAppend ) {\n // append, add to end\n this.cells = this.cells.concat( cells );\n } else {\n // insert in this.cells\n var endCells = this.cells.splice( index, len - index );\n this.cells = this.cells.concat( cells ).concat( endCells );\n }\n\n this._sizeCells( cells );\n this.cellChange( index, true );\n};\n\nproto.append = function( elems ) {\n this.insert( elems, this.cells.length );\n};\n\nproto.prepend = function( elems ) {\n this.insert( elems, 0 );\n};\n\n/**\n * Remove cells\n * @param {Element, Array, NodeList} elems\n */\nproto.remove = function( elems ) {\n var cells = this.getCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n\n var minCellIndex = this.cells.length - 1;\n // remove cells from collection & DOM\n cells.forEach( function( cell ) {\n cell.remove();\n var index = this.cells.indexOf( cell );\n minCellIndex = Math.min( index, minCellIndex );\n utils.removeFrom( this.cells, cell );\n }, this );\n\n this.cellChange( minCellIndex, true );\n};\n\n/**\n * logic to be run after a cell's size changes\n * @param {Element} elem - cell's element\n */\nproto.cellSizeChange = function( elem ) {\n var cell = this.getCell( elem );\n if ( !cell ) {\n return;\n }\n cell.getSize();\n\n var index = this.cells.indexOf( cell );\n this.cellChange( index );\n};\n\n/**\n * logic any time a cell is changed: added, removed, or size changed\n * @param {Integer} changedCellIndex - index of the changed cell, optional\n */\nproto.cellChange = function( changedCellIndex, isPositioningSlider ) {\n var prevSelectedElem = this.selectedElement;\n this._positionCells( changedCellIndex );\n this._getWrapShiftCells();\n this.setGallerySize();\n // update selectedIndex\n // try to maintain position & select previous selected element\n var cell = this.getCell( prevSelectedElem );\n if ( cell ) {\n this.selectedIndex = this.getCellSlideIndex( cell );\n }\n this.selectedIndex = Math.min( this.slides.length - 1, this.selectedIndex );\n\n this.emitEvent( 'cellChange', [ changedCellIndex ] );\n // position slider\n this.select( this.selectedIndex );\n // do not position slider after lazy load\n if ( isPositioningSlider ) {\n this.positionSliderAtSelected();\n }\n};\n\n// ----- ----- //\n\nreturn Flickity;\n\n}));\n\n// lazyload\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'flickity/js/lazyload',[\n './flickity',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n'use strict';\n\nFlickity.createMethods.push('_createLazyload');\nvar proto = Flickity.prototype;\n\nproto._createLazyload = function() {\n this.on( 'select', this.lazyLoad );\n};\n\nproto.lazyLoad = function() {\n var lazyLoad = this.options.lazyLoad;\n if ( !lazyLoad ) {\n return;\n }\n // get adjacent cells, use lazyLoad option for adjacent count\n var adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0;\n var cellElems = this.getAdjacentCellElements( adjCount );\n // get lazy images in those cells\n var lazyImages = [];\n cellElems.forEach( function( cellElem ) {\n var lazyCellImages = getCellLazyImages( cellElem );\n lazyImages = lazyImages.concat( lazyCellImages );\n });\n // load lazy images\n lazyImages.forEach( function( img ) {\n new LazyLoader( img, this );\n }, this );\n};\n\nfunction getCellLazyImages( cellElem ) {\n // check if cell element is lazy image\n if ( cellElem.nodeName == 'IMG' ) {\n var lazyloadAttr = cellElem.getAttribute('data-flickity-lazyload');\n var srcAttr = cellElem.getAttribute('data-flickity-lazyload-src');\n var srcsetAttr = cellElem.getAttribute('data-flickity-lazyload-srcset');\n if ( lazyloadAttr || srcAttr || srcsetAttr ) {\n return [ cellElem ];\n }\n }\n // select lazy images in cell\n var lazySelector = 'img[data-flickity-lazyload], ' +\n 'img[data-flickity-lazyload-src], img[data-flickity-lazyload-srcset]';\n var imgs = cellElem.querySelectorAll( lazySelector );\n return utils.makeArray( imgs );\n}\n\n// -------------------------- LazyLoader -------------------------- //\n\n/**\n * class to handle loading images\n */\nfunction LazyLoader( img, flickity ) {\n this.img = img;\n this.flickity = flickity;\n this.load();\n}\n\nLazyLoader.prototype.handleEvent = utils.handleEvent;\n\nLazyLoader.prototype.load = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n // get src & srcset\n var src = this.img.getAttribute('data-flickity-lazyload') ||\n this.img.getAttribute('data-flickity-lazyload-src');\n var srcset = this.img.getAttribute('data-flickity-lazyload-srcset');\n // set src & serset\n this.img.src = src;\n if ( srcset ) {\n this.img.setAttribute( 'srcset', srcset );\n }\n // remove attr\n this.img.removeAttribute('data-flickity-lazyload');\n this.img.removeAttribute('data-flickity-lazyload-src');\n this.img.removeAttribute('data-flickity-lazyload-srcset');\n};\n\nLazyLoader.prototype.onload = function( event ) {\n this.complete( event, 'flickity-lazyloaded' );\n};\n\nLazyLoader.prototype.onerror = function( event ) {\n this.complete( event, 'flickity-lazyerror' );\n};\n\nLazyLoader.prototype.complete = function( event, className ) {\n // unbind events\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n\n var cell = this.flickity.getParentCell( this.img );\n var cellElem = cell && cell.element;\n this.flickity.cellSizeChange( cellElem );\n\n this.img.classList.add( className );\n this.flickity.dispatchEvent( 'lazyLoad', event, cellElem );\n};\n\n// ----- ----- //\n\nFlickity.LazyLoader = LazyLoader;\n\nreturn Flickity;\n\n}));\n\n/*!\n * Flickity v2.2.0\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2018 Metafizzy\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'flickity/js/index',[\n './flickity',\n './drag',\n './prev-next-button',\n './page-dots',\n './player',\n './add-remove-cell',\n './lazyload'\n ], factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./flickity'),\n require('./drag'),\n require('./prev-next-button'),\n require('./page-dots'),\n require('./player'),\n require('./add-remove-cell'),\n require('./lazyload')\n );\n }\n\n})( window, function factory( Flickity ) {\n /*jshint strict: false*/\n return Flickity;\n});\n\n/*!\n * Flickity asNavFor v2.0.1\n * enable asNavFor for Flickity\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true*/\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'flickity-as-nav-for/as-nav-for',[\n 'flickity/js/index',\n 'fizzy-ui-utils/utils'\n ], factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = factory(\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( Flickity, utils ) {\n\n\n\n// -------------------------- asNavFor prototype -------------------------- //\n\n// Flickity.defaults.asNavFor = null;\n\nFlickity.createMethods.push('_createAsNavFor');\n\nvar proto = Flickity.prototype;\n\nproto._createAsNavFor = function() {\n this.on( 'activate', this.activateAsNavFor );\n this.on( 'deactivate', this.deactivateAsNavFor );\n this.on( 'destroy', this.destroyAsNavFor );\n\n var asNavForOption = this.options.asNavFor;\n if ( !asNavForOption ) {\n return;\n }\n // HACK do async, give time for other flickity to be initalized\n var _this = this;\n setTimeout( function initNavCompanion() {\n _this.setNavCompanion( asNavForOption );\n });\n};\n\nproto.setNavCompanion = function( elem ) {\n elem = utils.getQueryElement( elem );\n var companion = Flickity.data( elem );\n // stop if no companion or companion is self\n if ( !companion || companion == this ) {\n return;\n }\n\n this.navCompanion = companion;\n // companion select\n var _this = this;\n this.onNavCompanionSelect = function() {\n _this.navCompanionSelect();\n };\n companion.on( 'select', this.onNavCompanionSelect );\n // click\n this.on( 'staticClick', this.onNavStaticClick );\n\n this.navCompanionSelect( true );\n};\n\nproto.navCompanionSelect = function( isInstant ) {\n if ( !this.navCompanion ) {\n return;\n }\n // select slide that matches first cell of slide\n var selectedCell = this.navCompanion.selectedCells[0];\n var firstIndex = this.navCompanion.cells.indexOf( selectedCell );\n var lastIndex = firstIndex + this.navCompanion.selectedCells.length - 1;\n var selectIndex = Math.floor( lerp( firstIndex, lastIndex,\n this.navCompanion.cellAlign ) );\n this.selectCell( selectIndex, false, isInstant );\n // set nav selected class\n this.removeNavSelectedElements();\n // stop if companion has more cells than this one\n if ( selectIndex >= this.cells.length ) {\n return;\n }\n\n var selectedCells = this.cells.slice( firstIndex, lastIndex + 1 );\n this.navSelectedElements = selectedCells.map( function( cell ) {\n return cell.element;\n });\n this.changeNavSelectedClass('add');\n};\n\nfunction lerp( a, b, t ) {\n return ( b - a ) * t + a;\n}\n\nproto.changeNavSelectedClass = function( method ) {\n this.navSelectedElements.forEach( function( navElem ) {\n navElem.classList[ method ]('is-nav-selected');\n });\n};\n\nproto.activateAsNavFor = function() {\n this.navCompanionSelect( true );\n};\n\nproto.removeNavSelectedElements = function() {\n if ( !this.navSelectedElements ) {\n return;\n }\n this.changeNavSelectedClass('remove');\n delete this.navSelectedElements;\n};\n\nproto.onNavStaticClick = function( event, pointer, cellElement, cellIndex ) {\n if ( typeof cellIndex == 'number' ) {\n this.navCompanion.selectCell( cellIndex );\n }\n};\n\nproto.deactivateAsNavFor = function() {\n this.removeNavSelectedElements();\n};\n\nproto.destroyAsNavFor = function() {\n if ( !this.navCompanion ) {\n return;\n }\n this.navCompanion.off( 'select', this.onNavCompanionSelect );\n this.off( 'staticClick', this.onNavStaticClick );\n delete this.navCompanion;\n};\n\n// ----- ----- //\n\nreturn Flickity;\n\n}));\n\n/*!\n * imagesLoaded v4.1.4\n * JavaScript is all like \"You images are done yet or what?\"\n * MIT License\n */\n\n( function( window, factory ) { 'use strict';\n // universal module definition\n\n /*global define: false, module: false, require: false */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( 'imagesloaded/imagesloaded',[\n 'ev-emitter/ev-emitter'\n ], function( EvEmitter ) {\n return factory( window, EvEmitter );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter')\n );\n } else {\n // browser global\n window.imagesLoaded = factory(\n window,\n window.EvEmitter\n );\n }\n\n})( typeof window !== 'undefined' ? window : this,\n\n// -------------------------- factory -------------------------- //\n\nfunction factory( window, EvEmitter ) {\n\n\n\nvar $ = window.jQuery;\nvar console = window.console;\n\n// -------------------------- helpers -------------------------- //\n\n// extend objects\nfunction extend( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n}\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nfunction makeArray( obj ) {\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n return obj;\n }\n\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n if ( isArrayLike ) {\n // convert nodeList to array\n return arraySlice.call( obj );\n }\n\n // array of single index\n return [ obj ];\n}\n\n// -------------------------- imagesLoaded -------------------------- //\n\n/**\n * @param {Array, Element, NodeList, String} elem\n * @param {Object or Function} options - if function, use as callback\n * @param {Function} onAlways - callback function\n */\nfunction ImagesLoaded( elem, options, onAlways ) {\n // coerce ImagesLoaded() without new, to be new ImagesLoaded()\n if ( !( this instanceof ImagesLoaded ) ) {\n return new ImagesLoaded( elem, options, onAlways );\n }\n // use elem as selector string\n var queryElem = elem;\n if ( typeof elem == 'string' ) {\n queryElem = document.querySelectorAll( elem );\n }\n // bail if bad element\n if ( !queryElem ) {\n console.error( 'Bad element for imagesLoaded ' + ( queryElem || elem ) );\n return;\n }\n\n this.elements = makeArray( queryElem );\n this.options = extend( {}, this.options );\n // shift arguments if no options set\n if ( typeof options == 'function' ) {\n onAlways = options;\n } else {\n extend( this.options, options );\n }\n\n if ( onAlways ) {\n this.on( 'always', onAlways );\n }\n\n this.getImages();\n\n if ( $ ) {\n // add jQuery Deferred object\n this.jqDeferred = new $.Deferred();\n }\n\n // HACK check async to allow time to bind listeners\n setTimeout( this.check.bind( this ) );\n}\n\nImagesLoaded.prototype = Object.create( EvEmitter.prototype );\n\nImagesLoaded.prototype.options = {};\n\nImagesLoaded.prototype.getImages = function() {\n this.images = [];\n\n // filter & find items if we have an item selector\n this.elements.forEach( this.addElementImages, this );\n};\n\n/**\n * @param {Node} element\n */\nImagesLoaded.prototype.addElementImages = function( elem ) {\n // filter siblings\n if ( elem.nodeName == 'IMG' ) {\n this.addImage( elem );\n }\n // get background image on element\n if ( this.options.background === true ) {\n this.addElementBackgroundImages( elem );\n }\n\n // find children\n // no non-element nodes, #143\n var nodeType = elem.nodeType;\n if ( !nodeType || !elementNodeTypes[ nodeType ] ) {\n return;\n }\n var childImgs = elem.querySelectorAll('img');\n // concat childElems to filterFound array\n for ( var i=0; i < childImgs.length; i++ ) {\n var img = childImgs[i];\n this.addImage( img );\n }\n\n // get child background images\n if ( typeof this.options.background == 'string' ) {\n var children = elem.querySelectorAll( this.options.background );\n for ( i=0; i < children.length; i++ ) {\n var child = children[i];\n this.addElementBackgroundImages( child );\n }\n }\n};\n\nvar elementNodeTypes = {\n 1: true,\n 9: true,\n 11: true\n};\n\nImagesLoaded.prototype.addElementBackgroundImages = function( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n // Firefox returns null if in a hidden iframe https://bugzil.la/548397\n return;\n }\n // get url inside url(\"...\")\n var reURL = /url\\((['\"])?(.*?)\\1\\)/gi;\n var matches = reURL.exec( style.backgroundImage );\n while ( matches !== null ) {\n var url = matches && matches[2];\n if ( url ) {\n this.addBackground( url, elem );\n }\n matches = reURL.exec( style.backgroundImage );\n }\n};\n\n/**\n * @param {Image} img\n */\nImagesLoaded.prototype.addImage = function( img ) {\n var loadingImage = new LoadingImage( img );\n this.images.push( loadingImage );\n};\n\nImagesLoaded.prototype.addBackground = function( url, elem ) {\n var background = new Background( url, elem );\n this.images.push( background );\n};\n\nImagesLoaded.prototype.check = function() {\n var _this = this;\n this.progressedCount = 0;\n this.hasAnyBroken = false;\n // complete if no images\n if ( !this.images.length ) {\n this.complete();\n return;\n }\n\n function onProgress( image, elem, message ) {\n // HACK - Chrome triggers event before object properties have changed. #83\n setTimeout( function() {\n _this.progress( image, elem, message );\n });\n }\n\n this.images.forEach( function( loadingImage ) {\n loadingImage.once( 'progress', onProgress );\n loadingImage.check();\n });\n};\n\nImagesLoaded.prototype.progress = function( image, elem, message ) {\n this.progressedCount++;\n this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded;\n // progress event\n this.emitEvent( 'progress', [ this, image, elem ] );\n if ( this.jqDeferred && this.jqDeferred.notify ) {\n this.jqDeferred.notify( this, image );\n }\n // check if completed\n if ( this.progressedCount == this.images.length ) {\n this.complete();\n }\n\n if ( this.options.debug && console ) {\n console.log( 'progress: ' + message, image, elem );\n }\n};\n\nImagesLoaded.prototype.complete = function() {\n var eventName = this.hasAnyBroken ? 'fail' : 'done';\n this.isComplete = true;\n this.emitEvent( eventName, [ this ] );\n this.emitEvent( 'always', [ this ] );\n if ( this.jqDeferred ) {\n var jqMethod = this.hasAnyBroken ? 'reject' : 'resolve';\n this.jqDeferred[ jqMethod ]( this );\n }\n};\n\n// -------------------------- -------------------------- //\n\nfunction LoadingImage( img ) {\n this.img = img;\n}\n\nLoadingImage.prototype = Object.create( EvEmitter.prototype );\n\nLoadingImage.prototype.check = function() {\n // If complete is true and browser supports natural sizes,\n // try to check for image status manually.\n var isComplete = this.getIsImageComplete();\n if ( isComplete ) {\n // report based on naturalWidth\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n return;\n }\n\n // If none of the checks above matched, simulate loading on detached element.\n this.proxyImage = new Image();\n this.proxyImage.addEventListener( 'load', this );\n this.proxyImage.addEventListener( 'error', this );\n // bind to image as well for Firefox. #191\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n this.proxyImage.src = this.img.src;\n};\n\nLoadingImage.prototype.getIsImageComplete = function() {\n // check for non-zero, non-undefined naturalWidth\n // fixes Safari+InfiniteScroll+Masonry bug infinite-scroll#671\n return this.img.complete && this.img.naturalWidth;\n};\n\nLoadingImage.prototype.confirm = function( isLoaded, message ) {\n this.isLoaded = isLoaded;\n this.emitEvent( 'progress', [ this, this.img, message ] );\n};\n\n// ----- events ----- //\n\n// trigger specified handler for event type\nLoadingImage.prototype.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\nLoadingImage.prototype.onload = function() {\n this.confirm( true, 'onload' );\n this.unbindEvents();\n};\n\nLoadingImage.prototype.onerror = function() {\n this.confirm( false, 'onerror' );\n this.unbindEvents();\n};\n\nLoadingImage.prototype.unbindEvents = function() {\n this.proxyImage.removeEventListener( 'load', this );\n this.proxyImage.removeEventListener( 'error', this );\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n};\n\n// -------------------------- Background -------------------------- //\n\nfunction Background( url, element ) {\n this.url = url;\n this.element = element;\n this.img = new Image();\n}\n\n// inherit LoadingImage prototype\nBackground.prototype = Object.create( LoadingImage.prototype );\n\nBackground.prototype.check = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n this.img.src = this.url;\n // check if image is already complete\n var isComplete = this.getIsImageComplete();\n if ( isComplete ) {\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n this.unbindEvents();\n }\n};\n\nBackground.prototype.unbindEvents = function() {\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n};\n\nBackground.prototype.confirm = function( isLoaded, message ) {\n this.isLoaded = isLoaded;\n this.emitEvent( 'progress', [ this, this.element, message ] );\n};\n\n// -------------------------- jQuery -------------------------- //\n\nImagesLoaded.makeJQueryPlugin = function( jQuery ) {\n jQuery = jQuery || window.jQuery;\n if ( !jQuery ) {\n return;\n }\n // set local variable\n $ = jQuery;\n // $().imagesLoaded()\n $.fn.imagesLoaded = function( options, callback ) {\n var instance = new ImagesLoaded( this, options, callback );\n return instance.jqDeferred.promise( $(this) );\n };\n};\n// try making plugin\nImagesLoaded.makeJQueryPlugin();\n\n// -------------------------- -------------------------- //\n\nreturn ImagesLoaded;\n\n});\n\n/*!\n * Flickity imagesLoaded v2.0.0\n * enables imagesLoaded option for Flickity\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'flickity/js/index',\n 'imagesloaded/imagesloaded'\n ], function( Flickity, imagesLoaded ) {\n return factory( window, Flickity, imagesLoaded );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('flickity'),\n require('imagesloaded')\n );\n } else {\n // browser global\n window.Flickity = factory(\n window,\n window.Flickity,\n window.imagesLoaded\n );\n }\n\n}( window, function factory( window, Flickity, imagesLoaded ) {\n'use strict';\n\nFlickity.createMethods.push('_createImagesLoaded');\n\nvar proto = Flickity.prototype;\n\nproto._createImagesLoaded = function() {\n this.on( 'activate', this.imagesLoaded );\n};\n\nproto.imagesLoaded = function() {\n if ( !this.options.imagesLoaded ) {\n return;\n }\n var _this = this;\n function onImagesLoadedProgress( instance, image ) {\n var cell = _this.getParentCell( image.img );\n _this.cellSizeChange( cell && cell.element );\n if ( !_this.options.freeScroll ) {\n _this.positionSliderAtSelected();\n }\n }\n imagesLoaded( this.slider ).on( 'progress', onImagesLoadedProgress );\n};\n\nreturn Flickity;\n\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/dist/flickity.pkgd.js\n// module id = 12\n// module chunks = 0","/*!\n * OverlayScrollbars\n * https://github.com/KingSora/OverlayScrollbars\n *\n * Version: 1.9.1\n *\n * Copyright KingSora | Rene Haas.\n * https://github.com/KingSora\n *\n * Released under the MIT license.\n * Date: 03.08.2019\n */\n\n(function (global, factory) {\n if (typeof define === 'function' && define.amd)\n define(['jquery'], function(framework) { return factory(global, global.document, undefined, framework); });\n else if (typeof module === 'object' && typeof module.exports === 'object')\n module.exports = factory(global, global.document, undefined, require('jquery'));\n else\n factory(global, global.document, undefined, global.jQuery);\n}(typeof window !== 'undefined' ? window : this,\n function(window, document, undefined, framework) {\n 'use strict';\n var PLUGINNAME = 'OverlayScrollbars';\n var TYPES = {\n o : 'object',\n f : 'function',\n a : 'array',\n s : 'string',\n b : 'boolean',\n n : 'number',\n u : 'undefined',\n z : 'null'\n //d : 'date',\n //e : 'error',\n //r : 'regexp',\n //y : 'symbol'\n };\n var LEXICON = {\n c : 'class',\n s : 'style',\n i : 'id',\n l : 'length',\n p : 'prototype',\n oH : 'offsetHeight',\n cH : 'clientHeight',\n sH : 'scrollHeight',\n oW : 'offsetWidth',\n cW : 'clientWidth',\n sW : 'scrollWidth',\n hOP : 'hasOwnProperty'\n };\n var VENDORS = {\n //https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\n _jsCache : { },\n _cssCache : { },\n _cssPrefixes : ['-webkit-', '-moz-', '-o-', '-ms-'],\n _jsPrefixes : ['WebKit', 'Moz', 'O', 'MS'],\n _cssProperty : function(name) {\n var cache = this._cssCache;\n\n if(cache[name])\n return cache[name];\n\n var prefixes = this._cssPrefixes;\n var uppercasedName = this._firstLetterToUpper(name);\n var elmStyle = document.createElement('div')[LEXICON.s];\n var resultPossibilities;\n var i = 0;\n var v = 0;\n var currVendorWithoutDashes;\n\n for (; i < prefixes.length; i++) {\n currVendorWithoutDashes = prefixes[i].replace(/-/g, '');\n resultPossibilities = [\n name, //transition\n prefixes[i] + name, //-webkit-transition\n currVendorWithoutDashes + uppercasedName, //webkitTransition\n this._firstLetterToUpper(currVendorWithoutDashes) + uppercasedName //WebkitTransition\n ];\n for(v = 0; v < resultPossibilities[LEXICON.l]; v++) {\n if(elmStyle[resultPossibilities[v]] !== undefined) {\n cache[name] = resultPossibilities[v];\n return resultPossibilities[v];\n }\n }\n }\n\n return null;\n },\n _jsAPI : function(name, isInterface, fallback) {\n var prefixes = this._jsPrefixes;\n var cache = this._jsCache;\n var i = 0;\n var result = cache[name];\n if(!result) {\n result = window[name];\n for(; i < prefixes[LEXICON.l]; i++)\n result = result || window[(isInterface ? prefixes[i] : prefixes[i].toLowerCase()) + this._firstLetterToUpper(name)];\n cache[name] = result;\n }\n return result || fallback;\n },\n _firstLetterToUpper : function(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n };\n var COMPATIBILITY = {\n /**\n * Gets the current window width.\n * @returns {Number|number} The current window width in pixel.\n */\n wW: function() {\n return window.innerWidth || document.documentElement[LEXICON.cW] || document.body[LEXICON.cW];\n },\n\n /**\n * Gets the current window height.\n * @returns {Number|number} The current window height in pixel.\n */\n wH: function() {\n return window.innerHeight || document.documentElement[LEXICON.cH] || document.body[LEXICON.cH];\n },\n\n /**\n * Gets the MutationObserver Object or undefined if not supported.\n * @returns {MutationObserver|*|undefined} The MutationsObserver Object or undefined.\n */\n mO: function() {\n return VENDORS._jsAPI('MutationObserver', true);\n },\n\n /**\n * Gets the ResizeObserver Object or undefined if not supported.\n * @returns {MutationObserver|*|undefined} The ResizeObserver Object or undefined.\n */\n rO: function() {\n return VENDORS._jsAPI('ResizeObserver', true);\n },\n\n /**\n * Gets the RequestAnimationFrame method or it's corresponding polyfill.\n * @returns {*|Function} The RequestAnimationFrame method or it's corresponding polyfill.\n */\n rAF: function() {\n return VENDORS._jsAPI('requestAnimationFrame', false, function (func) { return window.setTimeout(func, 1000 / 60); });\n },\n\n /**\n * Gets the CancelAnimationFrame method or it's corresponding polyfill.\n * @returns {*|Function} The CancelAnimationFrame method or it's corresponding polyfill.\n */\n cAF: function() {\n return VENDORS._jsAPI('cancelAnimationFrame', false, function (id) { return window.clearTimeout(id); });\n },\n\n /**\n * Gets the current time.\n * @returns {number} The current time.\n */\n now: function() {\n return Date.now && Date.now() || new Date().getTime();\n },\n\n /**\n * Stops the propagation of the given event.\n * @param event The event of which the propagation shall be stoped.\n */\n stpP: function(event) {\n if(event.stopPropagation)\n event.stopPropagation();\n else\n event.cancelBubble = true;\n },\n\n /**\n * Prevents the default action of the given event.\n * @param event The event of which the default action shall be prevented.\n */\n prvD: function(event) {\n if(event.preventDefault && event.cancelable)\n event.preventDefault();\n else\n event.returnValue = false;\n },\n\n /**\n * Gets the pageX and pageY values of the given mouse event.\n * @param event The mouse event of which the pageX and pageX shall be got.\n * @returns {{x: number, y: number}} x = pageX value, y = pageY value.\n */\n page: function(event) {\n event = event.originalEvent || event;\n\n var strPage = 'page';\n var strClient = 'client';\n var strX = 'X';\n var strY = 'Y';\n var target = event.target || event.srcElement || document;\n var eventDoc = target.ownerDocument || document;\n var doc = eventDoc.documentElement;\n var body = eventDoc.body;\n\n //if touch event return return pageX/Y of it\n if(event.touches !== undefined) {\n var touch = event.touches[0];\n return {\n x : touch[strPage + strX],\n y : touch[strPage + strY]\n }\n }\n\n // Calculate pageX/Y if not native supported\n if (!event[strPage + strX] && event[strClient + strX] && event[strClient + strX] != null) {\n\n return {\n x : event[strClient + strX] +\n (doc && doc.scrollLeft || body && body.scrollLeft || 0) -\n (doc && doc.clientLeft || body && body.clientLeft || 0),\n y : event[strClient + strY] +\n (doc && doc.scrollTop || body && body.scrollTop || 0) -\n (doc && doc.clientTop || body && body.clientTop || 0)\n }\n }\n return {\n x : event[strPage + strX],\n y : event[strPage + strY]\n };\n },\n\n /**\n * Gets the clicked mouse button of the given mouse event.\n * @param event The mouse event of which the clicked button shal be got.\n * @returns {number} The number of the clicked mouse button. (0 : none | 1 : leftButton | 2 : middleButton | 3 : rightButton)\n */\n mBtn: function(event) {\n var button = event.button;\n if (!event.which && button !== undefined)\n return (button & 1 ? 1 : (button & 2 ? 3 : (button & 4 ? 2 : 0)));\n else\n return event.which;\n },\n\n /**\n * Checks whether a item is in the given array and returns its index.\n * @param item The item of which the position in the array shall be determined.\n * @param arr The array.\n * @returns {number} The zero based index of the item or -1 if the item isn't in the array.\n */\n inA : function(item, arr) {\n for (var i = 0; i < arr[LEXICON.l]; i++)\n //Sometiems in IE a \"SCRIPT70\" Permission denied error occurs if HTML elements in a iFrame are compared\n try {\n if (arr[i] === item)\n return i;\n }\n catch(e) { }\n return -1;\n },\n\n /**\n * Returns true if the given value is a array.\n * @param arr The potential array.\n * @returns {boolean} True if the given value is a array, false otherwise.\n */\n isA: function(arr) {\n var def = Array.isArray;\n return def ? def(arr) : this.type(arr) == TYPES.a;\n },\n\n /**\n * Determine the internal JavaScript [[Class]] of the given object.\n * @param obj The object of which the type shall be determined.\n * @returns {string} The type of the given object.\n */\n type: function(obj) {\n if (obj === undefined)\n return obj + \"\";\n if (obj === null)\n return obj + \"\";\n return Object[LEXICON.p].toString.call(obj).replace(/^\\[object (.+)\\]$/, '$1').toLowerCase();\n },\n\n\n bind: function(func, thisObj) {\n if (typeof func != TYPES.f) {\n throw \"Can't bind function!\";\n // closest thing possible to the ECMAScript 5\n // internal IsCallable function\n //throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n var proto = LEXICON.p;\n var aArgs = Array[proto].slice.call(arguments, 2);\n var fNOP = function() {};\n var fBound = function() { return func.apply(this instanceof fNOP ? this : thisObj, aArgs.concat(Array[proto].slice.call(arguments))); };\n\n if (func[proto])\n fNOP[proto] = func[proto]; // Function.prototype doesn't have a prototype property\n fBound[proto] = new fNOP();\n\n return fBound;\n }\n\n /**\n * Gets the vendor-prefixed CSS property by the given name.\n * For example the given name is \"transform\" and you're using a old Firefox browser then the returned value would be \"-moz-transform\".\n * If the browser doesn't need a vendor-prefix, then the returned string is the given name.\n * If the browser doesn't support the given property name at all (not even with a vendor-prefix) the returned value is null.\n * @param propName The unprefixed CSS property name.\n * @returns {string|null} The vendor-prefixed CSS property or null if the browser doesn't support the given CSS property.\n\n cssProp : function(propName) {\n return VENDORS._cssProperty(propName);\n }\n */\n };\n\n var MATH = Math;\n var JQUERY = framework;\n var EASING = framework.easing;\n var FRAMEWORK = framework;\n var INSTANCES = (function() {\n var _targets = [ ];\n var _instancePropertyString = '__overlayScrollbars__';\n\n /**\n * Register, unregister or get a certain (or all) instances.\n * Register: Pass the target and the instance.\n * Unregister: Pass the target and null.\n * Get Instance: Pass the target from which the instance shall be got.\n * Get Targets: Pass no arguments.\n * @param target The target to which the instance shall be registered / from which the instance shall be unregistered / the instance shall be got\n * @param instance The instance.\n * @returns {*|void} Returns the instance from the given target.\n */\n return function (target, instance) {\n var argLen = arguments[LEXICON.l];\n if(argLen < 1) {\n //return all targets\n return _targets;\n }\n else {\n if(instance) {\n //register instance\n target[_instancePropertyString] = instance;\n _targets.push(target);\n }\n else {\n var index = COMPATIBILITY.inA(target, _targets);\n if (index > -1) {\n if(argLen > 1) {\n //unregister instance\n delete target[_instancePropertyString];\n _targets.splice(index, 1);\n }\n else {\n //get instance from target\n return _targets[index][_instancePropertyString];\n }\n }\n }\n }\n }\n })();\n var PLUGIN = (function() {\n var _plugin;\n var _pluginsGlobals;\n var _pluginsAutoUpdateLoop;\n var _pluginsExtensions = [ ];\n var _pluginsOptions = (function() {\n var type = COMPATIBILITY.type;\n var possibleTemplateTypes = [\n TYPES.b, //boolean\n TYPES.n, //number\n TYPES.s, //string\n TYPES.a, //array\n TYPES.o, //object\n TYPES.f, //function\n TYPES.z //null\n ];\n var restrictedStringsSplit = ' ';\n var restrictedStringsPossibilitiesSplit = ':';\n var classNameAllowedValues = [TYPES.z, TYPES.s];\n var numberAllowedValues = TYPES.n;\n var booleanNullAllowedValues = [TYPES.z, TYPES.b];\n var booleanTrueTemplate = [true, TYPES.b];\n var booleanFalseTemplate = [false, TYPES.b];\n var callbackTemplate = [null, [TYPES.z, TYPES.f]];\n var inheritedAttrsTemplate = [['style', 'class'], [TYPES.s, TYPES.a, TYPES.z]];\n var resizeAllowedValues = 'n:none b:both h:horizontal v:vertical';\n var overflowBehaviorAllowedValues = 'v-h:visible-hidden v-s:visible-scroll s:scroll h:hidden';\n var scrollbarsVisibilityAllowedValues = 'v:visible h:hidden a:auto';\n var scrollbarsAutoHideAllowedValues = 'n:never s:scroll l:leave m:move';\n var optionsDefaultsAndTemplate = {\n className: ['os-theme-dark', classNameAllowedValues], //null || string\n resize: ['none', resizeAllowedValues], //none || both || horizontal || vertical || n || b || h || v\n sizeAutoCapable: booleanTrueTemplate, //true || false\n clipAlways: booleanTrueTemplate, //true || false\n normalizeRTL: booleanTrueTemplate, //true || false\n paddingAbsolute: booleanFalseTemplate, //true || false\n autoUpdate: [null, booleanNullAllowedValues], //true || false || null\n autoUpdateInterval: [33, numberAllowedValues], //number\n nativeScrollbarsOverlaid: {\n showNativeScrollbars: booleanFalseTemplate, //true || false\n initialize: booleanTrueTemplate //true || false\n },\n overflowBehavior: {\n x: ['scroll', overflowBehaviorAllowedValues], //visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\n y: ['scroll', overflowBehaviorAllowedValues] //visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\n },\n scrollbars: {\n visibility: ['auto', scrollbarsVisibilityAllowedValues], //visible || hidden || auto || v || h || a\n autoHide: ['never', scrollbarsAutoHideAllowedValues], //never || scroll || leave || move || n || s || l || m\n autoHideDelay: [800, numberAllowedValues], //number\n dragScrolling: booleanTrueTemplate, //true || false\n clickScrolling: booleanFalseTemplate, //true || false\n touchSupport: booleanTrueTemplate, //true || false\n snapHandle: booleanFalseTemplate //true || false\n },\n textarea: {\n dynWidth: booleanFalseTemplate, //true || false\n dynHeight: booleanFalseTemplate, //true || false\n inheritedAttrs : inheritedAttrsTemplate //string || array || null\n },\n callbacks: {\n onInitialized: callbackTemplate, //null || function\n onInitializationWithdrawn: callbackTemplate, //null || function\n onDestroyed: callbackTemplate, //null || function\n onScrollStart: callbackTemplate, //null || function\n onScroll: callbackTemplate, //null || function\n onScrollStop: callbackTemplate, //null || function\n onOverflowChanged: callbackTemplate, //null || function\n onOverflowAmountChanged: callbackTemplate, //null || function\n onDirectionChanged: callbackTemplate, //null || function\n onContentSizeChanged: callbackTemplate, //null || function\n onHostSizeChanged: callbackTemplate, //null || function\n onUpdated: callbackTemplate //null || function\n }\n };\n var convert = function(template) {\n var recursive = function(obj) {\n var key;\n var val;\n var valType;\n for(key in obj) {\n if(!obj[LEXICON.hOP](key))\n continue;\n val = obj[key];\n valType = type(val);\n if(valType == TYPES.a)\n obj[key] = val[template ? 1 : 0];\n else if(valType == TYPES.o)\n obj[key] = recursive(val);\n }\n return obj;\n };\n return recursive(FRAMEWORK.extend(true, { }, optionsDefaultsAndTemplate));\n };\n\n return {\n _defaults : convert(),\n\n _template : convert(true),\n\n /**\n * Validates the passed object by the passed template.\n * @param obj The object which shall be validated.\n * @param template The template which defines the allowed values and types.\n * @param writeErrors True if errors shall be logged to the console.\n * @param diffObj If a object is passed then only valid differences to this object will be returned.\n * @returns {{}} A object which contains two objects called \"default\" and \"prepared\" which contains only the valid properties of the passed original object and discards not different values compared to the passed diffObj.\n */\n _validate : function (obj, template, writeErrors, diffObj) {\n var validatedOptions = { };\n var validatedOptionsPrepared = { };\n var objectCopy = FRAMEWORK.extend(true, { }, obj);\n var inArray = FRAMEWORK.inArray;\n var isEmptyObj = FRAMEWORK.isEmptyObject;\n var checkObjectProps = function(data, template, diffData, validatedOptions, validatedOptionsPrepared, prevPropName) {\n for (var prop in template) {\n if (template[LEXICON.hOP](prop) && data[LEXICON.hOP](prop)) {\n var isValid = false;\n var isDiff = false;\n var templateValue = template[prop];\n var templateValueType = type(templateValue);\n var templateIsComplex = templateValueType == TYPES.o;\n var templateTypes = type(templateValue) != TYPES.a ? [ templateValue ] : templateValue;\n var dataDiffValue = diffData[prop];\n var dataValue = data[prop];\n var dataValueType = type(dataValue);\n var propPrefix = prevPropName ? prevPropName + \".\" : \"\";\n var error = \"The option \\\"\" + propPrefix + prop + \"\\\" wasn't set, because\";\n var errorPossibleTypes = [ ];\n var errorRestrictedStrings = [ ];\n var restrictedStringValuesSplit;\n var restrictedStringValuesPossibilitiesSplit;\n var isRestrictedValue;\n var mainPossibility;\n var currType;\n var i;\n var v;\n var j;\n\n dataDiffValue = dataDiffValue === undefined ? { } : dataDiffValue;\n \n //if the template has a object as value, it means that the options are complex (verschachtelt)\n if(templateIsComplex && dataValueType == TYPES.o) {\n validatedOptions[prop] = { };\n validatedOptionsPrepared[prop] = { };\n checkObjectProps(dataValue, templateValue, dataDiffValue, validatedOptions[prop], validatedOptionsPrepared[prop], propPrefix + prop);\n FRAMEWORK.each([ data, validatedOptions, validatedOptionsPrepared ], function(index, value) {\n if(isEmptyObj(value[prop])) {\n delete value[prop];\n }\n });\n }\n else if(!templateIsComplex) {\n for(i = 0; i < templateTypes[LEXICON.l]; i++) {\n currType = templateTypes[i];\n templateValueType = type(currType);\n //if currtype is string and starts with restrictedStringPrefix and end with restrictedStringSuffix\n isRestrictedValue = templateValueType == TYPES.s && inArray(currType, possibleTemplateTypes) === -1;\n if(isRestrictedValue) {\n errorPossibleTypes.push(TYPES.s);\n\n //split it into a array which contains all possible values for example: [\"y:yes\", \"n:no\", \"m:maybe\"]\n restrictedStringValuesSplit = currType.split(restrictedStringsSplit);\n errorRestrictedStrings = errorRestrictedStrings.concat(restrictedStringValuesSplit);\n for(v = 0; v < restrictedStringValuesSplit[LEXICON.l]; v++) {\n //split the possible values into their possibiliteis for example: [\"y\", \"yes\"] -> the first is always the mainPossibility\n restrictedStringValuesPossibilitiesSplit = restrictedStringValuesSplit[v].split(restrictedStringsPossibilitiesSplit);\n mainPossibility = restrictedStringValuesPossibilitiesSplit[0];\n for(j = 0; j < restrictedStringValuesPossibilitiesSplit[LEXICON.l]; j++) {\n //if any possibility matches with the dataValue, its valid\n if(dataValue === restrictedStringValuesPossibilitiesSplit[j]) {\n isValid = true;\n break;\n }\n }\n if(isValid)\n break;\n }\n }\n else {\n errorPossibleTypes.push(currType);\n\n if(dataValueType === currType) {\n isValid = true;\n break;\n }\n }\n }\n\n if(isValid) {\n isDiff = dataValue !== dataDiffValue;\n \n if(isDiff)\n validatedOptions[prop] = dataValue;\n \n if(isRestrictedValue ? inArray(dataDiffValue, restrictedStringValuesPossibilitiesSplit) < 0 : isDiff)\n validatedOptionsPrepared[prop] = isRestrictedValue ? mainPossibility : dataValue;\n }\n else if(writeErrors) {\n console.warn(error + \" it doesn't accept the type [ \" + dataValueType.toUpperCase() + \" ] with the value of \\\"\" + dataValue + \"\\\".\\r\\n\" +\n \"Accepted types are: [ \" + errorPossibleTypes.join(\", \").toUpperCase() + \" ].\" +\n (errorRestrictedStrings[length] > 0 ? \"\\r\\nValid strings are: [ \" + errorRestrictedStrings.join(\", \").split(restrictedStringsPossibilitiesSplit).join(\", \") + \" ].\" : \"\"));\n }\n delete data[prop];\n }\n }\n }\n };\n checkObjectProps(objectCopy, template, diffObj || { }, validatedOptions, validatedOptionsPrepared);\n\n //add values which aren't specified in the template to the finished validated object to prevent them from being discarded\n /*\n if(keepForeignProps) {\n FRAMEWORK.extend(true, validatedOptions, objectCopy);\n FRAMEWORK.extend(true, validatedOptionsPrepared, objectCopy);\n }\n */\n \n if(!isEmptyObj(objectCopy) && writeErrors)\n console.warn(\"The following options are discarded due to invalidity:\\r\\n\" + window.JSON.stringify(objectCopy, null, 2));\n\n return {\n _default : validatedOptions,\n _prepared : validatedOptionsPrepared\n };\n }\n }\n }());\n\n /**\n * Initializes the object which contains global information about the plugin and each instance of it.\n */\n function initOverlayScrollbarsStatics() {\n if(!_pluginsGlobals)\n _pluginsGlobals = new OverlayScrollbarsGlobals(_pluginsOptions._defaults);\n if(!_pluginsAutoUpdateLoop)\n _pluginsAutoUpdateLoop = new OverlayScrollbarsAutoUpdateLoop(_pluginsGlobals);\n }\n\n /**\n * The global object for the OverlayScrollbars objects. It contains resources which every OverlayScrollbars object needs. This object is initialized only once: if the first OverlayScrollbars object gets initialized.\n * @param defaultOptions\n * @constructor\n */\n function OverlayScrollbarsGlobals(defaultOptions) {\n var _base = this;\n var strOverflow = 'overflow';\n var strHidden = 'hidden';\n var strScroll = 'scroll';\n var bodyElement = FRAMEWORK('body');\n var scrollbarDummyElement = FRAMEWORK('<div id=\"os-dummy-scrollbar-size\"><div></div></div>');\n var scrollbarDummyElement0 = scrollbarDummyElement[0];\n var dummyContainerChild = FRAMEWORK(scrollbarDummyElement.children('div').eq(0));\n\n bodyElement.append(scrollbarDummyElement);\n scrollbarDummyElement.hide().show(); //fix IE8 bug (incorrect measuring)\n\n var nativeScrollbarSize = calcNativeScrollbarSize(scrollbarDummyElement0);\n var nativeScrollbarIsOverlaid = {\n x: nativeScrollbarSize.x === 0,\n y: nativeScrollbarSize.y === 0\n };\n\n FRAMEWORK.extend(_base, {\n defaultOptions : defaultOptions,\n autoUpdateLoop : false,\n autoUpdateRecommended : !COMPATIBILITY.mO(),\n nativeScrollbarSize : nativeScrollbarSize,\n nativeScrollbarIsOverlaid : nativeScrollbarIsOverlaid,\n nativeScrollbarStyling : (function() {\n var result = false;\n scrollbarDummyElement.addClass('os-viewport-native-scrollbars-invisible');\n try {\n result = scrollbarDummyElement.css('scrollbar-width') === 'none' || window.getComputedStyle(scrollbarDummyElement0, '::-webkit-scrollbar').getPropertyValue('display') === 'none';\n } catch (ex) { }\n \n //fix opera bug: scrollbar styles will only appear if overflow value is scroll or auto during the activation of the style.\n //and set overflow to scroll\n //scrollbarDummyElement.css(strOverflow, strHidden).hide().css(strOverflow, strScroll).show();\n //return (scrollbarDummyElement0[LEXICON.oH] - scrollbarDummyElement0[LEXICON.cH]) === 0 && (scrollbarDummyElement0[LEXICON.oW] - scrollbarDummyElement0[LEXICON.cW]) === 0;\n \n return result;\n })(),\n overlayScrollbarDummySize : { x: 30, y: 30 },\n msie : (function() {\n var ua = window.navigator.userAgent;\n var strIndexOf = 'indexOf';\n var strSubString = 'substring';\n var msie = ua[strIndexOf]('MSIE ');\n var trident = ua[strIndexOf]('Trident/');\n var edge = ua[strIndexOf]('Edge/');\n var rv = ua[strIndexOf]('rv:');\n var result;\n var parseIntFunc = parseInt;\n\n // IE 10 or older => return version number\n if (msie > 0)\n result = parseIntFunc(ua[strSubString](msie + 5, ua[strIndexOf]('.', msie)), 10);\n\n // IE 11 => return version number\n else if (trident > 0)\n result = parseIntFunc(ua[strSubString](rv + 3, ua[strIndexOf]('.', rv)), 10);\n\n // Edge (IE 12+) => return version number\n else if (edge > 0)\n result = parseIntFunc(ua[strSubString](edge + 5, ua[strIndexOf]('.', edge)), 10);\n\n // other browser\n return result;\n })(),\n cssCalc : (function() {\n var dummyStyle = document.createElement('div')[LEXICON.s];\n var strCalc = 'calc';\n var i = -1;\n var prop;\n\n for(; i < VENDORS._cssPrefixes[LEXICON.l]; i++) {\n prop = i < 0 ? strCalc : VENDORS._cssPrefixes[i] + strCalc;\n dummyStyle.cssText = 'width:' + prop + '(1px);';\n if (dummyStyle[LEXICON.l])\n return prop;\n }\n return null;\n })(),\n restrictedMeasuring : (function() {\n //https://bugzilla.mozilla.org/show_bug.cgi?id=1439305\n scrollbarDummyElement.css(strOverflow, strHidden);\n var scrollSize = {\n w : scrollbarDummyElement0[LEXICON.sW],\n h : scrollbarDummyElement0[LEXICON.sH]\n };\n scrollbarDummyElement.css(strOverflow, 'visible');\n var scrollSize2 = {\n w : scrollbarDummyElement0[LEXICON.sW],\n h : scrollbarDummyElement0[LEXICON.sH]\n };\n return (scrollSize.w - scrollSize2.w) !== 0 || (scrollSize.h - scrollSize2.h) !== 0;\n })(),\n rtlScrollBehavior : (function() {\n scrollbarDummyElement.css({ 'overflow-y' : strHidden, 'overflow-x' : strScroll, 'direction' : 'rtl' }).scrollLeft(0);\n var dummyContainerOffset = scrollbarDummyElement.offset();\n var dummyContainerChildOffset = dummyContainerChild.offset();\n scrollbarDummyElement.scrollLeft(999);\n var dummyContainerScrollOffsetAfterScroll = dummyContainerChild.offset();\n return {\n //origin direction = determines if the zero scroll position is on the left or right side\n //'i' means 'invert' (i === true means that the axis must be inverted to be correct)\n //true = on the left side\n //false = on the right side\n i : dummyContainerOffset.left === dummyContainerChildOffset.left,\n //negative = determines if the maximum scroll is positive or negative\n //'n' means 'negate' (n === true means that the axis must be negated to be correct)\n //true = negative\n //false = positive\n n : dummyContainerChildOffset.left - dummyContainerScrollOffsetAfterScroll.left === 0\n };\n })(),\n supportTransform : VENDORS._cssProperty('transform') !== null,\n supportTransition : VENDORS._cssProperty('transition') !== null,\n supportPassiveEvents : (function() {\n var supportsPassive = false;\n try {\n window.addEventListener('test', null, Object.defineProperty({ }, 'passive', {\n get: function() {\n supportsPassive = true;\n }\n }));\n } catch (e) { }\n return supportsPassive;\n })(),\n supportResizeObserver : !!COMPATIBILITY.rO(),\n supportMutationObserver : !!COMPATIBILITY.mO()\n });\n\n scrollbarDummyElement.removeAttr(LEXICON.s).remove();\n\n //Catch zoom event:\n (function () {\n if(nativeScrollbarIsOverlaid.x && nativeScrollbarIsOverlaid.y)\n return;\n\n var abs = MATH.abs;\n var windowWidth = COMPATIBILITY.wW();\n var windowHeight = COMPATIBILITY.wH();\n var windowDpr = getWindowDPR();\n var onResize = function() {\n if(INSTANCES().length > 0) {\n var newW = COMPATIBILITY.wW();\n var newH = COMPATIBILITY.wH();\n var deltaW = newW - windowWidth;\n var deltaH = newH - windowHeight;\n\n if (deltaW === 0 && deltaH === 0)\n return;\n\n var deltaWRatio = MATH.round(newW / (windowWidth / 100.0));\n var deltaHRatio = MATH.round(newH / (windowHeight / 100.0));\n var absDeltaW = abs(deltaW);\n var absDeltaH = abs(deltaH);\n var absDeltaWRatio = abs(deltaWRatio);\n var absDeltaHRatio = abs(deltaHRatio);\n var newDPR = getWindowDPR();\n\n var deltaIsBigger = absDeltaW > 2 && absDeltaH > 2;\n var difference = !differenceIsBiggerThanOne(absDeltaWRatio, absDeltaHRatio);\n var dprChanged = newDPR !== windowDpr && windowDpr > 0;\n var isZoom = deltaIsBigger && difference && dprChanged;\n var oldScrollbarSize = _base.nativeScrollbarSize;\n var newScrollbarSize;\n\n if (isZoom) {\n bodyElement.append(scrollbarDummyElement);\n newScrollbarSize = _base.nativeScrollbarSize = calcNativeScrollbarSize(scrollbarDummyElement[0]);\n scrollbarDummyElement.remove();\n if(oldScrollbarSize.x !== newScrollbarSize.x || oldScrollbarSize.y !== newScrollbarSize.y) {\n FRAMEWORK.each(INSTANCES(), function () {\n if(INSTANCES(this))\n INSTANCES(this).update('zoom');\n });\n }\n }\n\n windowWidth = newW;\n windowHeight = newH;\n windowDpr = newDPR;\n }\n };\n\n function differenceIsBiggerThanOne(valOne, valTwo) {\n var absValOne = abs(valOne);\n var absValTwo = abs(valTwo);\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\n }\n\n function getWindowDPR() {\n var dDPI = window.screen.deviceXDPI || 0;\n var sDPI = window.screen.logicalXDPI || 1;\n return window.devicePixelRatio || (dDPI / sDPI);\n }\n\n FRAMEWORK(window).on('resize', onResize);\n })();\n\n function calcNativeScrollbarSize(measureElement) {\n return {\n x: measureElement[LEXICON.oH] - measureElement[LEXICON.cH],\n y: measureElement[LEXICON.oW] - measureElement[LEXICON.cW]\n };\n }\n }\n\n /**\n * The object which manages the auto update loop for all OverlayScrollbars objects. This object is initialized only once: if the first OverlayScrollbars object gets initialized.\n * @constructor\n */\n function OverlayScrollbarsAutoUpdateLoop(globals) {\n var _base = this;\n var _inArray = FRAMEWORK.inArray;\n var _getNow = COMPATIBILITY.now;\n var _strAutoUpdate = 'autoUpdate';\n var _strAutoUpdateInterval = _strAutoUpdate + 'Interval';\n var _strLength = LEXICON.l;\n var _loopingInstances = [ ];\n var _loopingInstancesIntervalCache = [ ];\n var _loopIsActive = false;\n var _loopIntervalDefault = 33;\n var _loopInterval = _loopIntervalDefault;\n var _loopTimeOld = _getNow();\n var _loopID;\n \n\n /**\n * The auto update loop which will run every 50 milliseconds or less if the update interval of a instance is lower than 50 milliseconds.\n */\n var loop = function() {\n if(_loopingInstances[_strLength] > 0 && _loopIsActive) {\n _loopID = COMPATIBILITY.rAF()(function () {\n loop();\n });\n var timeNew = _getNow();\n var timeDelta = timeNew - _loopTimeOld;\n var lowestInterval;\n var instance;\n var instanceOptions;\n var instanceAutoUpdateAllowed;\n var instanceAutoUpdateInterval;\n var now;\n\n if (timeDelta > _loopInterval) {\n _loopTimeOld = timeNew - (timeDelta % _loopInterval);\n lowestInterval = _loopIntervalDefault;\n for(var i = 0; i < _loopingInstances[_strLength]; i++) {\n instance = _loopingInstances[i];\n if (instance !== undefined) {\n instanceOptions = instance.options();\n instanceAutoUpdateAllowed = instanceOptions[_strAutoUpdate];\n instanceAutoUpdateInterval = MATH.max(1, instanceOptions[_strAutoUpdateInterval]);\n now = _getNow();\n\n if ((instanceAutoUpdateAllowed === true || instanceAutoUpdateAllowed === null) && (now - _loopingInstancesIntervalCache[i]) > instanceAutoUpdateInterval) {\n instance.update('auto');\n _loopingInstancesIntervalCache[i] = new Date(now += instanceAutoUpdateInterval);\n }\n\n lowestInterval = MATH.max(1, MATH.min(lowestInterval, instanceAutoUpdateInterval));\n }\n }\n _loopInterval = lowestInterval;\n }\n } else {\n _loopInterval = _loopIntervalDefault;\n }\n };\n\n /**\n * Add OverlayScrollbars instance to the auto update loop. Only successful if the instance isn't already added.\n * @param instance The instance which shall be updated in a loop automatically.\n */\n _base.add = function(instance) {\n if(_inArray(instance, _loopingInstances) === -1) {\n _loopingInstances.push(instance);\n _loopingInstancesIntervalCache.push(_getNow());\n if (_loopingInstances[_strLength] > 0 && !_loopIsActive) {\n _loopIsActive = true;\n globals.autoUpdateLoop = _loopIsActive;\n loop();\n }\n }\n };\n\n /**\n * Remove OverlayScrollbars instance from the auto update loop. Only successful if the instance was added before.\n * @param instance The instance which shall be updated in a loop automatically.\n */\n _base.remove = function(instance) {\n var index = _inArray(instance, _loopingInstances);\n if(index > -1) {\n //remove from loopingInstances list\n _loopingInstancesIntervalCache.splice(index, 1);\n _loopingInstances.splice(index, 1);\n\n //correct update loop behavior\n if (_loopingInstances[_strLength] === 0 && _loopIsActive) {\n _loopIsActive = false;\n globals.autoUpdateLoop = _loopIsActive;\n if(_loopID !== undefined) {\n COMPATIBILITY.cAF()(_loopID);\n _loopID = -1;\n }\n }\n }\n };\n }\n\n /**\n * A object which manages the scrollbars visibility of the target element.\n * @param pluginTargetElement The element from which the scrollbars shall be hidden.\n * @param options The custom options.\n * @param extensions The custom extensions.\n * @param globals\n * @param autoUpdateLoop\n * @returns {*}\n * @constructor\n */\n function OverlayScrollbarsInstance(pluginTargetElement, options, extensions, globals, autoUpdateLoop) {\n //shortcuts\n var type = COMPATIBILITY.type;\n var inArray = FRAMEWORK.inArray;\n var each = FRAMEWORK.each;\n \n //make correct instanceof\n var _base = new _plugin();\n var _frameworkProto = FRAMEWORK[LEXICON.p];\n \n //if passed element is no HTML element: skip and return\n if(!isHTMLElement(pluginTargetElement))\n return;\n \n //if passed element is already initialized: set passed options if there are any and return its instance\n if(INSTANCES(pluginTargetElement)) {\n var inst = INSTANCES(pluginTargetElement);\n inst.options(options);\n return inst;\n }\n\n //globals:\n var _nativeScrollbarIsOverlaid;\n var _overlayScrollbarDummySize;\n var _rtlScrollBehavior;\n var _autoUpdateRecommended;\n var _msieVersion;\n var _nativeScrollbarStyling;\n var _cssCalc;\n var _nativeScrollbarSize;\n var _supportTransition;\n var _supportTransform;\n var _supportPassiveEvents;\n var _supportResizeObserver;\n var _supportMutationObserver;\n var _restrictedMeasuring;\n\n //general readonly:\n var _initialized;\n var _destroyed;\n var _isTextarea;\n var _isBody;\n var _documentMixed;\n var _isTextareaHostGenerated;\n\n //general:\n var _isBorderBox;\n var _sizeAutoObserverAdded;\n var _paddingX;\n var _paddingY;\n var _borderX;\n var _borderY;\n var _marginX;\n var _marginY;\n var _isRTL;\n var _sleeping;\n var _contentBorderSize = { };\n var _scrollHorizontalInfo = { };\n var _scrollVerticalInfo = { };\n var _viewportSize = { };\n var _nativeScrollbarMinSize = { };\n\n //naming:\n var _strMinusHidden = '-hidden';\n var _strMarginMinus = 'margin-';\n var _strPaddingMinus = 'padding-';\n var _strBorderMinus = 'border-';\n var _strTop = 'top';\n var _strRight = 'right';\n var _strBottom = 'bottom';\n var _strLeft = 'left';\n var _strMinMinus = 'min-';\n var _strMaxMinus = 'max-';\n var _strWidth = 'width';\n var _strHeight = 'height';\n var _strFloat = 'float';\n var _strEmpty = '';\n var _strAuto = 'auto';\n var _strSync = 'sync';\n var _strScroll = 'scroll';\n var _strHundredPercent = '100%';\n var _strX = 'x';\n var _strY = 'y';\n var _strDot = '.';\n var _strSpace = ' ';\n var _strScrollbar = 'scrollbar';\n var _strMinusHorizontal = '-horizontal';\n var _strMinusVertical = '-vertical';\n var _strScrollLeft = _strScroll + 'Left';\n var _strScrollTop = _strScroll + 'Top';\n var _strMouseTouchDownEvent = 'mousedown touchstart';\n var _strMouseTouchUpEvent = 'mouseup touchend touchcancel';\n var _strMouseTouchMoveEvent = 'mousemove touchmove';\n var _strMouseTouchEnter = 'mouseenter';\n var _strMouseTouchLeave = 'mouseleave';\n var _strKeyDownEvent = 'keydown';\n var _strKeyUpEvent = 'keyup';\n var _strSelectStartEvent = 'selectstart';\n var _strTransitionEndEvent = 'transitionend webkitTransitionEnd oTransitionEnd';\n var _strResizeObserverProperty = '__overlayScrollbarsRO__';\n\n //class names:\n var _cassNamesPrefix = 'os-';\n var _classNameHTMLElement = _cassNamesPrefix + 'html';\n var _classNameHostElement = _cassNamesPrefix + 'host';\n var _classNameHostTextareaElement = _classNameHostElement + '-textarea';\n var _classNameHostScrollbarHorizontalHidden = _classNameHostElement + '-' + _strScrollbar + _strMinusHorizontal + _strMinusHidden;\n var _classNameHostScrollbarVerticalHidden = _classNameHostElement + '-' + _strScrollbar + _strMinusVertical + _strMinusHidden;\n var _classNameHostTransition = _classNameHostElement + '-transition';\n var _classNameHostRTL = _classNameHostElement + '-rtl';\n var _classNameHostResizeDisabled = _classNameHostElement + '-resize-disabled';\n var _classNameHostScrolling = _classNameHostElement + '-scrolling';\n var _classNameHostOverflow = _classNameHostElement + '-overflow';\n var _classNameHostOverflowX = _classNameHostOverflow + '-x';\n var _classNameHostOverflowY = _classNameHostOverflow + '-y';\n var _classNameTextareaElement = _cassNamesPrefix + 'textarea';\n var _classNameTextareaCoverElement = _classNameTextareaElement + '-cover';\n var _classNamePaddingElement = _cassNamesPrefix + 'padding';\n var _classNameViewportElement = _cassNamesPrefix + 'viewport';\n var _classNameViewportNativeScrollbarsInvisible = _classNameViewportElement + '-native-scrollbars-invisible';\n var _classNameViewportNativeScrollbarsOverlaid = _classNameViewportElement + '-native-scrollbars-overlaid';\n var _classNameContentElement = _cassNamesPrefix + 'content';\n var _classNameContentArrangeElement = _cassNamesPrefix + 'content-arrange';\n var _classNameContentGlueElement = _cassNamesPrefix + 'content-glue';\n var _classNameSizeAutoObserverElement = _cassNamesPrefix + 'size-auto-observer';\n var _classNameResizeObserverElement = _cassNamesPrefix + 'resize-observer';\n var _classNameResizeObserverItemElement = _cassNamesPrefix + 'resize-observer-item';\n var _classNameResizeObserverItemFinalElement = _classNameResizeObserverItemElement + '-final';\n var _classNameTextInherit = _cassNamesPrefix + 'text-inherit';\n var _classNameScrollbar = _cassNamesPrefix + _strScrollbar;\n var _classNameScrollbarTrack = _classNameScrollbar + '-track';\n var _classNameScrollbarTrackOff = _classNameScrollbarTrack + '-off';\n var _classNameScrollbarHandle = _classNameScrollbar + '-handle';\n var _classNameScrollbarHandleOff = _classNameScrollbarHandle + '-off';\n var _classNameScrollbarUnusable = _classNameScrollbar + '-unusable';\n var _classNameScrollbarAutoHidden = _classNameScrollbar + '-' + _strAuto + _strMinusHidden;\n var _classNameScrollbarCorner = _classNameScrollbar + '-corner';\n var _classNameScrollbarCornerResize = _classNameScrollbarCorner + '-resize';\n var _classNameScrollbarCornerResizeB = _classNameScrollbarCornerResize + '-both';\n var _classNameScrollbarCornerResizeH = _classNameScrollbarCornerResize + _strMinusHorizontal;\n var _classNameScrollbarCornerResizeV = _classNameScrollbarCornerResize + _strMinusVertical;\n var _classNameScrollbarHorizontal = _classNameScrollbar + _strMinusHorizontal;\n var _classNameScrollbarVertical = _classNameScrollbar + _strMinusVertical;\n var _classNameDragging = _cassNamesPrefix + 'dragging';\n var _classNameThemeNone = _cassNamesPrefix + 'theme-none';\n\n //callbacks:\n var _callbacksInitQeueue = [ ];\n\n //options:\n var _defaultOptions;\n var _currentOptions;\n var _currentPreparedOptions;\n\n //extensions:\n var _extensions = { };\n var _extensionsPrivateMethods = 'added removed on contract';\n\n //update\n var _lastUpdateTime;\n var _swallowedUpdateHints = { };\n var _swallowedUpdateTimeout;\n var _swallowUpdateLag = 42;\n var _imgs = [ ];\n\n //DOM elements:\n var _windowElement;\n var _documentElement;\n var _htmlElement;\n var _bodyElement;\n var _targetElement; //the target element of this OverlayScrollbars object\n var _hostElement; //the host element of this OverlayScrollbars object -> may be the same as targetElement\n var _sizeAutoObserverElement; //observes size auto changes\n var _sizeObserverElement; //observes size and padding changes\n var _paddingElement; //manages the padding\n var _viewportElement; //is the viewport of our scrollbar model\n var _contentElement; //the element which holds the content\n var _contentArrangeElement; //is needed for correct sizing of the content element (only if native scrollbars are overlays)\n var _contentGlueElement; //has always the size of the content element\n var _textareaCoverElement; //only applied if target is a textarea element. Used for correct size calculation and for prevention of uncontrolled scrolling\n var _scrollbarCornerElement;\n var _scrollbarHorizontalElement;\n var _scrollbarHorizontalTrackElement;\n var _scrollbarHorizontalHandleElement;\n var _scrollbarVerticalElement;\n var _scrollbarVerticalTrackElement;\n var _scrollbarVerticalHandleElement;\n var _windowElementNative;\n var _documentElementNative;\n var _targetElementNative;\n var _hostElementNative;\n var _sizeAutoObserverElementNative;\n var _sizeObserverElementNative;\n var _paddingElementNative;\n var _viewportElementNative;\n var _contentElementNative;\n\n //Cache:\n var _hostSizeCache;\n var _contentScrollSizeCache;\n var _arrangeContentSizeCache;\n var _hasOverflowCache;\n var _hideOverflowCache;\n var _widthAutoCache;\n var _heightAutoCache;\n var _cssMaxValueCache;\n var _cssBoxSizingCache;\n var _cssPaddingCache;\n var _cssBorderCache;\n var _cssMarginCache;\n var _cssDirectionCache;\n var _cssDirectionDetectedCache;\n var _paddingAbsoluteCache;\n var _clipAlwaysCache;\n var _contentGlueSizeCache;\n var _overflowBehaviorCache;\n var _overflowAmountCache;\n var _ignoreOverlayScrollbarHidingCache;\n var _autoUpdateCache;\n var _sizeAutoCapableCache;\n var _contentElementScrollSizeChangeDetectedCache;\n var _hostElementSizeChangeDetectedCache;\n var _scrollbarsVisibilityCache;\n var _scrollbarsAutoHideCache;\n var _scrollbarsClickScrollingCache;\n var _scrollbarsDragScrollingCache;\n var _resizeCache;\n var _normalizeRTLCache;\n var _classNameCache;\n var _oldClassName;\n var _textareaAutoWrappingCache;\n var _textareaInfoCache;\n var _textareaSizeCache;\n var _textareaDynHeightCache;\n var _textareaDynWidthCache;\n var _bodyMinSizeCache;\n var _viewportScrollSizeCache;\n var _displayIsHiddenCache;\n var _updateAutoCache = { };\n\n //MutationObserver:\n var _mutationObserverHost;\n var _mutationObserverContent;\n var _mutationObserverHostCallback;\n var _mutationObserverContentCallback;\n var _mutationObserversConnected;\n var _mutationObserverAttrsTextarea = ['wrap', 'cols', 'rows'];\n var _mutationObserverAttrsHost = [LEXICON.i, LEXICON.c, LEXICON.s, 'open'];\n\n //textarea:\n var _textareaEvents;\n var _textareaHasFocus;\n\n //scrollbars:\n var _scrollbarsAutoHideTimeoutId;\n var _scrollbarsAutoHideMoveTimeoutId;\n var _scrollbarsAutoHideDelay;\n var _scrollbarsAutoHideNever;\n var _scrollbarsAutoHideScroll;\n var _scrollbarsAutoHideMove;\n var _scrollbarsAutoHideLeave;\n var _scrollbarsHandleHovered;\n var _scrollbarsHandlesDefineScrollPos;\n\n //resize\n var _resizeReconnectMutationObserver;\n var _resizeNone;\n var _resizeBoth;\n var _resizeHorizontal;\n var _resizeVertical;\n var _resizeOnMouseTouchDown;\n \n \n //==== Passive Event Listener ====//\n\n /**\n * Adds or removes a passive event listener from the given element.\n * @param element The element to which the event listener shall be applied or removed.\n * @param eventNames The name(s) of the events.\n * @param listener The method which shall be called.\n * @param remove True if the handler shall be removed, false or undefined if the handler shall be added.\n */\n function setupPassiveEventListener(element, eventNames, listener, remove, notPassive) {\n var method = remove ? 'removeEventListener' : 'addEventListener';\n var events = eventNames.split(_strSpace);\n var i = 0;\n\n for (; i < events[LEXICON.l]; i++) {\n element[0][method](events[i], listener, { passive: !notPassive });\n }\n }\n\n\n //==== Resize Observer ====//\n\n /**\n * Adds or removes a resize observer from the given element.\n * @param targetElement The element to which the resize observer shall be added or removed.\n * @param onElementResizedCallback The callback which is fired every time the resize observer registers a size change or false / undefined if the resizeObserver shall be removed.\n */\n function setupResizeObserver(targetElement, onElementResizedCallback) {\n if(targetElement) {\n //add resize observer:\n if(onElementResizedCallback) {\n var constMaximum = 3333333;\n var resizeObserver = COMPATIBILITY.rO();\n var strAnimationStartEvent = 'animationstart mozAnimationStart webkitAnimationStart MSAnimationStart';\n var strChildNodes = 'childNodes';\n var callback = function () {\n targetElement[_strScrollTop](constMaximum)[_strScrollLeft](_isRTL ? _rtlScrollBehavior.n ? -constMaximum : _rtlScrollBehavior.i ? 0 : constMaximum : constMaximum);\n onElementResizedCallback();\n };\n if (_supportResizeObserver) {\n var element = targetElement.append(generateDiv(_classNameResizeObserverElement + ' observed')).contents()[0];\n var observer = element[_strResizeObserverProperty] = new resizeObserver(callback);\n observer.observe(element);\n }\n else {\n if (_msieVersion > 9 || !_autoUpdateRecommended) {\n targetElement.prepend(\n generateDiv(_classNameResizeObserverElement,\n generateDiv({ className : _classNameResizeObserverItemElement, dir : \"ltr\" },\n generateDiv(_classNameResizeObserverItemElement,\n generateDiv(_classNameResizeObserverItemFinalElement)\n ) +\n generateDiv(_classNameResizeObserverItemElement,\n generateDiv({ className : _classNameResizeObserverItemFinalElement, style : 'width: 200%; height: 200%' })\n )\n )\n )\n );\n\n var observerElement = targetElement[0][strChildNodes][0][strChildNodes][0];\n var shrinkElement = FRAMEWORK(observerElement[strChildNodes][1]);\n var expandElement = FRAMEWORK(observerElement[strChildNodes][0]);\n var expandElementChild = FRAMEWORK(expandElement[0][strChildNodes][0]);\n var widthCache = observerElement[LEXICON.oW];\n var heightCache = observerElement[LEXICON.oH];\n var isDirty;\n var rAFId;\n var currWidth;\n var currHeight;\n var factor = 2;\n var nativeScrollbarSize = globals.nativeScrollbarSize; //care don't make changes to this object!!!\n var reset = function () {\n /*\n var sizeResetWidth = observerElement[LEXICON.oW] + nativeScrollbarSize.x * factor + nativeScrollbarSize.y * factor + _overlayScrollbarDummySize.x + _overlayScrollbarDummySize.y;\n var sizeResetHeight = observerElement[LEXICON.oH] + nativeScrollbarSize.x * factor + nativeScrollbarSize.y * factor + _overlayScrollbarDummySize.x + _overlayScrollbarDummySize.y;\n var expandChildCSS = {};\n expandChildCSS[_strWidth] = sizeResetWidth;\n expandChildCSS[_strHeight] = sizeResetHeight;\n expandElementChild.css(expandChildCSS);\n\n\n expandElement[_strScrollLeft](sizeResetWidth)[_strScrollTop](sizeResetHeight);\n shrinkElement[_strScrollLeft](sizeResetWidth)[_strScrollTop](sizeResetHeight);\n */\n expandElement[_strScrollLeft](constMaximum)[_strScrollTop](constMaximum);\n shrinkElement[_strScrollLeft](constMaximum)[_strScrollTop](constMaximum);\n };\n var onResized = function () {\n rAFId = 0;\n if (!isDirty)\n return;\n\n widthCache = currWidth;\n heightCache = currHeight;\n callback();\n };\n var onScroll = function (event) {\n currWidth = observerElement[LEXICON.oW];\n currHeight = observerElement[LEXICON.oH];\n isDirty = currWidth != widthCache || currHeight != heightCache;\n\n if (event && isDirty && !rAFId) {\n COMPATIBILITY.cAF()(rAFId);\n rAFId = COMPATIBILITY.rAF()(onResized);\n }\n else if(!event)\n onResized();\n\n reset();\n if (event) {\n COMPATIBILITY.prvD(event);\n COMPATIBILITY.stpP(event);\n }\n return false;\n };\n var expandChildCSS = {};\n var observerElementCSS = {};\n\n setTopRightBottomLeft(observerElementCSS, _strEmpty, [\n -((nativeScrollbarSize.y + 1) * factor),\n nativeScrollbarSize.x * -factor,\n nativeScrollbarSize.y * -factor,\n -((nativeScrollbarSize.x + 1) * factor)\n ]);\n\n FRAMEWORK(observerElement).css(observerElementCSS);\n expandElement.on(_strScroll, onScroll);\n shrinkElement.on(_strScroll, onScroll);\n targetElement.on(strAnimationStartEvent, function () {\n onScroll(false);\n });\n //lets assume that the divs will never be that large and a constant value is enough\n expandChildCSS[_strWidth] = constMaximum;\n expandChildCSS[_strHeight] = constMaximum;\n expandElementChild.css(expandChildCSS);\n\n reset();\n }\n else {\n var attachEvent = _documentElementNative.attachEvent;\n var isIE = _msieVersion !== undefined;\n if (attachEvent) {\n targetElement.prepend(generateDiv(_classNameResizeObserverElement));\n findFirst(targetElement, _strDot + _classNameResizeObserverElement)[0].attachEvent('onresize', callback);\n }\n else {\n var obj = _documentElementNative.createElement(TYPES.o);\n obj.setAttribute('tabindex', '-1');\n obj.setAttribute(LEXICON.c, _classNameResizeObserverElement);\n obj.onload = function () {\n var wnd = this.contentDocument.defaultView;\n wnd.addEventListener('resize', callback);\n wnd.document.documentElement.style.display = 'none';\n };\n obj.type = 'text/html';\n if (isIE)\n targetElement.prepend(obj);\n obj.data = 'about:blank';\n if (!isIE)\n targetElement.prepend(obj);\n targetElement.on(strAnimationStartEvent, callback);\n }\n }\n }\n\n //direction change detection:\n if (targetElement[0] === _sizeObserverElementNative) {\n var directionChanged = function () {\n var dir = _hostElement.css('direction');\n var css = {};\n var scrollLeftValue = 0;\n var result = false;\n if (dir !== _cssDirectionDetectedCache) {\n if (dir === 'ltr') {\n css[_strLeft] = 0;\n css[_strRight] = _strAuto;\n scrollLeftValue = constMaximum;\n }\n else {\n css[_strLeft] = _strAuto;\n css[_strRight] = 0;\n scrollLeftValue = _rtlScrollBehavior.n ? -constMaximum : _rtlScrollBehavior.i ? 0 : constMaximum;\n }\n _sizeObserverElement.children().eq(0).css(css);\n targetElement[_strScrollLeft](scrollLeftValue)[_strScrollTop](constMaximum);\n _cssDirectionDetectedCache = dir;\n result = true;\n }\n return result;\n };\n directionChanged();\n targetElement.on(_strScroll, function (event) {\n if (directionChanged())\n update();\n COMPATIBILITY.prvD(event);\n COMPATIBILITY.stpP(event);\n return false;\n });\n }\n }\n //remove resize observer:\n else {\n if (_supportResizeObserver) {\n var element = targetElement.contents()[0];\n var resizeObserverObj = element[_strResizeObserverProperty];\n if(resizeObserverObj) {\n resizeObserverObj.disconnect();\n delete element[_strResizeObserverProperty];\n }\n }\n else {\n remove(targetElement.children(_strDot + _classNameResizeObserverElement).eq(0));\n }\n }\n }\n }\n\n /**\n * Freezes or unfreezes the given resize observer.\n * @param targetElement The element to which the target resize observer is applied.\n * @param freeze True if the resize observer shall be frozen, false otherwise.\n \n function freezeResizeObserver(targetElement, freeze) {\n if (targetElement !== undefined) {\n if(freeze) {\n if (_supportResizeObserver) {\n var element = targetElement.contents()[0];\n element[_strResizeObserverProperty].unobserve(element);\n }\n else {\n targetElement = targetElement.children(_strDot + _classNameResizeObserverElement).eq(0);\n var w = targetElement.css(_strWidth);\n var h = targetElement.css(_strHeight);\n var css = {};\n css[_strWidth] = w;\n css[_strHeight] = h;\n targetElement.css(css);\n }\n }\n else {\n if (_supportResizeObserver) {\n var element = targetElement.contents()[0];\n element[_strResizeObserverProperty].observe(element);\n }\n else {\n var css = { };\n css[_strHeight] = _strEmpty;\n css[_strWidth] = _strEmpty;\n targetElement.children(_strDot + _classNameResizeObserverElement).eq(0).css(css);\n }\n }\n }\n }\n */\n\n\n //==== Mutation Observers ====//\n\n /**\n * Creates MutationObservers for the host and content Element if they are supported.\n */\n function createMutationObservers() {\n if (_supportMutationObserver) {\n var mutationObserverContentLag = 11;\n var mutationObserver = COMPATIBILITY.mO();\n var contentLastUpdate = COMPATIBILITY.now();\n var mutationTarget;\n var mutationAttrName;\n var contentTimeout;\n var now;\n var sizeAuto;\n var action;\n\n _mutationObserverHostCallback = function(mutations) {\n var doUpdate = false;\n var mutation;\n \n if (_initialized && !_sleeping) {\n each(mutations, function () {\n mutation = this;\n mutationTarget = mutation.target;\n mutationAttrName = mutation.attributeName;\n\n if (mutationAttrName === LEXICON.c)\n doUpdate = hostClassNamesChanged(mutation.oldValue, mutationTarget.className);\n else if (mutationAttrName === LEXICON.s)\n doUpdate = mutation.oldValue !== mutationTarget[LEXICON.s].cssText;\n else\n doUpdate = true;\n\n if (doUpdate)\n return false;\n });\n\n if (doUpdate)\n _base.update(_strAuto);\n }\n return doUpdate;\n };\n _mutationObserverContentCallback = function (mutations) {\n var doUpdate = false;\n var mutation;\n \n if (_initialized && !_sleeping) {\n each(mutations, function () {\n mutation = this;\n doUpdate = isUnknownMutation(mutation);\n return !doUpdate;\n });\n\n if (doUpdate) {\n now = COMPATIBILITY.now();\n sizeAuto = (_heightAutoCache || _widthAutoCache);\n action = function () {\n if(!_destroyed) {\n contentLastUpdate = now;\n\n //if cols, rows or wrap attr was changed\n if (_isTextarea)\n textareaUpdate();\n\n if (sizeAuto)\n update();\n else\n _base.update(_strAuto);\n }\n };\n clearTimeout(contentTimeout);\n if (mutationObserverContentLag <= 0 || now - contentLastUpdate > mutationObserverContentLag || !sizeAuto)\n action();\n else\n contentTimeout = setTimeout(action, mutationObserverContentLag);\n }\n }\n return doUpdate;\n }\n\n _mutationObserverHost = new mutationObserver(_mutationObserverHostCallback);\n _mutationObserverContent = new mutationObserver(_mutationObserverContentCallback);\n }\n }\n\n /**\n * Connects the MutationObservers if they are supported.\n */\n function connectMutationObservers() {\n if (_supportMutationObserver && !_mutationObserversConnected) {\n _mutationObserverHost.observe(_hostElementNative, {\n attributes: true,\n attributeOldValue: true,\n attributeFilter: _mutationObserverAttrsHost\n });\n\n _mutationObserverContent.observe(_isTextarea ? _targetElementNative : _contentElementNative, {\n attributes: true,\n attributeOldValue: true,\n subtree: !_isTextarea,\n childList: !_isTextarea,\n characterData: !_isTextarea,\n attributeFilter: _isTextarea ? _mutationObserverAttrsTextarea : _mutationObserverAttrsHost\n });\n\n _mutationObserversConnected = true;\n }\n }\n\n /**\n * Disconnects the MutationObservers if they are supported.\n */\n function disconnectMutationObservers() {\n if (_supportMutationObserver && _mutationObserversConnected) {\n _mutationObserverHost.disconnect();\n _mutationObserverContent.disconnect();\n\n _mutationObserversConnected = false;\n }\n }\n\n \n //==== Events of elements ====//\n\n /**\n * This method gets called every time the host element gets resized. IMPORTANT: Padding changes are detected too!!\n * It refreshes the hostResizedEventArgs and the hostSizeResizeCache.\n * If there are any size changes, the update method gets called.\n */\n function hostOnResized() {\n if (!_sleeping) {\n var changed;\n var hostSize = {\n w: _sizeObserverElementNative[LEXICON.sW],\n h: _sizeObserverElementNative[LEXICON.sH]\n };\n \n changed = checkCache(hostSize, _hostElementSizeChangeDetectedCache);\n _hostElementSizeChangeDetectedCache = hostSize;\n if (changed)\n update({ _hostSizeChanged : true });\n }\n }\n\n /**\n * The mouse enter event of the host element. This event is only needed for the autoHide feature.\n */\n function hostOnMouseEnter() {\n if (_scrollbarsAutoHideLeave)\n refreshScrollbarsAutoHide(true);\n }\n\n /**\n * The mouse leave event of the host element. This event is only needed for the autoHide feature.\n */\n function hostOnMouseLeave() {\n if (_scrollbarsAutoHideLeave && !_bodyElement.hasClass(_classNameDragging))\n refreshScrollbarsAutoHide(false);\n }\n\n /**\n * The mouse move event of the host element. This event is only needed for the autoHide \"move\" feature.\n */\n function hostOnMouseMove() {\n if (_scrollbarsAutoHideMove) {\n refreshScrollbarsAutoHide(true);\n clearTimeout(_scrollbarsAutoHideMoveTimeoutId);\n _scrollbarsAutoHideMoveTimeoutId = setTimeout(function () {\n if (_scrollbarsAutoHideMove && !_destroyed)\n refreshScrollbarsAutoHide(false);\n }, 100);\n }\n }\n\n /**\n * Adds or removes mouse & touch events of the host element. (for handling auto-hiding of the scrollbars)\n * @param destroy Indicates whether the events shall be added or removed.\n */\n function setupHostMouseTouchEvents(destroy) {\n var strOnOff = destroy ? 'off' : 'on';\n var setupEvent = function(target, name, listener) {\n if(_supportPassiveEvents)\n setupPassiveEventListener(target, name, listener, destroy);\n else\n target[strOnOff](name, listener);\n };\n\n if(_scrollbarsAutoHideMove && !destroy)\n setupEvent(_hostElement, _strMouseTouchMoveEvent, hostOnMouseMove);\n else {\n if(destroy)\n setupEvent(_hostElement, _strMouseTouchMoveEvent, hostOnMouseMove);\n setupEvent(_hostElement, _strMouseTouchEnter, hostOnMouseEnter);\n setupEvent(_hostElement, _strMouseTouchLeave, hostOnMouseLeave);\n }\n\n //if the plugin is initialized and the mouse is over the host element, make the scrollbars visible\n if(!_initialized && !destroy)\n _hostElement.one(\"mouseover\", hostOnMouseEnter);\n }\n\n /**\n * Prevents text from deselection if attached to the document element on the mousedown event of a DOM element.\n * @param event The select start event.\n */\n function documentOnSelectStart(event) {\n COMPATIBILITY.prvD(event);\n return false;\n }\n\n /**\n * A callback which will be called after a img element has downloaded its src asynchronous.\n */\n function imgOnLoad() {\n update({ _contentSizeChanged : true });\n }\n\n\n //==== Update Detection ====//\n\n /**\n * Measures the min width and min height of the body element and refreshes the related cache.\n * @returns {boolean} True if the min width or min height has changed, false otherwise.\n */\n function bodyMinSizeChanged() {\n var bodyMinSize = {};\n if (_isBody && _contentArrangeElement) {\n bodyMinSize.w = parseToZeroOrNumber(_contentArrangeElement.css(_strMinMinus + _strWidth));\n bodyMinSize.h = parseToZeroOrNumber(_contentArrangeElement.css(_strMinMinus + _strHeight));\n bodyMinSize.c = checkCache(bodyMinSize, _bodyMinSizeCache);\n bodyMinSize.f = true; //flag for \"measured at least once\"\n }\n _bodyMinSizeCache = bodyMinSize;\n return !!bodyMinSize.c;\n }\n\n /**\n * Returns true if the class names really changed (new class without plugin host prefix)\n * @param oldCassNames The old ClassName string.\n * @param newClassNames The new ClassName string.\n * @returns {boolean} True if the class names has really changed, false otherwise.\n */\n function hostClassNamesChanged(oldCassNames, newClassNames) {\n var currClasses = (newClassNames !== undefined && newClassNames !== null) ? newClassNames.split(_strSpace) : _strEmpty;\n var oldClasses = (oldCassNames !== undefined && oldCassNames !== null) ? oldCassNames.split(_strSpace) : _strEmpty;\n if (currClasses === _strEmpty && oldClasses === _strEmpty)\n return false;\n var diff = getArrayDifferences(oldClasses, currClasses);\n var changed = false;\n var oldClassNames = _oldClassName !== undefined && _oldClassName !== null ? _oldClassName.split(_strSpace) : [_strEmpty];\n var currClassNames = _classNameCache !== undefined && _classNameCache !== null ? _classNameCache.split(_strSpace) : [_strEmpty];\n\n //remove none theme from diff list to prevent update\n var idx = inArray(_classNameThemeNone, diff);\n var curr;\n var i;\n var v;\n var o;\n var c;\n\n if (idx > -1)\n diff.splice(idx, 1);\n\n for (i = 0; i < diff.length; i++) {\n curr = diff[i];\n if (curr.indexOf(_classNameHostElement) !== 0) {\n o = true;\n c = true;\n for (v = 0; v < oldClassNames.length; v++) {\n if (curr === oldClassNames[v]) {\n o = false;\n break;\n }\n }\n for (v = 0; v < currClassNames.length; v++) {\n if (curr === currClassNames[v]) {\n c = false;\n break;\n }\n }\n if (o && c) {\n changed = true;\n break;\n }\n }\n\n }\n return changed;\n }\n\n /**\n * Returns true if the given mutation is not from a from the plugin generated element. If the target element is a textarea the mutation is always unknown.\n * @param mutation The mutation which shall be checked.\n * @returns {boolean} True if the mutation is from a unknown element, false otherwise.\n */\n function isUnknownMutation(mutation) {\n var attributeName = mutation.attributeName;\n var mutationTarget = mutation.target;\n var mutationType = mutation.type;\n var strClosest = 'closest';\n\n if (mutationTarget === _contentElementNative)\n return attributeName === null;\n if (mutationType === 'attributes' && (attributeName === LEXICON.c || attributeName === LEXICON.s) && !_isTextarea) {\n //ignore className changes by the plugin\n if (attributeName === LEXICON.c && FRAMEWORK(mutationTarget).hasClass(_classNameHostElement))\n return hostClassNamesChanged(mutation.oldValue, mutationTarget.getAttribute(LEXICON.c));\n\n //only do it of browser support it natively\n if (typeof mutationTarget[strClosest] != TYPES.f)\n return true;\n if (mutationTarget[strClosest](_strDot + _classNameResizeObserverElement) !== null ||\n mutationTarget[strClosest](_strDot + _classNameScrollbar) !== null ||\n mutationTarget[strClosest](_strDot + _classNameScrollbarCorner) !== null)\n return false;\n }\n return true;\n }\n\n /**\n * Returns true if the content size was changed since the last time this method was called.\n * @returns {boolean} True if the content size was changed, false otherwise.\n */\n function updateAutoContentSizeChanged() {\n if (_sleeping)\n return false;\n \n var contentMeasureElement = getContentMeasureElement();\n var textareaValueLength = _isTextarea && _widthAutoCache && !_textareaAutoWrappingCache ? _targetElement.val().length : 0;\n var setCSS = !_mutationObserversConnected && _widthAutoCache && !_isTextarea;\n var viewportScrollSize = { };\n var css = { };\n var float;\n var bodyMinSizeC;\n var changed;\n var viewportScrollSizeChanged;\n var contentElementScrollSize;\n\n //fix for https://bugzilla.mozilla.org/show_bug.cgi?id=1439305, it only works with \"clipAlways : true\"\n //it can work with \"clipAlways : false\" too, but I had to set the overflow of the viewportElement to hidden every time before measuring\n if(_restrictedMeasuring) {\n viewportScrollSize = {\n x : _viewportElementNative[LEXICON.sW],\n y : _viewportElementNative[LEXICON.sH]\n }\n }\n if (setCSS) {\n float = _contentElement.css(_strFloat);\n css[_strFloat] = _isRTL ? _strRight : _strLeft;\n css[_strWidth] = _strAuto;\n _contentElement.css(css);\n }\n contentElementScrollSize = {\n w: contentMeasureElement[LEXICON.sW] + textareaValueLength,\n h: contentMeasureElement[LEXICON.sH] + textareaValueLength\n };\n if (setCSS) {\n css[_strFloat] = float;\n css[_strWidth] = _strHundredPercent;\n _contentElement.css(css);\n }\n\n bodyMinSizeC = bodyMinSizeChanged();\n changed = checkCache(contentElementScrollSize, _contentElementScrollSizeChangeDetectedCache);\n viewportScrollSizeChanged = checkCache(viewportScrollSize, _viewportScrollSizeCache);\n\n _contentElementScrollSizeChangeDetectedCache = contentElementScrollSize;\n _viewportScrollSizeCache = viewportScrollSize;\n\n return changed || bodyMinSizeC || viewportScrollSizeChanged;\n }\n\n /**\n * Returns true when a attribute which the MutationObserver would observe has changed. \n * @returns {boolean} True if one of the attributes which a MutationObserver would observe has changed, false or undefined otherwise.\n */\n function meaningfulAttrsChanged() {\n if (_sleeping || _mutationObserversConnected)\n return;\n \n var changed;\n var elem;\n var curr;\n var cache;\n var checks = [\n {\n _elem: _hostElement, \n _props : _mutationObserverAttrsHost.concat(':visible')\n },\n {\n _elem: _isTextarea ? _targetElement : undefined, \n _props : _mutationObserverAttrsTextarea\n }\n ];\n \n each(checks, function(index, check) { \n elem = check._elem;\n if(elem) {\n each(check._props, function(index, prop) { \n curr = prop.charAt(0) === ':' ? elem.is(prop) : elem.attr(prop);\n cache = _updateAutoCache[prop];\n \n changed = changed || checkCache(curr, cache);\n \n _updateAutoCache[prop] = curr;\n });\n }\n });\n \n return changed;\n }\n\n /**\n * Checks is a CSS Property of a child element is affecting the scroll size of the content.\n * @param propertyName The CSS property name.\n * @returns {boolean} True if the property is affecting the content scroll size, false otherwise.\n */\n function isSizeAffectingCSSProperty(propertyName) {\n if (!_initialized)\n return true;\n var flexGrow = 'flex-grow';\n var flexShrink = 'flex-shrink';\n var flexBasis = 'flex-basis';\n var affectingPropsX = [\n _strWidth,\n _strMinMinus + _strWidth,\n _strMaxMinus + _strWidth,\n _strMarginMinus + _strLeft,\n _strMarginMinus + _strRight,\n _strLeft,\n _strRight,\n 'font-weight',\n 'word-spacing',\n flexGrow,\n flexShrink,\n flexBasis\n ];\n var affectingPropsXContentBox = [\n _strPaddingMinus + _strLeft,\n _strPaddingMinus + _strRight,\n _strBorderMinus + _strLeft + _strWidth,\n _strBorderMinus + _strRight + _strWidth\n ];\n var affectingPropsY = [\n _strHeight,\n _strMinMinus + _strHeight,\n _strMaxMinus + _strHeight,\n _strMarginMinus + _strTop,\n _strMarginMinus + _strBottom,\n _strTop,\n _strBottom,\n 'line-height',\n flexGrow,\n flexShrink,\n flexBasis\n ];\n var affectingPropsYContentBox = [\n _strPaddingMinus + _strTop,\n _strPaddingMinus + _strBottom,\n _strBorderMinus + _strTop + _strWidth,\n _strBorderMinus + _strBottom + _strWidth\n ];\n var _strS = 's';\n var _strVS = 'v-s';\n var checkX = _overflowBehaviorCache.x === _strS || _overflowBehaviorCache.x === _strVS;\n var checkY = _overflowBehaviorCache.y === _strS || _overflowBehaviorCache.y === _strVS;\n var sizeIsAffected = false;\n var checkPropertyName = function (arr, name) {\n for (var i = 0; i < arr[LEXICON.l]; i++) {\n if (arr[i] === name)\n return true;\n }\n return false;\n };\n\n if (checkY) {\n sizeIsAffected = checkPropertyName(affectingPropsY, propertyName);\n if (!sizeIsAffected && !_isBorderBox)\n sizeIsAffected = checkPropertyName(affectingPropsYContentBox, propertyName);\n }\n if (checkX && !sizeIsAffected) {\n sizeIsAffected = checkPropertyName(affectingPropsX, propertyName);\n if (!sizeIsAffected && !_isBorderBox)\n sizeIsAffected = checkPropertyName(affectingPropsXContentBox, propertyName);\n }\n return sizeIsAffected;\n }\n\n \n //==== Update ====//\n\n /**\n * Updates the variables and size of the textarea element, and manages the scroll on new line or new character.\n */\n function textareaUpdate() {\n if (!_sleeping) {\n var wrapAttrOff = !_textareaAutoWrappingCache;\n var minWidth = _viewportSize.w;\n var minHeight = _viewportSize.h;\n var css = { };\n var doMeasure = _widthAutoCache || wrapAttrOff;\n var origWidth;\n var width;\n var origHeight;\n var height;\n\n //reset min size\n css[_strMinMinus + _strWidth] = _strEmpty;\n css[_strMinMinus + _strHeight] = _strEmpty;\n\n //set width auto\n css[_strWidth] = _strAuto;\n _targetElement.css(css);\n\n //measure width\n origWidth = _targetElementNative[LEXICON.oW];\n width = doMeasure ? MATH.max(origWidth, _targetElementNative[LEXICON.sW] - 1) : 1;\n /*width += (_widthAutoCache ? _marginX + (!_isBorderBox ? wrapAttrOff ? 0 : _paddingX + _borderX : 0) : 0);*/\n\n //set measured width\n css[_strWidth] = _widthAutoCache ? _strAuto /*width*/ : _strHundredPercent;\n css[_strMinMinus + _strWidth] = _strHundredPercent;\n\n //set height auto\n css[_strHeight] = _strAuto;\n _targetElement.css(css);\n\n //measure height\n origHeight = _targetElementNative[LEXICON.oH];\n height = MATH.max(origHeight, _targetElementNative[LEXICON.sH] - 1);\n\n //append correct size values\n css[_strWidth] = width;\n css[_strHeight] = height;\n _textareaCoverElement.css(css);\n\n //apply min width / min height to prevent textarea collapsing\n css[_strMinMinus + _strWidth] = minWidth /*+ (!_isBorderBox && _widthAutoCache ? _paddingX + _borderX : 0)*/;\n css[_strMinMinus + _strHeight] = minHeight /*+ (!_isBorderBox && _heightAutoCache ? _paddingY + _borderY : 0)*/;\n _targetElement.css(css);\n\n return {\n _originalWidth: origWidth,\n _originalHeight: origHeight,\n _dynamicWidth: width,\n _dynamicHeight: height\n };\n }\n }\n\n /**\n * Updates the plugin and DOM to the current options.\n * This method should only be called if a update is 100% required.\n * @param updateHints A objects which contains hints for this update:\n * {\n * _hostSizeChanged : boolean,\n * _contentSizeChanged : boolean,\n * _force : boolean, == preventSwallowing\n * _changedOptions : { }, == preventSwallowing && preventSleep\n * }\n */\n function update(updateHints) {\n clearTimeout(_swallowedUpdateTimeout);\n updateHints = updateHints || { };\n _swallowedUpdateHints._hostSizeChanged |= updateHints._hostSizeChanged;\n _swallowedUpdateHints._contentSizeChanged |= updateHints._contentSizeChanged;\n _swallowedUpdateHints._force |= updateHints._force;\n \n var now = COMPATIBILITY.now();\n var hostSizeChanged = !!_swallowedUpdateHints._hostSizeChanged;\n var contentSizeChanged = !!_swallowedUpdateHints._contentSizeChanged;\n var force = !!_swallowedUpdateHints._force;\n var changedOptions = updateHints._changedOptions; \n var swallow = _swallowUpdateLag > 0 && _initialized && !_destroyed && !force && !changedOptions && (now - _lastUpdateTime) < _swallowUpdateLag && (!_heightAutoCache && !_widthAutoCache); \n var displayIsHidden;\n\n if(swallow)\n _swallowedUpdateTimeout = setTimeout(update, _swallowUpdateLag);\n\n //abort update due to:\n //destroyed\n //swallowing\n //sleeping\n //host is hidden or has false display\n if (_destroyed || swallow || (_sleeping && !changedOptions) || (_initialized && !force && (displayIsHidden = _hostElement.is(':hidden'))) || _hostElement.css('display') === 'inline')\n return;\n\n _lastUpdateTime = now;\n _swallowedUpdateHints = { };\n \n //if scrollbar styling is possible and native scrollbars aren't overlaid the scrollbar styling will be applied which hides the native scrollbars completely.\n if (_nativeScrollbarStyling && !(_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y)) {\n //native scrollbars are hidden, so change the values to zero\n _nativeScrollbarSize.x = 0;\n _nativeScrollbarSize.y = 0;\n }\n else {\n //refresh native scrollbar size (in case of zoom)\n _nativeScrollbarSize = extendDeep({}, globals.nativeScrollbarSize);\n }\n\n // Scrollbar padding is needed for firefox, because firefox hides scrollbar automatically if the size of the div is too small.\n // The calculation: [scrollbar size +3 *3]\n // (+3 because of possible decoration e.g. borders, margins etc., but only if native scrollbar is NOT a overlaid scrollbar)\n // (*3 because (1)increase / (2)decrease -button and (3)resize handle)\n _nativeScrollbarMinSize = {\n x: (_nativeScrollbarSize.x + (_nativeScrollbarIsOverlaid.x ? 0 : 3)) * 3,\n y: (_nativeScrollbarSize.y + (_nativeScrollbarIsOverlaid.y ? 0 : 3)) * 3\n };\n \n //changedOptions = changedOptions || { };\n //freezeResizeObserver(_sizeObserverElement, true);\n //freezeResizeObserver(_sizeAutoObserverElement, true);\n \n var checkCacheAutoForce = function () {\n return checkCache.apply(this, [].slice.call(arguments).concat([ force ]));\n };\n \n //save current scroll offset\n var currScroll = {\n x: _viewportElement[_strScrollLeft](),\n y: _viewportElement[_strScrollTop]()\n };\n\n var currentPreparedOptionsScrollbars = _currentPreparedOptions.scrollbars;\n var currentPreparedOptionsTextarea = _currentPreparedOptions.textarea;\n\n //scrollbars visibility:\n var scrollbarsVisibility = currentPreparedOptionsScrollbars.visibility;\n var scrollbarsVisibilityChanged = checkCacheAutoForce(scrollbarsVisibility, _scrollbarsVisibilityCache);\n\n //scrollbars autoHide:\n var scrollbarsAutoHide = currentPreparedOptionsScrollbars.autoHide;\n var scrollbarsAutoHideChanged = checkCacheAutoForce(scrollbarsAutoHide, _scrollbarsAutoHideCache);\n\n //scrollbars click scrolling\n var scrollbarsClickScrolling = currentPreparedOptionsScrollbars.clickScrolling;\n var scrollbarsClickScrollingChanged = checkCacheAutoForce(scrollbarsClickScrolling, _scrollbarsClickScrollingCache);\n\n //scrollbars drag scrolling\n var scrollbarsDragScrolling = currentPreparedOptionsScrollbars.dragScrolling;\n var scrollbarsDragScrollingChanged = checkCacheAutoForce(scrollbarsDragScrolling, _scrollbarsDragScrollingCache);\n\n //className\n var className = _currentPreparedOptions.className;\n var classNameChanged = checkCacheAutoForce(className, _classNameCache);\n\n //resize\n var resize = _currentPreparedOptions.resize;\n var resizeChanged = checkCacheAutoForce(resize, _resizeCache) && !_isBody; //body can't be resized since the window itself acts as resize possibility.\n\n //paddingAbsolute\n var paddingAbsolute = _currentPreparedOptions.paddingAbsolute;\n var paddingAbsoluteChanged = checkCacheAutoForce(paddingAbsolute, _paddingAbsoluteCache);\n\n //clipAlways\n var clipAlways = _currentPreparedOptions.clipAlways;\n var clipAlwaysChanged = checkCacheAutoForce(clipAlways, _clipAlwaysCache);\n\n //sizeAutoCapable\n var sizeAutoCapable = _currentPreparedOptions.sizeAutoCapable && !_isBody; //body can never be size auto, because it shall be always as big as the viewport.\n var sizeAutoCapableChanged = checkCacheAutoForce(sizeAutoCapable, _sizeAutoCapableCache);\n\n //showNativeScrollbars\n var ignoreOverlayScrollbarHiding = _currentPreparedOptions.nativeScrollbarsOverlaid.showNativeScrollbars;\n var ignoreOverlayScrollbarHidingChanged = checkCacheAutoForce(ignoreOverlayScrollbarHiding, _ignoreOverlayScrollbarHidingCache);\n\n //autoUpdate\n var autoUpdate = _currentPreparedOptions.autoUpdate;\n var autoUpdateChanged = checkCacheAutoForce(autoUpdate, _autoUpdateCache);\n\n //overflowBehavior\n var overflowBehavior = _currentPreparedOptions.overflowBehavior;\n var overflowBehaviorChanged = checkCacheAutoForce(overflowBehavior, _overflowBehaviorCache, force);\n\n //dynWidth:\n var textareaDynWidth = currentPreparedOptionsTextarea.dynWidth;\n var textareaDynWidthChanged = checkCacheAutoForce(_textareaDynWidthCache, textareaDynWidth);\n\n //dynHeight:\n var textareaDynHeight = currentPreparedOptionsTextarea.dynHeight;\n var textareaDynHeightChanged = checkCacheAutoForce(_textareaDynHeightCache, textareaDynHeight);\n\n //scrollbars visibility\n _scrollbarsAutoHideNever = scrollbarsAutoHide === 'n';\n _scrollbarsAutoHideScroll = scrollbarsAutoHide === 's';\n _scrollbarsAutoHideMove = scrollbarsAutoHide === 'm';\n _scrollbarsAutoHideLeave = scrollbarsAutoHide === 'l';\n\n //scrollbars autoHideDelay\n _scrollbarsAutoHideDelay = currentPreparedOptionsScrollbars.autoHideDelay;\n\n //old className\n _oldClassName = _classNameCache;\n\n //resize\n _resizeNone = resize === 'n';\n _resizeBoth = resize === 'b';\n _resizeHorizontal = resize === 'h';\n _resizeVertical = resize === 'v';\n\n //normalizeRTL\n _normalizeRTLCache = _currentPreparedOptions.normalizeRTL;\n\n //ignore overlay scrollbar hiding\n ignoreOverlayScrollbarHiding = ignoreOverlayScrollbarHiding && (_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y);\n\n //refresh options cache\n _scrollbarsVisibilityCache = scrollbarsVisibility;\n _scrollbarsAutoHideCache = scrollbarsAutoHide;\n _scrollbarsClickScrollingCache = scrollbarsClickScrolling;\n _scrollbarsDragScrollingCache = scrollbarsDragScrolling;\n _classNameCache = className;\n _resizeCache = resize;\n _paddingAbsoluteCache = paddingAbsolute;\n _clipAlwaysCache = clipAlways;\n _sizeAutoCapableCache = sizeAutoCapable;\n _ignoreOverlayScrollbarHidingCache = ignoreOverlayScrollbarHiding;\n _autoUpdateCache = autoUpdate;\n _overflowBehaviorCache = extendDeep({}, overflowBehavior);\n _textareaDynWidthCache = textareaDynWidth;\n _textareaDynHeightCache = textareaDynHeight;\n _hasOverflowCache = _hasOverflowCache || { x: false, y: false };\n\n //set correct class name to the host element\n if (classNameChanged) {\n removeClass(_hostElement, _oldClassName + _strSpace + _classNameThemeNone);\n addClass(_hostElement, className !== undefined && className !== null && className.length > 0 ? className : _classNameThemeNone);\n }\n\n //set correct auto Update\n if (autoUpdateChanged) {\n if (autoUpdate === true) {\n disconnectMutationObservers();\n autoUpdateLoop.add(_base);\n }\n else if (autoUpdate === null) {\n if (_autoUpdateRecommended) {\n disconnectMutationObservers();\n autoUpdateLoop.add(_base);\n }\n else {\n autoUpdateLoop.remove(_base);\n connectMutationObservers();\n }\n }\n else {\n autoUpdateLoop.remove(_base);\n connectMutationObservers();\n }\n }\n\n //activate or deactivate size auto capability\n if (sizeAutoCapableChanged) {\n if (sizeAutoCapable) {\n if (!_contentGlueElement) {\n _contentGlueElement = FRAMEWORK(generateDiv(_classNameContentGlueElement));\n _paddingElement.before(_contentGlueElement);\n }\n else {\n _contentGlueElement.show();\n }\n if (_sizeAutoObserverAdded) {\n _sizeAutoObserverElement.show();\n }\n else {\n _sizeAutoObserverElement = FRAMEWORK(generateDiv(_classNameSizeAutoObserverElement));\n _sizeAutoObserverElementNative = _sizeAutoObserverElement[0];\n\n _contentGlueElement.before(_sizeAutoObserverElement);\n var oldSize = {w: -1, h: -1};\n setupResizeObserver(_sizeAutoObserverElement, function () {\n var newSize = {\n w: _sizeAutoObserverElementNative[LEXICON.oW],\n h: _sizeAutoObserverElementNative[LEXICON.oH]\n };\n if (checkCache(newSize, oldSize)) {\n if (_initialized && (_heightAutoCache && newSize.h > 0) || (_widthAutoCache && newSize.w > 0)) {\n update();\n }\n else if (_initialized && (!_heightAutoCache && newSize.h === 0) || (!_widthAutoCache && newSize.w === 0)) {\n update();\n }\n }\n oldSize = newSize;\n });\n _sizeAutoObserverAdded = true;\n //fix heightAuto detector bug if height is fixed but contentHeight is 0.\n //the probability this bug will ever happen is very very low, thats why its ok if we use calc which isn't supported in IE8.\n if (_cssCalc !== null)\n _sizeAutoObserverElement.css(_strHeight, _cssCalc + '(100% + 1px)');\n }\n }\n else {\n if (_sizeAutoObserverAdded)\n _sizeAutoObserverElement.hide();\n if (_contentGlueElement)\n _contentGlueElement.hide();\n }\n }\n\n //if force, update all resizeObservers too\n if (force) {\n _sizeObserverElement.find('*').trigger(_strScroll);\n if (_sizeAutoObserverAdded)\n _sizeAutoObserverElement.find('*').trigger(_strScroll);\n }\n\n //display hidden:\n displayIsHidden = displayIsHidden === undefined ? _hostElement.is(':hidden') : displayIsHidden;\n var displayIsHiddenChanged = checkCacheAutoForce(displayIsHidden, _displayIsHiddenCache);\n\n //textarea AutoWrapping:\n var textareaAutoWrapping = _isTextarea ? _targetElement.attr('wrap') !== 'off' : false;\n var textareaAutoWrappingChanged = checkCacheAutoForce(textareaAutoWrapping, _textareaAutoWrappingCache);\n\n //detect direction:\n var cssDirection = _hostElement.css('direction');\n var cssDirectionChanged = checkCacheAutoForce(cssDirection, _cssDirectionCache);\n\n //detect box-sizing:\n var boxSizing = _hostElement.css('box-sizing');\n var boxSizingChanged = checkCacheAutoForce(boxSizing, _cssBoxSizingCache);\n\n //detect padding:\n var padding = {\n c: force,\n t: parseToZeroOrNumber(_hostElement.css(_strPaddingMinus + _strTop)),\n r: parseToZeroOrNumber(_hostElement.css(_strPaddingMinus + _strRight)),\n b: parseToZeroOrNumber(_hostElement.css(_strPaddingMinus + _strBottom)),\n l: parseToZeroOrNumber(_hostElement.css(_strPaddingMinus + _strLeft))\n };\n \n //width + height auto detecting var:\n var sizeAutoObserverElementBCRect;\n //exception occurs in IE8 sometimes (unknown exception)\n try {\n sizeAutoObserverElementBCRect = _sizeAutoObserverAdded ? _sizeAutoObserverElementNative.getBoundingClientRect() : null;\n } catch (ex) {\n return;\n }\n\n _isRTL = cssDirection === 'rtl';\n _isBorderBox = (boxSizing === 'border-box');\n var isRTLLeft = _isRTL ? _strLeft : _strRight;\n var isRTLRight = _isRTL ? _strRight : _strLeft;\n\n //detect width auto:\n var widthAutoResizeDetection = false;\n var widthAutoObserverDetection = (_sizeAutoObserverAdded && (_hostElement.css(_strFloat) !== 'none' /*|| _isTextarea */)) ? (MATH.round(sizeAutoObserverElementBCRect.right - sizeAutoObserverElementBCRect.left) === 0) && (!paddingAbsolute ? (_hostElementNative[LEXICON.cW] - _paddingX) > 0 : true) : false;\n if (sizeAutoCapable && !widthAutoObserverDetection) {\n var tmpCurrHostWidth = _hostElementNative[LEXICON.oW];\n var tmpCurrContentGlueWidth = _contentGlueElement.css(_strWidth);\n _contentGlueElement.css(_strWidth, _strAuto);\n\n var tmpNewHostWidth = _hostElementNative[LEXICON.oW];\n _contentGlueElement.css(_strWidth, tmpCurrContentGlueWidth);\n widthAutoResizeDetection = tmpCurrHostWidth !== tmpNewHostWidth;\n if (!widthAutoResizeDetection) {\n _contentGlueElement.css(_strWidth, tmpCurrHostWidth + 1);\n tmpNewHostWidth = _hostElementNative[LEXICON.oW];\n _contentGlueElement.css(_strWidth, tmpCurrContentGlueWidth);\n widthAutoResizeDetection = tmpCurrHostWidth !== tmpNewHostWidth;\n }\n }\n var widthAuto = (widthAutoObserverDetection || widthAutoResizeDetection) && sizeAutoCapable && !displayIsHidden;\n var widthAutoChanged = checkCacheAutoForce(widthAuto, _widthAutoCache);\n var wasWidthAuto = !widthAuto && _widthAutoCache;\n\n //detect height auto:\n var heightAuto = _sizeAutoObserverAdded && sizeAutoCapable && !displayIsHidden ? (MATH.round(sizeAutoObserverElementBCRect.bottom - sizeAutoObserverElementBCRect.top) === 0) /* && (!paddingAbsolute && (_msieVersion > 9 || !_msieVersion) ? true : true) */ : false;\n var heightAutoChanged = checkCacheAutoForce(heightAuto, _heightAutoCache);\n var wasHeightAuto = !heightAuto && _heightAutoCache;\n\n //detect border:\n //we need the border only if border box and auto size\n var strMinusWidth = '-' + _strWidth;\n var updateBorderX = (widthAuto && _isBorderBox) || !_isBorderBox;\n var updateBorderY = (heightAuto && _isBorderBox) || !_isBorderBox;\n var border = {\n c: force,\n t: updateBorderY ? parseToZeroOrNumber(_hostElement.css(_strBorderMinus + _strTop + strMinusWidth), true) : 0,\n r: updateBorderX ? parseToZeroOrNumber(_hostElement.css(_strBorderMinus + _strRight + strMinusWidth), true) : 0,\n b: updateBorderY ? parseToZeroOrNumber(_hostElement.css(_strBorderMinus + _strBottom + strMinusWidth), true) : 0,\n l: updateBorderX ? parseToZeroOrNumber(_hostElement.css(_strBorderMinus + _strLeft + strMinusWidth), true) : 0\n };\n\n //detect margin:\n var margin = {\n c: force,\n t: parseToZeroOrNumber(_hostElement.css(_strMarginMinus + _strTop)),\n r: parseToZeroOrNumber(_hostElement.css(_strMarginMinus + _strRight)),\n b: parseToZeroOrNumber(_hostElement.css(_strMarginMinus + _strBottom)),\n l: parseToZeroOrNumber(_hostElement.css(_strMarginMinus + _strLeft))\n };\n\n //detect css max width & height:\n var cssMaxValue = {\n h: String(_hostElement.css(_strMaxMinus + _strHeight)),\n w: String(_hostElement.css(_strMaxMinus + _strWidth))\n };\n\n //vars to apply correct css\n var contentElementCSS = { };\n var contentGlueElementCSS = { };\n\n //funcs\n var getHostSize = function() {\n //has to be clientSize because offsetSize respect borders\n return {\n w: _hostElementNative[LEXICON.cW],\n h: _hostElementNative[LEXICON.cH]\n };\n };\n var getViewportSize = function() {\n //viewport size is padding container because it never has padding, margin and a border\n //determine zoom rounding error -> sometimes scrollWidth/Height is smaller than clientWidth/Height\n //if this happens add the difference to the viewportSize to compensate the rounding error\n return {\n w: _paddingElementNative[LEXICON.oW] + MATH.max(0, _contentElementNative[LEXICON.cW] - _contentElementNative[LEXICON.sW]),\n h: _paddingElementNative[LEXICON.oH] + MATH.max(0, _contentElementNative[LEXICON.cH] - _contentElementNative[LEXICON.sH])\n };\n };\n\n //set info for padding\n var paddingAbsoluteX = _paddingX = padding.l + padding.r;\n var paddingAbsoluteY = _paddingY = padding.t + padding.b;\n paddingAbsoluteX *= paddingAbsolute ? 1 : 0;\n paddingAbsoluteY *= paddingAbsolute ? 1 : 0;\n padding.c = checkCacheAutoForce(padding, _cssPaddingCache);\n\n //set info for border\n _borderX = border.l + border.r;\n _borderY = border.t + border.b;\n border.c = checkCacheAutoForce(border, _cssBorderCache);\n\n //set info for margin\n _marginX = margin.l + margin.r;\n _marginY = margin.t + margin.b;\n margin.c = checkCacheAutoForce(margin, _cssMarginCache);\n\n //set info for css max value\n cssMaxValue.ih = parseToZeroOrNumber(cssMaxValue.h); //ih = integer height\n cssMaxValue.iw = parseToZeroOrNumber(cssMaxValue.w); //iw = integer width\n cssMaxValue.ch = cssMaxValue.h.indexOf('px') > -1; //ch = correct height\n cssMaxValue.cw = cssMaxValue.w.indexOf('px') > -1; //cw = correct width\n cssMaxValue.c = checkCacheAutoForce(cssMaxValue, _cssMaxValueCache);\n\n //refresh cache\n _displayIsHiddenCache = displayIsHidden;\n _textareaAutoWrappingCache = textareaAutoWrapping;\n _cssDirectionCache = cssDirection;\n _cssBoxSizingCache = boxSizing;\n _widthAutoCache = widthAuto;\n _heightAutoCache = heightAuto;\n _cssPaddingCache = padding;\n _cssBorderCache = border;\n _cssMarginCache = margin;\n _cssMaxValueCache = cssMaxValue;\n \n //IEFix direction changed\n if (cssDirectionChanged && _sizeAutoObserverAdded)\n _sizeAutoObserverElement.css(_strFloat, isRTLRight);\n\n //apply padding:\n if (padding.c || cssDirectionChanged || paddingAbsoluteChanged || widthAutoChanged || heightAutoChanged || boxSizingChanged || sizeAutoCapableChanged) {\n var paddingElementCSS = {};\n var textareaCSS = {};\n setTopRightBottomLeft(contentGlueElementCSS, _strMarginMinus, [-padding.t, -padding.r, -padding.b, -padding.l]);\n if (paddingAbsolute) {\n setTopRightBottomLeft(paddingElementCSS, _strEmpty, [padding.t, padding.r, padding.b, padding.l]);\n if (_isTextarea)\n setTopRightBottomLeft(textareaCSS, _strPaddingMinus);\n else\n setTopRightBottomLeft(contentElementCSS, _strPaddingMinus);\n }\n else {\n setTopRightBottomLeft(paddingElementCSS, _strEmpty);\n if (_isTextarea)\n setTopRightBottomLeft(textareaCSS, _strPaddingMinus, [padding.t, padding.r, padding.b, padding.l]);\n else\n setTopRightBottomLeft(contentElementCSS, _strPaddingMinus, [padding.t, padding.r, padding.b, padding.l]);\n }\n _paddingElement.css(paddingElementCSS);\n _targetElement.css(textareaCSS);\n }\n\n //viewport size is padding container because it never has padding, margin and a border.\n _viewportSize = getViewportSize();\n\n //update Textarea\n var textareaSize = _isTextarea ? textareaUpdate() : false;\n var textareaSizeChanged = _isTextarea && checkCacheAutoForce(textareaSize, _textareaSizeCache);\n var textareaDynOrigSize = _isTextarea && textareaSize ? {\n w : textareaDynWidth ? textareaSize._dynamicWidth : textareaSize._originalWidth,\n h : textareaDynHeight ? textareaSize._dynamicHeight : textareaSize._originalHeight\n } : { };\n _textareaSizeCache = textareaSize;\n\n //fix height auto / width auto in cooperation with current padding & boxSizing behavior:\n if (heightAuto && (heightAutoChanged || paddingAbsoluteChanged || boxSizingChanged || cssMaxValue.c || padding.c || border.c)) {\n /*\n if (cssMaxValue.ch)\n contentElementCSS[_strMaxMinus + _strHeight] =\n (cssMaxValue.ch ? (cssMaxValue.ih - paddingAbsoluteY + (_isBorderBox ? -_borderY : _paddingY))\n : _strEmpty);\n */\n contentElementCSS[_strHeight] = _strAuto;\n }\n else if (heightAutoChanged || paddingAbsoluteChanged) {\n contentElementCSS[_strMaxMinus + _strHeight] = _strEmpty;\n contentElementCSS[_strHeight] = _strHundredPercent;\n }\n if (widthAuto && (widthAutoChanged || paddingAbsoluteChanged || boxSizingChanged || cssMaxValue.c || padding.c || border.c || cssDirectionChanged)) {\n /*\n if (cssMaxValue.cw)\n contentElementCSS[_strMaxMinus + _strWidth] =\n (cssMaxValue.cw ? (cssMaxValue.iw - paddingAbsoluteX + (_isBorderBox ? -_borderX : _paddingX)) +\n (_nativeScrollbarIsOverlaid.y ? _overlayScrollbarDummySize.y : 0)\n : _strEmpty);\n */\n contentElementCSS[_strWidth] = _strAuto;\n contentGlueElementCSS[_strMaxMinus + _strWidth] = _strHundredPercent; //IE Fix\n }\n else if (widthAutoChanged || paddingAbsoluteChanged) {\n contentElementCSS[_strMaxMinus + _strWidth] = _strEmpty;\n contentElementCSS[_strWidth] = _strHundredPercent;\n contentElementCSS[_strFloat] = _strEmpty;\n contentGlueElementCSS[_strMaxMinus + _strWidth] = _strEmpty; //IE Fix\n }\n if (widthAuto) {\n if (!cssMaxValue.cw)\n contentElementCSS[_strMaxMinus + _strWidth] = _strEmpty;\n //textareaDynOrigSize.w || _strAuto :: doesnt works because applied margin will shift width\n contentGlueElementCSS[_strWidth] = _strAuto;\n\n contentElementCSS[_strWidth] = _strAuto;\n contentElementCSS[_strFloat] = isRTLRight;\n }\n else {\n contentGlueElementCSS[_strWidth] = _strEmpty;\n }\n if (heightAuto) {\n if (!cssMaxValue.ch)\n contentElementCSS[_strMaxMinus + _strHeight] = _strEmpty;\n //textareaDynOrigSize.h || _contentElementNative[LEXICON.cH] :: use for anti scroll jumping\n contentGlueElementCSS[_strHeight] = textareaDynOrigSize.h || _contentElementNative[LEXICON.cH];\n }\n else {\n contentGlueElementCSS[_strHeight] = _strEmpty;\n }\n if (sizeAutoCapable)\n _contentGlueElement.css(contentGlueElementCSS);\n _contentElement.css(contentElementCSS);\n\n //CHECKPOINT HERE ~\n contentElementCSS = {};\n contentGlueElementCSS = {};\n\n //if [content(host) client / scroll size, or target element direction, or content(host) max-sizes] changed, or force is true\n if (hostSizeChanged || contentSizeChanged || textareaSizeChanged || cssDirectionChanged || boxSizingChanged || paddingAbsoluteChanged || widthAutoChanged || widthAuto || heightAutoChanged || heightAuto || cssMaxValue.c || ignoreOverlayScrollbarHidingChanged || overflowBehaviorChanged || clipAlwaysChanged || resizeChanged || scrollbarsVisibilityChanged || scrollbarsAutoHideChanged || scrollbarsDragScrollingChanged || scrollbarsClickScrollingChanged || textareaDynWidthChanged || textareaDynHeightChanged || textareaAutoWrappingChanged) {\n var strOverflow = 'overflow';\n var strOverflowX = strOverflow + '-x';\n var strOverflowY = strOverflow + '-y';\n var strHidden = 'hidden';\n var strVisible = 'visible';\n //decide whether the content overflow must get hidden for correct overflow measuring, it !MUST! be always hidden if the height is auto\n var hideOverflow4CorrectMeasuring = _restrictedMeasuring ?\n (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y) || //it must be hidden if native scrollbars are overlaid\n (_viewportSize.w < _nativeScrollbarMinSize.y || _viewportSize.h < _nativeScrollbarMinSize.x) || //it must be hidden if host-element is too small\n heightAuto || displayIsHiddenChanged //it must be hidden if height is auto or display was changed\n : heightAuto; //if there is not the restricted Measuring bug, it must be hidden if the height is auto\n\n //Reset the viewport (very important for natively overlaid scrollbars and zoom change\n //don't change the overflow prop as it is very expensive and affects performance !A LOT!\n var viewportElementResetCSS = { };\n var resetXTmp = _hasOverflowCache.y && _hideOverflowCache.ys && !ignoreOverlayScrollbarHiding && !_nativeScrollbarStyling ? (_nativeScrollbarIsOverlaid.y ? _viewportElement.css(isRTLLeft) : -_nativeScrollbarSize.y) : 0;\n var resetBottomTmp = _hasOverflowCache.x && _hideOverflowCache.xs && !ignoreOverlayScrollbarHiding && !_nativeScrollbarStyling ? (_nativeScrollbarIsOverlaid.x ? _viewportElement.css(_strBottom) : -_nativeScrollbarSize.x) : 0;\n setTopRightBottomLeft(viewportElementResetCSS, _strEmpty);\n _viewportElement.css(viewportElementResetCSS);\n if(hideOverflow4CorrectMeasuring)\n _contentElement.css(strOverflow, strHidden);\n\n //measure several sizes:\n var contentMeasureElement = getContentMeasureElement();\n //in Firefox content element has to have overflow hidden, else element margins aren't calculated properly, this element prevents this bug, but only if scrollbars aren't overlaid\n var contentMeasureElementGuaranty = _restrictedMeasuring && !hideOverflow4CorrectMeasuring ? _viewportElementNative : contentMeasureElement;\n var contentSize = {\n //use clientSize because natively overlaidScrollbars add borders\n w: textareaDynOrigSize.w || contentMeasureElement[LEXICON.cW],\n h: textareaDynOrigSize.h || contentMeasureElement[LEXICON.cH]\n };\n var scrollSize = {\n w: MATH.max(contentMeasureElement[LEXICON.sW], contentMeasureElementGuaranty[LEXICON.sW]),\n h: MATH.max(contentMeasureElement[LEXICON.sH], contentMeasureElementGuaranty[LEXICON.sH])\n };\n\n //apply the correct viewport style and measure viewport size\n viewportElementResetCSS[_strBottom] = wasHeightAuto ? _strEmpty : resetBottomTmp;\n viewportElementResetCSS[isRTLLeft] = wasWidthAuto ? _strEmpty : resetXTmp;\n _viewportElement.css(viewportElementResetCSS);\n _viewportSize = getViewportSize();\n\n //measure and correct several sizes\n var hostSize = getHostSize();\n var contentGlueSize = {\n //client/scrollSize + AbsolutePadding -> because padding is only applied to the paddingElement if its absolute, so you have to add it manually\n //hostSize is clientSize -> so padding should be added manually, right? FALSE! Because content glue is inside hostElement, so we don't have to worry about padding\n w: MATH.max((widthAuto ? contentSize.w : scrollSize.w) + paddingAbsoluteX, hostSize.w),\n h: MATH.max((heightAuto ? contentSize.h : scrollSize.h) + paddingAbsoluteY, hostSize.h)\n };\n contentGlueSize.c = checkCacheAutoForce(contentGlueSize, _contentGlueSizeCache);\n _contentGlueSizeCache = contentGlueSize;\n\n //apply correct contentGlue size\n if (sizeAutoCapable) {\n //size contentGlue correctly to make sure the element has correct size if the sizing switches to auto\n if (contentGlueSize.c || (heightAuto || widthAuto)) {\n contentGlueElementCSS[_strWidth] = contentGlueSize.w;\n contentGlueElementCSS[_strHeight] = contentGlueSize.h;\n\n //textarea-sizes are already calculated correctly at this point\n if(!_isTextarea) {\n contentSize = {\n //use clientSize because natively overlaidScrollbars add borders\n w: contentMeasureElement[LEXICON.cW],\n h: contentMeasureElement[LEXICON.cH]\n };\n }\n }\n var textareaCoverCSS = {};\n var setContentGlueElementCSSfunction = function(horizontal) {\n var scrollbarVars = getScrollbarVars(horizontal);\n var wh = scrollbarVars._w_h;\n var strWH = scrollbarVars._width_height;\n var autoSize = horizontal ? widthAuto : heightAuto;\n var borderSize = horizontal ? _borderX : _borderY;\n var paddingSize = horizontal ? _paddingX : _paddingY;\n var marginSize = horizontal ? _marginX : _marginY;\n var maxSize = contentGlueElementCSS[strWH] + (_isBorderBox ? borderSize : -paddingSize);\n\n //make contentGlue size -1 if element is not auto sized, to make sure that a resize event happens when the element shrinks\n if (!autoSize || (!autoSize && border.c))\n contentGlueElementCSS[strWH] = hostSize[wh] - (_isBorderBox ? 0 : paddingSize + borderSize) - 1 - marginSize;\n\n //if size is auto and host is same size as max size, make content glue size +1 to make sure size changes will be detected\n if (autoSize && cssMaxValue['c' + wh] && cssMaxValue['i' + wh] === maxSize)\n contentGlueElementCSS[strWH] = maxSize + (_isBorderBox ? 0 : paddingSize) + 1;\n\n //if size is auto and host is smaller than size as min size, make content glue size -1 to make sure size changes will be detected (this is only needed if padding is 0)\n if (autoSize && (contentSize[wh] < _viewportSize[wh]) && (horizontal && _isTextarea ? !textareaAutoWrapping : true)) {\n if (_isTextarea)\n textareaCoverCSS[strWH] = parseToZeroOrNumber(_textareaCoverElement.css(strWH)) - 1;\n contentGlueElementCSS[strWH] -= 1;\n }\n\n //make sure content glue size is at least 1\n if (contentSize[wh] > 0)\n contentGlueElementCSS[strWH] = MATH.max(1, contentGlueElementCSS[strWH]);\n };\n setContentGlueElementCSSfunction(true);\n setContentGlueElementCSSfunction(false);\n\n if (_isTextarea)\n _textareaCoverElement.css(textareaCoverCSS);\n _contentGlueElement.css(contentGlueElementCSS);\n }\n if (widthAuto)\n contentElementCSS[_strWidth] = _strHundredPercent;\n if (widthAuto && !_isBorderBox && !_mutationObserversConnected)\n contentElementCSS[_strFloat] = 'none';\n\n //apply and reset content style\n _contentElement.css(contentElementCSS);\n contentElementCSS = {};\n\n //measure again, but this time all correct sizes:\n var contentScrollSize = {\n w: MATH.max(contentMeasureElement[LEXICON.sW], contentMeasureElementGuaranty[LEXICON.sW]),\n h: MATH.max(contentMeasureElement[LEXICON.sH], contentMeasureElementGuaranty[LEXICON.sH])\n };\n contentScrollSize.c = contentSizeChanged = checkCacheAutoForce(contentScrollSize, _contentScrollSizeCache);\n _contentScrollSizeCache = contentScrollSize;\n\n //remove overflow hidden to restore overflow\n if(hideOverflow4CorrectMeasuring)\n _contentElement.css(strOverflow, _strEmpty);\n \n //refresh viewport size after correct measuring\n _viewportSize = getViewportSize();\n\n hostSize = getHostSize();\n hostSizeChanged = checkCacheAutoForce(hostSize, _hostSizeCache);\n _hostSizeCache = hostSize;\n\n var hideOverflowForceTextarea = _isTextarea && (_viewportSize.w === 0 || _viewportSize.h === 0);\n var previousOverflow = _overflowAmountCache;\n var overflowBehaviorIsVS = { };\n var overflowBehaviorIsVH = { };\n var overflowBehaviorIsS = { };\n var overflowAmount = { };\n var hasOverflow = { };\n var hideOverflow = { };\n var canScroll = { };\n var viewportRect = _paddingElementNative.getBoundingClientRect();\n var setOverflowVariables = function(horizontal) {\n var scrollbarVars = getScrollbarVars(horizontal);\n var scrollbarVarsInverted = getScrollbarVars(!horizontal);\n var xyI = scrollbarVarsInverted._x_y;\n var xy = scrollbarVars._x_y;\n var wh = scrollbarVars._w_h;\n var widthHeight = scrollbarVars._width_height;\n var scrollMax = _strScroll + scrollbarVars._Left_Top + 'Max';\n var fractionalOverflowAmount = viewportRect[widthHeight] ? MATH.abs(viewportRect[widthHeight] - _viewportSize[wh]) : 0;\n overflowBehaviorIsVS[xy] = overflowBehavior[xy] === 'v-s';\n overflowBehaviorIsVH[xy] = overflowBehavior[xy] === 'v-h';\n overflowBehaviorIsS[xy] = overflowBehavior[xy] === 's';\n overflowAmount[xy] = MATH.max(0, MATH.round((contentScrollSize[wh] - _viewportSize[wh]) * 100) / 100);\n overflowAmount[xy] *= (hideOverflowForceTextarea || (_viewportElementNative[scrollMax] === 0 && fractionalOverflowAmount > 0 && fractionalOverflowAmount < 1)) ? 0 : 1;\n hasOverflow[xy] = overflowAmount[xy] > 0;\n\n //hideOverflow:\n //x || y : true === overflow is hidden by \"overflow: scroll\" OR \"overflow: hidden\"\n //xs || ys : true === overflow is hidden by \"overflow: scroll\"\n hideOverflow[xy] = overflowBehaviorIsVS[xy] || overflowBehaviorIsVH[xy] ? (hasOverflow[xyI] && !overflowBehaviorIsVS[xyI] && !overflowBehaviorIsVH[xyI]) : hasOverflow[xy];\n hideOverflow[xy + 's'] = hideOverflow[xy] ? (overflowBehaviorIsS[xy] || overflowBehaviorIsVS[xy]) : false;\n\n canScroll[xy] = hasOverflow[xy] && hideOverflow[xy + 's'];\n };\n setOverflowVariables(true);\n setOverflowVariables(false);\n\n overflowAmount.c = checkCacheAutoForce(overflowAmount, _overflowAmountCache);\n _overflowAmountCache = overflowAmount;\n hasOverflow.c = checkCacheAutoForce(hasOverflow, _hasOverflowCache);\n _hasOverflowCache = hasOverflow;\n hideOverflow.c = checkCacheAutoForce(hideOverflow, _hideOverflowCache);\n _hideOverflowCache = hideOverflow;\n\n //if native scrollbar is overlay at x OR y axis, prepare DOM\n if (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y) {\n var borderDesign = 'px solid transparent';\n var contentArrangeElementCSS = { };\n var arrangeContent = { };\n var arrangeChanged = force;\n var setContentElementCSS;\n\n if (hasOverflow.x || hasOverflow.y) {\n arrangeContent.w = _nativeScrollbarIsOverlaid.y && hasOverflow.y ? contentScrollSize.w + _overlayScrollbarDummySize.y : _strEmpty;\n arrangeContent.h = _nativeScrollbarIsOverlaid.x && hasOverflow.x ? contentScrollSize.h + _overlayScrollbarDummySize.x : _strEmpty;\n arrangeChanged = checkCacheAutoForce(arrangeContent, _arrangeContentSizeCache);\n _arrangeContentSizeCache = arrangeContent;\n }\n\n if (hasOverflow.c || hideOverflow.c || contentScrollSize.c || cssDirectionChanged || widthAutoChanged || heightAutoChanged || widthAuto || heightAuto || ignoreOverlayScrollbarHidingChanged) {\n contentElementCSS[_strMarginMinus + isRTLRight] = contentElementCSS[_strBorderMinus + isRTLRight] = _strEmpty;\n setContentElementCSS = function(horizontal) {\n var scrollbarVars = getScrollbarVars(horizontal);\n var scrollbarVarsInverted = getScrollbarVars(!horizontal);\n var xy = scrollbarVars._x_y;\n var strDirection = horizontal ? _strBottom : isRTLLeft;\n var invertedAutoSize = horizontal ? heightAuto : widthAuto;\n\n if (_nativeScrollbarIsOverlaid[xy] && hasOverflow[xy] && hideOverflow[xy + 's']) {\n contentElementCSS[_strMarginMinus + strDirection] = invertedAutoSize ? (ignoreOverlayScrollbarHiding ? _strEmpty : _overlayScrollbarDummySize[xy]) : _strEmpty;\n contentElementCSS[_strBorderMinus + strDirection] = ((horizontal ? !invertedAutoSize : true) && !ignoreOverlayScrollbarHiding) ? (_overlayScrollbarDummySize[xy] + borderDesign) : _strEmpty;\n }\n else {\n arrangeContent[scrollbarVarsInverted._w_h] =\n contentElementCSS[_strMarginMinus + strDirection] =\n contentElementCSS[_strBorderMinus + strDirection] = _strEmpty;\n arrangeChanged = true;\n }\n };\n\n if (_nativeScrollbarStyling) {\n if (ignoreOverlayScrollbarHiding) \n removeClass(_viewportElement, _classNameViewportNativeScrollbarsInvisible);\n else\n addClass(_viewportElement, _classNameViewportNativeScrollbarsInvisible);\n }\n else {\n setContentElementCSS(true);\n setContentElementCSS(false);\n }\n }\n if (ignoreOverlayScrollbarHiding) {\n arrangeContent.w = arrangeContent.h = _strEmpty;\n arrangeChanged = true;\n }\n if (arrangeChanged && !_nativeScrollbarStyling) {\n contentArrangeElementCSS[_strWidth] = hideOverflow.y ? arrangeContent.w : _strEmpty;\n contentArrangeElementCSS[_strHeight] = hideOverflow.x ? arrangeContent.h : _strEmpty;\n\n if (!_contentArrangeElement) {\n _contentArrangeElement = FRAMEWORK(generateDiv(_classNameContentArrangeElement));\n _viewportElement.prepend(_contentArrangeElement);\n }\n _contentArrangeElement.css(contentArrangeElementCSS);\n }\n _contentElement.css(contentElementCSS);\n }\n\n var viewportElementCSS = {};\n var paddingElementCSS = {};\n var setViewportCSS;\n if (hostSizeChanged || hasOverflow.c || hideOverflow.c || contentScrollSize.c || overflowBehaviorChanged || boxSizingChanged || ignoreOverlayScrollbarHidingChanged || cssDirectionChanged || clipAlwaysChanged || heightAutoChanged) {\n viewportElementCSS[isRTLRight] = _strEmpty;\n setViewportCSS = function(horizontal) {\n var scrollbarVars = getScrollbarVars(horizontal);\n var scrollbarVarsInverted = getScrollbarVars(!horizontal);\n var xy = scrollbarVars._x_y;\n var XY = scrollbarVars._X_Y;\n var strDirection = horizontal ? _strBottom : isRTLLeft;\n\n var reset = function () {\n viewportElementCSS[strDirection] = _strEmpty;\n _contentBorderSize[scrollbarVarsInverted._w_h] = 0;\n };\n if (hasOverflow[xy] && hideOverflow[xy + 's']) {\n viewportElementCSS[strOverflow + XY] = _strScroll;\n if (ignoreOverlayScrollbarHiding || _nativeScrollbarStyling) {\n reset();\n }\n else {\n viewportElementCSS[strDirection] = -(_nativeScrollbarIsOverlaid[xy] ? _overlayScrollbarDummySize[xy] : _nativeScrollbarSize[xy]);\n _contentBorderSize[scrollbarVarsInverted._w_h] = _nativeScrollbarIsOverlaid[xy] ? _overlayScrollbarDummySize[scrollbarVarsInverted._x_y] : 0;\n }\n } else {\n viewportElementCSS[strOverflow + XY] = _strEmpty;\n reset();\n }\n };\n setViewportCSS(true);\n setViewportCSS(false);\n \n // if the scroll container is too small and if there is any overflow with no overlay scrollbar (and scrollbar styling isn't possible), \n // make viewport element greater in size (Firefox hide Scrollbars fix)\n // because firefox starts hiding scrollbars on too small elements\n // with this behavior the overflow calculation may be incorrect or the scrollbars would appear suddenly\n // https://bugzilla.mozilla.org/show_bug.cgi?id=292284\n if (!_nativeScrollbarStyling \n && (_viewportSize.h < _nativeScrollbarMinSize.x || _viewportSize.w < _nativeScrollbarMinSize.y)\n && ((hasOverflow.x && hideOverflow.x && !_nativeScrollbarIsOverlaid.x) || (hasOverflow.y && hideOverflow.y && !_nativeScrollbarIsOverlaid.y))) {\n viewportElementCSS[_strPaddingMinus + _strTop] = _nativeScrollbarMinSize.x;\n viewportElementCSS[_strMarginMinus + _strTop] = -_nativeScrollbarMinSize.x;\n\n viewportElementCSS[_strPaddingMinus + isRTLRight] = _nativeScrollbarMinSize.y;\n viewportElementCSS[_strMarginMinus + isRTLRight] = -_nativeScrollbarMinSize.y;\n }\n else {\n viewportElementCSS[_strPaddingMinus + _strTop] =\n viewportElementCSS[_strMarginMinus + _strTop] =\n viewportElementCSS[_strPaddingMinus + isRTLRight] =\n viewportElementCSS[_strMarginMinus + isRTLRight] = _strEmpty;\n }\n viewportElementCSS[_strPaddingMinus + isRTLLeft] =\n viewportElementCSS[_strMarginMinus + isRTLLeft] = _strEmpty;\n\n //if there is any overflow (x OR y axis) and this overflow shall be hidden, make overflow hidden, else overflow visible\n if ((hasOverflow.x && hideOverflow.x) || (hasOverflow.y && hideOverflow.y) || hideOverflowForceTextarea) {\n //only hide if is Textarea\n if (_isTextarea && hideOverflowForceTextarea) {\n paddingElementCSS[strOverflowX] =\n paddingElementCSS[strOverflowY] = strHidden;\n }\n }\n else {\n if (!clipAlways || (overflowBehaviorIsVH.x || overflowBehaviorIsVS.x || overflowBehaviorIsVH.y || overflowBehaviorIsVS.y)) {\n //only un-hide if Textarea\n if (_isTextarea) {\n paddingElementCSS[strOverflowX] =\n paddingElementCSS[strOverflowY] = _strEmpty;\n }\n viewportElementCSS[strOverflowX] =\n viewportElementCSS[strOverflowY] = strVisible;\n }\n }\n\n _paddingElement.css(paddingElementCSS);\n _viewportElement.css(viewportElementCSS);\n viewportElementCSS = { };\n\n //force soft redraw in webkit because without the scrollbars will may appear because DOM wont be redrawn under special conditions\n if ((hasOverflow.c || boxSizingChanged || widthAutoChanged || heightAutoChanged) && !(_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y)) {\n var elementStyle = _contentElementNative[LEXICON.s];\n var dump;\n elementStyle.webkitTransform = 'scale(1)';\n elementStyle.display = 'run-in';\n dump = _contentElementNative[LEXICON.oH];\n elementStyle.display = _strEmpty; //|| dump; //use dump to prevent it from deletion if minify\n elementStyle.webkitTransform = _strEmpty;\n }\n /*\n //force hard redraw in webkit if native overlaid scrollbars shall appear\n if (ignoreOverlayScrollbarHidingChanged && ignoreOverlayScrollbarHiding) {\n _hostElement.hide();\n var dump = _hostElementNative[LEXICON.oH];\n _hostElement.show();\n }\n */\n }\n\n //change to direction RTL and width auto Bugfix in Webkit\n //without this fix, the DOM still thinks the scrollbar is LTR and thus the content is shifted to the left\n contentElementCSS = {};\n if (cssDirectionChanged || widthAutoChanged || heightAutoChanged) {\n if (_isRTL && widthAuto) {\n var floatTmp = _contentElement.css(_strFloat);\n var posLeftWithoutFloat = MATH.round(_contentElement.css(_strFloat, _strEmpty).css(_strLeft, _strEmpty).position().left);\n _contentElement.css(_strFloat, floatTmp);\n var posLeftWithFloat = MATH.round(_contentElement.position().left);\n\n if (posLeftWithoutFloat !== posLeftWithFloat)\n contentElementCSS[_strLeft] = posLeftWithoutFloat;\n }\n else {\n contentElementCSS[_strLeft] = _strEmpty;\n }\n }\n _contentElement.css(contentElementCSS);\n\n //handle scroll position\n if (_isTextarea && contentSizeChanged) {\n var textareaInfo = getTextareaInfo();\n if (textareaInfo) {\n var textareaRowsChanged = _textareaInfoCache === undefined ? true : textareaInfo._rows !== _textareaInfoCache._rows;\n var cursorRow = textareaInfo._cursorRow;\n var cursorCol = textareaInfo._cursorColumn;\n var widestRow = textareaInfo._widestRow;\n var lastRow = textareaInfo._rows;\n var lastCol = textareaInfo._columns;\n var cursorPos = textareaInfo._cursorPosition;\n var cursorMax = textareaInfo._cursorMax;\n var cursorIsLastPosition = (cursorPos >= cursorMax && _textareaHasFocus);\n var textareaScrollAmount = {\n x: (!textareaAutoWrapping && (cursorCol === lastCol && cursorRow === widestRow)) ? _overflowAmountCache.x : -1,\n y: (textareaAutoWrapping ? cursorIsLastPosition || textareaRowsChanged && (previousOverflow !== undefined ? (currScroll.y === previousOverflow.y) : false) : (cursorIsLastPosition || textareaRowsChanged) && cursorRow === lastRow) ? _overflowAmountCache.y : -1\n };\n currScroll.x = textareaScrollAmount.x > -1 ? (_isRTL && _normalizeRTLCache && _rtlScrollBehavior.i ? 0 : textareaScrollAmount.x) : currScroll.x; //if inverted, scroll to 0 -> normalized this means to max scroll offset.\n currScroll.y = textareaScrollAmount.y > -1 ? textareaScrollAmount.y : currScroll.y;\n }\n _textareaInfoCache = textareaInfo;\n }\n if (_isRTL && _rtlScrollBehavior.i && _nativeScrollbarIsOverlaid.y && hasOverflow.x && _normalizeRTLCache)\n currScroll.x += _contentBorderSize.w || 0;\n if(widthAuto)\n _hostElement[_strScrollLeft](0);\n if(heightAuto)\n _hostElement[_strScrollTop](0);\n _viewportElement[_strScrollLeft](currScroll.x)[_strScrollTop](currScroll.y);\n\n //scrollbars management:\n var scrollbarsVisibilityVisible = scrollbarsVisibility === 'v';\n var scrollbarsVisibilityHidden = scrollbarsVisibility === 'h';\n var scrollbarsVisibilityAuto = scrollbarsVisibility === 'a';\n\n var showScrollbarH = COMPATIBILITY.bind(refreshScrollbarAppearance, 0, true, true, canScroll.x);\n var showScrollbarV = COMPATIBILITY.bind(refreshScrollbarAppearance, 0, false, true, canScroll.y);\n var hideScrollbarH = COMPATIBILITY.bind(refreshScrollbarAppearance, 0, true, false, canScroll.x);\n var hideScrollbarV = COMPATIBILITY.bind(refreshScrollbarAppearance, 0, false, false, canScroll.y);\n\n //manage class name which indicates scrollable overflow\n if (hideOverflow.x || hideOverflow.y)\n addClass(_hostElement, _classNameHostOverflow);\n else\n removeClass(_hostElement, _classNameHostOverflow);\n if (hideOverflow.x)\n addClass(_hostElement, _classNameHostOverflowX);\n else\n removeClass(_hostElement, _classNameHostOverflowX);\n if (hideOverflow.y)\n addClass(_hostElement, _classNameHostOverflowY);\n else\n removeClass(_hostElement, _classNameHostOverflowY);\n\n //add or remove rtl class name for styling purposes\n if (cssDirectionChanged) {\n if (_isRTL)\n addClass(_hostElement, _classNameHostRTL);\n else\n removeClass(_hostElement, _classNameHostRTL);\n }\n\n //manage the resize feature (CSS3 resize \"polyfill\" for this plugin)\n if (_isBody)\n addClass(_hostElement, _classNameHostResizeDisabled);\n if (resizeChanged) {\n var setupCornerEvents = function(remove) {\n if(_supportPassiveEvents)\n setupPassiveEventListener(_scrollbarCornerElement, _strMouseTouchDownEvent, _resizeOnMouseTouchDown, remove, true);\n else\n _scrollbarCornerElement[remove ? 'off' : 'on'](_strMouseTouchDownEvent, _resizeOnMouseTouchDown);\n };\n removeClass(_scrollbarCornerElement, [ \n _classNameScrollbarCornerResize,\n _classNameScrollbarCornerResizeB,\n _classNameScrollbarCornerResizeH,\n _classNameScrollbarCornerResizeV].join(_strSpace));\n if (_resizeNone) {\n addClass(_hostElement, _classNameHostResizeDisabled);\n setupCornerEvents(true);\n }\n else {\n removeClass(_hostElement, _classNameHostResizeDisabled);\n addClass(_scrollbarCornerElement, _classNameScrollbarCornerResize);\n if (_resizeBoth)\n addClass(_scrollbarCornerElement, _classNameScrollbarCornerResizeB);\n else if (_resizeHorizontal)\n addClass(_scrollbarCornerElement, _classNameScrollbarCornerResizeH);\n else if (_resizeVertical)\n addClass(_scrollbarCornerElement, _classNameScrollbarCornerResizeV);\n\n setupCornerEvents(true);\n setupCornerEvents();\n }\n }\n\n //manage the scrollbars general visibility + the scrollbar interactivity (unusable class name)\n if (scrollbarsVisibilityChanged || overflowBehaviorChanged || hideOverflow.c || hasOverflow.c || ignoreOverlayScrollbarHidingChanged) {\n if (ignoreOverlayScrollbarHiding) {\n if (ignoreOverlayScrollbarHidingChanged) {\n removeClass(_hostElement, _classNameHostScrolling);\n if (ignoreOverlayScrollbarHiding) {\n hideScrollbarH();\n hideScrollbarV();\n }\n }\n }\n else if (scrollbarsVisibilityAuto) {\n if (canScroll.x)\n showScrollbarH();\n else\n hideScrollbarH();\n\n if (canScroll.y)\n showScrollbarV();\n else\n hideScrollbarV();\n }\n else if (scrollbarsVisibilityVisible) {\n showScrollbarH();\n showScrollbarV();\n }\n else if (scrollbarsVisibilityHidden) {\n hideScrollbarH();\n hideScrollbarV();\n }\n }\n\n //manage the scrollbars auto hide feature (auto hide them after specific actions)\n if (scrollbarsAutoHideChanged || ignoreOverlayScrollbarHidingChanged) {\n if (_scrollbarsAutoHideLeave || _scrollbarsAutoHideMove) {\n setupHostMouseTouchEvents(true);\n setupHostMouseTouchEvents();\n }\n else {\n setupHostMouseTouchEvents(true);\n }\n\n if (_scrollbarsAutoHideNever)\n refreshScrollbarsAutoHide(true);\n else\n refreshScrollbarsAutoHide(false, true);\n }\n\n //manage scrollbars handle length & offset - don't remove!\n if (hostSizeChanged || overflowAmount.c || heightAutoChanged || widthAutoChanged || resizeChanged || boxSizingChanged || paddingAbsoluteChanged || ignoreOverlayScrollbarHidingChanged || cssDirectionChanged) {\n refreshScrollbarHandleLength(true);\n refreshScrollbarHandleOffset(true);\n refreshScrollbarHandleLength(false);\n refreshScrollbarHandleOffset(false);\n }\n\n //manage interactivity\n if (scrollbarsClickScrollingChanged)\n refreshScrollbarsInteractive(true, scrollbarsClickScrolling);\n if (scrollbarsDragScrollingChanged)\n refreshScrollbarsInteractive(false, scrollbarsDragScrolling);\n\n //callbacks:\n if (cssDirectionChanged) {\n dispatchCallback(\"onDirectionChanged\", {\n isRTL: _isRTL,\n dir: cssDirection\n });\n }\n if (hostSizeChanged) {\n dispatchCallback(\"onHostSizeChanged\", {\n width: _hostSizeCache.w,\n height: _hostSizeCache.h\n });\n }\n if (contentSizeChanged) {\n dispatchCallback(\"onContentSizeChanged\", {\n width: _contentScrollSizeCache.w,\n height: _contentScrollSizeCache.h\n });\n }\n if (hasOverflow.c || hideOverflow.c) {\n dispatchCallback(\"onOverflowChanged\", {\n x: hasOverflow.x,\n y: hasOverflow.y,\n xScrollable: hideOverflow.xs,\n yScrollable: hideOverflow.ys,\n clipped: hideOverflow.x || hideOverflow.y\n });\n }\n if (overflowAmount.c) {\n dispatchCallback(\"onOverflowAmountChanged\", {\n x: overflowAmount.x,\n y: overflowAmount.y\n });\n }\n }\n\n //fix body min size\n if (_isBody && _bodyMinSizeCache && (_hasOverflowCache.c || _bodyMinSizeCache.c)) {\n //its possible that no min size was measured until now, because the content arrange element was just added now, in this case, measure now the min size.\n if (!_bodyMinSizeCache.f)\n bodyMinSizeChanged();\n if (_nativeScrollbarIsOverlaid.y && _hasOverflowCache.x)\n _contentElement.css(_strMinMinus + _strWidth, _bodyMinSizeCache.w + _overlayScrollbarDummySize.y);\n if (_nativeScrollbarIsOverlaid.x && _hasOverflowCache.y)\n _contentElement.css(_strMinMinus + _strHeight, _bodyMinSizeCache.h + _overlayScrollbarDummySize.x);\n _bodyMinSizeCache.c = false;\n }\n\n //freezeResizeObserver(_sizeObserverElement, false);\n //freezeResizeObserver(_sizeAutoObserverElement, false);\n\n dispatchCallback(\"onUpdated\", { forced: force });\n }\n\n \n //==== Options ====//\n\n /**\n * Sets new options but doesn't call the update method.\n * @param newOptions The object which contains the new options.\n * @returns {*} A object which contains the changed options.\n */\n function setOptions(newOptions) {\n var validatedOpts = _pluginsOptions._validate(newOptions, _pluginsOptions._template, true, _currentOptions)\n\n _currentOptions = extendDeep({}, _currentOptions, validatedOpts._default);\n _currentPreparedOptions = extendDeep({}, _currentPreparedOptions, validatedOpts._prepared);\n \n return validatedOpts._prepared;\n }\n\n\n //==== Structure ====//\n\n /**\n * Builds or destroys the wrapper and helper DOM elements.\n * @param destroy Indicates whether the DOM shall be build or destroyed.\n */\n function setupStructureDOM(destroy) {\n var adoptAttrs = _currentPreparedOptions.textarea.inheritedAttrs;\n var adoptAttrsMap = { };\n var applyAdoptedAttrs = function() {\n var applyAdoptedAttrsElm = destroy ? _targetElement : _hostElement;\n each(adoptAttrsMap, function(k, v) {\n if(type(v) == TYPES.s) {\n if(k == LEXICON.c)\n applyAdoptedAttrsElm.addClass(v);\n else\n applyAdoptedAttrsElm.attr(k, v);\n }\n });\n };\n var hostElementClassNames = [\n _classNameHostElement,\n _classNameHostTextareaElement,\n _classNameHostResizeDisabled,\n _classNameHostRTL,\n _classNameHostScrollbarHorizontalHidden,\n _classNameHostScrollbarVerticalHidden,\n _classNameHostTransition,\n _classNameHostScrolling,\n _classNameHostOverflow,\n _classNameHostOverflowX,\n _classNameHostOverflowY,\n _classNameThemeNone,\n _classNameTextareaElement,\n _classNameTextInherit,\n _classNameCache].join(_strSpace);\n adoptAttrs = type(adoptAttrs) == TYPES.s ? adoptAttrs.split(' ') : adoptAttrs;\n if(type(adoptAttrs) == TYPES.a) {\n each(adoptAttrs, function(i, v) {\n if(type(v) == TYPES.s)\n adoptAttrsMap[v] = destroy ? _hostElement.attr(v) : _targetElement.attr(v);\n });\n }\n\n if(!destroy) {\n if (_isTextarea) {\n var hostElementCSS = {};\n var parent = _targetElement.parent();\n _isTextareaHostGenerated = !(parent.hasClass(_classNameHostTextareaElement) && parent.children()[LEXICON.l] === 1);\n\n if (!_currentPreparedOptions.sizeAutoCapable) {\n hostElementCSS[_strWidth] = _targetElement.css(_strWidth);\n hostElementCSS[_strHeight] = _targetElement.css(_strHeight);\n }\n if(_isTextareaHostGenerated)\n _targetElement.wrap(generateDiv(_classNameHostTextareaElement));\n\n _hostElement = _targetElement.parent();\n _hostElement.css(hostElementCSS)\n .wrapInner(generateDiv(_classNameContentElement + _strSpace + _classNameTextInherit))\n .wrapInner(generateDiv(_classNameViewportElement + _strSpace + _classNameTextInherit))\n .wrapInner(generateDiv(_classNamePaddingElement + _strSpace + _classNameTextInherit));\n _contentElement = findFirst(_hostElement, _strDot + _classNameContentElement);\n _viewportElement = findFirst(_hostElement, _strDot + _classNameViewportElement);\n _paddingElement = findFirst(_hostElement, _strDot + _classNamePaddingElement);\n _textareaCoverElement = FRAMEWORK(generateDiv(_classNameTextareaCoverElement));\n _contentElement.prepend(_textareaCoverElement);\n\n addClass(_targetElement, _classNameTextareaElement + _strSpace + _classNameTextInherit);\n\n if(_isTextareaHostGenerated)\n applyAdoptedAttrs();\n }\n else {\n _hostElement = _targetElement;\n _hostElement.wrapInner(generateDiv(_classNameContentElement))\n .wrapInner(generateDiv(_classNameViewportElement))\n .wrapInner(generateDiv(_classNamePaddingElement));\n _contentElement = findFirst(_hostElement, _strDot + _classNameContentElement);\n _viewportElement = findFirst(_hostElement, _strDot + _classNameViewportElement);\n _paddingElement = findFirst(_hostElement, _strDot + _classNamePaddingElement);\n\n addClass(_targetElement, _classNameHostElement);\n }\n \n if (_nativeScrollbarStyling)\n addClass(_viewportElement, _classNameViewportNativeScrollbarsInvisible);\n if(_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y)\n addClass(_viewportElement, _classNameViewportNativeScrollbarsOverlaid);\n if (_isBody)\n addClass(_htmlElement, _classNameHTMLElement);\n\n _sizeObserverElement = FRAMEWORK(generateDiv('os-resize-observer-host'));\n _hostElement.prepend(_sizeObserverElement);\n\n _sizeObserverElementNative = _sizeObserverElement[0];\n _hostElementNative = _hostElement[0];\n _paddingElementNative = _paddingElement[0];\n _viewportElementNative = _viewportElement[0];\n _contentElementNative = _contentElement[0];\n }\n else {\n _contentElement.contents()\n .unwrap()\n .unwrap()\n .unwrap();\n\n removeClass(_hostElement, hostElementClassNames);\n if (_isTextarea) {\n _targetElement.removeAttr(LEXICON.s);\n\n if(_isTextareaHostGenerated)\n applyAdoptedAttrs();\n\n removeClass(_targetElement, hostElementClassNames);\n remove(_textareaCoverElement);\n\n if(_isTextareaHostGenerated) {\n _targetElement.unwrap();\n remove(_hostElement);\n }\n else {\n addClass(_hostElement, _classNameHostTextareaElement);\n }\n }\n else {\n removeClass(_targetElement, _classNameHostElement);\n }\n\n if (_isBody)\n removeClass(_htmlElement, _classNameHTMLElement);\n\n remove(_sizeObserverElement);\n }\n }\n\n /**\n * Adds or removes all wrapper elements interactivity events.\n * @param destroy Indicates whether the Events shall be added or removed.\n */\n function setupStructureEvents(destroy) {\n var textareaKeyDownRestrictedKeyCodes = [\n 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 123, //F1 to F12\n 33, 34, //page up, page down\n 37, 38, 39, 40, //left, up, right, down arrows\n 16, 17, 18, 19, 20, 144 //Shift, Ctrl, Alt, Pause, CapsLock, NumLock\n ];\n var textareaKeyDownKeyCodesList = [ ];\n var textareaUpdateIntervalID;\n var scrollStopDelay = 175;\n var scrollStopTimeoutId;\n var strOnOff = destroy ? 'off' : 'on';\n var updateTextarea;\n var viewportOnScroll;\n\n if(!destroy && _isTextarea) {\n _textareaEvents = { };\n updateTextarea = function(doClearInterval) {\n textareaUpdate();\n _base.update(_strAuto);\n if(doClearInterval)\n clearInterval(textareaUpdateIntervalID);\n };\n _textareaEvents[_strScroll] = function(event) {\n _targetElement[_strScrollLeft](_rtlScrollBehavior.i && _normalizeRTLCache ? 9999999 : 0);\n _targetElement[_strScrollTop](0);\n COMPATIBILITY.prvD(event);\n COMPATIBILITY.stpP(event);\n return false;\n };\n _textareaEvents['drop'] = function() {\n setTimeout(function () {\n if(!_destroyed)\n updateTextarea();\n }, 50);\n };\n _textareaEvents['focus'] = function() {\n _textareaHasFocus = true;\n };\n _textareaEvents['focusout'] = function() {\n _textareaHasFocus = false;\n textareaKeyDownKeyCodesList = [ ];\n updateTextarea(true);\n };\n if (_msieVersion > 9 || !_autoUpdateRecommended) {\n _textareaEvents['input'] = function textareaOnInput() {\n updateTextarea();\n }\n }\n else {\n _textareaEvents[_strKeyDownEvent] = function textareaOnKeyDown(event) {\n var keyCode = event.keyCode;\n if (inArray(keyCode, textareaKeyDownRestrictedKeyCodes) > -1)\n return;\n if (!textareaKeyDownKeyCodesList.length) {\n updateTextarea();\n textareaUpdateIntervalID = setInterval(updateTextarea, 1000 / 60);\n }\n if (inArray(keyCode, textareaKeyDownKeyCodesList) === -1)\n textareaKeyDownKeyCodesList.push(keyCode);\n };\n _textareaEvents[_strKeyUpEvent] = function(event) {\n var keyCode = event.keyCode;\n var index = inArray(keyCode, textareaKeyDownKeyCodesList);\n\n if (inArray(keyCode, textareaKeyDownRestrictedKeyCodes) > -1)\n return;\n if (index > -1)\n textareaKeyDownKeyCodesList.splice(index, 1);\n if (!textareaKeyDownKeyCodesList.length)\n updateTextarea(true);\n };\n }\n }\n\n if (_isTextarea) {\n each(_textareaEvents, function(key, value) {\n _targetElement[strOnOff](key, value);\n });\n }\n else {\n _contentElement[strOnOff](_strTransitionEndEvent, function (event) {\n if (_autoUpdateCache === true)\n return;\n event = event.originalEvent || event;\n if (isSizeAffectingCSSProperty(event.propertyName))\n _base.update(_strAuto);\n });\n }\n\n if(!destroy) {\n viewportOnScroll = function(event) {\n if (!_sleeping) {\n if (scrollStopTimeoutId !== undefined)\n clearTimeout(scrollStopTimeoutId);\n else {\n if (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove)\n refreshScrollbarsAutoHide(true);\n\n if (!nativeOverlayScrollbarsAreActive())\n addClass(_hostElement, _classNameHostScrolling);\n\n dispatchCallback(\"onScrollStart\", event);\n }\n\n //if a scrollbars handle gets dragged, the mousemove event is responsible for refreshing the handle offset\n //because if CSS scroll-snap is used, the handle offset gets only refreshed on every snap point\n //this looks laggy & clunky, it looks much better if the offset refreshes with the mousemove\n if(!_scrollbarsHandlesDefineScrollPos) {\n refreshScrollbarHandleOffset(true);\n refreshScrollbarHandleOffset(false);\n }\n dispatchCallback(\"onScroll\", event);\n\n scrollStopTimeoutId = setTimeout(function () {\n if(!_destroyed) {\n //OnScrollStop:\n clearTimeout(scrollStopTimeoutId);\n scrollStopTimeoutId = undefined;\n\n if (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove)\n refreshScrollbarsAutoHide(false);\n\n if (!nativeOverlayScrollbarsAreActive())\n removeClass(_hostElement, _classNameHostScrolling);\n\n dispatchCallback(\"onScrollStop\", event);\n }\n }, scrollStopDelay);\n }\n };\n\n if (_supportPassiveEvents)\n setupPassiveEventListener(_viewportElement, _strScroll, viewportOnScroll);\n else\n _viewportElement.on(_strScroll, viewportOnScroll);\n }\n }\n\n\n\n //==== Scrollbars ====//\n\n /**\n * Builds or destroys all scrollbar DOM elements (scrollbar, track, handle)\n * @param destroy Indicates whether the DOM shall be build or destroyed.\n */\n function setupScrollbarsDOM(destroy) {\n if(!destroy) {\n _scrollbarHorizontalElement = FRAMEWORK(generateDiv(_classNameScrollbar + _strSpace + _classNameScrollbarHorizontal));\n _scrollbarHorizontalTrackElement = FRAMEWORK(generateDiv(_classNameScrollbarTrack));\n _scrollbarHorizontalHandleElement = FRAMEWORK(generateDiv(_classNameScrollbarHandle));\n _scrollbarVerticalElement = FRAMEWORK(generateDiv(_classNameScrollbar + _strSpace + _classNameScrollbarVertical));\n _scrollbarVerticalTrackElement = FRAMEWORK(generateDiv(_classNameScrollbarTrack));\n _scrollbarVerticalHandleElement = FRAMEWORK(generateDiv(_classNameScrollbarHandle));\n\n _scrollbarHorizontalElement.append(_scrollbarHorizontalTrackElement);\n _scrollbarHorizontalTrackElement.append(_scrollbarHorizontalHandleElement);\n _scrollbarVerticalElement.append(_scrollbarVerticalTrackElement);\n _scrollbarVerticalTrackElement.append(_scrollbarVerticalHandleElement);\n\n _paddingElement.after(_scrollbarVerticalElement);\n _paddingElement.after(_scrollbarHorizontalElement);\n }\n else {\n remove(_scrollbarHorizontalElement);\n remove(_scrollbarVerticalElement);\n }\n }\n\n /**\n * Initializes all scrollbar interactivity events. (track and handle dragging, clicking, scrolling)\n * @param isHorizontal True if the target scrollbar is the horizontal scrollbar, false if the target scrollbar is the vertical scrollbar.\n */\n function setupScrollbarEvents(isHorizontal) {\n var scrollbarVars = getScrollbarVars(isHorizontal);\n var scrollbarVarsInfo = scrollbarVars._info;\n var insideIFrame = _windowElementNative.top !== _windowElementNative;\n var xy = scrollbarVars._x_y;\n var XY = scrollbarVars._X_Y;\n var scroll = _strScroll + scrollbarVars._Left_Top;\n var strActive = 'active';\n var strSnapHandle = 'snapHandle';\n var scrollDurationFactor = 1;\n var increaseDecreaseScrollAmountKeyCodes = [ 16, 17 ]; //shift, ctrl\n var trackTimeout;\n var mouseDownScroll;\n var mouseDownOffset;\n var mouseDownInvertedScale;\n \n function setupEvent(element, eventNames, listener) {\n var collected = type(eventNames) == TYPES.a && type(listener) == TYPES.a;\n var i = 0;\n \n if(collected) {\n for (; i < eventNames[LEXICON.l]; i++)\n setupEvent(element, eventNames[i], listener[i]);\n }\n else {\n if(_supportPassiveEvents)\n setupPassiveEventListener(element, eventNames, listener, false, true);\n else\n element.on(eventNames, listener);\n }\n }\n function getPointerPosition(event) {\n return _msieVersion && insideIFrame ? event['screen' + XY] : COMPATIBILITY.page(event)[xy]; //use screen coordinates in EDGE & IE because the page values are incorrect in frames.\n }\n function getPreparedScrollbarsOption(name) {\n return _currentPreparedOptions.scrollbars[name];\n }\n function increaseTrackScrollAmount() {\n scrollDurationFactor = 0.5;\n }\n function decreaseTrackScrollAmount() {\n scrollDurationFactor = 1;\n }\n function documentKeyDown(event) {\n if (inArray(event.keyCode, increaseDecreaseScrollAmountKeyCodes) > -1)\n increaseTrackScrollAmount();\n }\n function documentKeyUp(event) {\n if (inArray(event.keyCode, increaseDecreaseScrollAmountKeyCodes) > -1)\n decreaseTrackScrollAmount();\n }\n function onMouseTouchDownContinue(event) {\n var originalEvent = event.originalEvent || event;\n var isTouchEvent = originalEvent.touches !== undefined;\n return _sleeping || _destroyed || nativeOverlayScrollbarsAreActive() || !_scrollbarsDragScrollingCache || (isTouchEvent && !getPreparedScrollbarsOption('touchSupport')) ? false : COMPATIBILITY.mBtn(event) === 1 || isTouchEvent;\n }\n function documentDragMove(event) {\n if(onMouseTouchDownContinue(event)) {\n var trackLength = scrollbarVarsInfo._trackLength;\n var handleLength = scrollbarVarsInfo._handleLength;\n var scrollRange = scrollbarVarsInfo._maxScroll;\n var scrollRaw = (getPointerPosition(event) - mouseDownOffset) * mouseDownInvertedScale;\n var scrollDeltaPercent = scrollRaw / (trackLength - handleLength);\n var scrollDelta = (scrollRange * scrollDeltaPercent);\n scrollDelta = isFinite(scrollDelta) ? scrollDelta : 0;\n if (_isRTL && isHorizontal && !_rtlScrollBehavior.i)\n scrollDelta *= -1;\n\n _viewportElement[scroll](MATH.round(mouseDownScroll + scrollDelta));\n\n if(_scrollbarsHandlesDefineScrollPos)\n refreshScrollbarHandleOffset(isHorizontal, mouseDownScroll + scrollDelta);\n\n if (!_supportPassiveEvents)\n COMPATIBILITY.prvD(event);\n }\n else\n documentMouseTouchUp(event);\n }\n function documentMouseTouchUp(event) {\n event = event || event.originalEvent;\n\n _documentElement.off(_strMouseTouchMoveEvent, documentDragMove)\n .off(_strMouseTouchUpEvent, documentMouseTouchUp)\n .off(_strKeyDownEvent, documentKeyDown)\n .off(_strKeyUpEvent, documentKeyUp)\n .off(_strSelectStartEvent, documentOnSelectStart);\n\n if(_scrollbarsHandlesDefineScrollPos)\n refreshScrollbarHandleOffset(isHorizontal, true);\n\n _scrollbarsHandlesDefineScrollPos = false;\n removeClass(_bodyElement, _classNameDragging);\n removeClass(scrollbarVars._handle, strActive);\n removeClass(scrollbarVars._track, strActive);\n removeClass(scrollbarVars._scrollbar, strActive);\n\n mouseDownScroll = undefined;\n mouseDownOffset = undefined;\n mouseDownInvertedScale = 1;\n\n decreaseTrackScrollAmount();\n\n if (trackTimeout !== undefined) {\n _base.scrollStop();\n clearTimeout(trackTimeout);\n trackTimeout = undefined;\n }\n\n if(event) {\n var rect = _hostElementNative.getBoundingClientRect();\n var mouseInsideHost = event.clientX >= rect.left && event.clientX <= rect.right && event.clientY >= rect.top && event.clientY <= rect.bottom;\n\n //if mouse is outside host element\n if (!mouseInsideHost)\n hostOnMouseLeave();\n\n if (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove)\n refreshScrollbarsAutoHide(false);\n }\n }\n function onHandleMouseTouchDown(event) {\n if (onMouseTouchDownContinue(event))\n onHandleMouseTouchDownAction(event);\n }\n function onHandleMouseTouchDownAction(event) {\n mouseDownScroll = _viewportElement[scroll]();\n mouseDownScroll = isNaN(mouseDownScroll) ? 0 : mouseDownScroll;\n if (_isRTL && isHorizontal && !_rtlScrollBehavior.n || !_isRTL)\n mouseDownScroll = mouseDownScroll < 0 ? 0 : mouseDownScroll;\n\n mouseDownInvertedScale = getHostElementInvertedScale()[xy];\n mouseDownOffset = getPointerPosition(event);\n\n _scrollbarsHandlesDefineScrollPos = !getPreparedScrollbarsOption(strSnapHandle);\n addClass(_bodyElement, _classNameDragging);\n addClass(scrollbarVars._handle, strActive);\n addClass(scrollbarVars._scrollbar, strActive);\n\n _documentElement.on(_strMouseTouchMoveEvent, documentDragMove)\n .on(_strMouseTouchUpEvent, documentMouseTouchUp)\n .on(_strSelectStartEvent, documentOnSelectStart);\n\n if(_msieVersion || !_documentMixed)\n COMPATIBILITY.prvD(event);\n COMPATIBILITY.stpP(event);\n }\n function onTrackMouseTouchDown(event) {\n if (onMouseTouchDownContinue(event)) {\n var scrollDistance = MATH.round(_viewportSize[scrollbarVars._w_h]);\n var trackOffset = scrollbarVars._track.offset()[scrollbarVars._left_top];\n var ctrlKey = event.ctrlKey;\n var instantScroll = event.shiftKey;\n var instantScrollTransition = instantScroll && ctrlKey;\n var isFirstIteration = true;\n var easing = 'linear';\n var decreaseScroll;\n var finishedCondition;\n var scrollActionFinsished = function(transition) {\n if(_scrollbarsHandlesDefineScrollPos)\n refreshScrollbarHandleOffset(isHorizontal, transition);\n };\n var scrollActionInstantFinished = function() {\n scrollActionFinsished();\n onHandleMouseTouchDownAction(event);\n };\n var scrollAction = function () {\n if(!_destroyed) {\n var mouseOffset = (mouseDownOffset - trackOffset) * mouseDownInvertedScale;\n var handleOffset = scrollbarVarsInfo._handleOffset;\n var trackLength = scrollbarVarsInfo._trackLength;\n var handleLength = scrollbarVarsInfo._handleLength;\n var scrollRange = scrollbarVarsInfo._maxScroll;\n var currScroll = scrollbarVarsInfo._currentScroll;\n var scrollDuration = 270 * scrollDurationFactor;\n var timeoutDelay = isFirstIteration ? MATH.max(400, scrollDuration) : scrollDuration;\n var instantScrollPosition = scrollRange * ((mouseOffset - (handleLength / 2)) / (trackLength - handleLength)); // 100% * positionPercent\n var rtlIsNormal = _isRTL && isHorizontal && ((!_rtlScrollBehavior.i && !_rtlScrollBehavior.n) || _normalizeRTLCache);\n var decreaseScrollCondition = rtlIsNormal ? handleOffset < mouseOffset : handleOffset > mouseOffset;\n var scrollObj = { };\n var animationObj = {\n easing : easing,\n step : function(now) {\n if(_scrollbarsHandlesDefineScrollPos) {\n _viewportElement[scroll](now); //https://github.com/jquery/jquery/issues/4340\n refreshScrollbarHandleOffset(isHorizontal, now);\n }\n }\n };\n instantScrollPosition = isFinite(instantScrollPosition) ? instantScrollPosition : 0;\n instantScrollPosition = _isRTL && isHorizontal && !_rtlScrollBehavior.i ? (scrollRange - instantScrollPosition) : instantScrollPosition;\n\n //_base.scrollStop();\n\n if(instantScroll) {\n _viewportElement[scroll](instantScrollPosition); //scroll instantly to new position\n if(instantScrollTransition) {\n //get the scroll position after instant scroll (in case CSS Snap Points are used) to get the correct snapped scroll position\n //and the animation stops at the correct point\n instantScrollPosition = _viewportElement[scroll]();\n //scroll back to the position before instant scrolling so animation can be performed\n _viewportElement[scroll](currScroll);\n\n instantScrollPosition = rtlIsNormal && _rtlScrollBehavior.i ? (scrollRange - instantScrollPosition) : instantScrollPosition;\n instantScrollPosition = rtlIsNormal && _rtlScrollBehavior.n ? -instantScrollPosition : instantScrollPosition;\n\n scrollObj[xy] = instantScrollPosition;\n _base.scroll(scrollObj, extendDeep(animationObj, {\n duration : 130,\n complete : scrollActionInstantFinished\n }));\n }\n else\n scrollActionInstantFinished();\n }\n else {\n decreaseScroll = isFirstIteration ? decreaseScrollCondition : decreaseScroll;\n finishedCondition = rtlIsNormal\n ? (decreaseScroll ? handleOffset + handleLength >= mouseOffset : handleOffset <= mouseOffset)\n : (decreaseScroll ? handleOffset <= mouseOffset : handleOffset + handleLength >= mouseOffset);\n\n if (finishedCondition) {\n clearTimeout(trackTimeout);\n _base.scrollStop();\n trackTimeout = undefined;\n scrollActionFinsished(true);\n }\n else {\n trackTimeout = setTimeout(scrollAction, timeoutDelay);\n\n scrollObj[xy] = (decreaseScroll ? '-=' : '+=') + scrollDistance;\n _base.scroll(scrollObj, extendDeep(animationObj, {\n duration: scrollDuration\n }));\n }\n isFirstIteration = false;\n }\n }\n };\n if (ctrlKey)\n increaseTrackScrollAmount();\n\n mouseDownInvertedScale = getHostElementInvertedScale()[xy];\n mouseDownOffset = COMPATIBILITY.page(event)[xy];\n\n _scrollbarsHandlesDefineScrollPos = !getPreparedScrollbarsOption(strSnapHandle);\n addClass(_bodyElement, _classNameDragging);\n addClass(scrollbarVars._track, strActive);\n addClass(scrollbarVars._scrollbar, strActive);\n\n _documentElement.on(_strMouseTouchUpEvent, documentMouseTouchUp)\n .on(_strKeyDownEvent, documentKeyDown)\n .on(_strKeyUpEvent, documentKeyUp)\n .on(_strSelectStartEvent, documentOnSelectStart);\n\n scrollAction();\n COMPATIBILITY.prvD(event);\n COMPATIBILITY.stpP(event);\n }\n }\n function onTrackMouseTouchEnter(event) {\n //make sure both scrollbars will stay visible if one scrollbar is hovered if autoHide is \"scroll\" or \"move\".\n _scrollbarsHandleHovered = true;\n if (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove)\n refreshScrollbarsAutoHide(true);\n }\n function onTrackMouseTouchLeave(event) {\n _scrollbarsHandleHovered = false;\n if (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove)\n refreshScrollbarsAutoHide(false);\n }\n function onScrollbarMouseTouchDown(event) {\n COMPATIBILITY.stpP(event);\n }\n \n setupEvent(scrollbarVars._handle, \n _strMouseTouchDownEvent, \n onHandleMouseTouchDown);\n setupEvent(scrollbarVars._track,\n [_strMouseTouchDownEvent, _strMouseTouchEnter, _strMouseTouchLeave], \n [onTrackMouseTouchDown, onTrackMouseTouchEnter, onTrackMouseTouchLeave]);\n setupEvent(scrollbarVars._scrollbar, \n _strMouseTouchDownEvent, \n onScrollbarMouseTouchDown);\n\n if (_supportTransition) {\n scrollbarVars._scrollbar.on(_strTransitionEndEvent, function(event) {\n if (event.target !== scrollbarVars._scrollbar[0])\n return;\n refreshScrollbarHandleLength(isHorizontal);\n refreshScrollbarHandleOffset(isHorizontal);\n });\n }\n }\n\n /**\n * Shows or hides the given scrollbar and applied a class name which indicates if the scrollbar is scrollable or not.\n * @param isHorizontal True if the horizontal scrollbar is the target, false if the vertical scrollbar is the target.\n * @param shallBeVisible True if the scrollbar shall be shown, false if hidden.\n * @param canScroll True if the scrollbar is scrollable, false otherwise.\n */\n function refreshScrollbarAppearance(isHorizontal, shallBeVisible, canScroll) {\n var scrollbarClassName = isHorizontal ? _classNameHostScrollbarHorizontalHidden : _classNameHostScrollbarVerticalHidden;\n var scrollbarElement = isHorizontal ? _scrollbarHorizontalElement : _scrollbarVerticalElement;\n\n if (shallBeVisible)\n removeClass(_hostElement, scrollbarClassName);\n else\n addClass(_hostElement, scrollbarClassName);\n\n if (canScroll)\n removeClass(scrollbarElement, _classNameScrollbarUnusable);\n else\n addClass(scrollbarElement, _classNameScrollbarUnusable);\n }\n\n /**\n * Autoshows / autohides both scrollbars with.\n * @param shallBeVisible True if the scrollbars shall be autoshown (only the case if they are hidden by a autohide), false if the shall be auto hidden.\n * @param delayfree True if the scrollbars shall be hidden without a delay, false or undefined otherwise.\n */\n function refreshScrollbarsAutoHide(shallBeVisible, delayfree) {\n clearTimeout(_scrollbarsAutoHideTimeoutId);\n if (shallBeVisible) {\n //if(_hasOverflowCache.x && _hideOverflowCache.xs)\n removeClass(_scrollbarHorizontalElement, _classNameScrollbarAutoHidden);\n //if(_hasOverflowCache.y && _hideOverflowCache.ys)\n removeClass(_scrollbarVerticalElement, _classNameScrollbarAutoHidden);\n }\n else {\n var anyActive;\n var strActive = 'active';\n var hide = function () {\n if (!_scrollbarsHandleHovered && !_destroyed) {\n anyActive = _scrollbarHorizontalHandleElement.hasClass(strActive) || _scrollbarVerticalHandleElement.hasClass(strActive);\n if (!anyActive && (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove || _scrollbarsAutoHideLeave))\n addClass(_scrollbarHorizontalElement, _classNameScrollbarAutoHidden);\n if (!anyActive && (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove || _scrollbarsAutoHideLeave))\n addClass(_scrollbarVerticalElement, _classNameScrollbarAutoHidden);\n }\n };\n if (_scrollbarsAutoHideDelay > 0 && delayfree !== true)\n _scrollbarsAutoHideTimeoutId = setTimeout(hide, _scrollbarsAutoHideDelay);\n else\n hide();\n }\n }\n\n /**\n * Refreshes the handle length of the given scrollbar.\n * @param isHorizontal True if the horizontal scrollbar handle shall be refreshed, false if the vertical one shall be refreshed.\n */\n function refreshScrollbarHandleLength(isHorizontal) {\n var handleCSS = {};\n var scrollbarVars = getScrollbarVars(isHorizontal);\n var scrollbarVarsInfo = scrollbarVars._info;\n var digit = 1000000;\n //get and apply intended handle length\n var handleRatio = MATH.min(1, (_hostSizeCache[scrollbarVars._w_h] - (_paddingAbsoluteCache ? (isHorizontal ? _paddingX : _paddingY) : 0)) / _contentScrollSizeCache[scrollbarVars._w_h]);\n handleCSS[scrollbarVars._width_height] = (MATH.floor(handleRatio * 100 * digit) / digit) + \"%\"; //the last * digit / digit is for flooring to the 4th digit\n\n if (!nativeOverlayScrollbarsAreActive())\n scrollbarVars._handle.css(handleCSS);\n\n //measure the handle length to respect min & max length\n scrollbarVarsInfo._handleLength = scrollbarVars._handle[0]['offset' + scrollbarVars._Width_Height];\n scrollbarVarsInfo._handleLengthRatio = handleRatio;\n }\n\n /**\n * Refreshes the handle offset of the given scrollbar.\n * @param isHorizontal True if the horizontal scrollbar handle shall be refreshed, false if the vertical one shall be refreshed.\n * @param scrollOrTransition The scroll position of the given scrollbar axis to which the handle shall be moved or a boolean which indicates whether a transition shall be applied. If undefined or boolean if the current scroll-offset is taken. (if isHorizontal ? scrollLeft : scrollTop)\n */\n function refreshScrollbarHandleOffset(isHorizontal, scrollOrTransition) {\n var transition = type(scrollOrTransition) == TYPES.b;\n var transitionDuration = 250;\n var isRTLisHorizontal = _isRTL && isHorizontal;\n var scrollbarVars = getScrollbarVars(isHorizontal);\n var scrollbarVarsInfo = scrollbarVars._info;\n var strTranslateBrace = 'translate(';\n var strTransform = VENDORS._cssProperty('transform');\n var strTransition = VENDORS._cssProperty('transition');\n var nativeScroll = isHorizontal ? _viewportElement[_strScrollLeft]() : _viewportElement[_strScrollTop]();\n var currentScroll = scrollOrTransition === undefined || transition ? nativeScroll : scrollOrTransition;\n\n //measure the handle length to respect min & max length\n var handleLength = scrollbarVarsInfo._handleLength;\n var trackLength = scrollbarVars._track[0]['offset' + scrollbarVars._Width_Height];\n var handleTrackDiff = trackLength - handleLength;\n var handleCSS = {};\n var transformOffset;\n var translateValue;\n\n //DONT use the variable '_contentScrollSizeCache[scrollbarVars._w_h]' instead of '_viewportElement[0]['scroll' + scrollbarVars._Width_Height]'\n // because its a bit behind during the small delay when content size updates\n //(delay = mutationObserverContentLag, if its 0 then this var could be used)\n var maxScroll = (_viewportElementNative[_strScroll + scrollbarVars._Width_Height] - _viewportElementNative['client' + scrollbarVars._Width_Height]) * (_rtlScrollBehavior.n && isRTLisHorizontal ? -1 : 1); //* -1 if rtl scroll max is negative\n var getScrollRatio = function(base) {\n return isNaN(base / maxScroll) ? 0 : MATH.max(0, MATH.min(1, base / maxScroll));\n };\n var getHandleOffset = function(scrollRatio) {\n var offset = handleTrackDiff * scrollRatio;\n offset = isNaN(offset) ? 0 : offset;\n offset = (isRTLisHorizontal && !_rtlScrollBehavior.i) ? (trackLength - handleLength - offset) : offset;\n offset = MATH.max(0, offset);\n return offset;\n };\n var scrollRatio = getScrollRatio(nativeScroll);\n var unsnappedScrollRatio = getScrollRatio(currentScroll);\n var handleOffset = getHandleOffset(unsnappedScrollRatio);\n var snappedHandleOffset = getHandleOffset(scrollRatio);\n\n scrollbarVarsInfo._maxScroll = maxScroll;\n scrollbarVarsInfo._currentScroll = nativeScroll;\n scrollbarVarsInfo._currentScrollRatio = scrollRatio;\n\n if (_supportTransform) {\n transformOffset = isRTLisHorizontal ? -(trackLength - handleLength - handleOffset) : handleOffset; //in px\n //transformOffset = (transformOffset / trackLength * 100) * (trackLength / handleLength); //in %\n translateValue = isHorizontal ? strTranslateBrace + transformOffset + 'px, 0)' : strTranslateBrace + '0, ' + transformOffset + 'px)';\n\n handleCSS[strTransform] = translateValue;\n\n //apply or clear up transition\n if(_supportTransition)\n handleCSS[strTransition] = transition && MATH.abs(handleOffset - scrollbarVarsInfo._handleOffset) > 1 ? getCSSTransitionString(scrollbarVars._handle) + ', ' + (strTransform + _strSpace + transitionDuration + 'ms') : _strEmpty;\n }\n else\n handleCSS[scrollbarVars._left_top] = handleOffset;\n\n\n //only apply css if offset has changed and overflow exists.\n if (!nativeOverlayScrollbarsAreActive()) {\n scrollbarVars._handle.css(handleCSS);\n\n //clear up transition\n if(_supportTransform && _supportTransition && transition) {\n scrollbarVars._handle.one(_strTransitionEndEvent, function() {\n if(!_destroyed)\n scrollbarVars._handle.css(strTransition, _strEmpty);\n });\n }\n }\n\n scrollbarVarsInfo._handleOffset = handleOffset;\n scrollbarVarsInfo._snappedHandleOffset = snappedHandleOffset;\n scrollbarVarsInfo._trackLength = trackLength;\n }\n\n /**\n * Refreshes the interactivity of the given scrollbar element.\n * @param isTrack True if the track element is the target, false if the handle element is the target.\n * @param value True for interactivity false for no interactivity.\n */\n function refreshScrollbarsInteractive(isTrack, value) {\n var action = value ? 'removeClass' : 'addClass';\n var element1 = isTrack ? _scrollbarHorizontalTrackElement : _scrollbarHorizontalHandleElement;\n var element2 = isTrack ? _scrollbarVerticalTrackElement : _scrollbarVerticalHandleElement;\n var className = isTrack ? _classNameScrollbarTrackOff : _classNameScrollbarHandleOff;\n\n element1[action](className);\n element2[action](className);\n }\n\n /**\n * Returns a object which is used for fast access for specific variables.\n * @param isHorizontal True if the horizontal scrollbar vars shall be accessed, false if the vertical scrollbar vars shall be accessed.\n * @returns {{wh: string, WH: string, lt: string, _wh: string, _lt: string, t: *, h: *, c: {}, s: *}}\n */\n function getScrollbarVars(isHorizontal) {\n return {\n _width_height: isHorizontal ? _strWidth : _strHeight,\n _Width_Height: isHorizontal ? 'Width' : 'Height',\n _left_top: isHorizontal ? _strLeft : _strTop,\n _Left_Top: isHorizontal ? 'Left' : 'Top',\n _x_y: isHorizontal ? _strX : _strY,\n _X_Y: isHorizontal ? 'X' : 'Y',\n _w_h: isHorizontal ? 'w' : 'h',\n _l_t: isHorizontal ? 'l' : 't',\n _track: isHorizontal ? _scrollbarHorizontalTrackElement : _scrollbarVerticalTrackElement,\n _handle: isHorizontal ? _scrollbarHorizontalHandleElement : _scrollbarVerticalHandleElement,\n _scrollbar: isHorizontal ? _scrollbarHorizontalElement : _scrollbarVerticalElement,\n _info: isHorizontal ? _scrollHorizontalInfo : _scrollVerticalInfo\n };\n }\n\n\n //==== Scrollbar Corner ====//\n\n /**\n * Builds or destroys the scrollbar corner DOM element.\n * @param destroy Indicates whether the DOM shall be build or destroyed.\n */\n function setupScrollbarCornerDOM(destroy) {\n if(!destroy) {\n _scrollbarCornerElement = FRAMEWORK(generateDiv(_classNameScrollbarCorner));\n _hostElement.append(_scrollbarCornerElement);\n }\n else {\n remove(_scrollbarCornerElement);\n }\n }\n\n /**\n * Initializes all scrollbar corner interactivity events.\n */\n function setupScrollbarCornerEvents() {\n var insideIFrame = _windowElementNative.top !== _windowElementNative;\n var mouseDownPosition = { };\n var mouseDownSize = { };\n var mouseDownInvertedScale = { };\n\n _resizeOnMouseTouchDown = function(event) {\n if (onMouseTouchDownContinue(event)) {\n if (_mutationObserversConnected) {\n _resizeReconnectMutationObserver = true;\n disconnectMutationObservers();\n }\n\n mouseDownPosition = getCoordinates(event);\n\n mouseDownSize.w = _hostElementNative[LEXICON.oW] - (!_isBorderBox ? _paddingX : 0);\n mouseDownSize.h = _hostElementNative[LEXICON.oH] - (!_isBorderBox ? _paddingY : 0);\n mouseDownInvertedScale = getHostElementInvertedScale();\n\n _documentElement.on(_strSelectStartEvent, documentOnSelectStart)\n .on(_strMouseTouchMoveEvent, documentDragMove)\n .on(_strMouseTouchUpEvent, documentMouseTouchUp);\n\n addClass(_bodyElement, _classNameDragging);\n if (_scrollbarCornerElement.setCapture)\n _scrollbarCornerElement.setCapture();\n\n COMPATIBILITY.prvD(event);\n COMPATIBILITY.stpP(event);\n }\n };\n function documentDragMove(event) {\n if (onMouseTouchDownContinue(event)) {\n var pageOffset = getCoordinates(event);\n var hostElementCSS = { };\n if (_resizeHorizontal || _resizeBoth)\n hostElementCSS[_strWidth] = (mouseDownSize.w + (pageOffset.x - mouseDownPosition.x) * mouseDownInvertedScale.x);\n if (_resizeVertical || _resizeBoth)\n hostElementCSS[_strHeight] = (mouseDownSize.h + (pageOffset.y - mouseDownPosition.y) * mouseDownInvertedScale.y);\n _hostElement.css(hostElementCSS);\n COMPATIBILITY.stpP(event);\n }\n else {\n documentMouseTouchUp(event);\n }\n }\n function documentMouseTouchUp(event) {\n var eventIsTrusted = event !== undefined;\n\n _documentElement.off(_strSelectStartEvent, documentOnSelectStart)\n .off(_strMouseTouchMoveEvent, documentDragMove)\n .off(_strMouseTouchUpEvent, documentMouseTouchUp);\n\n removeClass(_bodyElement, _classNameDragging);\n if (_scrollbarCornerElement.releaseCapture)\n _scrollbarCornerElement.releaseCapture();\n\n if (eventIsTrusted) {\n if (_resizeReconnectMutationObserver)\n connectMutationObservers();\n _base.update(_strAuto);\n }\n _resizeReconnectMutationObserver = false;\n }\n function onMouseTouchDownContinue(event) {\n var originalEvent = event.originalEvent || event;\n var isTouchEvent = originalEvent.touches !== undefined;\n return _sleeping || _destroyed ? false : COMPATIBILITY.mBtn(event) === 1 || isTouchEvent;\n }\n function getCoordinates(event) {\n return _msieVersion && insideIFrame ? { x : event.screenX , y : event.screenY } : COMPATIBILITY.page(event);\n }\n }\n\n\n //==== Utils ====//\n\n /**\n * Calls the callback with the given name. The Context of this callback is always _base (this).\n * @param name The name of the target which shall be called.\n * @param args The args with which the callback shall be called.\n */\n function dispatchCallback(name, args) {\n if(_initialized) {\n var callback = _currentPreparedOptions.callbacks[name];\n var extensionOnName = name;\n var ext;\n\n if(extensionOnName.substr(0, 2) === 'on')\n extensionOnName = extensionOnName.substr(2, 1).toLowerCase() + extensionOnName.substr(3);\n\n if(type(callback) == TYPES.f)\n callback.call(_base, args);\n\n each(_extensions, function() {\n ext = this;\n if(type(ext.on) == TYPES.f)\n ext.on(extensionOnName, args);\n });\n }\n else if(!_destroyed)\n _callbacksInitQeueue.push({ n : name, a : args });\n }\n\n /**\n * Sets the \"top, right, bottom, left\" properties, with a given prefix, of the given css object.\n * @param targetCSSObject The css object to which the values shall be applied.\n * @param prefix The prefix of the \"top, right, bottom, left\" css properties. (example: 'padding-' is a valid prefix)\n * @param values A array of values which shall be applied to the \"top, right, bottom, left\" -properties. The array order is [top, right, bottom, left].\n * If this argument is undefined the value '' (empty string) will be applied to all properties.\n */\n function setTopRightBottomLeft(targetCSSObject, prefix, values) {\n if (values === undefined)\n values = [_strEmpty, _strEmpty, _strEmpty, _strEmpty];\n\n targetCSSObject[prefix + _strTop] = values[0];\n targetCSSObject[prefix + _strRight] = values[1];\n targetCSSObject[prefix + _strBottom] = values[2];\n targetCSSObject[prefix + _strLeft] = values[3];\n }\n\n /**\n * Returns the computed CSS transition string from the given element.\n * @param element The element from which the transition string shall be returned.\n * @returns {string} The CSS transition string from the given element.\n */\n function getCSSTransitionString(element) {\n var transitionStr = VENDORS._cssProperty('transition');\n var assembledValue = element.css(transitionStr);\n if(assembledValue)\n return assembledValue;\n var regExpString = '\\\\s*(' + '([^,(]+(\\\\(.+?\\\\))?)+' + ')[\\\\s,]*';\n var regExpMain = new RegExp(regExpString);\n var regExpValidate = new RegExp('^(' + regExpString + ')+$');\n var properties = 'property duration timing-function delay'.split(' ');\n var result = [ ];\n var strResult;\n var valueArray;\n var i = 0;\n var j;\n var splitCssStyleByComma = function(str) {\n strResult = [ ];\n if (!str.match(regExpValidate))\n return str;\n while (str.match(regExpMain)) {\n strResult.push(RegExp.$1);\n str = str.replace(regExpMain, _strEmpty);\n }\n\n return strResult;\n };\n for (; i < properties[LEXICON.l]; i++) {\n valueArray = splitCssStyleByComma(element.css(transitionStr + '-' + properties[i]));\n for (j = 0; j < valueArray[LEXICON.l]; j++)\n result[j] = (result[j] ? result[j] + _strSpace : _strEmpty) + valueArray[j];\n }\n return result.join(', ');\n }\n\n /**\n * Calculates the host-elements inverted scale. (invertedScale = 1 / scale)\n * @returns {{x: number, y: number}} The scale of the host-element.\n */\n function getHostElementInvertedScale() {\n var rect = _paddingElementNative.getBoundingClientRect();\n return {\n x : _supportTransform ? 1 / (MATH.round(rect.width) / _paddingElementNative[LEXICON.oW]) || 1 : 1,\n y : _supportTransform ? 1 / (MATH.round(rect.height) / _paddingElementNative[LEXICON.oH]) || 1 : 1\n };\n }\n\n /**\n * Checks whether the given object is a HTMLElement.\n * @param o The object which shall be checked.\n * @returns {boolean} True the given object is a HTMLElement, false otherwise.\n */\n function isHTMLElement(o) {\n var strOwnerDocument = 'ownerDocument';\n var strHTMLElement = 'HTMLElement';\n var wnd = o && o[strOwnerDocument] ? (o[strOwnerDocument].parentWindow || window) : window;\n return (\n typeof wnd[strHTMLElement] == TYPES.o ? o instanceof wnd[strHTMLElement] : //DOM2\n o && typeof o == TYPES.o && o !== null && o.nodeType === 1 && typeof o.nodeName == TYPES.s\n );\n }\n\n /**\n * Compares 2 arrays and returns the differences between them as a array.\n * @param a1 The first array which shall be compared.\n * @param a2 The second array which shall be compared.\n * @returns {Array} The differences between the two arrays.\n */\n function getArrayDifferences(a1, a2) {\n var a = [ ];\n var diff = [ ];\n var i;\n var k;\n for (i = 0; i < a1.length; i++)\n a[a1[i]] = true;\n for (i = 0; i < a2.length; i++) {\n if (a[a2[i]])\n delete a[a2[i]];\n else\n a[a2[i]] = true;\n }\n for (k in a)\n diff.push(k);\n return diff;\n }\n\n /**\n * Returns Zero or the number to which the value can be parsed.\n * @param value The value which shall be parsed.\n * @param toFloat Indicates whether the number shall be parsed to a float.\n */\n function parseToZeroOrNumber(value, toFloat) {\n var num = toFloat ? parseFloat(value) : parseInt(value, 10);\n return isNaN(num) ? 0 : num;\n }\n\n /**\n * Gets several information of the textarea and returns them as a object or undefined if the browser doesn't support it.\n * @returns {{cursorRow: Number, cursorCol, rows: Number, cols: number, wRow: number, pos: number, max : number}} or undefined if not supported.\n */\n function getTextareaInfo() {\n //read needed values\n var textareaCursorPosition = _targetElementNative.selectionStart;\n if (textareaCursorPosition === undefined)\n return;\n\n var textareaValue = _targetElement.val();\n var textareaLength = textareaValue[LEXICON.l];\n var textareaRowSplit = textareaValue.split('\\n');\n var textareaLastRow = textareaRowSplit[LEXICON.l];\n var textareaCurrentCursorRowSplit = textareaValue.substr(0, textareaCursorPosition).split('\\n');\n var widestRow = 0;\n var textareaLastCol = 0;\n var cursorRow = textareaCurrentCursorRowSplit[LEXICON.l];\n var cursorCol = textareaCurrentCursorRowSplit[textareaCurrentCursorRowSplit[LEXICON.l] - 1][LEXICON.l];\n var rowCols;\n var i;\n\n //get widest Row and the last column of the textarea\n for (i = 0; i < textareaRowSplit[LEXICON.l]; i++) {\n rowCols = textareaRowSplit[i][LEXICON.l];\n if (rowCols > textareaLastCol) {\n widestRow = i + 1;\n textareaLastCol = rowCols;\n }\n }\n\n return {\n _cursorRow: cursorRow, //cursorRow\n _cursorColumn: cursorCol, //cursorCol\n _rows: textareaLastRow, //rows\n _columns: textareaLastCol, //cols\n _widestRow: widestRow, //wRow\n _cursorPosition: textareaCursorPosition, //pos\n _cursorMax: textareaLength //max\n };\n }\n\n /**\n * Determines whether native overlay scrollbars are active.\n * @returns {boolean} True if native overlay scrollbars are active, false otherwise.\n */\n function nativeOverlayScrollbarsAreActive() {\n return (_ignoreOverlayScrollbarHidingCache && (_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y));\n }\n\n /**\n * Gets the element which is used to measure the content size.\n * @returns {*} TextareaCover if target element is textarea else the ContentElement.\n */\n function getContentMeasureElement() {\n return _isTextarea ? _textareaCoverElement[0] : _contentElementNative;\n }\n\n /**\n * Generates a string which represents a HTML div with the given classes or attributes.\n * @param classesOrAttrs The class of the div as string or a object which represents the attributes of the div. (The class attribute can also be written as \"className\".)\n * @param content The content of the div as string.\n * @returns {string} The concated string which represents a HTML div and its content.\n */\n function generateDiv(classesOrAttrs, content) {\n return '<div ' + (classesOrAttrs ? type(classesOrAttrs) == TYPES.s ?\n 'class=\"' + classesOrAttrs + '\"' :\n (function() {\n var key;\n var attrs = '';\n if(FRAMEWORK.isPlainObject(classesOrAttrs)) {\n for (key in classesOrAttrs)\n attrs += (key === 'className' ? 'class' : key) + '=\"' + classesOrAttrs[key] + '\" ';\n }\n return attrs;\n })() :\n _strEmpty) +\n '>' +\n (content ? content : _strEmpty) +\n '</div>';\n }\n\n /**\n * Gets the value of the given property from the given object.\n * @param obj The object from which the property value shall be got.\n * @param path The property of which the value shall be got.\n * @returns {*} Returns the value of the searched property or undefined of the property wasn't found.\n */\n function getObjectPropVal(obj, path) {\n var splits = path.split(_strDot);\n var i = 0;\n var val;\n for(; i < splits.length; i++) {\n if(!obj[LEXICON.hOP](splits[i]))\n return;\n val = obj[splits[i]];\n if(i < splits.length && type(val) == TYPES.o)\n obj = val;\n }\n return val;\n }\n\n /**\n * Sets the value of the given property from the given object.\n * @param obj The object from which the property value shall be set.\n * @param path The property of which the value shall be set.\n * @param val The value of the property which shall be set.\n */\n function setObjectPropVal(obj, path, val) {\n var splits = path.split(_strDot);\n var splitsLength = splits.length;\n var i = 0;\n var extendObj = { };\n var extendObjRoot = extendObj;\n for(; i < splitsLength; i++)\n extendObj = extendObj[splits[i]] = i + 1 < splitsLength ? { } : val;\n FRAMEWORK.extend(obj, extendObjRoot, true);\n }\n\n\n //==== Utils Cache ====//\n\n /**\n * Compares two values or objects and returns true if they aren't equal.\n * @param current The first value or object which shall be compared.\n * @param cache The second value or object which shall be compared.\n * @param force If true the returned value is always true.\n * @returns {boolean} True if both values or objects aren't equal or force is true, false otherwise.\n */\n function checkCache(current, cache, force) {\n if (force)\n return force;\n if(type(current) == TYPES.o && type(cache) == TYPES.o) {\n for (var prop in current) {\n if(prop !== 'c') {\n if (current[LEXICON.hOP](prop) && cache[LEXICON.hOP](prop)) {\n if(checkCache(current[prop], cache[prop]))\n return true;\n }\n else {\n return true;\n }\n }\n }\n }\n else {\n return current !== cache;\n }\n return false;\n }\n\n\n //==== Shortcuts ====//\n\n /**\n * jQuery extend method shortcut with a appended \"true\" as first argument.\n */\n function extendDeep() {\n return FRAMEWORK.extend.apply(this, [ true ].concat([].slice.call(arguments)));\n }\n\n /**\n * jQuery addClass method shortcut.\n */\n function addClass(el, classes) {\n return _frameworkProto.addClass.call(el, classes);\n }\n\n /**\n * jQuery removeClass method shortcut.\n */\n function removeClass(el, classes) {\n return _frameworkProto.removeClass.call(el, classes);\n }\n\n /**\n * jQuery remove method shortcut.\n */\n function remove(el) {\n return _frameworkProto.remove.call(el);\n }\n\n /**\n * Finds the first child element with the given selector of the given element.\n * @param el The root element from which the selector shall be valid.\n * @param selector The selector of the searched element.\n * @returns {*} The first element which is a child of the given element and matches the givens selector.\n */\n function findFirst(el, selector) {\n return _frameworkProto.find.call(el, selector).eq(0);\n }\n\n\n //==== API ====//\n\n /**\n * Puts the instance to sleep. It wont respond to any changes in the DOM and won't update. Scrollbar Interactivity is also disabled as well as the resize handle.\n * This behavior can be reset by calling the update method.\n */\n _base.sleep = function () {\n _sleeping = true;\n };\n\n /**\n * Updates the plugin and DOM to the current options.\n * This method should only be called if a update is 100% required.\n * @param force True if every property shall be updated and the cache shall be ignored.\n * !INTERNAL USAGE! : force can be a string \"auto\", \"sync\" or \"zoom\" too\n * if \"auto\" then before a real update the content size and host element attributes gets checked, and if they changed only then the update method will be called.\n * if \"sync\" then the async update process (MutationObserver or UpdateLoop) gets synchronized and a corresponding update takes place if one was needed due to pending changes.\n * if \"zoom\" then a update takes place where it's assumed that content and host size changed\n * @returns {boolean|undefined} \n * If force is \"sync\" then a boolean is returned which indicates whether a update was needed due to pending changes.\n * If force is \"auto\" then a boolean is returned whether a update was needed due to attribute or size changes.\n * undefined otherwise.\n */\n _base.update = function (force) {\n var attrsChanged;\n var contentSizeC;\n var isString = type(force) == TYPES.s;\n var imgElementSelector = 'img';\n var imgElementLoadEvent = 'load';\n var doUpdateAuto;\n var mutHost;\n var mutContent;\n if(isString) {\n if (force === _strAuto) {\n attrsChanged = meaningfulAttrsChanged();\n contentSizeC = updateAutoContentSizeChanged();\n doUpdateAuto = attrsChanged || contentSizeC;\n if (doUpdateAuto) {\n update({\n _contentSizeChanged : contentSizeC,\n _changedOptions : _initialized ? undefined : _currentPreparedOptions\n });\n }\n }\n else if (force === _strSync) {\n if(_mutationObserversConnected) {\n mutHost = _mutationObserverHostCallback(_mutationObserverHost.takeRecords());\n mutContent = _mutationObserverContentCallback(_mutationObserverContent.takeRecords());\n }\n else {\n mutHost = _base.update(_strAuto);\n }\n }\n else if (force === 'zoom') {\n update({\n _hostSizeChanged : true,\n _contentSizeChanged : true\n });\n }\n }\n else {\n force = _sleeping || force;\n _sleeping = false;\n if(!_base.update(_strSync) || force)\n update({ _force : force });\n }\n if(!_isTextarea) {\n _contentElement.find(imgElementSelector).each(function(i, el) {\n var index = COMPATIBILITY.inA(el, _imgs);\n if (index === -1)\n FRAMEWORK(el).off(imgElementLoadEvent, imgOnLoad).on(imgElementLoadEvent, imgOnLoad);\n });\n }\n return doUpdateAuto || mutHost || mutContent;\n };\n\n /**\n Gets or sets the current options. The update method will be called automatically if new options were set.\n * @param newOptions If new options are given, then the new options will be set, if new options aren't given (undefined or a not a plain object) then the current options will be returned.\n * @param value If new options is a property path string, then this value will be used to set the option to which the property path string leads.\n * @returns {*}\n */\n _base.options = function (newOptions, value) {\n var option = { };\n var changedOps;\n \n //return current options if newOptions are undefined or empty\n if (FRAMEWORK.isEmptyObject(newOptions) || !FRAMEWORK.isPlainObject(newOptions)) {\n if (type(newOptions) == TYPES.s) {\n if (arguments.length > 1) {\n setObjectPropVal(option, newOptions, value);\n changedOps = setOptions(option);\n }\n else\n return getObjectPropVal(_currentOptions, newOptions);\n }\n else\n return _currentOptions;\n }\n else {\n changedOps = setOptions(newOptions);\n }\n \n if(!FRAMEWORK.isEmptyObject(changedOps)) {\n update({ _changedOptions : changedOps });\n } \n };\n\n /**\n * Restore the DOM, disconnects all observers, remove all resize observers and put the instance to sleep.\n */\n _base.destroy = function () {\n //remove this instance from auto update loop\n autoUpdateLoop.remove(_base);\n\n //disconnect all mutation observers\n disconnectMutationObservers();\n\n //remove all resize observers\n setupResizeObserver(_sizeObserverElement);\n setupResizeObserver(_sizeAutoObserverElement);\n\n //remove all extensions\n for(var extName in _extensions)\n _base.removeExt(extName);\n\n //remove all events from host element\n setupHostMouseTouchEvents(true);\n\n //remove all events from structure\n setupStructureEvents(true);\n\n //remove all helper / detection elements\n if (_contentGlueElement)\n remove(_contentGlueElement);\n if (_contentArrangeElement)\n remove(_contentArrangeElement);\n if (_sizeAutoObserverAdded)\n remove(_sizeAutoObserverElement);\n\n //remove all generated DOM\n setupScrollbarsDOM(true);\n setupScrollbarCornerDOM(true);\n setupStructureDOM(true);\n\n //remove all generated image load events\n for(var i = 0; i < _imgs[LEXICON.l]; i++)\n FRAMEWORK(_imgs[i]).off('load', imgOnLoad);\n _imgs = undefined;\n\n _destroyed = true;\n _sleeping = true;\n\n //remove this instance from the instances list\n INSTANCES(pluginTargetElement, 0);\n dispatchCallback(\"onDestroyed\");\n\n //remove all properties and methods\n //for (var property in _base)\n // delete _base[property];\n //_base = undefined;\n };\n\n /**\n * Scrolls to a given position or element.\n * @param coordinates\n * 1. Can be \"coordinates\" which looks like:\n * { x : ?, y : ? } OR Object with x and y properties\n * { left : ?, top : ? } OR Object with left and top properties\n * { l : ?, t : ? } OR Object with l and t properties\n * [ ?, ? ] OR Array where the first two element are the coordinates (first is x, second is y)\n * ? A single value which stays for both axis\n * A value can be a number, a string or a calculation.\n *\n * Operators:\n * [NONE] The current scroll will be overwritten by the value.\n * '+=' The value will be added to the current scroll offset\n * '-=' The value will be subtracted from the current scroll offset\n * '*=' The current scroll wil be multiplicated by the value.\n * '/=' The current scroll wil be divided by the value.\n *\n * Units:\n * [NONE] The value is the final scroll amount. final = (value * 1)\n * 'px' Same as none\n * '%' The value is dependent on the current scroll value. final = ((currentScrollValue / 100) * value)\n * 'vw' The value is multiplicated by the viewport width. final = (value * viewportWidth)\n * 'vh' The value is multiplicated by the viewport height. final = (value * viewportHeight)\n *\n * example final values:\n * 200, '200px', '50%', '1vw', '1vh', '+=200', '/=1vw', '*=2px', '-=5vh', '+=33%', '+= 50% - 2px', '-= 1vw - 50%'\n *\n * 2. Can be a HTML or jQuery element:\n * The final scroll offset is the offset (without margin) of the given HTML / jQuery element.\n *\n * 3. Can be a object with a HTML or jQuery element with additional settings:\n * {\n * el : [HTMLElement, jQuery element], MUST be specified, else this object isn't valid.\n * scroll : [string, array, object], Default value is 'always'.\n * block : [string, array, object], Default value is 'begin'.\n * margin : [number, boolean, array, object] Default value is false.\n * }\n *\n * Possible scroll settings are:\n * 'always' Scrolls always.\n * 'ifneeded' Scrolls only if the element isnt fully in view.\n * 'never' Scrolls never.\n *\n * Possible block settings are:\n * 'begin' Both axis shall be docked to the \"begin\" edge. - The element will be docked to the top and left edge of the viewport.\n * 'end' Both axis shall be docked to the \"end\" edge. - The element will be docked to the bottom and right edge of the viewport. (If direction is RTL to the bottom and left edge.)\n * 'center' Both axis shall be docked to \"center\". - The element will be centered in the viewport.\n * 'nearest' The element will be docked to the nearest edge(s).\n *\n * Possible margin settings are: -- The actual margin of the element wont be affect, this option affects only the final scroll offset.\n * [BOOLEAN] If true the css margin of the element will be used, if false no margin will be used.\n * [NUMBER] The margin will be used for all edges.\n *\n * @param duration The duration of the scroll animation, OR a jQuery animation configuration object.\n * @param easing The animation easing.\n * @param complete The animation complete callback.\n * @returns {{\n * position: {x: number, y: number},\n * ratio: {x: number, y: number},\n * max: {x: number, y: number},\n * handleOffset: {x: number, y: number},\n * handleLength: {x: number, y: number},\n * handleLengthRatio: {x: number, y: number}, t\n * rackLength: {x: number, y: number},\n * isRTL: boolean,\n * isRTLNormalized: boolean\n * }}\n */\n _base.scroll = function (coordinates, duration, easing, complete) {\n if (arguments.length === 0 || coordinates === undefined) {\n var infoX = _scrollHorizontalInfo;\n var infoY = _scrollVerticalInfo;\n var normalizeInvert = _normalizeRTLCache && _isRTL && _rtlScrollBehavior.i;\n var normalizeNegate = _normalizeRTLCache && _isRTL && _rtlScrollBehavior.n;\n var scrollX = infoX._currentScroll;\n var scrollXRatio = infoX._currentScrollRatio;\n var maxScrollX = infoX._maxScroll;\n scrollXRatio = normalizeInvert ? 1 - scrollXRatio : scrollXRatio;\n scrollX = normalizeInvert ? maxScrollX - scrollX : scrollX;\n scrollX *= normalizeNegate ? -1 : 1;\n maxScrollX *= normalizeNegate ? -1 : 1;\n\n return {\n position : {\n x : scrollX,\n y : infoY._currentScroll\n },\n ratio : {\n x : scrollXRatio,\n y : infoY._currentScrollRatio\n },\n max : {\n x : maxScrollX,\n y : infoY._maxScroll\n },\n handleOffset : {\n x : infoX._handleOffset,\n y : infoY._handleOffset\n },\n handleLength : {\n x : infoX._handleLength,\n y : infoY._handleLength\n },\n handleLengthRatio : {\n x : infoX._handleLengthRatio,\n y : infoY._handleLengthRatio\n },\n trackLength : {\n x : infoX._trackLength,\n y : infoY._trackLength\n },\n snappedHandleOffset : {\n x : infoX._snappedHandleOffset,\n y : infoY._snappedHandleOffset\n },\n isRTL: _isRTL,\n isRTLNormalized: _normalizeRTLCache\n };\n }\n \n _base.update(_strSync);\n \n var normalizeRTL = _normalizeRTLCache;\n var coordinatesXAxisProps = [_strX, _strLeft, 'l'];\n var coordinatesYAxisProps = [_strY, _strTop, 't'];\n var coordinatesOperators = ['+=', '-=', '*=', '/='];\n var durationIsObject = type(duration) == TYPES.o;\n var completeCallback = durationIsObject ? duration.complete : complete;\n var i;\n var finalScroll = { };\n var specialEasing = {};\n var doScrollLeft;\n var doScrollTop;\n var animationOptions;\n var strEnd = 'end';\n var strBegin = 'begin';\n var strCenter = 'center';\n var strNearest = 'nearest';\n var strAlways = 'always';\n var strNever = 'never';\n var strIfNeeded = 'ifneeded';\n var strLength = LEXICON.l;\n var settingsAxis;\n var settingsScroll;\n var settingsBlock;\n var settingsMargin;\n var finalElement;\n var elementObjSettingsAxisValues = [_strX, _strY, 'xy', 'yx'];\n var elementObjSettingsBlockValues = [strBegin, strEnd, strCenter, strNearest];\n var elementObjSettingsScrollValues = [strAlways, strNever, strIfNeeded];\n var coordinatesIsElementObj = coordinates[LEXICON.hOP]('el');\n var possibleElement = coordinatesIsElementObj ? coordinates.el : coordinates;\n var possibleElementIsJQuery = possibleElement instanceof FRAMEWORK || JQUERY ? possibleElement instanceof JQUERY : false;\n var possibleElementIsHTMLElement = possibleElementIsJQuery ? false : isHTMLElement(possibleElement);\n var proxyCompleteCallback = type(completeCallback) != TYPES.f ? undefined : function() {\n if(doScrollLeft)\n refreshScrollbarHandleOffset(true);\n if(doScrollTop)\n refreshScrollbarHandleOffset(false);\n completeCallback();\n };\n var checkSettingsStringValue = function (currValue, allowedValues) {\n for (i = 0; i < allowedValues[strLength]; i++) {\n if (currValue === allowedValues[i])\n return true;\n }\n return false;\n };\n var getRawScroll = function (isX, coordinates) {\n var coordinateProps = isX ? coordinatesXAxisProps : coordinatesYAxisProps;\n coordinates = type(coordinates) == TYPES.s || type(coordinates) == TYPES.n ? [ coordinates, coordinates ] : coordinates;\n\n if (type(coordinates) == TYPES.a)\n return isX ? coordinates[0] : coordinates[1];\n else if (type(coordinates) == TYPES.o) {\n //decides RTL normalization \"hack\" with .n\n //normalizeRTL = type(coordinates.n) == TYPES.b ? coordinates.n : normalizeRTL; \n for (i = 0; i < coordinateProps[strLength]; i++)\n if (coordinateProps[i] in coordinates)\n return coordinates[coordinateProps[i]];\n }\n };\n var getFinalScroll = function (isX, rawScroll) {\n var isString = type(rawScroll) == TYPES.s;\n var operator;\n var amount;\n var scrollInfo = isX ? _scrollHorizontalInfo : _scrollVerticalInfo;\n var currScroll = scrollInfo._currentScroll;\n var maxScroll = scrollInfo._maxScroll;\n var mult = ' * ';\n var finalValue;\n var isRTLisX = _isRTL && isX;\n var normalizeShortcuts = isRTLisX && _rtlScrollBehavior.n && !normalizeRTL;\n var strReplace = 'replace';\n var evalFunc = eval;\n var possibleOperator;\n if (isString) {\n //check operator\n if (rawScroll[strLength] > 2) {\n possibleOperator = rawScroll.substr(0, 2);\n if(inArray(possibleOperator, coordinatesOperators) > -1)\n operator = possibleOperator;\n }\n\n //calculate units and shortcuts\n rawScroll = operator ? rawScroll.substr(2) : rawScroll;\n rawScroll = rawScroll\n [strReplace](/min/g, 0) //'min' = 0%\n [strReplace](/</g, 0) //'<' = 0%\n [strReplace](/max/g, (normalizeShortcuts ? '-' : _strEmpty) + _strHundredPercent) //'max' = 100%\n [strReplace](/>/g, (normalizeShortcuts ? '-' : _strEmpty) + _strHundredPercent) //'>' = 100%\n [strReplace](/px/g, _strEmpty)\n [strReplace](/%/g, mult + (maxScroll * (isRTLisX && _rtlScrollBehavior.n ? -1 : 1) / 100.0))\n [strReplace](/vw/g, mult + _viewportSize.w)\n [strReplace](/vh/g, mult + _viewportSize.h);\n amount = parseToZeroOrNumber(isNaN(rawScroll) ? parseToZeroOrNumber(evalFunc(rawScroll), true).toFixed() : rawScroll);\n }\n else {\n amount = rawScroll;\n }\n\n if (amount !== undefined && !isNaN(amount) && type(amount) == TYPES.n) {\n var normalizeIsRTLisX = normalizeRTL && isRTLisX;\n var operatorCurrScroll = currScroll * (normalizeIsRTLisX && _rtlScrollBehavior.n ? -1 : 1);\n var invert = normalizeIsRTLisX && _rtlScrollBehavior.i;\n var negate = normalizeIsRTLisX && _rtlScrollBehavior.n;\n operatorCurrScroll = invert ? (maxScroll - operatorCurrScroll) : operatorCurrScroll;\n switch (operator) {\n case '+=':\n finalValue = operatorCurrScroll + amount;\n break;\n case '-=':\n finalValue = operatorCurrScroll - amount;\n break;\n case '*=':\n finalValue = operatorCurrScroll * amount;\n break;\n case '/=':\n finalValue = operatorCurrScroll / amount;\n break;\n default:\n finalValue = amount;\n break;\n }\n finalValue = invert ? maxScroll - finalValue : finalValue;\n finalValue *= negate ? -1 : 1;\n finalValue = isRTLisX && _rtlScrollBehavior.n ? MATH.min(0, MATH.max(maxScroll, finalValue)) : MATH.max(0, MATH.min(maxScroll, finalValue));\n }\n return finalValue === currScroll ? undefined : finalValue;\n };\n var getPerAxisValue = function (value, valueInternalType, defaultValue, allowedValues) {\n var resultDefault = [ defaultValue, defaultValue ];\n var valueType = type(value);\n var valueArrLength;\n var valueArrItem;\n\n //value can be [ string, or array of two strings ]\n if (valueType == valueInternalType) {\n value = [value, value];\n }\n else if (valueType == TYPES.a) {\n valueArrLength = value[strLength];\n if (valueArrLength > 2 || valueArrLength < 1)\n value = resultDefault;\n else {\n if (valueArrLength === 1)\n value[1] = defaultValue;\n for (i = 0; i < valueArrLength; i++) {\n valueArrItem = value[i];\n if (type(valueArrItem) != valueInternalType || !checkSettingsStringValue(valueArrItem, allowedValues)) {\n value = resultDefault;\n break;\n }\n }\n }\n }\n else if (valueType == TYPES.o)\n value = [ value[_strX]|| defaultValue, value[_strY] || defaultValue];\n else\n value = resultDefault;\n return { x : value[0], y : value[1] };\n };\n var generateMargin = function (marginTopRightBottomLeftArray) {\n var result = [ ];\n var currValue;\n var currValueType;\n var valueDirections = [ _strTop, _strRight, _strBottom, _strLeft ];\n for(i = 0; i < marginTopRightBottomLeftArray[strLength]; i++) {\n if(i === valueDirections[strLength])\n break;\n currValue = marginTopRightBottomLeftArray[i];\n currValueType = type(currValue);\n if(currValueType == TYPES.b)\n result.push(currValue ? parseToZeroOrNumber(finalElement.css(_strMarginMinus + valueDirections[i])) : 0);\n else\n result.push(currValueType == TYPES.n ? currValue : 0);\n }\n return result;\n };\n\n if (possibleElementIsJQuery || possibleElementIsHTMLElement) {\n //get settings\n var margin = coordinatesIsElementObj ? coordinates.margin : 0;\n var axis = coordinatesIsElementObj ? coordinates.axis : 0;\n var scroll = coordinatesIsElementObj ? coordinates.scroll : 0;\n var block = coordinatesIsElementObj ? coordinates.block : 0;\n var marginDefault = [ 0, 0, 0, 0 ];\n var marginType = type(margin);\n var marginLength;\n finalElement = possibleElementIsJQuery ? possibleElement : FRAMEWORK(possibleElement);\n if (finalElement[strLength] === 0)\n return;\n\n //margin can be [ boolean, number, array of 2, array of 4, object ]\n if (marginType == TYPES.n || marginType == TYPES.b)\n margin = generateMargin([margin, margin, margin, margin]);\n else if (marginType == TYPES.a) {\n marginLength = margin[strLength];\n if(marginLength === 2)\n margin = generateMargin([margin[0], margin[1], margin[0], margin[1]]);\n else if(marginLength >= 4)\n margin = generateMargin(margin);\n else\n margin = marginDefault;\n }\n else if (marginType == TYPES.o)\n margin = generateMargin([margin[_strTop], margin[_strRight], margin[_strBottom], margin[_strLeft]]);\n else\n margin = marginDefault;\n\n //block = type(block) === TYPES.b ? block ? [ strNearest, strBegin ] : [ strNearest, strEnd ] : block;\n settingsAxis = checkSettingsStringValue(axis, elementObjSettingsAxisValues) ? axis : 'xy';\n settingsScroll = getPerAxisValue(scroll, TYPES.s, strAlways, elementObjSettingsScrollValues);\n settingsBlock = getPerAxisValue(block, TYPES.s, strBegin, elementObjSettingsBlockValues);\n settingsMargin = margin;\n\n var viewportScroll = {\n l: _scrollHorizontalInfo._currentScroll,\n t: _scrollVerticalInfo._currentScroll\n };\n // use padding element instead of viewport element because padding element has never padding, margin or position applied.\n var viewportOffset = _paddingElement.offset();\n\n //get coordinates\n var elementOffset = finalElement.offset();\n var doNotScroll = {\n x : settingsScroll.x == strNever || settingsAxis == _strY,\n y : settingsScroll.y == strNever || settingsAxis == _strX\n };\n elementOffset[_strTop] -= settingsMargin[0];\n elementOffset[_strLeft] -= settingsMargin[3];\n var elementScrollCoordinates = {\n x: MATH.round(elementOffset[_strLeft] - viewportOffset[_strLeft] + viewportScroll.l),\n y: MATH.round(elementOffset[_strTop] - viewportOffset[_strTop] + viewportScroll.t)\n };\n if (_isRTL) {\n if (!_rtlScrollBehavior.n && !_rtlScrollBehavior.i)\n elementScrollCoordinates.x = MATH.round(viewportOffset[_strLeft] - elementOffset[_strLeft] + viewportScroll.l);\n if (_rtlScrollBehavior.n && normalizeRTL)\n elementScrollCoordinates.x *= -1;\n if (_rtlScrollBehavior.i && normalizeRTL)\n elementScrollCoordinates.x = MATH.round(viewportOffset[_strLeft] - elementOffset[_strLeft] + (_scrollHorizontalInfo._maxScroll - viewportScroll.l));\n }\n\n //measuring is required\n if (settingsBlock.x != strBegin || settingsBlock.y != strBegin || settingsScroll.x == strIfNeeded || settingsScroll.y == strIfNeeded || _isRTL) {\n var measuringElm = finalElement[0];\n var rawElementSize = _supportTransform ? measuringElm.getBoundingClientRect() : {\n width : measuringElm[LEXICON.oW],\n height : measuringElm[LEXICON.oH]\n };\n var elementSize = {\n w: rawElementSize[_strWidth] + settingsMargin[3] + settingsMargin[1],\n h: rawElementSize[_strHeight] + settingsMargin[0] + settingsMargin[2]\n };\n var finalizeBlock = function(isX) {\n var vars = getScrollbarVars(isX);\n var wh = vars._w_h;\n var lt = vars._left_top;\n var xy = vars._x_y;\n var blockIsEnd = settingsBlock[xy] == (isX ? _isRTL ? strBegin : strEnd : strEnd);\n var blockIsCenter = settingsBlock[xy] == strCenter;\n var blockIsNearest = settingsBlock[xy] == strNearest;\n var scrollNever = settingsScroll[xy] == strNever;\n var scrollIfNeeded = settingsScroll[xy] == strIfNeeded;\n var vpSize = _viewportSize[wh];\n var vpOffset = viewportOffset[lt];\n var elSize = elementSize[wh];\n var elOffset = elementOffset[lt];\n var divide = blockIsCenter ? 2 : 1;\n var elementCenterOffset = elOffset + (elSize / 2);\n var viewportCenterOffset = vpOffset + (vpSize / 2);\n var isInView =\n elSize <= vpSize\n && elOffset >= vpOffset\n && elOffset + elSize <= vpOffset + vpSize;\n\n if(scrollNever)\n doNotScroll[xy] = true;\n else if(!doNotScroll[xy]) {\n if (blockIsNearest || scrollIfNeeded) {\n doNotScroll[xy] = scrollIfNeeded ? isInView : false;\n blockIsEnd = elSize < vpSize ? elementCenterOffset > viewportCenterOffset : elementCenterOffset < viewportCenterOffset;\n }\n elementScrollCoordinates[xy] -= blockIsEnd || blockIsCenter ? ((vpSize / divide) - (elSize / divide)) * (isX && _isRTL && normalizeRTL ? -1 : 1) : 0;\n }\n };\n finalizeBlock(true);\n finalizeBlock(false);\n }\n\n if (doNotScroll.y)\n delete elementScrollCoordinates.y;\n if (doNotScroll.x)\n delete elementScrollCoordinates.x;\n\n coordinates = elementScrollCoordinates;\n }\n\n finalScroll[_strScrollLeft] = getFinalScroll(true, getRawScroll(true, coordinates));\n finalScroll[_strScrollTop] = getFinalScroll(false, getRawScroll(false, coordinates));\n doScrollLeft = finalScroll[_strScrollLeft] !== undefined;\n doScrollTop = finalScroll[_strScrollTop] !== undefined;\n\n if ((doScrollLeft || doScrollTop) && (duration > 0 || durationIsObject)) {\n if (durationIsObject) {\n duration.complete = proxyCompleteCallback;\n _viewportElement.animate(finalScroll, duration);\n }\n else {\n animationOptions = {\n duration: duration,\n complete: proxyCompleteCallback\n };\n if (type(easing) == TYPES.a || FRAMEWORK.isPlainObject(easing)) {\n specialEasing[_strScrollLeft] = easing[0] || easing.x;\n specialEasing[_strScrollTop] = easing[1] || easing.y;\n animationOptions.specialEasing = specialEasing;\n }\n else {\n animationOptions.easing = easing;\n }\n _viewportElement.animate(finalScroll, animationOptions);\n }\n }\n else {\n if (doScrollLeft)\n _viewportElement[_strScrollLeft](finalScroll[_strScrollLeft]);\n if (doScrollTop)\n _viewportElement[_strScrollTop](finalScroll[_strScrollTop]);\n }\n };\n\n /**\n * Stops all scroll animations.\n * @returns {*} The current OverlayScrollbars instance (for chaining).\n */\n _base.scrollStop = function (param1, param2, param3) {\n _viewportElement.stop(param1, param2, param3);\n return _base;\n };\n\n /**\n * Returns all relevant elements.\n * @param elementName The name of the element which shall be returned.\n * @returns {{target: *, host: *, padding: *, viewport: *, content: *, scrollbarHorizontal: {scrollbar: *, track: *, handle: *}, scrollbarVertical: {scrollbar: *, track: *, handle: *}, scrollbarCorner: *} | *}\n */\n _base.getElements = function (elementName) {\n var obj = {\n target: _targetElementNative,\n host: _hostElementNative,\n padding: _paddingElementNative,\n viewport: _viewportElementNative,\n content: _contentElementNative,\n scrollbarHorizontal: {\n scrollbar: _scrollbarHorizontalElement[0],\n track: _scrollbarHorizontalTrackElement[0],\n handle: _scrollbarHorizontalHandleElement[0]\n },\n scrollbarVertical: {\n scrollbar: _scrollbarVerticalElement[0],\n track: _scrollbarVerticalTrackElement[0],\n handle: _scrollbarVerticalHandleElement[0]\n },\n scrollbarCorner: _scrollbarCornerElement[0]\n };\n return type(elementName) == TYPES.s ? getObjectPropVal(obj, elementName) : obj;\n };\n\n /**\n * Returns a object which describes the current state of this instance.\n * @param stateProperty A specific property from the state object which shall be returned.\n * @returns {{widthAuto, heightAuto, overflowAmount, hideOverflow, hasOverflow, contentScrollSize, viewportSize, hostSize, autoUpdate} | *}\n */\n _base.getState = function (stateProperty) {\n function prepare(obj) {\n if (!FRAMEWORK.isPlainObject(obj))\n return obj;\n var extended = extendDeep({}, obj);\n var changePropertyName = function (from, to) {\n if (extended[LEXICON.hOP](from)) {\n extended[to] = extended[from];\n delete extended[from];\n }\n };\n changePropertyName('w', _strWidth); //change w to width\n changePropertyName('h', _strHeight); //change h to height\n delete extended.c; //delete c (the 'changed' prop)\n return extended;\n };\n var obj = {\n destroyed: !!prepare(_destroyed),\n sleeping: !!prepare(_sleeping),\n autoUpdate: prepare(!_mutationObserversConnected),\n widthAuto: prepare(_widthAutoCache),\n heightAuto: prepare(_heightAutoCache),\n padding: prepare(_cssPaddingCache),\n overflowAmount: prepare(_overflowAmountCache),\n hideOverflow: prepare(_hideOverflowCache),\n hasOverflow: prepare(_hasOverflowCache),\n contentScrollSize: prepare(_contentScrollSizeCache),\n viewportSize: prepare(_viewportSize),\n hostSize: prepare(_hostSizeCache),\n documentMixed : prepare(_documentMixed)\n };\n return type(stateProperty) == TYPES.s ? getObjectPropVal(obj, stateProperty) : obj;\n };\n\n /**\n * Gets all or specific extension instance.\n * @param extName The name of the extension from which the instance shall be got.\n * @returns {{}} The instance of the extension with the given name or undefined if the instance couldn't be found.\n */\n _base.ext = function(extName) {\n var result;\n var privateMethods = _extensionsPrivateMethods.split(' ');\n var i = 0;\n if(type(extName) == TYPES.s) {\n if(_extensions[LEXICON.hOP](extName)) {\n result = extendDeep({}, _extensions[extName]);\n for (; i < privateMethods.length; i++)\n delete result[privateMethods[i]];\n }\n }\n else {\n result = { };\n for(i in _extensions)\n result[i] = extendDeep({ }, _base.ext(i));\n }\n return result;\n };\n\n /**\n * Adds a extension to this instance.\n * @param extName The name of the extension which shall be added.\n * @param extensionOptions The extension options which shall be used.\n * @returns {{}} The instance of the added extension or undefined if the extension couldn't be added properly.\n */\n _base.addExt = function(extName, extensionOptions) {\n var registeredExtensionObj = _plugin.extension(extName);\n var instance;\n var instanceAdded;\n var instanceContract;\n var contractResult;\n var contractFulfilled = true;\n if(registeredExtensionObj) {\n if(!_extensions[LEXICON.hOP](extName)) {\n instance = registeredExtensionObj.extensionFactory.call(_base,\n extendDeep({ }, registeredExtensionObj.defaultOptions),\n FRAMEWORK,\n COMPATIBILITY);\n\n if (instance) {\n instanceContract = instance.contract;\n if (type(instanceContract) == TYPES.f) {\n contractResult = instanceContract(window);\n contractFulfilled = type(contractResult) == TYPES.b ? contractResult : contractFulfilled;\n }\n if(contractFulfilled) {\n _extensions[extName] = instance;\n instanceAdded = instance.added;\n if(type(instanceAdded) == TYPES.f)\n instanceAdded(extensionOptions);\n\n return _base.ext(extName);\n }\n }\n }\n else\n return _base.ext(extName);\n }\n else\n console.warn(\"A extension with the name \\\"\" + extName + \"\\\" isn't registered.\");\n };\n\n /**\n * Removes a extension from this instance.\n * @param extName The name of the extension which shall be removed.\n * @returns {boolean} True if the extension was removed, false otherwise e.g. if the extension wasn't added before.\n */\n _base.removeExt = function(extName) {\n var instance = _extensions[extName];\n var instanceRemoved;\n if(instance) {\n delete _extensions[extName];\n\n instanceRemoved = instance.removed;\n if(type(instanceRemoved) == TYPES.f)\n instanceRemoved();\n\n return true;\n }\n return false;\n };\n\n /**\n * Constructs the plugin.\n * @param targetElement The element to which the plugin shall be applied.\n * @param options The initial options of the plugin.\n * @param extensions The extension(s) which shall be added right after the initialization.\n * @returns {boolean} True if the plugin was successfully initialized, false otherwise.\n */\n function construct(targetElement, options, extensions) {\n _defaultOptions = globals.defaultOptions;\n _nativeScrollbarStyling = globals.nativeScrollbarStyling;\n _nativeScrollbarSize = extendDeep({}, globals.nativeScrollbarSize);\n _nativeScrollbarIsOverlaid = extendDeep({}, globals.nativeScrollbarIsOverlaid);\n _overlayScrollbarDummySize = extendDeep({}, globals.overlayScrollbarDummySize);\n _rtlScrollBehavior = extendDeep({}, globals.rtlScrollBehavior);\n\n //parse & set options but don't update\n setOptions(extendDeep({ }, _defaultOptions, options));\n\n //check if the plugin hasn't to be initialized\n if (_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.x && !_currentPreparedOptions.nativeScrollbarsOverlaid.initialize) {\n dispatchCallback(\"onInitializationWithdrawn\");\n return false;\n }\n\n _cssCalc = globals.cssCalc;\n _msieVersion = globals.msie;\n _autoUpdateRecommended = globals.autoUpdateRecommended;\n _supportTransition = globals.supportTransition;\n _supportTransform = globals.supportTransform;\n _supportPassiveEvents = globals.supportPassiveEvents;\n _supportResizeObserver = globals.supportResizeObserver;\n _supportMutationObserver = globals.supportMutationObserver;\n _restrictedMeasuring = globals.restrictedMeasuring;\n _documentElement = FRAMEWORK(targetElement.ownerDocument);\n _documentElementNative = _documentElement[0];\n _windowElement = FRAMEWORK(_documentElementNative.defaultView || _documentElementNative.parentWindow);\n _windowElementNative = _windowElement[0];\n _htmlElement = findFirst(_documentElement, 'html');\n _bodyElement = findFirst(_htmlElement, 'body');\n _targetElement = FRAMEWORK(targetElement);\n _targetElementNative = _targetElement[0];\n _isTextarea = _targetElement.is('textarea');\n _isBody = _targetElement.is('body');\n _documentMixed = _documentElementNative !== document;\n\n var initBodyScroll;\n if (_isBody) {\n initBodyScroll = {};\n initBodyScroll.l = MATH.max(_targetElement[_strScrollLeft](), _htmlElement[_strScrollLeft](), _windowElement[_strScrollLeft]());\n initBodyScroll.t = MATH.max(_targetElement[_strScrollTop](), _htmlElement[_strScrollTop](), _windowElement[_strScrollTop]());\n }\n\n //build OverlayScrollbars DOM and Events\n setupStructureDOM();\n setupStructureEvents();\n\n //build Scrollbars DOM and Events\n setupScrollbarsDOM();\n setupScrollbarEvents(true);\n setupScrollbarEvents(false);\n\n //build Scrollbar Corner DOM and Events\n setupScrollbarCornerDOM();\n setupScrollbarCornerEvents();\n\n //create mutation observers\n createMutationObservers();\n\n if(_isBody) {\n //apply the body scroll to handle it right in the update method\n _viewportElement[_strScrollLeft](initBodyScroll.l)[_strScrollTop](initBodyScroll.t);\n\n //set the focus on the viewport element so you dont have to click on the page to use keyboard keys (up / down / space) for scrolling\n if(document.activeElement == targetElement && _viewportElementNative.focus) {\n //set a tabindex to make the viewportElement focusable\n _viewportElement.attr('tabindex', '-1');\n _viewportElementNative.focus();\n /* the tabindex has to be removed due to;\n * If you set the tabindex attribute on an <div>, then its child content cannot be scrolled with the arrow keys unless you set tabindex on the content, too\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex\n */\n _viewportElement.one(_strMouseTouchDownEvent, function() {\n _viewportElement.removeAttr('tabindex');\n });\n }\n }\n\n //build resize observer for the host element\n setupResizeObserver(_sizeObserverElement, hostOnResized);\n\n //update for the first time & initialize cache\n _base.update(_strAuto);\n\n //the plugin is initialized now!\n _initialized = true;\n dispatchCallback(\"onInitialized\");\n\n //call all callbacks which would fire before the initialized was complete\n each(_callbacksInitQeueue, function(index, value) { dispatchCallback(value.n, value.a); });\n _callbacksInitQeueue = [ ];\n\n //add extensions\n if(type(extensions) == TYPES.s)\n extensions = [ extensions ];\n if(COMPATIBILITY.isA(extensions))\n each(extensions, function (index, value) {_base.addExt(value); });\n else if(FRAMEWORK.isPlainObject(extensions))\n each(extensions, function (key, value) { _base.addExt(key, value); });\n\n //add the transition class for transitions AFTER the first update & AFTER the applied extensions (for preventing unwanted transitions)\n setTimeout(function () {\n if (_supportTransition && !_destroyed)\n addClass(_hostElement, _classNameHostTransition);\n }, 333);\n\n return _initialized;\n }\n\n if (construct(pluginTargetElement, options, extensions)) {\n INSTANCES(pluginTargetElement, _base);\n return _base;\n }\n _base = undefined;\n }\n\n /**\n * Initializes a new OverlayScrollbarsInstance object or changes options if already initialized or returns the current instance.\n * @param pluginTargetElements The elements to which the Plugin shall be initialized.\n * @param options The custom options with which the plugin shall be initialized.\n * @param extensions The extension(s) which shall be added right after initialization.\n * @returns {*}\n */\n _plugin = window[PLUGINNAME] = function(pluginTargetElements, options, extensions) {\n if(arguments[LEXICON.l] === 0)\n return this;\n\n var arr = [ ];\n var optsIsPlainObj = FRAMEWORK.isPlainObject(options);\n var inst;\n var result;\n\n //pluginTargetElements is null or undefined\n if(!pluginTargetElements)\n return optsIsPlainObj || !options ? result : arr;\n\n /*\n pluginTargetElements will be converted to:\n 1. A jQueryElement Array\n 2. A HTMLElement Array\n 3. A Array with a single HTML Element\n so pluginTargetElements is always a array.\n */\n pluginTargetElements = pluginTargetElements[LEXICON.l] != undefined ? pluginTargetElements : [ pluginTargetElements[0] || pluginTargetElements ];\n initOverlayScrollbarsStatics();\n\n if(pluginTargetElements[LEXICON.l] > 0) {\n if(optsIsPlainObj) {\n FRAMEWORK.each(pluginTargetElements, function (i, v) {\n inst = v;\n if(inst !== undefined)\n arr.push(OverlayScrollbarsInstance(inst, options, extensions, _pluginsGlobals, _pluginsAutoUpdateLoop));\n });\n }\n else {\n FRAMEWORK.each(pluginTargetElements, function(i, v) {\n inst = INSTANCES(v);\n if((options === '!' && _plugin.valid(inst)) || (COMPATIBILITY.type(options) == TYPES.f && options(v, inst)))\n arr.push(inst);\n else if(options === undefined)\n arr.push(inst);\n });\n }\n result = arr[LEXICON.l] === 1 ? arr[0] : arr;\n }\n return result;\n };\n\n /**\n * Returns a object which contains global information about the plugin and each instance of it.\n * The returned object is just a copy, that means that changes to the returned object won't have any effect to the original object.\n */\n _plugin.globals = function () {\n initOverlayScrollbarsStatics();\n var globals = FRAMEWORK.extend(true, { }, _pluginsGlobals);\n delete globals['msie'];\n return globals;\n };\n\n /**\n * Gets or Sets the default options for each new plugin initialization.\n * @param newDefaultOptions The object with which the default options shall be extended.\n */\n _plugin.defaultOptions = function(newDefaultOptions) {\n initOverlayScrollbarsStatics();\n var currDefaultOptions = _pluginsGlobals.defaultOptions;\n if(newDefaultOptions === undefined)\n return FRAMEWORK.extend(true, { }, currDefaultOptions);\n\n //set the new default options\n _pluginsGlobals.defaultOptions = FRAMEWORK.extend(true, { }, currDefaultOptions , _pluginsOptions._validate(newDefaultOptions, _pluginsOptions._template, true, currDefaultOptions)._default);\n };\n\n /**\n * Checks whether the passed instance is a non-destroyed OverlayScrollbars instance.\n * @param osInstance The potential OverlayScrollbars instance which shall be checked.\n * @returns {boolean} True if the passed value is a non-destroyed OverlayScrollbars instance, false otherwise.\n */\n _plugin.valid = function (osInstance) {\n return osInstance instanceof _plugin && !osInstance.getState().destroyed;\n };\n\n /**\n * Registers, Unregisters or returns a extension.\n * Register: Pass the name and the extension. (defaultOptions is optional)\n * Unregister: Pass the name and anything except a function as extension parameter.\n * Get extension: Pass the name of the extension which shall be got.\n * Get all extensions: Pass no arguments.\n * @param extensionName The name of the extension which shall be registered, unregistered or returned.\n * @param extension A function which generates the instance of the extension or anything other to remove a already registered extension.\n * @param defaultOptions The default options which shall be used for the registered extension.\n */\n _plugin.extension = function(extensionName, extension, defaultOptions) {\n var extNameTypeString = COMPATIBILITY.type(extensionName) == TYPES.s;\n var argLen = arguments[LEXICON.l];\n var i = 0;\n if(argLen < 1 || !extNameTypeString) {\n //return a copy of all extension objects\n return FRAMEWORK.extend(true, { length : _pluginsExtensions[LEXICON.l] }, _pluginsExtensions);\n }\n else if(extNameTypeString) {\n if(COMPATIBILITY.type(extension) == TYPES.f) {\n //register extension\n _pluginsExtensions.push({\n name : extensionName,\n extensionFactory : extension,\n defaultOptions : defaultOptions\n });\n }\n else {\n for(; i < _pluginsExtensions[LEXICON.l]; i++) {\n if (_pluginsExtensions[i].name === extensionName) {\n if(argLen > 1)\n _pluginsExtensions.splice(i, 1); //remove extension\n else\n return FRAMEWORK.extend(true, { }, _pluginsExtensions[i]); //return extension with the given name\n }\n }\n }\n }\n };\n\n return _plugin;\n })();\n\n if(JQUERY && JQUERY.fn) {\n /**\n * The jQuery initialization interface.\n * @param options The initial options for the construction of the plugin. To initialize the plugin, this option has to be a object! If it isn't a object, the instance(s) are returned and the plugin wont be initialized.\n * @param extensions The extension(s) which shall be added right after initialization.\n * @returns {*} After initialization it returns the jQuery element array, else it returns the instance(s) of the elements which are selected.\n */\n JQUERY.fn.overlayScrollbars = function (options, extensions) {\n var _elements = this;\n if(JQUERY.isPlainObject(options)) {\n JQUERY.each(_elements, function() { PLUGIN(this, options, extensions); });\n return _elements;\n }\n else\n return PLUGIN(_elements, options);\n };\n }\n return PLUGIN;\n }\n));\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/overlayscrollbars/js/jquery.overlayScrollbars.js\n// module id = 13\n// module chunks = 0","/*!\r\n * Flickity fullscreen v1.1.1\r\n * Enable fullscreen view for Flickity\r\n */\r\n\r\n/*jshint browser: true, undef: true, unused: true, strict: true*/\r\n\r\n( function( window, factory ) {\r\n // universal module definition\r\n /*jshint strict: false */ /*globals define, module, require */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( [\r\n 'flickity/js/index',\r\n ], factory );\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n require('flickity')\r\n );\r\n } else {\r\n // browser global\r\n factory(\r\n window.Flickity\r\n );\r\n }\r\n\r\n}( window, function factory( Flickity ) {\r\n\r\n'use strict';\r\n\r\nFlickity.createMethods.push('_createFullscreen');\r\nvar proto = Flickity.prototype;\r\n\r\n\r\nproto._createFullscreen = function() {\r\n this.isFullscreen = false;\r\n\r\n if ( !this.options.fullscreen ) {\r\n return;\r\n }\r\n // buttons\r\n this.viewFullscreenButton = new FullscreenButton( 'view', this );\r\n this.exitFullscreenButton = new FullscreenButton( 'exit', this );\r\n\r\n this.on( 'activate', this._changeFullscreenActive );\r\n this.on( 'deactivate', this._changeFullscreenActive );\r\n};\r\n\r\n// ----- activation ----- //\r\n\r\nproto._changeFullscreenActive = function() {\r\n var childMethod = this.isActive ? 'appendChild' : 'removeChild';\r\n this.element[ childMethod ]( this.viewFullscreenButton.element );\r\n this.element[ childMethod ]( this.exitFullscreenButton.element );\r\n // activate or deactivate buttons\r\n var activeMethod = this.isActive ? 'activate' : 'deactivate';\r\n this.viewFullscreenButton[ activeMethod ]();\r\n this.exitFullscreenButton[ activeMethod ]();\r\n};\r\n\r\n// ----- view, exit, toggle ----- //\r\n\r\nproto.viewFullscreen = function() {\r\n this._changeFullscreen( true );\r\n this.focus();\r\n};\r\n\r\nproto.exitFullscreen = function() {\r\n this._changeFullscreen( false );\r\n};\r\n\r\nproto._changeFullscreen = function( isView ) {\r\n if ( this.isFullscreen == isView ) {\r\n return;\r\n }\r\n this.isFullscreen = isView;\r\n var classMethod = isView ? 'add' : 'remove';\r\n document.documentElement.classList[ classMethod ]('is-flickity-fullscreen');\r\n this.element.classList[ classMethod ]('is-fullscreen');\r\n this.resize();\r\n // HACK extra reposition on fullscreen for images\r\n if ( this.isFullscreen ) {\r\n this.reposition();\r\n }\r\n this.dispatchEvent( 'fullscreenChange', null, [ isView ] );\r\n};\r\n\r\nproto.toggleFullscreen = function() {\r\n this._changeFullscreen( !this.isFullscreen );\r\n};\r\n\r\n// ----- setGallerySize ----- //\r\n\r\n// overwrite so fullscreen cells are full height\r\nvar setGallerySize = proto.setGallerySize;\r\nproto.setGallerySize = function() {\r\n if ( !this.options.setGallerySize ) {\r\n return;\r\n }\r\n if ( this.isFullscreen ) {\r\n // remove height style on fullscreen\r\n this.viewport.style.height = '';\r\n } else {\r\n // otherwise, do normal\r\n setGallerySize.call( this );\r\n }\r\n};\r\n\r\n// ----- keyboard ----- //\r\n\r\n// ESC key closes full screen\r\nFlickity.keyboardHandlers[27] = function() {\r\n this.exitFullscreen();\r\n};\r\n\r\n// ----- FullscreenButton ----- //\r\n\r\nfunction FullscreenButton( name, flickity ) {\r\n this.name = name;\r\n this.createButton();\r\n this.createIcon();\r\n // events\r\n // trigger viewFullscreen or exitFullscreen on click\r\n this.onClick = function() {\r\n flickity[ name + 'Fullscreen' ]();\r\n };\r\n this.clickHandler = this.onClick.bind( this );\r\n}\r\n\r\nFullscreenButton.prototype.createButton = function() {\r\n var element = this.element = document.createElement('button');\r\n element.className = 'flickity-button flickity-fullscreen-button ' +\r\n 'flickity-fullscreen-button-' + this.name;\r\n // prevent button from submitting form\r\n element.setAttribute( 'type', 'button' );\r\n // set label\r\n var label = capitalize( this.name + ' full-screen' );\r\n element.setAttribute( 'aria-label', label );\r\n element.title = label;\r\n};\r\n\r\nfunction capitalize( text ) {\r\n return text[0].toUpperCase() + text.slice(1);\r\n}\r\n\r\nvar svgURI = 'http://www.w3.org/2000/svg';\r\n\r\nvar pathDirections = {\r\n view: 'M15,20,7,28h5v4H0V20H4v5l8-8Zm5-5,8-8v5h4V0H20V4h5l-8,8Z',\r\n exit: 'M32,3l-7,7h5v4H18V2h4V7l7-7ZM3,32l7-7v5h4V18H2v4H7L0,29Z',\r\n};\r\n\r\nFullscreenButton.prototype.createIcon = function() {\r\n var svg = document.createElementNS( svgURI, 'svg');\r\n svg.setAttribute( 'class', 'flickity-button-icon' );\r\n svg.setAttribute( 'viewBox', '0 0 32 32' );\r\n // path & direction\r\n var path = document.createElementNS( svgURI, 'path');\r\n var direction = pathDirections[ this.name ];\r\n path.setAttribute( 'd', direction );\r\n // put it together\r\n svg.appendChild( path );\r\n this.element.appendChild( svg );\r\n};\r\n\r\nFullscreenButton.prototype.activate = function() {\r\n this.element.addEventListener( 'click', this.clickHandler );\r\n};\r\n\r\nFullscreenButton.prototype.deactivate = function() {\r\n this.element.removeEventListener( 'click', this.clickHandler );\r\n};\r\n\r\nFlickity.FullscreenButton = FullscreenButton;\r\n\r\n// ----- fin ----- //\r\n\r\nreturn Flickity;\r\n\r\n}));\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/vendor/flickity-fullscreen.js","/*!\n * Flickity v2.2.0\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2018 Metafizzy\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n './drag',\n './prev-next-button',\n './page-dots',\n './player',\n './add-remove-cell',\n './lazyload'\n ], factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./flickity'),\n require('./drag'),\n require('./prev-next-button'),\n require('./page-dots'),\n require('./player'),\n require('./add-remove-cell'),\n require('./lazyload')\n );\n }\n\n})( window, function factory( Flickity ) {\n /*jshint strict: false*/\n return Flickity;\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/index.js\n// module id = 15\n// module chunks = 0","/**\n * matchesSelector v2.0.2\n * matchesSelector( element, '.selector' )\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n /*global define: false, module: false */\n 'use strict';\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.matchesSelector = factory();\n }\n\n}( window, function factory() {\n 'use strict';\n\n var matchesMethod = ( function() {\n var ElemProto = window.Element.prototype;\n // check for the standard method name first\n if ( ElemProto.matches ) {\n return 'matches';\n }\n // check un-prefixed\n if ( ElemProto.matchesSelector ) {\n return 'matchesSelector';\n }\n // check vendor prefixes\n var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\n\n for ( var i=0; i < prefixes.length; i++ ) {\n var prefix = prefixes[i];\n var method = prefix + 'MatchesSelector';\n if ( ElemProto[ method ] ) {\n return method;\n }\n }\n })();\n\n return function matchesSelector( elem, selector ) {\n return elem[ matchesMethod ]( selector );\n };\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/desandro-matches-selector/matches-selector.js\n// module id = 16\n// module chunks = 0","// Flickity.Cell\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'get-size/get-size'\n ], function( getSize ) {\n return factory( window, getSize );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('get-size')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Cell = factory(\n window,\n window.getSize\n );\n }\n\n}( window, function factory( window, getSize ) {\n\n'use strict';\n\nfunction Cell( elem, parent ) {\n this.element = elem;\n this.parent = parent;\n\n this.create();\n}\n\nvar proto = Cell.prototype;\n\nproto.create = function() {\n this.element.style.position = 'absolute';\n this.element.setAttribute( 'aria-hidden', 'true' );\n this.x = 0;\n this.shift = 0;\n};\n\nproto.destroy = function() {\n // reset style\n this.unselect();\n this.element.style.position = '';\n var side = this.parent.originSide;\n this.element.style[ side ] = '';\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\nproto.setPosition = function( x ) {\n this.x = x;\n this.updateTarget();\n this.renderPosition( x );\n};\n\n// setDefaultTarget v1 method, backwards compatibility, remove in v3\nproto.updateTarget = proto.setDefaultTarget = function() {\n var marginProperty = this.parent.originSide == 'left' ? 'marginLeft' : 'marginRight';\n this.target = this.x + this.size[ marginProperty ] +\n this.size.width * this.parent.cellAlign;\n};\n\nproto.renderPosition = function( x ) {\n // render position of cell with in slider\n var side = this.parent.originSide;\n this.element.style[ side ] = this.parent.getPositionValue( x );\n};\n\nproto.select = function() {\n this.element.classList.add('is-selected');\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.unselect = function() {\n this.element.classList.remove('is-selected');\n this.element.setAttribute( 'aria-hidden', 'true' );\n};\n\n/**\n * @param {Integer} factor - 0, 1, or -1\n**/\nproto.wrapShift = function( shift ) {\n this.shift = shift;\n this.renderPosition( this.x + this.parent.slideableWidth * shift );\n};\n\nproto.remove = function() {\n this.element.parentNode.removeChild( this.element );\n};\n\nreturn Cell;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/cell.js\n// module id = 17\n// module chunks = 0","// slide\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Slide = factory();\n }\n\n}( window, function factory() {\n'use strict';\n\nfunction Slide( parent ) {\n this.parent = parent;\n this.isOriginLeft = parent.originSide == 'left';\n this.cells = [];\n this.outerWidth = 0;\n this.height = 0;\n}\n\nvar proto = Slide.prototype;\n\nproto.addCell = function( cell ) {\n this.cells.push( cell );\n this.outerWidth += cell.size.outerWidth;\n this.height = Math.max( cell.size.outerHeight, this.height );\n // first cell stuff\n if ( this.cells.length == 1 ) {\n this.x = cell.x; // x comes from first cell\n var beginMargin = this.isOriginLeft ? 'marginLeft' : 'marginRight';\n this.firstMargin = cell.size[ beginMargin ];\n }\n};\n\nproto.updateTarget = function() {\n var endMargin = this.isOriginLeft ? 'marginRight' : 'marginLeft';\n var lastCell = this.getLastCell();\n var lastMargin = lastCell ? lastCell.size[ endMargin ] : 0;\n var slideWidth = this.outerWidth - ( this.firstMargin + lastMargin );\n this.target = this.x + this.firstMargin + slideWidth * this.parent.cellAlign;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.select = function() {\n this.cells.forEach( function( cell ) {\n cell.select();\n });\n};\n\nproto.unselect = function() {\n this.cells.forEach( function( cell ) {\n cell.unselect();\n });\n};\n\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n });\n};\n\nreturn Slide;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/slide.js\n// module id = 18\n// module chunks = 0","// animate\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'fizzy-ui-utils/utils'\n ], function( utils ) {\n return factory( window, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.animatePrototype = factory(\n window,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, utils ) {\n\n'use strict';\n\n// -------------------------- animate -------------------------- //\n\nvar proto = {};\n\nproto.startAnimation = function() {\n if ( this.isAnimating ) {\n return;\n }\n\n this.isAnimating = true;\n this.restingFrames = 0;\n this.animate();\n};\n\nproto.animate = function() {\n this.applyDragForce();\n this.applySelectedAttraction();\n\n var previousX = this.x;\n\n this.integratePhysics();\n this.positionSlider();\n this.settle( previousX );\n // animate next frame\n if ( this.isAnimating ) {\n var _this = this;\n requestAnimationFrame( function animateFrame() {\n _this.animate();\n });\n }\n};\n\nproto.positionSlider = function() {\n var x = this.x;\n // wrap position around\n if ( this.options.wrapAround && this.cells.length > 1 ) {\n x = utils.modulo( x, this.slideableWidth );\n x = x - this.slideableWidth;\n this.shiftWrapCells( x );\n }\n\n this.setTranslateX( x, this.isAnimating );\n this.dispatchScrollEvent();\n};\n\nproto.setTranslateX = function( x, is3d ) {\n x += this.cursorPosition;\n // reverse if right-to-left and using transform\n x = this.options.rightToLeft ? -x : x;\n var translateX = this.getPositionValue( x );\n // use 3D tranforms for hardware acceleration on iOS\n // but use 2D when settled, for better font-rendering\n this.slider.style.transform = is3d ?\n 'translate3d(' + translateX + ',0,0)' : 'translateX(' + translateX + ')';\n};\n\nproto.dispatchScrollEvent = function() {\n var firstSlide = this.slides[0];\n if ( !firstSlide ) {\n return;\n }\n var positionX = -this.x - firstSlide.target;\n var progress = positionX / this.slidesWidth;\n this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\n};\n\nproto.positionSliderAtSelected = function() {\n if ( !this.cells.length ) {\n return;\n }\n this.x = -this.selectedSlide.target;\n this.velocity = 0; // stop wobble\n this.positionSlider();\n};\n\nproto.getPositionValue = function( position ) {\n if ( this.options.percentPosition ) {\n // percent position, round to 2 digits, like 12.34%\n return ( Math.round( ( position / this.size.innerWidth ) * 10000 ) * 0.01 )+ '%';\n } else {\n // pixel positioning\n return Math.round( position ) + 'px';\n }\n};\n\nproto.settle = function( previousX ) {\n // keep track of frames where x hasn't moved\n if ( !this.isPointerDown && Math.round( this.x * 100 ) == Math.round( previousX * 100 ) ) {\n this.restingFrames++;\n }\n // stop animating if resting for 3 or more frames\n if ( this.restingFrames > 2 ) {\n this.isAnimating = false;\n delete this.isFreeScrolling;\n // render position with translateX when settled\n this.positionSlider();\n this.dispatchEvent( 'settle', null, [ this.selectedIndex ] );\n }\n};\n\nproto.shiftWrapCells = function( x ) {\n // shift before cells\n var beforeGap = this.cursorPosition + x;\n this._shiftCells( this.beforeShiftCells, beforeGap, -1 );\n // shift after cells\n var afterGap = this.size.innerWidth - ( x + this.slideableWidth + this.cursorPosition );\n this._shiftCells( this.afterShiftCells, afterGap, 1 );\n};\n\nproto._shiftCells = function( cells, gap, shift ) {\n for ( var i=0; i < cells.length; i++ ) {\n var cell = cells[i];\n var cellShift = gap > 0 ? shift : 0;\n cell.wrapShift( cellShift );\n gap -= cell.size.outerWidth;\n }\n};\n\nproto._unshiftCells = function( cells ) {\n if ( !cells || !cells.length ) {\n return;\n }\n for ( var i=0; i < cells.length; i++ ) {\n cells[i].wrapShift( 0 );\n }\n};\n\n// -------------------------- physics -------------------------- //\n\nproto.integratePhysics = function() {\n this.x += this.velocity;\n this.velocity *= this.getFrictionFactor();\n};\n\nproto.applyForce = function( force ) {\n this.velocity += force;\n};\n\nproto.getFrictionFactor = function() {\n return 1 - this.options[ this.isFreeScrolling ? 'freeScrollFriction' : 'friction' ];\n};\n\nproto.getRestingPosition = function() {\n // my thanks to Steven Wittens, who simplified this math greatly\n return this.x + this.velocity / ( 1 - this.getFrictionFactor() );\n};\n\nproto.applyDragForce = function() {\n if ( !this.isDraggable || !this.isPointerDown ) {\n return;\n }\n // change the position to drag position by applying force\n var dragVelocity = this.dragX - this.x;\n var dragForce = dragVelocity - this.velocity;\n this.applyForce( dragForce );\n};\n\nproto.applySelectedAttraction = function() {\n // do not attract if pointer down or no slides\n var dragDown = this.isDraggable && this.isPointerDown;\n if ( dragDown || this.isFreeScrolling || !this.slides.length ) {\n return;\n }\n var distance = this.selectedSlide.target * -1 - this.x;\n var force = distance * this.options.selectedAttraction;\n this.applyForce( force );\n};\n\nreturn proto;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/animate.js\n// module id = 19\n// module chunks = 0","// drag\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unidragger/unidragger',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, Unidragger, utils ) {\n return factory( window, Flickity, Unidragger, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unidragger'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = factory(\n window,\n window.Flickity,\n window.Unidragger,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unidragger, utils ) {\n\n'use strict';\n\n// ----- defaults ----- //\n\nutils.extend( Flickity.defaults, {\n draggable: '>1',\n dragThreshold: 3,\n});\n\n// ----- create ----- //\n\nFlickity.createMethods.push('_createDrag');\n\n// -------------------------- drag prototype -------------------------- //\n\nvar proto = Flickity.prototype;\nutils.extend( proto, Unidragger.prototype );\nproto._touchActionValue = 'pan-y';\n\n// -------------------------- -------------------------- //\n\nvar isTouch = 'createTouch' in document;\nvar isTouchmoveScrollCanceled = false;\n\nproto._createDrag = function() {\n this.on( 'activate', this.onActivateDrag );\n this.on( 'uiChange', this._uiChangeDrag );\n this.on( 'deactivate', this.onDeactivateDrag );\n this.on( 'cellChange', this.updateDraggable );\n // TODO updateDraggable on resize? if groupCells & slides change\n // HACK - add seemingly innocuous handler to fix iOS 10 scroll behavior\n // #457, RubaXa/Sortable#973\n if ( isTouch && !isTouchmoveScrollCanceled ) {\n window.addEventListener( 'touchmove', function() {});\n isTouchmoveScrollCanceled = true;\n }\n};\n\nproto.onActivateDrag = function() {\n this.handles = [ this.viewport ];\n this.bindHandles();\n this.updateDraggable();\n};\n\nproto.onDeactivateDrag = function() {\n this.unbindHandles();\n this.element.classList.remove('is-draggable');\n};\n\nproto.updateDraggable = function() {\n // disable dragging if less than 2 slides. #278\n if ( this.options.draggable == '>1' ) {\n this.isDraggable = this.slides.length > 1;\n } else {\n this.isDraggable = this.options.draggable;\n }\n if ( this.isDraggable ) {\n this.element.classList.add('is-draggable');\n } else {\n this.element.classList.remove('is-draggable');\n }\n};\n\n// backwards compatibility\nproto.bindDrag = function() {\n this.options.draggable = true;\n this.updateDraggable();\n};\n\nproto.unbindDrag = function() {\n this.options.draggable = false;\n this.updateDraggable();\n};\n\nproto._uiChangeDrag = function() {\n delete this.isFreeScrolling;\n};\n\n// -------------------------- pointer events -------------------------- //\n\nproto.pointerDown = function( event, pointer ) {\n if ( !this.isDraggable ) {\n this._pointerDownDefault( event, pointer );\n return;\n }\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n\n this._pointerDownPreventDefault( event );\n this.pointerDownFocus( event );\n // blur\n if ( document.activeElement != this.element ) {\n // do not blur if already focused\n this.pointerDownBlur();\n }\n\n // stop if it was moving\n this.dragX = this.x;\n this.viewport.classList.add('is-pointer-down');\n // track scrolling\n this.pointerDownScroll = getScrollPosition();\n window.addEventListener( 'scroll', this );\n\n this._pointerDownDefault( event, pointer );\n};\n\n// default pointerDown logic, used for staticClick\nproto._pointerDownDefault = function( event, pointer ) {\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. #779\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n // bind move and end events\n this._bindPostStartEvents( event );\n this.dispatchEvent( 'pointerDown', event, [ pointer ] );\n};\n\nvar focusNodes = {\n INPUT: true,\n TEXTAREA: true,\n SELECT: true,\n};\n\nproto.pointerDownFocus = function( event ) {\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isFocusNode ) {\n this.focus();\n }\n};\n\nproto._pointerDownPreventDefault = function( event ) {\n var isTouchStart = event.type == 'touchstart';\n var isTouchPointer = event.pointerType == 'touch';\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isTouchStart && !isTouchPointer && !isFocusNode ) {\n event.preventDefault();\n }\n};\n\n// ----- move ----- //\n\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > this.options.dragThreshold;\n};\n\n// ----- up ----- //\n\nproto.pointerUp = function( event, pointer ) {\n delete this.isTouchScrolling;\n this.viewport.classList.remove('is-pointer-down');\n this.dispatchEvent( 'pointerUp', event, [ pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto.pointerDone = function() {\n window.removeEventListener( 'scroll', this );\n delete this.pointerDownScroll;\n};\n\n// -------------------------- dragging -------------------------- //\n\nproto.dragStart = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n this.dragStartPosition = this.x;\n this.startAnimation();\n window.removeEventListener( 'scroll', this );\n this.dispatchEvent( 'dragStart', event, [ pointer ] );\n};\n\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.dispatchEvent( 'pointerMove', event, [ pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n if ( !this.isDraggable ) {\n return;\n }\n event.preventDefault();\n\n this.previousDragX = this.dragX;\n // reverse if right-to-left\n var direction = this.options.rightToLeft ? -1 : 1;\n if ( this.options.wrapAround ) {\n // wrap around move. #589\n moveVector.x = moveVector.x % this.slideableWidth;\n }\n var dragX = this.dragStartPosition + moveVector.x * direction;\n\n if ( !this.options.wrapAround && this.slides.length ) {\n // slow drag\n var originBound = Math.max( -this.slides[0].target, this.dragStartPosition );\n dragX = dragX > originBound ? ( dragX + originBound ) * 0.5 : dragX;\n var endBound = Math.min( -this.getLastSlide().target, this.dragStartPosition );\n dragX = dragX < endBound ? ( dragX + endBound ) * 0.5 : dragX;\n }\n\n this.dragX = dragX;\n\n this.dragMoveTime = new Date();\n this.dispatchEvent( 'dragMove', event, [ pointer, moveVector ] );\n};\n\nproto.dragEnd = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n if ( this.options.freeScroll ) {\n this.isFreeScrolling = true;\n }\n // set selectedIndex based on where flick will end up\n var index = this.dragEndRestingSelect();\n\n if ( this.options.freeScroll && !this.options.wrapAround ) {\n // if free-scroll & not wrap around\n // do not free-scroll if going outside of bounding slides\n // so bounding slides can attract slider, and keep it in bounds\n var restingX = this.getRestingPosition();\n this.isFreeScrolling = -restingX > this.slides[0].target &&\n -restingX < this.getLastSlide().target;\n } else if ( !this.options.freeScroll && index == this.selectedIndex ) {\n // boost selection if selected index has not changed\n index += this.dragEndBoostSelect();\n }\n delete this.previousDragX;\n // apply selection\n // TODO refactor this, selecting here feels weird\n // HACK, set flag so dragging stays in correct direction\n this.isDragSelect = this.options.wrapAround;\n this.select( index );\n delete this.isDragSelect;\n this.dispatchEvent( 'dragEnd', event, [ pointer ] );\n};\n\nproto.dragEndRestingSelect = function() {\n var restingX = this.getRestingPosition();\n // how far away from selected slide\n var distance = Math.abs( this.getSlideDistance( -restingX, this.selectedIndex ) );\n // get closet resting going up and going down\n var positiveResting = this._getClosestResting( restingX, distance, 1 );\n var negativeResting = this._getClosestResting( restingX, distance, -1 );\n // use closer resting for wrap-around\n var index = positiveResting.distance < negativeResting.distance ?\n positiveResting.index : negativeResting.index;\n return index;\n};\n\n/**\n * given resting X and distance to selected cell\n * get the distance and index of the closest cell\n * @param {Number} restingX - estimated post-flick resting position\n * @param {Number} distance - distance to selected cell\n * @param {Integer} increment - +1 or -1, going up or down\n * @returns {Object} - { distance: {Number}, index: {Integer} }\n */\nproto._getClosestResting = function( restingX, distance, increment ) {\n var index = this.selectedIndex;\n var minDistance = Infinity;\n var condition = this.options.contain && !this.options.wrapAround ?\n // if contain, keep going if distance is equal to minDistance\n function( d, md ) { return d <= md; } : function( d, md ) { return d < md; };\n while ( condition( distance, minDistance ) ) {\n // measure distance to next cell\n index += increment;\n minDistance = distance;\n distance = this.getSlideDistance( -restingX, index );\n if ( distance === null ) {\n break;\n }\n distance = Math.abs( distance );\n }\n return {\n distance: minDistance,\n // selected was previous index\n index: index - increment\n };\n};\n\n/**\n * measure distance between x and a slide target\n * @param {Number} x\n * @param {Integer} index - slide index\n */\nproto.getSlideDistance = function( x, index ) {\n var len = this.slides.length;\n // wrap around if at least 2 slides\n var isWrapAround = this.options.wrapAround && len > 1;\n var slideIndex = isWrapAround ? utils.modulo( index, len ) : index;\n var slide = this.slides[ slideIndex ];\n if ( !slide ) {\n return null;\n }\n // add distance for wrap-around slides\n var wrap = isWrapAround ? this.slideableWidth * Math.floor( index / len ) : 0;\n return x - ( slide.target + wrap );\n};\n\nproto.dragEndBoostSelect = function() {\n // do not boost if no previousDragX or dragMoveTime\n if ( this.previousDragX === undefined || !this.dragMoveTime ||\n // or if drag was held for 100 ms\n new Date() - this.dragMoveTime > 100 ) {\n return 0;\n }\n\n var distance = this.getSlideDistance( -this.dragX, this.selectedIndex );\n var delta = this.previousDragX - this.dragX;\n if ( distance > 0 && delta > 0 ) {\n // boost to next if moving towards the right, and positive velocity\n return 1;\n } else if ( distance < 0 && delta < 0 ) {\n // boost to previous if moving towards the left, and negative velocity\n return -1;\n }\n return 0;\n};\n\n// ----- staticClick ----- //\n\nproto.staticClick = function( event, pointer ) {\n // get clickedCell, if cell was clicked\n var clickedCell = this.getParentCell( event.target );\n var cellElem = clickedCell && clickedCell.element;\n var cellIndex = clickedCell && this.cells.indexOf( clickedCell );\n this.dispatchEvent( 'staticClick', event, [ pointer, cellElem, cellIndex ] );\n};\n\n// ----- scroll ----- //\n\nproto.onscroll = function() {\n var scroll = getScrollPosition();\n var scrollMoveX = this.pointerDownScroll.x - scroll.x;\n var scrollMoveY = this.pointerDownScroll.y - scroll.y;\n // cancel click/tap if scroll is too much\n if ( Math.abs( scrollMoveX ) > 3 || Math.abs( scrollMoveY ) > 3 ) {\n this._pointerDone();\n }\n};\n\n// ----- utils ----- //\n\nfunction getScrollPosition() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n}\n\n// ----- ----- //\n\nreturn Flickity;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/drag.js\n// module id = 20\n// module chunks = 0","/*!\n * Unidragger v2.3.0\n * Draggable base class\n * MIT license\n */\n\n/*jshint browser: true, unused: true, undef: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'unipointer/unipointer'\n ], function( Unipointer ) {\n return factory( window, Unipointer );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('unipointer')\n );\n } else {\n // browser global\n window.Unidragger = factory(\n window,\n window.Unipointer\n );\n }\n\n}( window, function factory( window, Unipointer ) {\n\n'use strict';\n\n// -------------------------- Unidragger -------------------------- //\n\nfunction Unidragger() {}\n\n// inherit Unipointer & EvEmitter\nvar proto = Unidragger.prototype = Object.create( Unipointer.prototype );\n\n// ----- bind start ----- //\n\nproto.bindHandles = function() {\n this._bindHandles( true );\n};\n\nproto.unbindHandles = function() {\n this._bindHandles( false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd\n */\nproto._bindHandles = function( isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n // bind each handle\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n var touchAction = isAdd ? this._touchActionValue : '';\n for ( var i=0; i < this.handles.length; i++ ) {\n var handle = this.handles[i];\n this._bindStartEvent( handle, isAdd );\n handle[ bindMethod ]( 'click', this );\n // touch-action: none to override browser touch gestures. metafizzy/flickity#540\n if ( window.PointerEvent ) {\n handle.style.touchAction = touchAction;\n }\n }\n};\n\n// prototype so it can be overwriteable by Flickity\nproto._touchActionValue = 'none';\n\n// ----- start event ----- //\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerDown = function( event, pointer ) {\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n // track start event position\n this.pointerDownPointer = pointer;\n\n event.preventDefault();\n this.pointerDownBlur();\n // bind move and end events\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// nodes that have text fields\nvar cursorNodes = {\n TEXTAREA: true,\n INPUT: true,\n SELECT: true,\n OPTION: true,\n};\n\n// input types that do not have text fields\nvar clickTypes = {\n radio: true,\n checkbox: true,\n button: true,\n submit: true,\n image: true,\n file: true,\n};\n\n// dismiss inputs with text fields. flickity#403, flickity#404\nproto.okayPointerDown = function( event ) {\n var isCursorNode = cursorNodes[ event.target.nodeName ];\n var isClickType = clickTypes[ event.target.type ];\n var isOkay = !isCursorNode || isClickType;\n if ( !isOkay ) {\n this._pointerReset();\n }\n return isOkay;\n};\n\n// kludge to blur previously focused input\nproto.pointerDownBlur = function() {\n var focused = document.activeElement;\n // do not blur body for IE10, metafizzy/flickity#117\n var canBlur = focused && focused.blur && focused != document.body;\n if ( canBlur ) {\n focused.blur();\n }\n};\n\n// ----- move event ----- //\n\n/**\n * drag move\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\n// base pointer move logic\nproto._dragPointerMove = function( event, pointer ) {\n var moveVector = {\n x: pointer.pageX - this.pointerDownPointer.pageX,\n y: pointer.pageY - this.pointerDownPointer.pageY\n };\n // start drag if pointer has moved far enough to start drag\n if ( !this.isDragging && this.hasDragStarted( moveVector ) ) {\n this._dragStart( event, pointer );\n }\n return moveVector;\n};\n\n// condition if pointer has moved far enough to start drag\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > 3 || Math.abs( moveVector.y ) > 3;\n};\n\n// ----- end event ----- //\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto._dragPointerUp = function( event, pointer ) {\n if ( this.isDragging ) {\n this._dragEnd( event, pointer );\n } else {\n // pointer didn't move enough for drag to start\n this._staticClick( event, pointer );\n }\n};\n\n// -------------------------- drag -------------------------- //\n\n// dragStart\nproto._dragStart = function( event, pointer ) {\n this.isDragging = true;\n // prevent clicks\n this.isPreventingClicks = true;\n this.dragStart( event, pointer );\n};\n\nproto.dragStart = function( event, pointer ) {\n this.emitEvent( 'dragStart', [ event, pointer ] );\n};\n\n// dragMove\nproto._dragMove = function( event, pointer, moveVector ) {\n // do not drag if not dragging yet\n if ( !this.isDragging ) {\n return;\n }\n\n this.dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n event.preventDefault();\n this.emitEvent( 'dragMove', [ event, pointer, moveVector ] );\n};\n\n// dragEnd\nproto._dragEnd = function( event, pointer ) {\n // set flags\n this.isDragging = false;\n // re-enable clicking async\n setTimeout( function() {\n delete this.isPreventingClicks;\n }.bind( this ) );\n\n this.dragEnd( event, pointer );\n};\n\nproto.dragEnd = function( event, pointer ) {\n this.emitEvent( 'dragEnd', [ event, pointer ] );\n};\n\n// ----- onclick ----- //\n\n// handle all clicks and prevent clicks when dragging\nproto.onclick = function( event ) {\n if ( this.isPreventingClicks ) {\n event.preventDefault();\n }\n};\n\n// ----- staticClick ----- //\n\n// triggered after pointer down & up with no/tiny movement\nproto._staticClick = function( event, pointer ) {\n // ignore emulated mouse up clicks\n if ( this.isIgnoringMouseUp && event.type == 'mouseup' ) {\n return;\n }\n\n this.staticClick( event, pointer );\n\n // set flag for emulated clicks 300ms after touchend\n if ( event.type != 'mouseup' ) {\n this.isIgnoringMouseUp = true;\n // reset flag after 300ms\n setTimeout( function() {\n delete this.isIgnoringMouseUp;\n }.bind( this ), 400 );\n }\n};\n\nproto.staticClick = function( event, pointer ) {\n this.emitEvent( 'staticClick', [ event, pointer ] );\n};\n\n// ----- utils ----- //\n\nUnidragger.getPointerPoint = Unipointer.getPointerPoint;\n\n// ----- ----- //\n\nreturn Unidragger;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/unidragger/unidragger.js\n// module id = 21\n// module chunks = 0","// prev/next buttons\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n'use strict';\n\nvar svgURI = 'http://www.w3.org/2000/svg';\n\n// -------------------------- PrevNextButton -------------------------- //\n\nfunction PrevNextButton( direction, parent ) {\n this.direction = direction;\n this.parent = parent;\n this._create();\n}\n\nPrevNextButton.prototype = Object.create( Unipointer.prototype );\n\nPrevNextButton.prototype._create = function() {\n // properties\n this.isEnabled = true;\n this.isPrevious = this.direction == -1;\n var leftDirection = this.parent.options.rightToLeft ? 1 : -1;\n this.isLeft = this.direction == leftDirection;\n\n var element = this.element = document.createElement('button');\n element.className = 'flickity-button flickity-prev-next-button';\n element.className += this.isPrevious ? ' previous' : ' next';\n // prevent button from submitting form http://stackoverflow.com/a/10836076/182183\n element.setAttribute( 'type', 'button' );\n // init as disabled\n this.disable();\n\n element.setAttribute( 'aria-label', this.isPrevious ? 'Previous' : 'Next' );\n\n // create arrow\n var svg = this.createSVG();\n element.appendChild( svg );\n // events\n this.parent.on( 'select', this.update.bind( this ) );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPrevNextButton.prototype.activate = function() {\n this.bindStartEvent( this.element );\n this.element.addEventListener( 'click', this );\n // add to DOM\n this.parent.element.appendChild( this.element );\n};\n\nPrevNextButton.prototype.deactivate = function() {\n // remove from DOM\n this.parent.element.removeChild( this.element );\n // click events\n this.unbindStartEvent( this.element );\n this.element.removeEventListener( 'click', this );\n};\n\nPrevNextButton.prototype.createSVG = function() {\n var svg = document.createElementNS( svgURI, 'svg');\n svg.setAttribute( 'class', 'flickity-button-icon' );\n svg.setAttribute( 'viewBox', '0 0 100 100' );\n var path = document.createElementNS( svgURI, 'path');\n var pathMovements = getArrowMovements( this.parent.options.arrowShape );\n path.setAttribute( 'd', pathMovements );\n path.setAttribute( 'class', 'arrow' );\n // rotate arrow\n if ( !this.isLeft ) {\n path.setAttribute( 'transform', 'translate(100, 100) rotate(180) ' );\n }\n svg.appendChild( path );\n return svg;\n};\n\n// get SVG path movmement\nfunction getArrowMovements( shape ) {\n // use shape as movement if string\n if ( typeof shape == 'string' ) {\n return shape;\n }\n // create movement string\n return 'M ' + shape.x0 + ',50' +\n ' L ' + shape.x1 + ',' + ( shape.y1 + 50 ) +\n ' L ' + shape.x2 + ',' + ( shape.y2 + 50 ) +\n ' L ' + shape.x3 + ',50 ' +\n ' L ' + shape.x2 + ',' + ( 50 - shape.y2 ) +\n ' L ' + shape.x1 + ',' + ( 50 - shape.y1 ) +\n ' Z';\n}\n\nPrevNextButton.prototype.handleEvent = utils.handleEvent;\n\nPrevNextButton.prototype.onclick = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.parent.uiChange();\n var method = this.isPrevious ? 'previous' : 'next';\n this.parent[ method ]();\n};\n\n// ----- ----- //\n\nPrevNextButton.prototype.enable = function() {\n if ( this.isEnabled ) {\n return;\n }\n this.element.disabled = false;\n this.isEnabled = true;\n};\n\nPrevNextButton.prototype.disable = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.element.disabled = true;\n this.isEnabled = false;\n};\n\nPrevNextButton.prototype.update = function() {\n // index of first or last slide, if previous or next\n var slides = this.parent.slides;\n // enable is wrapAround and at least 2 slides\n if ( this.parent.options.wrapAround && slides.length > 1 ) {\n this.enable();\n return;\n }\n var lastIndex = slides.length ? slides.length - 1 : 0;\n var boundIndex = this.isPrevious ? 0 : lastIndex;\n var method = this.parent.selectedIndex == boundIndex ? 'disable' : 'enable';\n this[ method ]();\n};\n\nPrevNextButton.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\n// -------------------------- Flickity prototype -------------------------- //\n\nutils.extend( Flickity.defaults, {\n prevNextButtons: true,\n arrowShape: {\n x0: 10,\n x1: 60, y1: 50,\n x2: 70, y2: 40,\n x3: 30\n }\n});\n\nFlickity.createMethods.push('_createPrevNextButtons');\nvar proto = Flickity.prototype;\n\nproto._createPrevNextButtons = function() {\n if ( !this.options.prevNextButtons ) {\n return;\n }\n\n this.prevButton = new PrevNextButton( -1, this );\n this.nextButton = new PrevNextButton( 1, this );\n\n this.on( 'activate', this.activatePrevNextButtons );\n};\n\nproto.activatePrevNextButtons = function() {\n this.prevButton.activate();\n this.nextButton.activate();\n this.on( 'deactivate', this.deactivatePrevNextButtons );\n};\n\nproto.deactivatePrevNextButtons = function() {\n this.prevButton.deactivate();\n this.nextButton.deactivate();\n this.off( 'deactivate', this.deactivatePrevNextButtons );\n};\n\n// -------------------------- -------------------------- //\n\nFlickity.PrevNextButton = PrevNextButton;\n\nreturn Flickity;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/prev-next-button.js\n// module id = 22\n// module chunks = 0","// page dots\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n\n// -------------------------- PageDots -------------------------- //\n\n'use strict';\n\nfunction PageDots( parent ) {\n this.parent = parent;\n this._create();\n}\n\nPageDots.prototype = Object.create( Unipointer.prototype );\n\nPageDots.prototype._create = function() {\n // create holder element\n this.holder = document.createElement('ol');\n this.holder.className = 'flickity-page-dots';\n // create dots, array of elements\n this.dots = [];\n // events\n this.handleClick = this.onClick.bind( this );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPageDots.prototype.activate = function() {\n this.setDots();\n this.holder.addEventListener( 'click', this.handleClick );\n this.bindStartEvent( this.holder );\n // add to DOM\n this.parent.element.appendChild( this.holder );\n};\n\nPageDots.prototype.deactivate = function() {\n this.holder.removeEventListener( 'click', this.handleClick );\n this.unbindStartEvent( this.holder );\n // remove from DOM\n this.parent.element.removeChild( this.holder );\n};\n\nPageDots.prototype.setDots = function() {\n // get difference between number of slides and number of dots\n var delta = this.parent.slides.length - this.dots.length;\n if ( delta > 0 ) {\n this.addDots( delta );\n } else if ( delta < 0 ) {\n this.removeDots( -delta );\n }\n};\n\nPageDots.prototype.addDots = function( count ) {\n var fragment = document.createDocumentFragment();\n var newDots = [];\n var length = this.dots.length;\n var max = length + count;\n\n for ( var i = length; i < max; i++ ) {\n var dot = document.createElement('li');\n dot.className = 'dot';\n dot.setAttribute( 'aria-label', 'Page dot ' + ( i + 1 ) );\n fragment.appendChild( dot );\n newDots.push( dot );\n }\n\n this.holder.appendChild( fragment );\n this.dots = this.dots.concat( newDots );\n};\n\nPageDots.prototype.removeDots = function( count ) {\n // remove from this.dots collection\n var removeDots = this.dots.splice( this.dots.length - count, count );\n // remove from DOM\n removeDots.forEach( function( dot ) {\n this.holder.removeChild( dot );\n }, this );\n};\n\nPageDots.prototype.updateSelected = function() {\n // remove selected class on previous\n if ( this.selectedDot ) {\n this.selectedDot.className = 'dot';\n this.selectedDot.removeAttribute('aria-current');\n }\n // don't proceed if no dots\n if ( !this.dots.length ) {\n return;\n }\n this.selectedDot = this.dots[ this.parent.selectedIndex ];\n this.selectedDot.className = 'dot is-selected';\n this.selectedDot.setAttribute( 'aria-current', 'step' );\n};\n\nPageDots.prototype.onTap = // old method name, backwards-compatible\nPageDots.prototype.onClick = function( event ) {\n var target = event.target;\n // only care about dot clicks\n if ( target.nodeName != 'LI' ) {\n return;\n }\n\n this.parent.uiChange();\n var index = this.dots.indexOf( target );\n this.parent.select( index );\n};\n\nPageDots.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\nFlickity.PageDots = PageDots;\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pageDots: true\n});\n\nFlickity.createMethods.push('_createPageDots');\n\nvar proto = Flickity.prototype;\n\nproto._createPageDots = function() {\n if ( !this.options.pageDots ) {\n return;\n }\n this.pageDots = new PageDots( this );\n // events\n this.on( 'activate', this.activatePageDots );\n this.on( 'select', this.updateSelectedPageDots );\n this.on( 'cellChange', this.updatePageDots );\n this.on( 'resize', this.updatePageDots );\n this.on( 'deactivate', this.deactivatePageDots );\n};\n\nproto.activatePageDots = function() {\n this.pageDots.activate();\n};\n\nproto.updateSelectedPageDots = function() {\n this.pageDots.updateSelected();\n};\n\nproto.updatePageDots = function() {\n this.pageDots.setDots();\n};\n\nproto.deactivatePageDots = function() {\n this.pageDots.deactivate();\n};\n\n// ----- ----- //\n\nFlickity.PageDots = PageDots;\n\nreturn Flickity;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/page-dots.js\n// module id = 23\n// module chunks = 0","// player & autoPlay\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter',\n 'fizzy-ui-utils/utils',\n './flickity'\n ], function( EvEmitter, utils, Flickity ) {\n return factory( EvEmitter, utils, Flickity );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('ev-emitter'),\n require('fizzy-ui-utils'),\n require('./flickity')\n );\n } else {\n // browser global\n factory(\n window.EvEmitter,\n window.fizzyUIUtils,\n window.Flickity\n );\n }\n\n}( window, function factory( EvEmitter, utils, Flickity ) {\n\n'use strict';\n\n// -------------------------- Player -------------------------- //\n\nfunction Player( parent ) {\n this.parent = parent;\n this.state = 'stopped';\n // visibility change event handler\n this.onVisibilityChange = this.visibilityChange.bind( this );\n this.onVisibilityPlay = this.visibilityPlay.bind( this );\n}\n\nPlayer.prototype = Object.create( EvEmitter.prototype );\n\n// start play\nPlayer.prototype.play = function() {\n if ( this.state == 'playing' ) {\n return;\n }\n // do not play if page is hidden, start playing when page is visible\n var isPageHidden = document.hidden;\n if ( isPageHidden ) {\n document.addEventListener( 'visibilitychange', this.onVisibilityPlay );\n return;\n }\n\n this.state = 'playing';\n // listen to visibility change\n document.addEventListener( 'visibilitychange', this.onVisibilityChange );\n // start ticking\n this.tick();\n};\n\nPlayer.prototype.tick = function() {\n // do not tick if not playing\n if ( this.state != 'playing' ) {\n return;\n }\n\n var time = this.parent.options.autoPlay;\n // default to 3 seconds\n time = typeof time == 'number' ? time : 3000;\n var _this = this;\n // HACK: reset ticks if stopped and started within interval\n this.clear();\n this.timeout = setTimeout( function() {\n _this.parent.next( true );\n _this.tick();\n }, time );\n};\n\nPlayer.prototype.stop = function() {\n this.state = 'stopped';\n this.clear();\n // remove visibility change event\n document.removeEventListener( 'visibilitychange', this.onVisibilityChange );\n};\n\nPlayer.prototype.clear = function() {\n clearTimeout( this.timeout );\n};\n\nPlayer.prototype.pause = function() {\n if ( this.state == 'playing' ) {\n this.state = 'paused';\n this.clear();\n }\n};\n\nPlayer.prototype.unpause = function() {\n // re-start play if paused\n if ( this.state == 'paused' ) {\n this.play();\n }\n};\n\n// pause if page visibility is hidden, unpause if visible\nPlayer.prototype.visibilityChange = function() {\n var isPageHidden = document.hidden;\n this[ isPageHidden ? 'pause' : 'unpause' ]();\n};\n\nPlayer.prototype.visibilityPlay = function() {\n this.play();\n document.removeEventListener( 'visibilitychange', this.onVisibilityPlay );\n};\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pauseAutoPlayOnHover: true\n});\n\nFlickity.createMethods.push('_createPlayer');\nvar proto = Flickity.prototype;\n\nproto._createPlayer = function() {\n this.player = new Player( this );\n\n this.on( 'activate', this.activatePlayer );\n this.on( 'uiChange', this.stopPlayer );\n this.on( 'pointerDown', this.stopPlayer );\n this.on( 'deactivate', this.deactivatePlayer );\n};\n\nproto.activatePlayer = function() {\n if ( !this.options.autoPlay ) {\n return;\n }\n this.player.play();\n this.element.addEventListener( 'mouseenter', this );\n};\n\n// Player API, don't hate the ... thanks I know where the door is\n\nproto.playPlayer = function() {\n this.player.play();\n};\n\nproto.stopPlayer = function() {\n this.player.stop();\n};\n\nproto.pausePlayer = function() {\n this.player.pause();\n};\n\nproto.unpausePlayer = function() {\n this.player.unpause();\n};\n\nproto.deactivatePlayer = function() {\n this.player.stop();\n this.element.removeEventListener( 'mouseenter', this );\n};\n\n// ----- mouseenter/leave ----- //\n\n// pause auto-play on hover\nproto.onmouseenter = function() {\n if ( !this.options.pauseAutoPlayOnHover ) {\n return;\n }\n this.player.pause();\n this.element.addEventListener( 'mouseleave', this );\n};\n\n// resume auto-play on hover off\nproto.onmouseleave = function() {\n this.player.unpause();\n this.element.removeEventListener( 'mouseleave', this );\n};\n\n// ----- ----- //\n\nFlickity.Player = Player;\n\nreturn Flickity;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/player.js\n// module id = 24\n// module chunks = 0","// add, remove cell\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n\n'use strict';\n\n// append cells to a document fragment\nfunction getCellsFragment( cells ) {\n var fragment = document.createDocumentFragment();\n cells.forEach( function( cell ) {\n fragment.appendChild( cell.element );\n });\n return fragment;\n}\n\n// -------------------------- add/remove cell prototype -------------------------- //\n\nvar proto = Flickity.prototype;\n\n/**\n * Insert, prepend, or append cells\n * @param {Element, Array, NodeList} elems\n * @param {Integer} index\n */\nproto.insert = function( elems, index ) {\n var cells = this._makeCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n var len = this.cells.length;\n // default to append\n index = index === undefined ? len : index;\n // add cells with document fragment\n var fragment = getCellsFragment( cells );\n // append to slider\n var isAppend = index == len;\n if ( isAppend ) {\n this.slider.appendChild( fragment );\n } else {\n var insertCellElement = this.cells[ index ].element;\n this.slider.insertBefore( fragment, insertCellElement );\n }\n // add to this.cells\n if ( index === 0 ) {\n // prepend, add to start\n this.cells = cells.concat( this.cells );\n } else if ( isAppend ) {\n // append, add to end\n this.cells = this.cells.concat( cells );\n } else {\n // insert in this.cells\n var endCells = this.cells.splice( index, len - index );\n this.cells = this.cells.concat( cells ).concat( endCells );\n }\n\n this._sizeCells( cells );\n this.cellChange( index, true );\n};\n\nproto.append = function( elems ) {\n this.insert( elems, this.cells.length );\n};\n\nproto.prepend = function( elems ) {\n this.insert( elems, 0 );\n};\n\n/**\n * Remove cells\n * @param {Element, Array, NodeList} elems\n */\nproto.remove = function( elems ) {\n var cells = this.getCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n\n var minCellIndex = this.cells.length - 1;\n // remove cells from collection & DOM\n cells.forEach( function( cell ) {\n cell.remove();\n var index = this.cells.indexOf( cell );\n minCellIndex = Math.min( index, minCellIndex );\n utils.removeFrom( this.cells, cell );\n }, this );\n\n this.cellChange( minCellIndex, true );\n};\n\n/**\n * logic to be run after a cell's size changes\n * @param {Element} elem - cell's element\n */\nproto.cellSizeChange = function( elem ) {\n var cell = this.getCell( elem );\n if ( !cell ) {\n return;\n }\n cell.getSize();\n\n var index = this.cells.indexOf( cell );\n this.cellChange( index );\n};\n\n/**\n * logic any time a cell is changed: added, removed, or size changed\n * @param {Integer} changedCellIndex - index of the changed cell, optional\n */\nproto.cellChange = function( changedCellIndex, isPositioningSlider ) {\n var prevSelectedElem = this.selectedElement;\n this._positionCells( changedCellIndex );\n this._getWrapShiftCells();\n this.setGallerySize();\n // update selectedIndex\n // try to maintain position & select previous selected element\n var cell = this.getCell( prevSelectedElem );\n if ( cell ) {\n this.selectedIndex = this.getCellSlideIndex( cell );\n }\n this.selectedIndex = Math.min( this.slides.length - 1, this.selectedIndex );\n\n this.emitEvent( 'cellChange', [ changedCellIndex ] );\n // position slider\n this.select( this.selectedIndex );\n // do not position slider after lazy load\n if ( isPositioningSlider ) {\n this.positionSliderAtSelected();\n }\n};\n\n// ----- ----- //\n\nreturn Flickity;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/add-remove-cell.js\n// module id = 25\n// module chunks = 0","// lazyload\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n'use strict';\n\nFlickity.createMethods.push('_createLazyload');\nvar proto = Flickity.prototype;\n\nproto._createLazyload = function() {\n this.on( 'select', this.lazyLoad );\n};\n\nproto.lazyLoad = function() {\n var lazyLoad = this.options.lazyLoad;\n if ( !lazyLoad ) {\n return;\n }\n // get adjacent cells, use lazyLoad option for adjacent count\n var adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0;\n var cellElems = this.getAdjacentCellElements( adjCount );\n // get lazy images in those cells\n var lazyImages = [];\n cellElems.forEach( function( cellElem ) {\n var lazyCellImages = getCellLazyImages( cellElem );\n lazyImages = lazyImages.concat( lazyCellImages );\n });\n // load lazy images\n lazyImages.forEach( function( img ) {\n new LazyLoader( img, this );\n }, this );\n};\n\nfunction getCellLazyImages( cellElem ) {\n // check if cell element is lazy image\n if ( cellElem.nodeName == 'IMG' ) {\n var lazyloadAttr = cellElem.getAttribute('data-flickity-lazyload');\n var srcAttr = cellElem.getAttribute('data-flickity-lazyload-src');\n var srcsetAttr = cellElem.getAttribute('data-flickity-lazyload-srcset');\n if ( lazyloadAttr || srcAttr || srcsetAttr ) {\n return [ cellElem ];\n }\n }\n // select lazy images in cell\n var lazySelector = 'img[data-flickity-lazyload], ' +\n 'img[data-flickity-lazyload-src], img[data-flickity-lazyload-srcset]';\n var imgs = cellElem.querySelectorAll( lazySelector );\n return utils.makeArray( imgs );\n}\n\n// -------------------------- LazyLoader -------------------------- //\n\n/**\n * class to handle loading images\n */\nfunction LazyLoader( img, flickity ) {\n this.img = img;\n this.flickity = flickity;\n this.load();\n}\n\nLazyLoader.prototype.handleEvent = utils.handleEvent;\n\nLazyLoader.prototype.load = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n // get src & srcset\n var src = this.img.getAttribute('data-flickity-lazyload') ||\n this.img.getAttribute('data-flickity-lazyload-src');\n var srcset = this.img.getAttribute('data-flickity-lazyload-srcset');\n // set src & serset\n this.img.src = src;\n if ( srcset ) {\n this.img.setAttribute( 'srcset', srcset );\n }\n // remove attr\n this.img.removeAttribute('data-flickity-lazyload');\n this.img.removeAttribute('data-flickity-lazyload-src');\n this.img.removeAttribute('data-flickity-lazyload-srcset');\n};\n\nLazyLoader.prototype.onload = function( event ) {\n this.complete( event, 'flickity-lazyloaded' );\n};\n\nLazyLoader.prototype.onerror = function( event ) {\n this.complete( event, 'flickity-lazyerror' );\n};\n\nLazyLoader.prototype.complete = function( event, className ) {\n // unbind events\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n\n var cell = this.flickity.getParentCell( this.img );\n var cellElem = cell && cell.element;\n this.flickity.cellSizeChange( cellElem );\n\n this.img.classList.add( className );\n this.flickity.dispatchEvent( 'lazyLoad', event, cellElem );\n};\n\n// ----- ----- //\n\nFlickity.LazyLoader = LazyLoader;\n\nreturn Flickity;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/lazyload.js\n// module id = 26\n// module chunks = 0","// txtTruncate - a jQuery plugin to truncate text\r\n// version 1.1.0\r\n// https://github.com/blakehaswell/txtTruncate\r\n//\r\n// Copyright (c) 2011-2012 Blake Haswell\r\n// Licensed under the MIT license: http://opensource.org/licenses/MIT\r\n(function ($) {\r\n\r\n 'use strict';\r\n\r\n\r\n // Constructor\r\n function Truncator(elem, options) {\r\n\r\n // Cache the instance.\r\n var self = this;\r\n\r\n self.$elem = $(elem);\r\n self.lineHeight = self._getLineHeight();\r\n self.origHeight = self.$elem.height();\r\n self.origTxt = self.$elem.text();\r\n\r\n // Override default settings with passed options (if any)\r\n self.settings = $.extend({}, self._defaults, options || {});\r\n\r\n self._setLines();\r\n\r\n self.truncate();\r\n\r\n // Text should be truncated whenever the window has been resized so that it\r\n // works as expected on fluid layouts\r\n var timeout;\r\n $(window).resize(function(){\r\n\r\n // Clear any existing timeout.\r\n clearTimeout(timeout);\r\n\r\n // Create a new one.\r\n timeout = setTimeout($.proxy(self.truncate, self), 200);\r\n });\r\n }\r\n\r\n\r\n Truncator.prototype = {\r\n\r\n /**\r\n * If the element doesn't fit in the specified number of lines then we\r\n * collapse the element to the desired height and truncate the text.\r\n */\r\n hide: function () {\r\n if (this._getCurrentLines() > this.settings.lines) {\r\n this.$elem.animate({\r\n height: this.lineHeight * this.settings.lines,\r\n }, $.proxy(this.truncate, this));\r\n }\r\n },\r\n\r\n /**\r\n * Restores the element's original text and expands the element to take\r\n * up the required space.\r\n */\r\n show: function () {\r\n\r\n // Set the element's height to the current height to stop it from\r\n // getting bigger when we restore the original text\r\n this.$elem.height(this.$elem.height());\r\n\r\n this._restoreOrigTxt();\r\n this.$elem.animate({\r\n height: this.origHeight,\r\n });\r\n\r\n },\r\n\r\n /**\r\n * Removes characters from the element until it fits in the specified\r\n * number of lines.\r\n */\r\n truncate: function () {\r\n\r\n // Prepare the element before calculating the lines\r\n this._prepareElem();\r\n\r\n var currTxt = this._restoreOrigTxt(),\r\n origTxtLines = this._getCurrentLines(),\r\n charsPerLine = Math.round(currTxt.length / origTxtLines),\r\n charsPerHalfLine = Math.round(charsPerLine / 2);\r\n\r\n // Only continue to truncate if we have more lines than we want\r\n if (origTxtLines > this.settings.lines) {\r\n\r\n // If we have way more lines than we want take a guess at how\r\n // much to cull\r\n if (origTxtLines > this.settings.lines + 1) {\r\n\r\n // Given our charsPerLine value, truncate text so it's about\r\n // 1 line too tall\r\n currTxt = this._truncateElementTxt((this.settings.lines + 1) * charsPerLine);\r\n\r\n // If we still have way too many lines then keep removing\r\n // half a line of text until we only have 1 line more than\r\n // we want\r\n while (this._getCurrentLines() > this.settings.lines + 1) {\r\n currTxt = this._truncateElementTxt(currTxt.length - charsPerHalfLine);\r\n }\r\n\r\n }\r\n\r\n // Take off 1 character at a time until we have the number of\r\n // lines we want.\r\n while (this._getCurrentLines() > this.settings.lines) {\r\n\r\n // Due to potential weirdness where height() and lineHeight produce different values even for one line, we need to stop infinite loops.\r\n // If we're down to half a line and still truncating, something has gone wrong.\r\n if (currTxt.length == charsPerHalfLine) {\r\n this._recoverFromLoop(currTxt);\r\n break;\r\n }\r\n\r\n // Otherwise, truncate.\r\n currTxt = this._truncateElementTxt(currTxt.length - 1);\r\n }\r\n }\r\n\r\n this._restoreElem();\r\n\r\n },\r\n\r\n /**\r\n * The default settings to use if no `options` argument is provided when\r\n * instantiating the Truncator.\r\n */\r\n _defaults: {\r\n end : '…',\r\n lines : null,\r\n },\r\n\r\n /**\r\n * Get the line height, if we're in IE and there's no unit of measurement convert it to a %\r\n * so jQuery can calculate the right px value and IE doesn't explode.\r\n */\r\n _getLineHeight : function () {\r\n var ieVal = null;\r\n\r\n // check if IE's 'currentStyle' is available\r\n if (document.body.currentStyle) {\r\n\r\n // get the line height as IE reports it - note % are converted to pt\r\n ieVal = this.$elem.get(0).currentStyle.lineHeight;\r\n\r\n // if there's no unit of measurement\r\n if (!ieVal.match(/px|PX|pt|PT|em|EM/)) {\r\n\r\n // set the lineHeight to an equivalent % so that IE reports a value\r\n // jQuery can work with\r\n this.$elem.css('line-height', (ieVal * 100) + '%');\r\n }\r\n }\r\n\r\n return parseInt(this.$elem.css('line-height'), 10);\r\n },\r\n\r\n /**\r\n * Determines how many \"lines\" the element takes up (based on\r\n * its height).\r\n */\r\n _getCurrentLines: function () {\r\n return Math.round(this.$elem.height() / this.lineHeight);\r\n },\r\n\r\n /**\r\n * Prepares the element to be manipulated by the truncate method by\r\n * removing CSS properties which influence height.\r\n *\r\n * TODO Call at the start of the truncate method and reset properties to their original value at the end?\r\n */\r\n _prepareElem: function () {\r\n\r\n // Store the original CSS values so we can restore them later\r\n this.css = {\r\n height : $.style(this.$elem, 'height') || 'auto',\r\n maxHeight : this.$elem.css('max-height'),\r\n minHeight : this.$elem.css('min-height'),\r\n };\r\n\r\n // Remove CSS values which influence the height of the element\r\n this.$elem.css({\r\n height : 'auto',\r\n maxHeight : 'none',\r\n minHeight : 0,\r\n });\r\n },\r\n\r\n /**\r\n * Helps recover from infinite loops brought on by stupid discrepancies between height and line-height.\r\n * @param string currTxt The currently displayed text.\r\n */\r\n _recoverFromLoop: function(currTxt){\r\n\r\n // Grab the current height of the element (which should be the 'ideal' height).\r\n var height = this.$elem.height();\r\n var maxLength = this.origTxt.length;\r\n\r\n // Now keep adding characters back until the height changes, or alternatively, we've restored all the characters.\r\n while (height == this.$elem.height() && currTxt.length < maxLength) {\r\n currTxt = this._truncateElementTxt(currTxt.length + 1);\r\n }\r\n\r\n // If the height actually changed, take off the last character we added.\r\n if (this.$elem.height() != height) {\r\n this._truncateElementTxt(currTxt.length - 1);\r\n }\r\n\r\n // If we wound up displaying everything, drop the ...\r\n if (currTxt.length == maxLength) {\r\n this._restoreOrigTxt();\r\n }\r\n },\r\n\r\n /**\r\n * Restores the element's original styles.\r\n */\r\n _restoreElem: function () {\r\n this.$elem.css(this.css);\r\n },\r\n\r\n /**\r\n * Restores the element's original text. Return value is the\r\n * original text.\r\n */\r\n _restoreOrigTxt: function () {\r\n this.$elem.text(this.origTxt);\r\n return this.origTxt;\r\n },\r\n\r\n /**\r\n * If a number of lines hasn't been defined in the settings then we set\r\n * the lines based on the element's `max-height` or, failing that,\r\n * default to 1 line.\r\n */\r\n _setLines: function () {\r\n\r\n // If a maximum number of lines hasn't been defined then we\r\n // calculate it\r\n if (!this.settings.lines) {\r\n\r\n // If the element's max-height is greater than its line-height\r\n // we use that to calculate the number of lines\r\n var maxHeight = parseInt(this.$elem.css('max-height'), 10);\r\n\r\n if (maxHeight > this.lineHeight) {\r\n this.settings.lines = Math.floor(maxHeight / this.lineHeight);\r\n }\r\n\r\n // Otherwise we'll just assume that we want to truncate to\r\n // 1 line\r\n else {\r\n this.settings.lines = 1;\r\n }\r\n\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Given a `length`, this method truncates the element's text to that\r\n * length and adds the prepends the `end` string.\r\n *\r\n * Returns the truncated text (not including the `end` string).\r\n */\r\n _truncateElementTxt: function (length) {\r\n var txt = this.origTxt.substring(0, length);\r\n this.$elem.text(txt + this.settings.end);\r\n return txt;\r\n },\r\n\r\n };\r\n\r\n\r\n // jQuery plugin\r\n $.fn.txtTruncate = function (options) {\r\n return this.each(function () {\r\n $(this).data('truncator', new Truncator(this, options));\r\n });\r\n };\r\n\r\n\r\n}(jQuery));\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/vendor/jquery.txtTruncate.js","import 'bootstrap';\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/autoload/_bootstrap.js","/*!\n * Bootstrap v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) :\n typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) :\n (global = global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper));\n}(this, function (exports, $, Popper) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n }\n\n function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n }\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n /**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n\n var TRANSITION_END = 'transitionend';\n var MAX_UID = 1000000;\n var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n function toType(obj) {\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n }\n\n function getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle: function handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n }\n\n return undefined; // eslint-disable-line no-undefined\n }\n };\n }\n\n function transitionEndEmulator(duration) {\n var _this = this;\n\n var called = false;\n $(this).one(Util.TRANSITION_END, function () {\n called = true;\n });\n setTimeout(function () {\n if (!called) {\n Util.triggerTransitionEnd(_this);\n }\n }, duration);\n return this;\n }\n\n function setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator;\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n }\n /**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\n var Util = {\n TRANSITION_END: 'bsTransitionEnd',\n getUID: function getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix));\n\n return prefix;\n },\n getSelectorFromElement: function getSelectorFromElement(element) {\n var selector = element.getAttribute('data-target');\n\n if (!selector || selector === '#') {\n var hrefAttr = element.getAttribute('href');\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';\n }\n\n try {\n return document.querySelector(selector) ? selector : null;\n } catch (err) {\n return null;\n }\n },\n getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n if (!element) {\n return 0;\n } // Get transition-duration of the element\n\n\n var transitionDuration = $(element).css('transition-duration');\n var transitionDelay = $(element).css('transition-delay');\n var floatTransitionDuration = parseFloat(transitionDuration);\n var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0;\n } // If multiple durations are defined, take the first\n\n\n transitionDuration = transitionDuration.split(',')[0];\n transitionDelay = transitionDelay.split(',')[0];\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n },\n reflow: function reflow(element) {\n return element.offsetHeight;\n },\n triggerTransitionEnd: function triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END);\n },\n // TODO: Remove in v5\n supportsTransitionEnd: function supportsTransitionEnd() {\n return Boolean(TRANSITION_END);\n },\n isElement: function isElement(obj) {\n return (obj[0] || obj).nodeType;\n },\n typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n for (var property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n var expectedTypes = configTypes[property];\n var value = config[property];\n var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n }\n }\n }\n },\n findShadowRoot: function findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null;\n } // Can find the shadow root otherwise it'll return the document\n\n\n if (typeof element.getRootNode === 'function') {\n var root = element.getRootNode();\n return root instanceof ShadowRoot ? root : null;\n }\n\n if (element instanceof ShadowRoot) {\n return element;\n } // when we don't find a shadow root\n\n\n if (!element.parentNode) {\n return null;\n }\n\n return Util.findShadowRoot(element.parentNode);\n }\n };\n setTransitionEndSupport();\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'alert';\n var VERSION = '4.3.1';\n var DATA_KEY = 'bs.alert';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var Selector = {\n DISMISS: '[data-dismiss=\"alert\"]'\n };\n var Event = {\n CLOSE: \"close\" + EVENT_KEY,\n CLOSED: \"closed\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n ALERT: 'alert',\n FADE: 'fade',\n SHOW: 'show'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Alert =\n /*#__PURE__*/\n function () {\n function Alert(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Alert.prototype;\n\n // Public\n _proto.close = function close(element) {\n var rootElement = this._element;\n\n if (element) {\n rootElement = this._getRootElement(element);\n }\n\n var customEvent = this._triggerCloseEvent(rootElement);\n\n if (customEvent.isDefaultPrevented()) {\n return;\n }\n\n this._removeElement(rootElement);\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n } // Private\n ;\n\n _proto._getRootElement = function _getRootElement(element) {\n var selector = Util.getSelectorFromElement(element);\n var parent = false;\n\n if (selector) {\n parent = document.querySelector(selector);\n }\n\n if (!parent) {\n parent = $(element).closest(\".\" + ClassName.ALERT)[0];\n }\n\n return parent;\n };\n\n _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n var closeEvent = $.Event(Event.CLOSE);\n $(element).trigger(closeEvent);\n return closeEvent;\n };\n\n _proto._removeElement = function _removeElement(element) {\n var _this = this;\n\n $(element).removeClass(ClassName.SHOW);\n\n if (!$(element).hasClass(ClassName.FADE)) {\n this._destroyElement(element);\n\n return;\n }\n\n var transitionDuration = Util.getTransitionDurationFromElement(element);\n $(element).one(Util.TRANSITION_END, function (event) {\n return _this._destroyElement(element, event);\n }).emulateTransitionEnd(transitionDuration);\n };\n\n _proto._destroyElement = function _destroyElement(element) {\n $(element).detach().trigger(Event.CLOSED).remove();\n } // Static\n ;\n\n Alert._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $element = $(this);\n var data = $element.data(DATA_KEY);\n\n if (!data) {\n data = new Alert(this);\n $element.data(DATA_KEY, data);\n }\n\n if (config === 'close') {\n data[config](this);\n }\n });\n };\n\n Alert._handleDismiss = function _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault();\n }\n\n alertInstance.close(this);\n };\n };\n\n _createClass(Alert, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }]);\n\n return Alert;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Alert._jQueryInterface;\n $.fn[NAME].Constructor = Alert;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Alert._jQueryInterface;\n };\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$1 = 'button';\n var VERSION$1 = '4.3.1';\n var DATA_KEY$1 = 'bs.button';\n var EVENT_KEY$1 = \".\" + DATA_KEY$1;\n var DATA_API_KEY$1 = '.data-api';\n var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1];\n var ClassName$1 = {\n ACTIVE: 'active',\n BUTTON: 'btn',\n FOCUS: 'focus'\n };\n var Selector$1 = {\n DATA_TOGGLE_CARROT: '[data-toggle^=\"button\"]',\n DATA_TOGGLE: '[data-toggle=\"buttons\"]',\n INPUT: 'input:not([type=\"hidden\"])',\n ACTIVE: '.active',\n BUTTON: '.btn'\n };\n var Event$1 = {\n CLICK_DATA_API: \"click\" + EVENT_KEY$1 + DATA_API_KEY$1,\n FOCUS_BLUR_DATA_API: \"focus\" + EVENT_KEY$1 + DATA_API_KEY$1 + \" \" + (\"blur\" + EVENT_KEY$1 + DATA_API_KEY$1)\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Button =\n /*#__PURE__*/\n function () {\n function Button(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Button.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n var triggerChangeEvent = true;\n var addAriaPressed = true;\n var rootElement = $(this._element).closest(Selector$1.DATA_TOGGLE)[0];\n\n if (rootElement) {\n var input = this._element.querySelector(Selector$1.INPUT);\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked && this._element.classList.contains(ClassName$1.ACTIVE)) {\n triggerChangeEvent = false;\n } else {\n var activeElement = rootElement.querySelector(Selector$1.ACTIVE);\n\n if (activeElement) {\n $(activeElement).removeClass(ClassName$1.ACTIVE);\n }\n }\n }\n\n if (triggerChangeEvent) {\n if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {\n return;\n }\n\n input.checked = !this._element.classList.contains(ClassName$1.ACTIVE);\n $(input).trigger('change');\n }\n\n input.focus();\n addAriaPressed = false;\n }\n }\n\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName$1.ACTIVE));\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(ClassName$1.ACTIVE);\n }\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY$1);\n this._element = null;\n } // Static\n ;\n\n Button._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY$1);\n\n if (!data) {\n data = new Button(this);\n $(this).data(DATA_KEY$1, data);\n }\n\n if (config === 'toggle') {\n data[config]();\n }\n });\n };\n\n _createClass(Button, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$1;\n }\n }]);\n\n return Button;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event$1.CLICK_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {\n event.preventDefault();\n var button = event.target;\n\n if (!$(button).hasClass(ClassName$1.BUTTON)) {\n button = $(button).closest(Selector$1.BUTTON);\n }\n\n Button._jQueryInterface.call($(button), 'toggle');\n }).on(Event$1.FOCUS_BLUR_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {\n var button = $(event.target).closest(Selector$1.BUTTON)[0];\n $(button).toggleClass(ClassName$1.FOCUS, /^focus(in)?$/.test(event.type));\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME$1] = Button._jQueryInterface;\n $.fn[NAME$1].Constructor = Button;\n\n $.fn[NAME$1].noConflict = function () {\n $.fn[NAME$1] = JQUERY_NO_CONFLICT$1;\n return Button._jQueryInterface;\n };\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$2 = 'carousel';\n var VERSION$2 = '4.3.1';\n var DATA_KEY$2 = 'bs.carousel';\n var EVENT_KEY$2 = \".\" + DATA_KEY$2;\n var DATA_API_KEY$2 = '.data-api';\n var JQUERY_NO_CONFLICT$2 = $.fn[NAME$2];\n var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n\n var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n\n var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n var SWIPE_THRESHOLD = 40;\n var Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true,\n touch: true\n };\n var DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean',\n touch: 'boolean'\n };\n var Direction = {\n NEXT: 'next',\n PREV: 'prev',\n LEFT: 'left',\n RIGHT: 'right'\n };\n var Event$2 = {\n SLIDE: \"slide\" + EVENT_KEY$2,\n SLID: \"slid\" + EVENT_KEY$2,\n KEYDOWN: \"keydown\" + EVENT_KEY$2,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY$2,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY$2,\n TOUCHSTART: \"touchstart\" + EVENT_KEY$2,\n TOUCHMOVE: \"touchmove\" + EVENT_KEY$2,\n TOUCHEND: \"touchend\" + EVENT_KEY$2,\n POINTERDOWN: \"pointerdown\" + EVENT_KEY$2,\n POINTERUP: \"pointerup\" + EVENT_KEY$2,\n DRAG_START: \"dragstart\" + EVENT_KEY$2,\n LOAD_DATA_API: \"load\" + EVENT_KEY$2 + DATA_API_KEY$2,\n CLICK_DATA_API: \"click\" + EVENT_KEY$2 + DATA_API_KEY$2\n };\n var ClassName$2 = {\n CAROUSEL: 'carousel',\n ACTIVE: 'active',\n SLIDE: 'slide',\n RIGHT: 'carousel-item-right',\n LEFT: 'carousel-item-left',\n NEXT: 'carousel-item-next',\n PREV: 'carousel-item-prev',\n ITEM: 'carousel-item',\n POINTER_EVENT: 'pointer-event'\n };\n var Selector$2 = {\n ACTIVE: '.active',\n ACTIVE_ITEM: '.active.carousel-item',\n ITEM: '.carousel-item',\n ITEM_IMG: '.carousel-item img',\n NEXT_PREV: '.carousel-item-next, .carousel-item-prev',\n INDICATORS: '.carousel-indicators',\n DATA_SLIDE: '[data-slide], [data-slide-to]',\n DATA_RIDE: '[data-ride=\"carousel\"]'\n };\n var PointerType = {\n TOUCH: 'touch',\n PEN: 'pen'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Carousel =\n /*#__PURE__*/\n function () {\n function Carousel(element, config) {\n this._items = null;\n this._interval = null;\n this._activeElement = null;\n this._isPaused = false;\n this._isSliding = false;\n this.touchTimeout = null;\n this.touchStartX = 0;\n this.touchDeltaX = 0;\n this._config = this._getConfig(config);\n this._element = element;\n this._indicatorsElement = this._element.querySelector(Selector$2.INDICATORS);\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);\n\n this._addEventListeners();\n } // Getters\n\n\n var _proto = Carousel.prototype;\n\n // Public\n _proto.next = function next() {\n if (!this._isSliding) {\n this._slide(Direction.NEXT);\n }\n };\n\n _proto.nextWhenVisible = function nextWhenVisible() {\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') {\n this.next();\n }\n };\n\n _proto.prev = function prev() {\n if (!this._isSliding) {\n this._slide(Direction.PREV);\n }\n };\n\n _proto.pause = function pause(event) {\n if (!event) {\n this._isPaused = true;\n }\n\n if (this._element.querySelector(Selector$2.NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element);\n this.cycle(true);\n }\n\n clearInterval(this._interval);\n this._interval = null;\n };\n\n _proto.cycle = function cycle(event) {\n if (!event) {\n this._isPaused = false;\n }\n\n if (this._interval) {\n clearInterval(this._interval);\n this._interval = null;\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n }\n };\n\n _proto.to = function to(index) {\n var _this = this;\n\n this._activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);\n\n var activeIndex = this._getItemIndex(this._activeElement);\n\n if (index > this._items.length - 1 || index < 0) {\n return;\n }\n\n if (this._isSliding) {\n $(this._element).one(Event$2.SLID, function () {\n return _this.to(index);\n });\n return;\n }\n\n if (activeIndex === index) {\n this.pause();\n this.cycle();\n return;\n }\n\n var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;\n\n this._slide(direction, this._items[index]);\n };\n\n _proto.dispose = function dispose() {\n $(this._element).off(EVENT_KEY$2);\n $.removeData(this._element, DATA_KEY$2);\n this._items = null;\n this._config = null;\n this._element = null;\n this._interval = null;\n this._isPaused = null;\n this._isSliding = null;\n this._activeElement = null;\n this._indicatorsElement = null;\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, config);\n Util.typeCheckConfig(NAME$2, config, DefaultType);\n return config;\n };\n\n _proto._handleSwipe = function _handleSwipe() {\n var absDeltax = Math.abs(this.touchDeltaX);\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return;\n }\n\n var direction = absDeltax / this.touchDeltaX; // swipe left\n\n if (direction > 0) {\n this.prev();\n } // swipe right\n\n\n if (direction < 0) {\n this.next();\n }\n };\n\n _proto._addEventListeners = function _addEventListeners() {\n var _this2 = this;\n\n if (this._config.keyboard) {\n $(this._element).on(Event$2.KEYDOWN, function (event) {\n return _this2._keydown(event);\n });\n }\n\n if (this._config.pause === 'hover') {\n $(this._element).on(Event$2.MOUSEENTER, function (event) {\n return _this2.pause(event);\n }).on(Event$2.MOUSELEAVE, function (event) {\n return _this2.cycle(event);\n });\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners();\n }\n };\n\n _proto._addTouchEventListeners = function _addTouchEventListeners() {\n var _this3 = this;\n\n if (!this._touchSupported) {\n return;\n }\n\n var start = function start(event) {\n if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n _this3.touchStartX = event.originalEvent.clientX;\n } else if (!_this3._pointerEvent) {\n _this3.touchStartX = event.originalEvent.touches[0].clientX;\n }\n };\n\n var move = function move(event) {\n // ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n _this3.touchDeltaX = 0;\n } else {\n _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX;\n }\n };\n\n var end = function end(event) {\n if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;\n }\n\n _this3._handleSwipe();\n\n if (_this3._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n _this3.pause();\n\n if (_this3.touchTimeout) {\n clearTimeout(_this3.touchTimeout);\n }\n\n _this3.touchTimeout = setTimeout(function (event) {\n return _this3.cycle(event);\n }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);\n }\n };\n\n $(this._element.querySelectorAll(Selector$2.ITEM_IMG)).on(Event$2.DRAG_START, function (e) {\n return e.preventDefault();\n });\n\n if (this._pointerEvent) {\n $(this._element).on(Event$2.POINTERDOWN, function (event) {\n return start(event);\n });\n $(this._element).on(Event$2.POINTERUP, function (event) {\n return end(event);\n });\n\n this._element.classList.add(ClassName$2.POINTER_EVENT);\n } else {\n $(this._element).on(Event$2.TOUCHSTART, function (event) {\n return start(event);\n });\n $(this._element).on(Event$2.TOUCHMOVE, function (event) {\n return move(event);\n });\n $(this._element).on(Event$2.TOUCHEND, function (event) {\n return end(event);\n });\n }\n };\n\n _proto._keydown = function _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault();\n this.prev();\n break;\n\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault();\n this.next();\n break;\n\n default:\n }\n };\n\n _proto._getItemIndex = function _getItemIndex(element) {\n this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector$2.ITEM)) : [];\n return this._items.indexOf(element);\n };\n\n _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n var isNextDirection = direction === Direction.NEXT;\n var isPrevDirection = direction === Direction.PREV;\n\n var activeIndex = this._getItemIndex(activeElement);\n\n var lastItemIndex = this._items.length - 1;\n var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement;\n }\n\n var delta = direction === Direction.PREV ? -1 : 1;\n var itemIndex = (activeIndex + delta) % this._items.length;\n return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n };\n\n _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n var targetIndex = this._getItemIndex(relatedTarget);\n\n var fromIndex = this._getItemIndex(this._element.querySelector(Selector$2.ACTIVE_ITEM));\n\n var slideEvent = $.Event(Event$2.SLIDE, {\n relatedTarget: relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n });\n $(this._element).trigger(slideEvent);\n return slideEvent;\n };\n\n _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector$2.ACTIVE));\n $(indicators).removeClass(ClassName$2.ACTIVE);\n\n var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n if (nextIndicator) {\n $(nextIndicator).addClass(ClassName$2.ACTIVE);\n }\n }\n };\n\n _proto._slide = function _slide(direction, element) {\n var _this4 = this;\n\n var activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);\n\n var activeElementIndex = this._getItemIndex(activeElement);\n\n var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n\n var nextElementIndex = this._getItemIndex(nextElement);\n\n var isCycling = Boolean(this._interval);\n var directionalClassName;\n var orderClassName;\n var eventDirectionName;\n\n if (direction === Direction.NEXT) {\n directionalClassName = ClassName$2.LEFT;\n orderClassName = ClassName$2.NEXT;\n eventDirectionName = Direction.LEFT;\n } else {\n directionalClassName = ClassName$2.RIGHT;\n orderClassName = ClassName$2.PREV;\n eventDirectionName = Direction.RIGHT;\n }\n\n if (nextElement && $(nextElement).hasClass(ClassName$2.ACTIVE)) {\n this._isSliding = false;\n return;\n }\n\n var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n if (slideEvent.isDefaultPrevented()) {\n return;\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return;\n }\n\n this._isSliding = true;\n\n if (isCycling) {\n this.pause();\n }\n\n this._setActiveIndicatorElement(nextElement);\n\n var slidEvent = $.Event(Event$2.SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n });\n\n if ($(this._element).hasClass(ClassName$2.SLIDE)) {\n $(nextElement).addClass(orderClassName);\n Util.reflow(nextElement);\n $(activeElement).addClass(directionalClassName);\n $(nextElement).addClass(directionalClassName);\n var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10);\n\n if (nextElementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n this._config.interval = nextElementInterval;\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval;\n }\n\n var transitionDuration = Util.getTransitionDurationFromElement(activeElement);\n $(activeElement).one(Util.TRANSITION_END, function () {\n $(nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(ClassName$2.ACTIVE);\n $(activeElement).removeClass(ClassName$2.ACTIVE + \" \" + orderClassName + \" \" + directionalClassName);\n _this4._isSliding = false;\n setTimeout(function () {\n return $(_this4._element).trigger(slidEvent);\n }, 0);\n }).emulateTransitionEnd(transitionDuration);\n } else {\n $(activeElement).removeClass(ClassName$2.ACTIVE);\n $(nextElement).addClass(ClassName$2.ACTIVE);\n this._isSliding = false;\n $(this._element).trigger(slidEvent);\n }\n\n if (isCycling) {\n this.cycle();\n }\n } // Static\n ;\n\n Carousel._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY$2);\n\n var _config = _objectSpread({}, Default, $(this).data());\n\n if (typeof config === 'object') {\n _config = _objectSpread({}, _config, config);\n }\n\n var action = typeof config === 'string' ? config : _config.slide;\n\n if (!data) {\n data = new Carousel(this, _config);\n $(this).data(DATA_KEY$2, data);\n }\n\n if (typeof config === 'number') {\n data.to(config);\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + action + \"\\\"\");\n }\n\n data[action]();\n } else if (_config.interval && _config.ride) {\n data.pause();\n data.cycle();\n }\n });\n };\n\n Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n var selector = Util.getSelectorFromElement(this);\n\n if (!selector) {\n return;\n }\n\n var target = $(selector)[0];\n\n if (!target || !$(target).hasClass(ClassName$2.CAROUSEL)) {\n return;\n }\n\n var config = _objectSpread({}, $(target).data(), $(this).data());\n\n var slideIndex = this.getAttribute('data-slide-to');\n\n if (slideIndex) {\n config.interval = false;\n }\n\n Carousel._jQueryInterface.call($(target), config);\n\n if (slideIndex) {\n $(target).data(DATA_KEY$2).to(slideIndex);\n }\n\n event.preventDefault();\n };\n\n _createClass(Carousel, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$2;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Carousel;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event$2.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler);\n $(window).on(Event$2.LOAD_DATA_API, function () {\n var carousels = [].slice.call(document.querySelectorAll(Selector$2.DATA_RIDE));\n\n for (var i = 0, len = carousels.length; i < len; i++) {\n var $carousel = $(carousels[i]);\n\n Carousel._jQueryInterface.call($carousel, $carousel.data());\n }\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME$2] = Carousel._jQueryInterface;\n $.fn[NAME$2].Constructor = Carousel;\n\n $.fn[NAME$2].noConflict = function () {\n $.fn[NAME$2] = JQUERY_NO_CONFLICT$2;\n return Carousel._jQueryInterface;\n };\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$3 = 'collapse';\n var VERSION$3 = '4.3.1';\n var DATA_KEY$3 = 'bs.collapse';\n var EVENT_KEY$3 = \".\" + DATA_KEY$3;\n var DATA_API_KEY$3 = '.data-api';\n var JQUERY_NO_CONFLICT$3 = $.fn[NAME$3];\n var Default$1 = {\n toggle: true,\n parent: ''\n };\n var DefaultType$1 = {\n toggle: 'boolean',\n parent: '(string|element)'\n };\n var Event$3 = {\n SHOW: \"show\" + EVENT_KEY$3,\n SHOWN: \"shown\" + EVENT_KEY$3,\n HIDE: \"hide\" + EVENT_KEY$3,\n HIDDEN: \"hidden\" + EVENT_KEY$3,\n CLICK_DATA_API: \"click\" + EVENT_KEY$3 + DATA_API_KEY$3\n };\n var ClassName$3 = {\n SHOW: 'show',\n COLLAPSE: 'collapse',\n COLLAPSING: 'collapsing',\n COLLAPSED: 'collapsed'\n };\n var Dimension = {\n WIDTH: 'width',\n HEIGHT: 'height'\n };\n var Selector$3 = {\n ACTIVES: '.show, .collapsing',\n DATA_TOGGLE: '[data-toggle=\"collapse\"]'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Collapse =\n /*#__PURE__*/\n function () {\n function Collapse(element, config) {\n this._isTransitioning = false;\n this._element = element;\n this._config = this._getConfig(config);\n this._triggerArray = [].slice.call(document.querySelectorAll(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n var toggleList = [].slice.call(document.querySelectorAll(Selector$3.DATA_TOGGLE));\n\n for (var i = 0, len = toggleList.length; i < len; i++) {\n var elem = toggleList[i];\n var selector = Util.getSelectorFromElement(elem);\n var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {\n return foundElem === element;\n });\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector;\n\n this._triggerArray.push(elem);\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null;\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n }\n\n if (this._config.toggle) {\n this.toggle();\n }\n } // Getters\n\n\n var _proto = Collapse.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n if ($(this._element).hasClass(ClassName$3.SHOW)) {\n this.hide();\n } else {\n this.show();\n }\n };\n\n _proto.show = function show() {\n var _this = this;\n\n if (this._isTransitioning || $(this._element).hasClass(ClassName$3.SHOW)) {\n return;\n }\n\n var actives;\n var activesData;\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(Selector$3.ACTIVES)).filter(function (elem) {\n if (typeof _this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === _this._config.parent;\n }\n\n return elem.classList.contains(ClassName$3.COLLAPSE);\n });\n\n if (actives.length === 0) {\n actives = null;\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY$3);\n\n if (activesData && activesData._isTransitioning) {\n return;\n }\n }\n\n var startEvent = $.Event(Event$3.SHOW);\n $(this._element).trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide');\n\n if (!activesData) {\n $(actives).data(DATA_KEY$3, null);\n }\n }\n\n var dimension = this._getDimension();\n\n $(this._element).removeClass(ClassName$3.COLLAPSE).addClass(ClassName$3.COLLAPSING);\n this._element.style[dimension] = 0;\n\n if (this._triggerArray.length) {\n $(this._triggerArray).removeClass(ClassName$3.COLLAPSED).attr('aria-expanded', true);\n }\n\n this.setTransitioning(true);\n\n var complete = function complete() {\n $(_this._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).addClass(ClassName$3.SHOW);\n _this._element.style[dimension] = '';\n\n _this.setTransitioning(false);\n\n $(_this._element).trigger(Event$3.SHOWN);\n };\n\n var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n var scrollSize = \"scroll\" + capitalizedDimension;\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n this._element.style[dimension] = this._element[scrollSize] + \"px\";\n };\n\n _proto.hide = function hide() {\n var _this2 = this;\n\n if (this._isTransitioning || !$(this._element).hasClass(ClassName$3.SHOW)) {\n return;\n }\n\n var startEvent = $.Event(Event$3.HIDE);\n $(this._element).trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n var dimension = this._getDimension();\n\n this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n Util.reflow(this._element);\n $(this._element).addClass(ClassName$3.COLLAPSING).removeClass(ClassName$3.COLLAPSE).removeClass(ClassName$3.SHOW);\n var triggerArrayLength = this._triggerArray.length;\n\n if (triggerArrayLength > 0) {\n for (var i = 0; i < triggerArrayLength; i++) {\n var trigger = this._triggerArray[i];\n var selector = Util.getSelectorFromElement(trigger);\n\n if (selector !== null) {\n var $elem = $([].slice.call(document.querySelectorAll(selector)));\n\n if (!$elem.hasClass(ClassName$3.SHOW)) {\n $(trigger).addClass(ClassName$3.COLLAPSED).attr('aria-expanded', false);\n }\n }\n }\n }\n\n this.setTransitioning(true);\n\n var complete = function complete() {\n _this2.setTransitioning(false);\n\n $(_this2._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).trigger(Event$3.HIDDEN);\n };\n\n this._element.style[dimension] = '';\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n };\n\n _proto.setTransitioning = function setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning;\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY$3);\n this._config = null;\n this._parent = null;\n this._element = null;\n this._triggerArray = null;\n this._isTransitioning = null;\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default$1, config);\n config.toggle = Boolean(config.toggle); // Coerce string values\n\n Util.typeCheckConfig(NAME$3, config, DefaultType$1);\n return config;\n };\n\n _proto._getDimension = function _getDimension() {\n var hasWidth = $(this._element).hasClass(Dimension.WIDTH);\n return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;\n };\n\n _proto._getParent = function _getParent() {\n var _this3 = this;\n\n var parent;\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent; // It's a jQuery object\n\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0];\n }\n } else {\n parent = document.querySelector(this._config.parent);\n }\n\n var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n var children = [].slice.call(parent.querySelectorAll(selector));\n $(children).each(function (i, element) {\n _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\n });\n return parent;\n };\n\n _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n var isOpen = $(element).hasClass(ClassName$3.SHOW);\n\n if (triggerArray.length) {\n $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n }\n } // Static\n ;\n\n Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n var selector = Util.getSelectorFromElement(element);\n return selector ? document.querySelector(selector) : null;\n };\n\n Collapse._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $this = $(this);\n var data = $this.data(DATA_KEY$3);\n\n var _config = _objectSpread({}, Default$1, $this.data(), typeof config === 'object' && config ? config : {});\n\n if (!data && _config.toggle && /show|hide/.test(config)) {\n _config.toggle = false;\n }\n\n if (!data) {\n data = new Collapse(this, _config);\n $this.data(DATA_KEY$3, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Collapse, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$3;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$1;\n }\n }]);\n\n return Collapse;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event$3.CLICK_DATA_API, Selector$3.DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault();\n }\n\n var $trigger = $(this);\n var selector = Util.getSelectorFromElement(this);\n var selectors = [].slice.call(document.querySelectorAll(selector));\n $(selectors).each(function () {\n var $target = $(this);\n var data = $target.data(DATA_KEY$3);\n var config = data ? 'toggle' : $trigger.data();\n\n Collapse._jQueryInterface.call($target, config);\n });\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME$3] = Collapse._jQueryInterface;\n $.fn[NAME$3].Constructor = Collapse;\n\n $.fn[NAME$3].noConflict = function () {\n $.fn[NAME$3] = JQUERY_NO_CONFLICT$3;\n return Collapse._jQueryInterface;\n };\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$4 = 'dropdown';\n var VERSION$4 = '4.3.1';\n var DATA_KEY$4 = 'bs.dropdown';\n var EVENT_KEY$4 = \".\" + DATA_KEY$4;\n var DATA_API_KEY$4 = '.data-api';\n var JQUERY_NO_CONFLICT$4 = $.fn[NAME$4];\n var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\n\n var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\n\n var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\n\n var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\n\n var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)\n\n var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + \"|\" + ARROW_DOWN_KEYCODE + \"|\" + ESCAPE_KEYCODE);\n var Event$4 = {\n HIDE: \"hide\" + EVENT_KEY$4,\n HIDDEN: \"hidden\" + EVENT_KEY$4,\n SHOW: \"show\" + EVENT_KEY$4,\n SHOWN: \"shown\" + EVENT_KEY$4,\n CLICK: \"click\" + EVENT_KEY$4,\n CLICK_DATA_API: \"click\" + EVENT_KEY$4 + DATA_API_KEY$4,\n KEYDOWN_DATA_API: \"keydown\" + EVENT_KEY$4 + DATA_API_KEY$4,\n KEYUP_DATA_API: \"keyup\" + EVENT_KEY$4 + DATA_API_KEY$4\n };\n var ClassName$4 = {\n DISABLED: 'disabled',\n SHOW: 'show',\n DROPUP: 'dropup',\n DROPRIGHT: 'dropright',\n DROPLEFT: 'dropleft',\n MENURIGHT: 'dropdown-menu-right',\n MENULEFT: 'dropdown-menu-left',\n POSITION_STATIC: 'position-static'\n };\n var Selector$4 = {\n DATA_TOGGLE: '[data-toggle=\"dropdown\"]',\n FORM_CHILD: '.dropdown form',\n MENU: '.dropdown-menu',\n NAVBAR_NAV: '.navbar-nav',\n VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n };\n var AttachmentMap = {\n TOP: 'top-start',\n TOPEND: 'top-end',\n BOTTOM: 'bottom-start',\n BOTTOMEND: 'bottom-end',\n RIGHT: 'right-start',\n RIGHTEND: 'right-end',\n LEFT: 'left-start',\n LEFTEND: 'left-end'\n };\n var Default$2 = {\n offset: 0,\n flip: true,\n boundary: 'scrollParent',\n reference: 'toggle',\n display: 'dynamic'\n };\n var DefaultType$2 = {\n offset: '(number|string|function)',\n flip: 'boolean',\n boundary: '(string|element)',\n reference: '(string|element)',\n display: 'string'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Dropdown =\n /*#__PURE__*/\n function () {\n function Dropdown(element, config) {\n this._element = element;\n this._popper = null;\n this._config = this._getConfig(config);\n this._menu = this._getMenuElement();\n this._inNavbar = this._detectNavbar();\n\n this._addEventListeners();\n } // Getters\n\n\n var _proto = Dropdown.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED)) {\n return;\n }\n\n var parent = Dropdown._getParentFromElement(this._element);\n\n var isActive = $(this._menu).hasClass(ClassName$4.SHOW);\n\n Dropdown._clearMenus();\n\n if (isActive) {\n return;\n }\n\n var relatedTarget = {\n relatedTarget: this._element\n };\n var showEvent = $.Event(Event$4.SHOW, relatedTarget);\n $(parent).trigger(showEvent);\n\n if (showEvent.isDefaultPrevented()) {\n return;\n } // Disable totally Popper.js for Dropdown in Navbar\n\n\n if (!this._inNavbar) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper.js (https://popper.js.org/)');\n }\n\n var referenceElement = this._element;\n\n if (this._config.reference === 'parent') {\n referenceElement = parent;\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference; // Check if it's jQuery element\n\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0];\n }\n } // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n\n\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(ClassName$4.POSITION_STATIC);\n }\n\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());\n } // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n if ('ontouchstart' in document.documentElement && $(parent).closest(Selector$4.NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop);\n }\n\n this._element.focus();\n\n this._element.setAttribute('aria-expanded', true);\n\n $(this._menu).toggleClass(ClassName$4.SHOW);\n $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));\n };\n\n _proto.show = function show() {\n if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || $(this._menu).hasClass(ClassName$4.SHOW)) {\n return;\n }\n\n var relatedTarget = {\n relatedTarget: this._element\n };\n var showEvent = $.Event(Event$4.SHOW, relatedTarget);\n\n var parent = Dropdown._getParentFromElement(this._element);\n\n $(parent).trigger(showEvent);\n\n if (showEvent.isDefaultPrevented()) {\n return;\n }\n\n $(this._menu).toggleClass(ClassName$4.SHOW);\n $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));\n };\n\n _proto.hide = function hide() {\n if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || !$(this._menu).hasClass(ClassName$4.SHOW)) {\n return;\n }\n\n var relatedTarget = {\n relatedTarget: this._element\n };\n var hideEvent = $.Event(Event$4.HIDE, relatedTarget);\n\n var parent = Dropdown._getParentFromElement(this._element);\n\n $(parent).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n return;\n }\n\n $(this._menu).toggleClass(ClassName$4.SHOW);\n $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY$4);\n $(this._element).off(EVENT_KEY$4);\n this._element = null;\n this._menu = null;\n\n if (this._popper !== null) {\n this._popper.destroy();\n\n this._popper = null;\n }\n };\n\n _proto.update = function update() {\n this._inNavbar = this._detectNavbar();\n\n if (this._popper !== null) {\n this._popper.scheduleUpdate();\n }\n } // Private\n ;\n\n _proto._addEventListeners = function _addEventListeners() {\n var _this = this;\n\n $(this._element).on(Event$4.CLICK, function (event) {\n event.preventDefault();\n event.stopPropagation();\n\n _this.toggle();\n });\n };\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, this.constructor.Default, $(this._element).data(), config);\n Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n return config;\n };\n\n _proto._getMenuElement = function _getMenuElement() {\n if (!this._menu) {\n var parent = Dropdown._getParentFromElement(this._element);\n\n if (parent) {\n this._menu = parent.querySelector(Selector$4.MENU);\n }\n }\n\n return this._menu;\n };\n\n _proto._getPlacement = function _getPlacement() {\n var $parentDropdown = $(this._element.parentNode);\n var placement = AttachmentMap.BOTTOM; // Handle dropup\n\n if ($parentDropdown.hasClass(ClassName$4.DROPUP)) {\n placement = AttachmentMap.TOP;\n\n if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {\n placement = AttachmentMap.TOPEND;\n }\n } else if ($parentDropdown.hasClass(ClassName$4.DROPRIGHT)) {\n placement = AttachmentMap.RIGHT;\n } else if ($parentDropdown.hasClass(ClassName$4.DROPLEFT)) {\n placement = AttachmentMap.LEFT;\n } else if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {\n placement = AttachmentMap.BOTTOMEND;\n }\n\n return placement;\n };\n\n _proto._detectNavbar = function _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0;\n };\n\n _proto._getOffset = function _getOffset() {\n var _this2 = this;\n\n var offset = {};\n\n if (typeof this._config.offset === 'function') {\n offset.fn = function (data) {\n data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});\n return data;\n };\n } else {\n offset.offset = this._config.offset;\n }\n\n return offset;\n };\n\n _proto._getPopperConfig = function _getPopperConfig() {\n var popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: this._getOffset(),\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n } // Disable Popper.js if we have a static display\n\n };\n\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n };\n }\n\n return popperConfig;\n } // Static\n ;\n\n Dropdown._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY$4);\n\n var _config = typeof config === 'object' ? config : null;\n\n if (!data) {\n data = new Dropdown(this, _config);\n $(this).data(DATA_KEY$4, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n Dropdown._clearMenus = function _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return;\n }\n\n var toggles = [].slice.call(document.querySelectorAll(Selector$4.DATA_TOGGLE));\n\n for (var i = 0, len = toggles.length; i < len; i++) {\n var parent = Dropdown._getParentFromElement(toggles[i]);\n\n var context = $(toggles[i]).data(DATA_KEY$4);\n var relatedTarget = {\n relatedTarget: toggles[i]\n };\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event;\n }\n\n if (!context) {\n continue;\n }\n\n var dropdownMenu = context._menu;\n\n if (!$(parent).hasClass(ClassName$4.SHOW)) {\n continue;\n }\n\n if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) {\n continue;\n }\n\n var hideEvent = $.Event(Event$4.HIDE, relatedTarget);\n $(parent).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n continue;\n } // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n\n\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop);\n }\n\n toggles[i].setAttribute('aria-expanded', 'false');\n $(dropdownMenu).removeClass(ClassName$4.SHOW);\n $(parent).removeClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));\n }\n };\n\n Dropdown._getParentFromElement = function _getParentFromElement(element) {\n var parent;\n var selector = Util.getSelectorFromElement(element);\n\n if (selector) {\n parent = document.querySelector(selector);\n }\n\n return parent || element.parentNode;\n } // eslint-disable-next-line complexity\n ;\n\n Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector$4.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) {\n return;\n }\n\n var parent = Dropdown._getParentFromElement(this);\n\n var isActive = $(parent).hasClass(ClassName$4.SHOW);\n\n if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n var toggle = parent.querySelector(Selector$4.DATA_TOGGLE);\n $(toggle).trigger('focus');\n }\n\n $(this).trigger('click');\n return;\n }\n\n var items = [].slice.call(parent.querySelectorAll(Selector$4.VISIBLE_ITEMS));\n\n if (items.length === 0) {\n return;\n }\n\n var index = items.indexOf(event.target);\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) {\n // Up\n index--;\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {\n // Down\n index++;\n }\n\n if (index < 0) {\n index = 0;\n }\n\n items[index].focus();\n };\n\n _createClass(Dropdown, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$4;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$2;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType$2;\n }\n }]);\n\n return Dropdown;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event$4.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event$4.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler).on(Event$4.CLICK_DATA_API + \" \" + Event$4.KEYUP_DATA_API, Dropdown._clearMenus).on(Event$4.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) {\n event.preventDefault();\n event.stopPropagation();\n\n Dropdown._jQueryInterface.call($(this), 'toggle');\n }).on(Event$4.CLICK_DATA_API, Selector$4.FORM_CHILD, function (e) {\n e.stopPropagation();\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME$4] = Dropdown._jQueryInterface;\n $.fn[NAME$4].Constructor = Dropdown;\n\n $.fn[NAME$4].noConflict = function () {\n $.fn[NAME$4] = JQUERY_NO_CONFLICT$4;\n return Dropdown._jQueryInterface;\n };\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$5 = 'modal';\n var VERSION$5 = '4.3.1';\n var DATA_KEY$5 = 'bs.modal';\n var EVENT_KEY$5 = \".\" + DATA_KEY$5;\n var DATA_API_KEY$5 = '.data-api';\n var JQUERY_NO_CONFLICT$5 = $.fn[NAME$5];\n var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n var Default$3 = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n };\n var DefaultType$3 = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n };\n var Event$5 = {\n HIDE: \"hide\" + EVENT_KEY$5,\n HIDDEN: \"hidden\" + EVENT_KEY$5,\n SHOW: \"show\" + EVENT_KEY$5,\n SHOWN: \"shown\" + EVENT_KEY$5,\n FOCUSIN: \"focusin\" + EVENT_KEY$5,\n RESIZE: \"resize\" + EVENT_KEY$5,\n CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY$5,\n KEYDOWN_DISMISS: \"keydown.dismiss\" + EVENT_KEY$5,\n MOUSEUP_DISMISS: \"mouseup.dismiss\" + EVENT_KEY$5,\n MOUSEDOWN_DISMISS: \"mousedown.dismiss\" + EVENT_KEY$5,\n CLICK_DATA_API: \"click\" + EVENT_KEY$5 + DATA_API_KEY$5\n };\n var ClassName$5 = {\n SCROLLABLE: 'modal-dialog-scrollable',\n SCROLLBAR_MEASURER: 'modal-scrollbar-measure',\n BACKDROP: 'modal-backdrop',\n OPEN: 'modal-open',\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector$5 = {\n DIALOG: '.modal-dialog',\n MODAL_BODY: '.modal-body',\n DATA_TOGGLE: '[data-toggle=\"modal\"]',\n DATA_DISMISS: '[data-dismiss=\"modal\"]',\n FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n STICKY_CONTENT: '.sticky-top'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Modal =\n /*#__PURE__*/\n function () {\n function Modal(element, config) {\n this._config = this._getConfig(config);\n this._element = element;\n this._dialog = element.querySelector(Selector$5.DIALOG);\n this._backdrop = null;\n this._isShown = false;\n this._isBodyOverflowing = false;\n this._ignoreBackdropClick = false;\n this._isTransitioning = false;\n this._scrollbarWidth = 0;\n } // Getters\n\n\n var _proto = Modal.prototype;\n\n // Public\n _proto.toggle = function toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n };\n\n _proto.show = function show(relatedTarget) {\n var _this = this;\n\n if (this._isShown || this._isTransitioning) {\n return;\n }\n\n if ($(this._element).hasClass(ClassName$5.FADE)) {\n this._isTransitioning = true;\n }\n\n var showEvent = $.Event(Event$5.SHOW, {\n relatedTarget: relatedTarget\n });\n $(this._element).trigger(showEvent);\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return;\n }\n\n this._isShown = true;\n\n this._checkScrollbar();\n\n this._setScrollbar();\n\n this._adjustDialog();\n\n this._setEscapeEvent();\n\n this._setResizeEvent();\n\n $(this._element).on(Event$5.CLICK_DISMISS, Selector$5.DATA_DISMISS, function (event) {\n return _this.hide(event);\n });\n $(this._dialog).on(Event$5.MOUSEDOWN_DISMISS, function () {\n $(_this._element).one(Event$5.MOUSEUP_DISMISS, function (event) {\n if ($(event.target).is(_this._element)) {\n _this._ignoreBackdropClick = true;\n }\n });\n });\n\n this._showBackdrop(function () {\n return _this._showElement(relatedTarget);\n });\n };\n\n _proto.hide = function hide(event) {\n var _this2 = this;\n\n if (event) {\n event.preventDefault();\n }\n\n if (!this._isShown || this._isTransitioning) {\n return;\n }\n\n var hideEvent = $.Event(Event$5.HIDE);\n $(this._element).trigger(hideEvent);\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return;\n }\n\n this._isShown = false;\n var transition = $(this._element).hasClass(ClassName$5.FADE);\n\n if (transition) {\n this._isTransitioning = true;\n }\n\n this._setEscapeEvent();\n\n this._setResizeEvent();\n\n $(document).off(Event$5.FOCUSIN);\n $(this._element).removeClass(ClassName$5.SHOW);\n $(this._element).off(Event$5.CLICK_DISMISS);\n $(this._dialog).off(Event$5.MOUSEDOWN_DISMISS);\n\n if (transition) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(this._element).one(Util.TRANSITION_END, function (event) {\n return _this2._hideModal(event);\n }).emulateTransitionEnd(transitionDuration);\n } else {\n this._hideModal();\n }\n };\n\n _proto.dispose = function dispose() {\n [window, this._element, this._dialog].forEach(function (htmlElement) {\n return $(htmlElement).off(EVENT_KEY$5);\n });\n /**\n * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `Event.CLICK_DATA_API` event that should remain\n */\n\n $(document).off(Event$5.FOCUSIN);\n $.removeData(this._element, DATA_KEY$5);\n this._config = null;\n this._element = null;\n this._dialog = null;\n this._backdrop = null;\n this._isShown = null;\n this._isBodyOverflowing = null;\n this._ignoreBackdropClick = null;\n this._isTransitioning = null;\n this._scrollbarWidth = null;\n };\n\n _proto.handleUpdate = function handleUpdate() {\n this._adjustDialog();\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default$3, config);\n Util.typeCheckConfig(NAME$5, config, DefaultType$3);\n return config;\n };\n\n _proto._showElement = function _showElement(relatedTarget) {\n var _this3 = this;\n\n var transition = $(this._element).hasClass(ClassName$5.FADE);\n\n if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element);\n }\n\n this._element.style.display = 'block';\n\n this._element.removeAttribute('aria-hidden');\n\n this._element.setAttribute('aria-modal', true);\n\n if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE)) {\n this._dialog.querySelector(Selector$5.MODAL_BODY).scrollTop = 0;\n } else {\n this._element.scrollTop = 0;\n }\n\n if (transition) {\n Util.reflow(this._element);\n }\n\n $(this._element).addClass(ClassName$5.SHOW);\n\n if (this._config.focus) {\n this._enforceFocus();\n }\n\n var shownEvent = $.Event(Event$5.SHOWN, {\n relatedTarget: relatedTarget\n });\n\n var transitionComplete = function transitionComplete() {\n if (_this3._config.focus) {\n _this3._element.focus();\n }\n\n _this3._isTransitioning = false;\n $(_this3._element).trigger(shownEvent);\n };\n\n if (transition) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\n } else {\n transitionComplete();\n }\n };\n\n _proto._enforceFocus = function _enforceFocus() {\n var _this4 = this;\n\n $(document).off(Event$5.FOCUSIN) // Guard against infinite focus loop\n .on(Event$5.FOCUSIN, function (event) {\n if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) {\n _this4._element.focus();\n }\n });\n };\n\n _proto._setEscapeEvent = function _setEscapeEvent() {\n var _this5 = this;\n\n if (this._isShown && this._config.keyboard) {\n $(this._element).on(Event$5.KEYDOWN_DISMISS, function (event) {\n if (event.which === ESCAPE_KEYCODE$1) {\n event.preventDefault();\n\n _this5.hide();\n }\n });\n } else if (!this._isShown) {\n $(this._element).off(Event$5.KEYDOWN_DISMISS);\n }\n };\n\n _proto._setResizeEvent = function _setResizeEvent() {\n var _this6 = this;\n\n if (this._isShown) {\n $(window).on(Event$5.RESIZE, function (event) {\n return _this6.handleUpdate(event);\n });\n } else {\n $(window).off(Event$5.RESIZE);\n }\n };\n\n _proto._hideModal = function _hideModal() {\n var _this7 = this;\n\n this._element.style.display = 'none';\n\n this._element.setAttribute('aria-hidden', true);\n\n this._element.removeAttribute('aria-modal');\n\n this._isTransitioning = false;\n\n this._showBackdrop(function () {\n $(document.body).removeClass(ClassName$5.OPEN);\n\n _this7._resetAdjustments();\n\n _this7._resetScrollbar();\n\n $(_this7._element).trigger(Event$5.HIDDEN);\n });\n };\n\n _proto._removeBackdrop = function _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove();\n this._backdrop = null;\n }\n };\n\n _proto._showBackdrop = function _showBackdrop(callback) {\n var _this8 = this;\n\n var animate = $(this._element).hasClass(ClassName$5.FADE) ? ClassName$5.FADE : '';\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div');\n this._backdrop.className = ClassName$5.BACKDROP;\n\n if (animate) {\n this._backdrop.classList.add(animate);\n }\n\n $(this._backdrop).appendTo(document.body);\n $(this._element).on(Event$5.CLICK_DISMISS, function (event) {\n if (_this8._ignoreBackdropClick) {\n _this8._ignoreBackdropClick = false;\n return;\n }\n\n if (event.target !== event.currentTarget) {\n return;\n }\n\n if (_this8._config.backdrop === 'static') {\n _this8._element.focus();\n } else {\n _this8.hide();\n }\n });\n\n if (animate) {\n Util.reflow(this._backdrop);\n }\n\n $(this._backdrop).addClass(ClassName$5.SHOW);\n\n if (!callback) {\n return;\n }\n\n if (!animate) {\n callback();\n return;\n }\n\n var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(ClassName$5.SHOW);\n\n var callbackRemove = function callbackRemove() {\n _this8._removeBackdrop();\n\n if (callback) {\n callback();\n }\n };\n\n if ($(this._element).hasClass(ClassName$5.FADE)) {\n var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n\n $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\n } else {\n callbackRemove();\n }\n } else if (callback) {\n callback();\n }\n } // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n ;\n\n _proto._adjustDialog = function _adjustDialog() {\n var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n }\n };\n\n _proto._resetAdjustments = function _resetAdjustments() {\n this._element.style.paddingLeft = '';\n this._element.style.paddingRight = '';\n };\n\n _proto._checkScrollbar = function _checkScrollbar() {\n var rect = document.body.getBoundingClientRect();\n this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;\n this._scrollbarWidth = this._getScrollbarWidth();\n };\n\n _proto._setScrollbar = function _setScrollbar() {\n var _this9 = this;\n\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));\n var stickyContent = [].slice.call(document.querySelectorAll(Selector$5.STICKY_CONTENT)); // Adjust fixed content padding\n\n $(fixedContent).each(function (index, element) {\n var actualPadding = element.style.paddingRight;\n var calculatedPadding = $(element).css('padding-right');\n $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + \"px\");\n }); // Adjust sticky content margin\n\n $(stickyContent).each(function (index, element) {\n var actualMargin = element.style.marginRight;\n var calculatedMargin = $(element).css('margin-right');\n $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + \"px\");\n }); // Adjust body padding\n\n var actualPadding = document.body.style.paddingRight;\n var calculatedPadding = $(document.body).css('padding-right');\n $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n }\n\n $(document.body).addClass(ClassName$5.OPEN);\n };\n\n _proto._resetScrollbar = function _resetScrollbar() {\n // Restore fixed content padding\n var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));\n $(fixedContent).each(function (index, element) {\n var padding = $(element).data('padding-right');\n $(element).removeData('padding-right');\n element.style.paddingRight = padding ? padding : '';\n }); // Restore sticky content\n\n var elements = [].slice.call(document.querySelectorAll(\"\" + Selector$5.STICKY_CONTENT));\n $(elements).each(function (index, element) {\n var margin = $(element).data('margin-right');\n\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right');\n }\n }); // Restore body padding\n\n var padding = $(document.body).data('padding-right');\n $(document.body).removeData('padding-right');\n document.body.style.paddingRight = padding ? padding : '';\n };\n\n _proto._getScrollbarWidth = function _getScrollbarWidth() {\n // thx d.walsh\n var scrollDiv = document.createElement('div');\n scrollDiv.className = ClassName$5.SCROLLBAR_MEASURER;\n document.body.appendChild(scrollDiv);\n var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n return scrollbarWidth;\n } // Static\n ;\n\n Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY$5);\n\n var _config = _objectSpread({}, Default$3, $(this).data(), typeof config === 'object' && config ? config : {});\n\n if (!data) {\n data = new Modal(this, _config);\n $(this).data(DATA_KEY$5, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config](relatedTarget);\n } else if (_config.show) {\n data.show(relatedTarget);\n }\n });\n };\n\n _createClass(Modal, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$5;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$3;\n }\n }]);\n\n return Modal;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event$5.CLICK_DATA_API, Selector$5.DATA_TOGGLE, function (event) {\n var _this10 = this;\n\n var target;\n var selector = Util.getSelectorFromElement(this);\n\n if (selector) {\n target = document.querySelector(selector);\n }\n\n var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data());\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault();\n }\n\n var $target = $(target).one(Event$5.SHOW, function (showEvent) {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return;\n }\n\n $target.one(Event$5.HIDDEN, function () {\n if ($(_this10).is(':visible')) {\n _this10.focus();\n }\n });\n });\n\n Modal._jQueryInterface.call($(target), config, this);\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME$5] = Modal._jQueryInterface;\n $.fn[NAME$5].Constructor = Modal;\n\n $.fn[NAME$5].noConflict = function () {\n $.fn[NAME$5] = JQUERY_NO_CONFLICT$5;\n return Modal._jQueryInterface;\n };\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];\n var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n var DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n /**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\n };\n var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;\n /**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\n var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;\n\n function allowedAttribute(attr, allowedAttributeList) {\n var attrName = attr.nodeName.toLowerCase();\n\n if (allowedAttributeList.indexOf(attrName) !== -1) {\n if (uriAttrs.indexOf(attrName) !== -1) {\n return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));\n }\n\n return true;\n }\n\n var regExp = allowedAttributeList.filter(function (attrRegex) {\n return attrRegex instanceof RegExp;\n }); // Check if a regular expression validates the attribute.\n\n for (var i = 0, l = regExp.length; i < l; i++) {\n if (attrName.match(regExp[i])) {\n return true;\n }\n }\n\n return false;\n }\n\n function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml;\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml);\n }\n\n var domParser = new window.DOMParser();\n var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n var whitelistKeys = Object.keys(whiteList);\n var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));\n\n var _loop = function _loop(i, len) {\n var el = elements[i];\n var elName = el.nodeName.toLowerCase();\n\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n el.parentNode.removeChild(el);\n return \"continue\";\n }\n\n var attributeList = [].slice.call(el.attributes);\n var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n attributeList.forEach(function (attr) {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName);\n }\n });\n };\n\n for (var i = 0, len = elements.length; i < len; i++) {\n var _ret = _loop(i, len);\n\n if (_ret === \"continue\") continue;\n }\n\n return createdDocument.body.innerHTML;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$6 = 'tooltip';\n var VERSION$6 = '4.3.1';\n var DATA_KEY$6 = 'bs.tooltip';\n var EVENT_KEY$6 = \".\" + DATA_KEY$6;\n var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];\n var CLASS_PREFIX = 'bs-tooltip';\n var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];\n var DefaultType$4 = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(number|string|function)',\n container: '(string|element|boolean)',\n fallbackPlacement: '(string|array)',\n boundary: '(string|element)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n whiteList: 'object'\n };\n var AttachmentMap$1 = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n };\n var Default$4 = {\n animation: true,\n template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: 0,\n container: false,\n fallbackPlacement: 'flip',\n boundary: 'scrollParent',\n sanitize: true,\n sanitizeFn: null,\n whiteList: DefaultWhitelist\n };\n var HoverState = {\n SHOW: 'show',\n OUT: 'out'\n };\n var Event$6 = {\n HIDE: \"hide\" + EVENT_KEY$6,\n HIDDEN: \"hidden\" + EVENT_KEY$6,\n SHOW: \"show\" + EVENT_KEY$6,\n SHOWN: \"shown\" + EVENT_KEY$6,\n INSERTED: \"inserted\" + EVENT_KEY$6,\n CLICK: \"click\" + EVENT_KEY$6,\n FOCUSIN: \"focusin\" + EVENT_KEY$6,\n FOCUSOUT: \"focusout\" + EVENT_KEY$6,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY$6,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY$6\n };\n var ClassName$6 = {\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector$6 = {\n TOOLTIP: '.tooltip',\n TOOLTIP_INNER: '.tooltip-inner',\n ARROW: '.arrow'\n };\n var Trigger = {\n HOVER: 'hover',\n FOCUS: 'focus',\n CLICK: 'click',\n MANUAL: 'manual'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Tooltip =\n /*#__PURE__*/\n function () {\n function Tooltip(element, config) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)');\n } // private\n\n\n this._isEnabled = true;\n this._timeout = 0;\n this._hoverState = '';\n this._activeTrigger = {};\n this._popper = null; // Protected\n\n this.element = element;\n this.config = this._getConfig(config);\n this.tip = null;\n\n this._setListeners();\n } // Getters\n\n\n var _proto = Tooltip.prototype;\n\n // Public\n _proto.enable = function enable() {\n this._isEnabled = true;\n };\n\n _proto.disable = function disable() {\n this._isEnabled = false;\n };\n\n _proto.toggleEnabled = function toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n };\n\n _proto.toggle = function toggle(event) {\n if (!this._isEnabled) {\n return;\n }\n\n if (event) {\n var dataKey = this.constructor.DATA_KEY;\n var context = $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(event.currentTarget).data(dataKey, context);\n }\n\n context._activeTrigger.click = !context._activeTrigger.click;\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context);\n } else {\n context._leave(null, context);\n }\n } else {\n if ($(this.getTipElement()).hasClass(ClassName$6.SHOW)) {\n this._leave(null, this);\n\n return;\n }\n\n this._enter(null, this);\n }\n };\n\n _proto.dispose = function dispose() {\n clearTimeout(this._timeout);\n $.removeData(this.element, this.constructor.DATA_KEY);\n $(this.element).off(this.constructor.EVENT_KEY);\n $(this.element).closest('.modal').off('hide.bs.modal');\n\n if (this.tip) {\n $(this.tip).remove();\n }\n\n this._isEnabled = null;\n this._timeout = null;\n this._hoverState = null;\n this._activeTrigger = null;\n\n if (this._popper !== null) {\n this._popper.destroy();\n }\n\n this._popper = null;\n this.element = null;\n this.config = null;\n this.tip = null;\n };\n\n _proto.show = function show() {\n var _this = this;\n\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements');\n }\n\n var showEvent = $.Event(this.constructor.Event.SHOW);\n\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent);\n var shadowRoot = Util.findShadowRoot(this.element);\n var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return;\n }\n\n var tip = this.getTipElement();\n var tipId = Util.getUID(this.constructor.NAME);\n tip.setAttribute('id', tipId);\n this.element.setAttribute('aria-describedby', tipId);\n this.setContent();\n\n if (this.config.animation) {\n $(tip).addClass(ClassName$6.FADE);\n }\n\n var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n var attachment = this._getAttachment(placement);\n\n this.addAttachmentClass(attachment);\n\n var container = this._getContainer();\n\n $(tip).data(this.constructor.DATA_KEY, this);\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container);\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED);\n this._popper = new Popper(this.element, tip, {\n placement: attachment,\n modifiers: {\n offset: this._getOffset(),\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: Selector$6.ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: function onCreate(data) {\n if (data.originalPlacement !== data.placement) {\n _this._handlePopperPlacementChange(data);\n }\n },\n onUpdate: function onUpdate(data) {\n return _this._handlePopperPlacementChange(data);\n }\n });\n $(tip).addClass(ClassName$6.SHOW); // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop);\n }\n\n var complete = function complete() {\n if (_this.config.animation) {\n _this._fixTransition();\n }\n\n var prevHoverState = _this._hoverState;\n _this._hoverState = null;\n $(_this.element).trigger(_this.constructor.Event.SHOWN);\n\n if (prevHoverState === HoverState.OUT) {\n _this._leave(null, _this);\n }\n };\n\n if ($(this.tip).hasClass(ClassName$6.FADE)) {\n var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n }\n };\n\n _proto.hide = function hide(callback) {\n var _this2 = this;\n\n var tip = this.getTipElement();\n var hideEvent = $.Event(this.constructor.Event.HIDE);\n\n var complete = function complete() {\n if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip);\n }\n\n _this2._cleanTipClass();\n\n _this2.element.removeAttribute('aria-describedby');\n\n $(_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n if (_this2._popper !== null) {\n _this2._popper.destroy();\n }\n\n if (callback) {\n callback();\n }\n };\n\n $(this.element).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n return;\n }\n\n $(tip).removeClass(ClassName$6.SHOW); // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop);\n }\n\n this._activeTrigger[Trigger.CLICK] = false;\n this._activeTrigger[Trigger.FOCUS] = false;\n this._activeTrigger[Trigger.HOVER] = false;\n\n if ($(this.tip).hasClass(ClassName$6.FADE)) {\n var transitionDuration = Util.getTransitionDurationFromElement(tip);\n $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n\n this._hoverState = '';\n };\n\n _proto.update = function update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate();\n }\n } // Protected\n ;\n\n _proto.isWithContent = function isWithContent() {\n return Boolean(this.getTitle());\n };\n\n _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n };\n\n _proto.getTipElement = function getTipElement() {\n this.tip = this.tip || $(this.config.template)[0];\n return this.tip;\n };\n\n _proto.setContent = function setContent() {\n var tip = this.getTipElement();\n this.setElementContent($(tip.querySelectorAll(Selector$6.TOOLTIP_INNER)), this.getTitle());\n $(tip).removeClass(ClassName$6.FADE + \" \" + ClassName$6.SHOW);\n };\n\n _proto.setElementContent = function setElementContent($element, content) {\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (this.config.html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content);\n }\n } else {\n $element.text($(content).text());\n }\n\n return;\n }\n\n if (this.config.html) {\n if (this.config.sanitize) {\n content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);\n }\n\n $element.html(content);\n } else {\n $element.text(content);\n }\n };\n\n _proto.getTitle = function getTitle() {\n var title = this.element.getAttribute('data-original-title');\n\n if (!title) {\n title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n }\n\n return title;\n } // Private\n ;\n\n _proto._getOffset = function _getOffset() {\n var _this3 = this;\n\n var offset = {};\n\n if (typeof this.config.offset === 'function') {\n offset.fn = function (data) {\n data.offsets = _objectSpread({}, data.offsets, _this3.config.offset(data.offsets, _this3.element) || {});\n return data;\n };\n } else {\n offset.offset = this.config.offset;\n }\n\n return offset;\n };\n\n _proto._getContainer = function _getContainer() {\n if (this.config.container === false) {\n return document.body;\n }\n\n if (Util.isElement(this.config.container)) {\n return $(this.config.container);\n }\n\n return $(document).find(this.config.container);\n };\n\n _proto._getAttachment = function _getAttachment(placement) {\n return AttachmentMap$1[placement.toUpperCase()];\n };\n\n _proto._setListeners = function _setListeners() {\n var _this4 = this;\n\n var triggers = this.config.trigger.split(' ');\n triggers.forEach(function (trigger) {\n if (trigger === 'click') {\n $(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) {\n return _this4.toggle(event);\n });\n } else if (trigger !== Trigger.MANUAL) {\n var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN;\n var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT;\n $(_this4.element).on(eventIn, _this4.config.selector, function (event) {\n return _this4._enter(event);\n }).on(eventOut, _this4.config.selector, function (event) {\n return _this4._leave(event);\n });\n }\n });\n $(this.element).closest('.modal').on('hide.bs.modal', function () {\n if (_this4.element) {\n _this4.hide();\n }\n });\n\n if (this.config.selector) {\n this.config = _objectSpread({}, this.config, {\n trigger: 'manual',\n selector: ''\n });\n } else {\n this._fixTitle();\n }\n };\n\n _proto._fixTitle = function _fixTitle() {\n var titleType = typeof this.element.getAttribute('data-original-title');\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n this.element.setAttribute('title', '');\n }\n };\n\n _proto._enter = function _enter(event, context) {\n var dataKey = this.constructor.DATA_KEY;\n context = context || $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(event.currentTarget).data(dataKey, context);\n }\n\n if (event) {\n context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;\n }\n\n if ($(context.getTipElement()).hasClass(ClassName$6.SHOW) || context._hoverState === HoverState.SHOW) {\n context._hoverState = HoverState.SHOW;\n return;\n }\n\n clearTimeout(context._timeout);\n context._hoverState = HoverState.SHOW;\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show();\n return;\n }\n\n context._timeout = setTimeout(function () {\n if (context._hoverState === HoverState.SHOW) {\n context.show();\n }\n }, context.config.delay.show);\n };\n\n _proto._leave = function _leave(event, context) {\n var dataKey = this.constructor.DATA_KEY;\n context = context || $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(event.currentTarget).data(dataKey, context);\n }\n\n if (event) {\n context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;\n }\n\n if (context._isWithActiveTrigger()) {\n return;\n }\n\n clearTimeout(context._timeout);\n context._hoverState = HoverState.OUT;\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide();\n return;\n }\n\n context._timeout = setTimeout(function () {\n if (context._hoverState === HoverState.OUT) {\n context.hide();\n }\n }, context.config.delay.hide);\n };\n\n _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n for (var trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true;\n }\n }\n\n return false;\n };\n\n _proto._getConfig = function _getConfig(config) {\n var dataAttributes = $(this.element).data();\n Object.keys(dataAttributes).forEach(function (dataAttr) {\n if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n delete dataAttributes[dataAttr];\n }\n });\n config = _objectSpread({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n };\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n\n Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);\n }\n\n return config;\n };\n\n _proto._getDelegateConfig = function _getDelegateConfig() {\n var config = {};\n\n if (this.config) {\n for (var key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key];\n }\n }\n }\n\n return config;\n };\n\n _proto._cleanTipClass = function _cleanTipClass() {\n var $tip = $(this.getTipElement());\n var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''));\n }\n };\n\n _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {\n var popperInstance = popperData.instance;\n this.tip = popperInstance.popper;\n\n this._cleanTipClass();\n\n this.addAttachmentClass(this._getAttachment(popperData.placement));\n };\n\n _proto._fixTransition = function _fixTransition() {\n var tip = this.getTipElement();\n var initConfigAnimation = this.config.animation;\n\n if (tip.getAttribute('x-placement') !== null) {\n return;\n }\n\n $(tip).removeClass(ClassName$6.FADE);\n this.config.animation = false;\n this.hide();\n this.show();\n this.config.animation = initConfigAnimation;\n } // Static\n ;\n\n Tooltip._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY$6);\n\n var _config = typeof config === 'object' && config;\n\n if (!data && /dispose|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Tooltip(this, _config);\n $(this).data(DATA_KEY$6, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Tooltip, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$6;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$4;\n }\n }, {\n key: \"NAME\",\n get: function get() {\n return NAME$6;\n }\n }, {\n key: \"DATA_KEY\",\n get: function get() {\n return DATA_KEY$6;\n }\n }, {\n key: \"Event\",\n get: function get() {\n return Event$6;\n }\n }, {\n key: \"EVENT_KEY\",\n get: function get() {\n return EVENT_KEY$6;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType$4;\n }\n }]);\n\n return Tooltip;\n }();\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $.fn[NAME$6] = Tooltip._jQueryInterface;\n $.fn[NAME$6].Constructor = Tooltip;\n\n $.fn[NAME$6].noConflict = function () {\n $.fn[NAME$6] = JQUERY_NO_CONFLICT$6;\n return Tooltip._jQueryInterface;\n };\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$7 = 'popover';\n var VERSION$7 = '4.3.1';\n var DATA_KEY$7 = 'bs.popover';\n var EVENT_KEY$7 = \".\" + DATA_KEY$7;\n var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];\n var CLASS_PREFIX$1 = 'bs-popover';\n var BSCLS_PREFIX_REGEX$1 = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX$1 + \"\\\\S+\", 'g');\n\n var Default$5 = _objectSpread({}, Tooltip.Default, {\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div></div>'\n });\n\n var DefaultType$5 = _objectSpread({}, Tooltip.DefaultType, {\n content: '(string|element|function)'\n });\n\n var ClassName$7 = {\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector$7 = {\n TITLE: '.popover-header',\n CONTENT: '.popover-body'\n };\n var Event$7 = {\n HIDE: \"hide\" + EVENT_KEY$7,\n HIDDEN: \"hidden\" + EVENT_KEY$7,\n SHOW: \"show\" + EVENT_KEY$7,\n SHOWN: \"shown\" + EVENT_KEY$7,\n INSERTED: \"inserted\" + EVENT_KEY$7,\n CLICK: \"click\" + EVENT_KEY$7,\n FOCUSIN: \"focusin\" + EVENT_KEY$7,\n FOCUSOUT: \"focusout\" + EVENT_KEY$7,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY$7,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY$7\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Popover =\n /*#__PURE__*/\n function (_Tooltip) {\n _inheritsLoose(Popover, _Tooltip);\n\n function Popover() {\n return _Tooltip.apply(this, arguments) || this;\n }\n\n var _proto = Popover.prototype;\n\n // Overrides\n _proto.isWithContent = function isWithContent() {\n return this.getTitle() || this._getContent();\n };\n\n _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(CLASS_PREFIX$1 + \"-\" + attachment);\n };\n\n _proto.getTipElement = function getTipElement() {\n this.tip = this.tip || $(this.config.template)[0];\n return this.tip;\n };\n\n _proto.setContent = function setContent() {\n var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events\n\n this.setElementContent($tip.find(Selector$7.TITLE), this.getTitle());\n\n var content = this._getContent();\n\n if (typeof content === 'function') {\n content = content.call(this.element);\n }\n\n this.setElementContent($tip.find(Selector$7.CONTENT), content);\n $tip.removeClass(ClassName$7.FADE + \" \" + ClassName$7.SHOW);\n } // Private\n ;\n\n _proto._getContent = function _getContent() {\n return this.element.getAttribute('data-content') || this.config.content;\n };\n\n _proto._cleanTipClass = function _cleanTipClass() {\n var $tip = $(this.getTipElement());\n var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);\n\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''));\n }\n } // Static\n ;\n\n Popover._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY$7);\n\n var _config = typeof config === 'object' ? config : null;\n\n if (!data && /dispose|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Popover(this, _config);\n $(this).data(DATA_KEY$7, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Popover, null, [{\n key: \"VERSION\",\n // Getters\n get: function get() {\n return VERSION$7;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$5;\n }\n }, {\n key: \"NAME\",\n get: function get() {\n return NAME$7;\n }\n }, {\n key: \"DATA_KEY\",\n get: function get() {\n return DATA_KEY$7;\n }\n }, {\n key: \"Event\",\n get: function get() {\n return Event$7;\n }\n }, {\n key: \"EVENT_KEY\",\n get: function get() {\n return EVENT_KEY$7;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType$5;\n }\n }]);\n\n return Popover;\n }(Tooltip);\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $.fn[NAME$7] = Popover._jQueryInterface;\n $.fn[NAME$7].Constructor = Popover;\n\n $.fn[NAME$7].noConflict = function () {\n $.fn[NAME$7] = JQUERY_NO_CONFLICT$7;\n return Popover._jQueryInterface;\n };\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$8 = 'scrollspy';\n var VERSION$8 = '4.3.1';\n var DATA_KEY$8 = 'bs.scrollspy';\n var EVENT_KEY$8 = \".\" + DATA_KEY$8;\n var DATA_API_KEY$6 = '.data-api';\n var JQUERY_NO_CONFLICT$8 = $.fn[NAME$8];\n var Default$6 = {\n offset: 10,\n method: 'auto',\n target: ''\n };\n var DefaultType$6 = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n };\n var Event$8 = {\n ACTIVATE: \"activate\" + EVENT_KEY$8,\n SCROLL: \"scroll\" + EVENT_KEY$8,\n LOAD_DATA_API: \"load\" + EVENT_KEY$8 + DATA_API_KEY$6\n };\n var ClassName$8 = {\n DROPDOWN_ITEM: 'dropdown-item',\n DROPDOWN_MENU: 'dropdown-menu',\n ACTIVE: 'active'\n };\n var Selector$8 = {\n DATA_SPY: '[data-spy=\"scroll\"]',\n ACTIVE: '.active',\n NAV_LIST_GROUP: '.nav, .list-group',\n NAV_LINKS: '.nav-link',\n NAV_ITEMS: '.nav-item',\n LIST_ITEMS: '.list-group-item',\n DROPDOWN: '.dropdown',\n DROPDOWN_ITEMS: '.dropdown-item',\n DROPDOWN_TOGGLE: '.dropdown-toggle'\n };\n var OffsetMethod = {\n OFFSET: 'offset',\n POSITION: 'position'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var ScrollSpy =\n /*#__PURE__*/\n function () {\n function ScrollSpy(element, config) {\n var _this = this;\n\n this._element = element;\n this._scrollElement = element.tagName === 'BODY' ? window : element;\n this._config = this._getConfig(config);\n this._selector = this._config.target + \" \" + Selector$8.NAV_LINKS + \",\" + (this._config.target + \" \" + Selector$8.LIST_ITEMS + \",\") + (this._config.target + \" \" + Selector$8.DROPDOWN_ITEMS);\n this._offsets = [];\n this._targets = [];\n this._activeTarget = null;\n this._scrollHeight = 0;\n $(this._scrollElement).on(Event$8.SCROLL, function (event) {\n return _this._process(event);\n });\n this.refresh();\n\n this._process();\n } // Getters\n\n\n var _proto = ScrollSpy.prototype;\n\n // Public\n _proto.refresh = function refresh() {\n var _this2 = this;\n\n var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;\n var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;\n this._offsets = [];\n this._targets = [];\n this._scrollHeight = this._getScrollHeight();\n var targets = [].slice.call(document.querySelectorAll(this._selector));\n targets.map(function (element) {\n var target;\n var targetSelector = Util.getSelectorFromElement(element);\n\n if (targetSelector) {\n target = document.querySelector(targetSelector);\n }\n\n if (target) {\n var targetBCR = target.getBoundingClientRect();\n\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [$(target)[offsetMethod]().top + offsetBase, targetSelector];\n }\n }\n\n return null;\n }).filter(function (item) {\n return item;\n }).sort(function (a, b) {\n return a[0] - b[0];\n }).forEach(function (item) {\n _this2._offsets.push(item[0]);\n\n _this2._targets.push(item[1]);\n });\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY$8);\n $(this._scrollElement).off(EVENT_KEY$8);\n this._element = null;\n this._scrollElement = null;\n this._config = null;\n this._selector = null;\n this._offsets = null;\n this._targets = null;\n this._activeTarget = null;\n this._scrollHeight = null;\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default$6, typeof config === 'object' && config ? config : {});\n\n if (typeof config.target !== 'string') {\n var id = $(config.target).attr('id');\n\n if (!id) {\n id = Util.getUID(NAME$8);\n $(config.target).attr('id', id);\n }\n\n config.target = \"#\" + id;\n }\n\n Util.typeCheckConfig(NAME$8, config, DefaultType$6);\n return config;\n };\n\n _proto._getScrollTop = function _getScrollTop() {\n return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n };\n\n _proto._getScrollHeight = function _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n };\n\n _proto._getOffsetHeight = function _getOffsetHeight() {\n return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n };\n\n _proto._process = function _process() {\n var scrollTop = this._getScrollTop() + this._config.offset;\n\n var scrollHeight = this._getScrollHeight();\n\n var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh();\n }\n\n if (scrollTop >= maxScroll) {\n var target = this._targets[this._targets.length - 1];\n\n if (this._activeTarget !== target) {\n this._activate(target);\n }\n\n return;\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null;\n\n this._clear();\n\n return;\n }\n\n var offsetLength = this._offsets.length;\n\n for (var i = offsetLength; i--;) {\n var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n if (isActiveTarget) {\n this._activate(this._targets[i]);\n }\n }\n };\n\n _proto._activate = function _activate(target) {\n this._activeTarget = target;\n\n this._clear();\n\n var queries = this._selector.split(',').map(function (selector) {\n return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + selector + \"[href=\\\"\" + target + \"\\\"]\";\n });\n\n var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));\n\n if ($link.hasClass(ClassName$8.DROPDOWN_ITEM)) {\n $link.closest(Selector$8.DROPDOWN).find(Selector$8.DROPDOWN_TOGGLE).addClass(ClassName$8.ACTIVE);\n $link.addClass(ClassName$8.ACTIVE);\n } else {\n // Set triggered link as active\n $link.addClass(ClassName$8.ACTIVE); // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n\n $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_LINKS + \", \" + Selector$8.LIST_ITEMS).addClass(ClassName$8.ACTIVE); // Handle special case when .nav-link is inside .nav-item\n\n $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_ITEMS).children(Selector$8.NAV_LINKS).addClass(ClassName$8.ACTIVE);\n }\n\n $(this._scrollElement).trigger(Event$8.ACTIVATE, {\n relatedTarget: target\n });\n };\n\n _proto._clear = function _clear() {\n [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {\n return node.classList.contains(ClassName$8.ACTIVE);\n }).forEach(function (node) {\n return node.classList.remove(ClassName$8.ACTIVE);\n });\n } // Static\n ;\n\n ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY$8);\n\n var _config = typeof config === 'object' && config;\n\n if (!data) {\n data = new ScrollSpy(this, _config);\n $(this).data(DATA_KEY$8, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(ScrollSpy, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$8;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$6;\n }\n }]);\n\n return ScrollSpy;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(window).on(Event$8.LOAD_DATA_API, function () {\n var scrollSpys = [].slice.call(document.querySelectorAll(Selector$8.DATA_SPY));\n var scrollSpysLength = scrollSpys.length;\n\n for (var i = scrollSpysLength; i--;) {\n var $spy = $(scrollSpys[i]);\n\n ScrollSpy._jQueryInterface.call($spy, $spy.data());\n }\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME$8] = ScrollSpy._jQueryInterface;\n $.fn[NAME$8].Constructor = ScrollSpy;\n\n $.fn[NAME$8].noConflict = function () {\n $.fn[NAME$8] = JQUERY_NO_CONFLICT$8;\n return ScrollSpy._jQueryInterface;\n };\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$9 = 'tab';\n var VERSION$9 = '4.3.1';\n var DATA_KEY$9 = 'bs.tab';\n var EVENT_KEY$9 = \".\" + DATA_KEY$9;\n var DATA_API_KEY$7 = '.data-api';\n var JQUERY_NO_CONFLICT$9 = $.fn[NAME$9];\n var Event$9 = {\n HIDE: \"hide\" + EVENT_KEY$9,\n HIDDEN: \"hidden\" + EVENT_KEY$9,\n SHOW: \"show\" + EVENT_KEY$9,\n SHOWN: \"shown\" + EVENT_KEY$9,\n CLICK_DATA_API: \"click\" + EVENT_KEY$9 + DATA_API_KEY$7\n };\n var ClassName$9 = {\n DROPDOWN_MENU: 'dropdown-menu',\n ACTIVE: 'active',\n DISABLED: 'disabled',\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector$9 = {\n DROPDOWN: '.dropdown',\n NAV_LIST_GROUP: '.nav, .list-group',\n ACTIVE: '.active',\n ACTIVE_UL: '> li > .active',\n DATA_TOGGLE: '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',\n DROPDOWN_TOGGLE: '.dropdown-toggle',\n DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Tab =\n /*#__PURE__*/\n function () {\n function Tab(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Tab.prototype;\n\n // Public\n _proto.show = function show() {\n var _this = this;\n\n if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName$9.ACTIVE) || $(this._element).hasClass(ClassName$9.DISABLED)) {\n return;\n }\n\n var target;\n var previous;\n var listElement = $(this._element).closest(Selector$9.NAV_LIST_GROUP)[0];\n var selector = Util.getSelectorFromElement(this._element);\n\n if (listElement) {\n var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector$9.ACTIVE_UL : Selector$9.ACTIVE;\n previous = $.makeArray($(listElement).find(itemSelector));\n previous = previous[previous.length - 1];\n }\n\n var hideEvent = $.Event(Event$9.HIDE, {\n relatedTarget: this._element\n });\n var showEvent = $.Event(Event$9.SHOW, {\n relatedTarget: previous\n });\n\n if (previous) {\n $(previous).trigger(hideEvent);\n }\n\n $(this._element).trigger(showEvent);\n\n if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {\n return;\n }\n\n if (selector) {\n target = document.querySelector(selector);\n }\n\n this._activate(this._element, listElement);\n\n var complete = function complete() {\n var hiddenEvent = $.Event(Event$9.HIDDEN, {\n relatedTarget: _this._element\n });\n var shownEvent = $.Event(Event$9.SHOWN, {\n relatedTarget: previous\n });\n $(previous).trigger(hiddenEvent);\n $(_this._element).trigger(shownEvent);\n };\n\n if (target) {\n this._activate(target, target.parentNode, complete);\n } else {\n complete();\n }\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY$9);\n this._element = null;\n } // Private\n ;\n\n _proto._activate = function _activate(element, container, callback) {\n var _this2 = this;\n\n var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(Selector$9.ACTIVE_UL) : $(container).children(Selector$9.ACTIVE);\n var active = activeElements[0];\n var isTransitioning = callback && active && $(active).hasClass(ClassName$9.FADE);\n\n var complete = function complete() {\n return _this2._transitionComplete(element, active, callback);\n };\n\n if (active && isTransitioning) {\n var transitionDuration = Util.getTransitionDurationFromElement(active);\n $(active).removeClass(ClassName$9.SHOW).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n };\n\n _proto._transitionComplete = function _transitionComplete(element, active, callback) {\n if (active) {\n $(active).removeClass(ClassName$9.ACTIVE);\n var dropdownChild = $(active.parentNode).find(Selector$9.DROPDOWN_ACTIVE_CHILD)[0];\n\n if (dropdownChild) {\n $(dropdownChild).removeClass(ClassName$9.ACTIVE);\n }\n\n if (active.getAttribute('role') === 'tab') {\n active.setAttribute('aria-selected', false);\n }\n }\n\n $(element).addClass(ClassName$9.ACTIVE);\n\n if (element.getAttribute('role') === 'tab') {\n element.setAttribute('aria-selected', true);\n }\n\n Util.reflow(element);\n\n if (element.classList.contains(ClassName$9.FADE)) {\n element.classList.add(ClassName$9.SHOW);\n }\n\n if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) {\n var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0];\n\n if (dropdownElement) {\n var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector$9.DROPDOWN_TOGGLE));\n $(dropdownToggleList).addClass(ClassName$9.ACTIVE);\n }\n\n element.setAttribute('aria-expanded', true);\n }\n\n if (callback) {\n callback();\n }\n } // Static\n ;\n\n Tab._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $this = $(this);\n var data = $this.data(DATA_KEY$9);\n\n if (!data) {\n data = new Tab(this);\n $this.data(DATA_KEY$9, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Tab, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$9;\n }\n }]);\n\n return Tab;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event$9.CLICK_DATA_API, Selector$9.DATA_TOGGLE, function (event) {\n event.preventDefault();\n\n Tab._jQueryInterface.call($(this), 'show');\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME$9] = Tab._jQueryInterface;\n $.fn[NAME$9].Constructor = Tab;\n\n $.fn[NAME$9].noConflict = function () {\n $.fn[NAME$9] = JQUERY_NO_CONFLICT$9;\n return Tab._jQueryInterface;\n };\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$a = 'toast';\n var VERSION$a = '4.3.1';\n var DATA_KEY$a = 'bs.toast';\n var EVENT_KEY$a = \".\" + DATA_KEY$a;\n var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];\n var Event$a = {\n CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY$a,\n HIDE: \"hide\" + EVENT_KEY$a,\n HIDDEN: \"hidden\" + EVENT_KEY$a,\n SHOW: \"show\" + EVENT_KEY$a,\n SHOWN: \"shown\" + EVENT_KEY$a\n };\n var ClassName$a = {\n FADE: 'fade',\n HIDE: 'hide',\n SHOW: 'show',\n SHOWING: 'showing'\n };\n var DefaultType$7 = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n };\n var Default$7 = {\n animation: true,\n autohide: true,\n delay: 500\n };\n var Selector$a = {\n DATA_DISMISS: '[data-dismiss=\"toast\"]'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Toast =\n /*#__PURE__*/\n function () {\n function Toast(element, config) {\n this._element = element;\n this._config = this._getConfig(config);\n this._timeout = null;\n\n this._setListeners();\n } // Getters\n\n\n var _proto = Toast.prototype;\n\n // Public\n _proto.show = function show() {\n var _this = this;\n\n $(this._element).trigger(Event$a.SHOW);\n\n if (this._config.animation) {\n this._element.classList.add(ClassName$a.FADE);\n }\n\n var complete = function complete() {\n _this._element.classList.remove(ClassName$a.SHOWING);\n\n _this._element.classList.add(ClassName$a.SHOW);\n\n $(_this._element).trigger(Event$a.SHOWN);\n\n if (_this._config.autohide) {\n _this.hide();\n }\n };\n\n this._element.classList.remove(ClassName$a.HIDE);\n\n this._element.classList.add(ClassName$a.SHOWING);\n\n if (this._config.animation) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n };\n\n _proto.hide = function hide(withoutTimeout) {\n var _this2 = this;\n\n if (!this._element.classList.contains(ClassName$a.SHOW)) {\n return;\n }\n\n $(this._element).trigger(Event$a.HIDE);\n\n if (withoutTimeout) {\n this._close();\n } else {\n this._timeout = setTimeout(function () {\n _this2._close();\n }, this._config.delay);\n }\n };\n\n _proto.dispose = function dispose() {\n clearTimeout(this._timeout);\n this._timeout = null;\n\n if (this._element.classList.contains(ClassName$a.SHOW)) {\n this._element.classList.remove(ClassName$a.SHOW);\n }\n\n $(this._element).off(Event$a.CLICK_DISMISS);\n $.removeData(this._element, DATA_KEY$a);\n this._element = null;\n this._config = null;\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default$7, $(this._element).data(), typeof config === 'object' && config ? config : {});\n Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);\n return config;\n };\n\n _proto._setListeners = function _setListeners() {\n var _this3 = this;\n\n $(this._element).on(Event$a.CLICK_DISMISS, Selector$a.DATA_DISMISS, function () {\n return _this3.hide(true);\n });\n };\n\n _proto._close = function _close() {\n var _this4 = this;\n\n var complete = function complete() {\n _this4._element.classList.add(ClassName$a.HIDE);\n\n $(_this4._element).trigger(Event$a.HIDDEN);\n };\n\n this._element.classList.remove(ClassName$a.SHOW);\n\n if (this._config.animation) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n } // Static\n ;\n\n Toast._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $element = $(this);\n var data = $element.data(DATA_KEY$a);\n\n var _config = typeof config === 'object' && config;\n\n if (!data) {\n data = new Toast(this, _config);\n $element.data(DATA_KEY$a, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config](this);\n }\n });\n };\n\n _createClass(Toast, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$a;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType$7;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$7;\n }\n }]);\n\n return Toast;\n }();\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $.fn[NAME$a] = Toast._jQueryInterface;\n $.fn[NAME$a].Constructor = Toast;\n\n $.fn[NAME$a].noConflict = function () {\n $.fn[NAME$a] = JQUERY_NO_CONFLICT$a;\n return Toast._jQueryInterface;\n };\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n (function () {\n if (typeof $ === 'undefined') {\n throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.');\n }\n\n var version = $.fn.jquery.split(' ')[0].split('.');\n var minMajor = 1;\n var ltMajor = 2;\n var minMinor = 9;\n var minPatch = 1;\n var maxMajor = 4;\n\n if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');\n }\n })();\n\n exports.Util = Util;\n exports.Alert = Alert;\n exports.Button = Button;\n exports.Carousel = Carousel;\n exports.Collapse = Collapse;\n exports.Dropdown = Dropdown;\n exports.Modal = Modal;\n exports.Popover = Popover;\n exports.Scrollspy = ScrollSpy;\n exports.Tab = Tab;\n exports.Toast = Toast;\n exports.Tooltip = Tooltip;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n//# sourceMappingURL=bootstrap.js.map\n\n\n\n// WEBPACK FOOTER //\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/bootstrap/dist/js/bootstrap.js","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.14.7\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nvar longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nvar timeoutDuration = 0;\nfor (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.right - result.left;\n var height = sizes.height || element.clientHeight || result.bottom - result.top;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop, 10);\n var marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n var parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var round = Math.round,\n floor = Math.floor;\n\n var noRound = function noRound(v) {\n return v;\n };\n\n var referenceWidth = round(reference.width);\n var popperWidth = round(popper.width);\n\n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.<br />\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.<br />\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport'\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/popper.js/dist/esm/popper.js\n// module id = 30\n// module chunks = 0","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 31\n// module chunks = 0","import camelCase from './camelCase';\r\n\r\n/**\r\n * DOM-based Routing\r\n *\r\n * Based on {@link http://goo.gl/EUTi53|Markup-based Unobtrusive Comprehensive DOM-ready Execution} by Paul Irish\r\n *\r\n * The routing fires all common scripts, followed by the page specific scripts.\r\n * Add additional events for more control over timing e.g. a finalize event\r\n */\r\nclass Router {\r\n\r\n /**\r\n * Create a new Router\r\n * @param {Object} routes\r\n */\r\n constructor(routes) {\r\n this.routes = routes;\r\n }\r\n\r\n /**\r\n * Fire Router events\r\n * @param {string} route DOM-based route derived from body classes (`<body class=\"...\">`)\r\n * @param {string} [event] Events on the route. By default, `init` and `finalize` events are called.\r\n * @param {string} [arg] Any custom argument to be passed to the event.\r\n */\r\n fire(route, event = 'init', arg) {\r\n if(typeof(Event) === 'function') {\r\n document.dispatchEvent(new CustomEvent('routed', {\r\n bubbles: true,\r\n detail: {\r\n route,\r\n fn: event,\r\n },\r\n }));\r\n }\r\n\r\n const fire = route !== '' && this.routes[route] && typeof this.routes[route][event] === 'function';\r\n if (fire) {\r\n this.routes[route][event](arg);\r\n }\r\n }\r\n\r\n /**\r\n * Automatically load and fire Router events\r\n *\r\n * Events are fired in the following order:\r\n * * common init\r\n * * page-specific init\r\n * * page-specific finalize\r\n * * common finalize\r\n */\r\n loadEvents() {\r\n // Fire common init JS\r\n this.fire('common');\r\n\r\n // Fire page-specific init JS, and then finalize JS\r\n document.body.className\r\n .toLowerCase()\r\n .replace(/-/g, '_')\r\n .split(/\\s+/)\r\n .map(camelCase)\r\n .forEach((className) => {\r\n this.fire(className);\r\n this.fire(className, 'finalize');\r\n });\r\n\r\n // Fire common finalize JS\r\n this.fire('common', 'finalize');\r\n }\r\n}\r\n\r\nexport default Router;\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/util/Router.js","/**\r\n * the most terrible camelizer on the internet, guaranteed!\r\n * @param {string} str String that isn't camel-case, e.g., CAMeL_CaSEiS-harD\r\n * @return {string} String converted to camel-case, e.g., camelCaseIsHard\r\n */\r\nexport default str => `${str.charAt(0).toLowerCase()}${str.replace(/[\\W_]/g, '|').split('|')\r\n .map(part => `${part.charAt(0).toUpperCase()}${part.slice(1)}`)\r\n .join('')\r\n .slice(1)}`;\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/util/camelCase.js","export default {\r\n\tinit () {\r\n\t\t// JavaScript to be fired on all pages\r\n\t\trequire( '../components/modal' );\r\n\t\trequire( '../components/nav' );\r\n\t\trequire( '../components/headroom' );\r\n\t\trequire( '../components/cookie' );\r\n\t\trequire( '../components/filter' );\r\n\t\trequire( '../components/dropdown' );\r\n\t\trequire( '../components/picker' );\r\n\t\trequire( '../components/video' );\r\n\t\trequire( '../components/sidebar' );\r\n require( '../components/size-guide' );\r\n\t\trequire( '../components/instagram' );\r\n\t\trequire( '../components/newsletter' );\r\n\t\trequire( '../components/unshippable' );\r\n\t\trequire( '../components/alert' );\r\n\t\trequire( '../components/category' );\r\n\t\trequire( '../components/product-selected' );\r\n\t\trequire( '../components/product' );\r\n\t\trequire( '../components/cart' );\r\n\t\trequire( '../components/language' );\r\n\t\trequire( '../components/search' );\r\n\t\trequire( '../components/checkout' );\r\n\t\trequire( '../components/scroll' );\r\n\t\trequire( '../components/backgroundSwitch' );\r\n\t\trequire( '../components/articles' );\r\n\t\trequire( '../components/language' );\r\n\t\trequire( '../components/text-banner' );\r\n\t\trequire( '../components/forms' );\r\n\t\trequire( '../components/hero' );\r\n\t\trequire( '../components/store-locator' );\r\n\t\trequire( '../components/bullet-list' );\r\n\t\trequire( '../components/bundles' );\r\n\t\trequire( '../tracking/hotjar' );\r\n\t\trequire( '../components/text-editor' );\r\n\t\trequire( '../tracking/gtag' );\r\n require( '../components/top-banner' );\r\n\t},\r\n\tfinalize () {\r\n\t\t// JavaScript to be fired on all pages, after page specific JS is fired\r\n\t\t$( '.js-plus-item' ).plusItem();\r\n\t},\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/routes/common.js","let Alert = require('../components/alert');\r\n\r\nlet modals = {};\r\n\r\nmodals.init = function () {\r\n\tmodals.modal();\r\n\tlet alertType = modals.URL('alert')\r\n\r\n\tif (alertType != undefined) {\r\n\t\tAlert.show(alertType, 'title here', 'message here');\r\n\t}\r\n}\r\n\r\nmodals.modal = function () {\r\n\t\t$('.modal').on('shown.bs.modal', function () {\r\n\t\t\twindow.disableBodyScroll(true, '#'+ $(this).attr('id'));\r\n\t\t});\r\n\t\r\n\t\t$('.modal').on('hidden.bs.modal', function () {\r\n\t\t\twindow.disableBodyScroll(false, '#'+ $(this).attr('id'));\r\n\t\t});\r\n\r\n\t\t$('#js-newsletter-modal').on('shown.bs.modal', function () {\r\n\t\t\tdocument.documentElement.classList.add('no-scroll');\r\n\t\t});\r\n\t\r\n\t\t$('#js-newsletter-modal').on('hidden.bs.modal', function () {\r\n\t\t\tdocument.documentElement.classList.remove('no-scroll');\r\n\t\t})\r\n};\r\n\r\n\r\nmodals.URL = function(name) {\r\n\t/* eslint-disable no-useless-escape */\r\n\tname = name.replace(/[\\[]/, '\\\\[').replace(/[\\]]/, '\\\\]');\r\n\tlet regex = new RegExp('[\\\\?&]' + name + '=([^&#]*)');\r\n\tlet results = regex.exec(location.search);\r\n\treturn results === null ? '' : decodeURIComponent(results[1].replace(/\\+/g, ' '));\r\n}\r\n\r\nmodals.init();\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/modal.js","let Nav = {};\r\nlet header = $('.js-header');\r\n\r\nNav.init = function () {\r\n Nav.overlay();\r\n Nav.dropdown();\r\n Nav.transparency();\r\n}\r\n\r\nNav.overlay = function () {\r\n let cartOverlay = $('.js-cart-overlay');\r\n let navBarCollapse = $('#navbarNav');\r\n\r\n // Cart Overlay\r\n if (!$('body').is('.isApple, .AndroidOS')) {\r\n cartOverlay.hover(function () {\r\n $('body').addClass('cart-overlay');\r\n }, function () {\r\n $('body').removeClass('cart-overlay');\r\n });\r\n }\r\n\r\n navBarCollapse.on('show.bs.collapse', function () {\r\n $('body').addClass('nav-overlay');\r\n document.documentElement.classList.add('no-scroll');\r\n window.disableBodyScroll(true, '.navbar-collapse');\r\n\r\n })\r\n\r\n let resetMenu = $('.js-menu-dropdown, .js-menu-body, .js-submenu-dropdown, .js-submenu-body')\r\n\r\n navBarCollapse.on('hidden.bs.collapse', function () {\r\n $('body').removeClass('nav-overlay');\r\n document.documentElement.classList.remove('no-scroll');\r\n window.disableBodyScroll(false, '.navbar-collapse');\r\n resetMenu.removeClass('show');\r\n $('body').removeClass('first-menu second-menu');\r\n\r\n })\r\n};\r\n\r\nNav.dropdown = function () {\r\n // Menu Dropdown Mobile\r\n let menuToggle = $('.js-menu-dropdown');\r\n\r\n menuToggle.click(function () {\r\n let thisMenu = $(this);\r\n\r\n if (thisMenu.hasClass('show')) {\r\n thisMenu.next('.js-menu-body').removeClass('show');\r\n thisMenu.removeClass('show');\r\n } else {\r\n menuToggle.next('.js-menu-body').removeClass('show');\r\n menuToggle.removeClass('show');\r\n thisMenu.next('.js-menu-body').addClass('show');\r\n thisMenu.addClass('show');\r\n\r\n if (thisMenu.hasClass('is-full')) {\r\n $('body').addClass('first-menu');\r\n window.disableBodyScroll(false, '.navbar-collapse');\r\n window.disableBodyScroll(true, '.js-menu-body');\r\n }\r\n }\r\n });\r\n\r\n let menuClose = $('.js-menu-dropdown-close');\r\n\r\n menuClose.click(function () {\r\n let thisMenu = $(this);\r\n $('.js-menu-dropdown').removeClass('show');\r\n thisMenu.closest('.js-menu-body').removeClass('show');\r\n $('body').removeClass('first-menu');\r\n\r\n window.disableBodyScroll(false, '.js-menu-body');\r\n window.disableBodyScroll(true, '.navbar-collapse');\r\n });\r\n\r\n\r\n // Submenu Dropdown Desktop\r\n if (window.matchMedia('(min-width: 1024px)').matches) {\r\n let subMenuItem = $('.subnav-left-menu-item');\r\n let subMenu = $('.subnav-left-menu');\r\n subMenuItem.hover(\r\n function () {\r\n let thisMenu = $(this);\r\n let subMenuListLength = thisMenu.find('.js-submenu-body ul li').length;\r\n let subMenuListHeight = (subMenuListLength * 40) + 50;\r\n subMenu.css('min-height', subMenuListHeight + 'px');\r\n subMenuItem.addClass('not-active');\r\n thisMenu.removeClass('not-active');\r\n },\r\n function () {\r\n subMenu.attr('style', '');\r\n subMenuItem.removeClass('not-active');\r\n }\r\n );\r\n }\r\n\r\n // Submenu Dropdown Mobile\r\n let subMenuToggle = $('.js-submenu-dropdown');\r\n\r\n subMenuToggle.click(function () {\r\n let thisMenu = $(this);\r\n\r\n if (thisMenu.hasClass('show')) {\r\n thisMenu.next('.js-submenu-body').removeClass('show');\r\n thisMenu.removeClass('show');\r\n } else {\r\n subMenuToggle.next('.js-submenu-body').removeClass('show');\r\n subMenuToggle.removeClass('show');\r\n thisMenu.next('.js-submenu-body').addClass('show');\r\n thisMenu.addClass('show');\r\n $('body').addClass('second-menu');\r\n $('body').removeClass('first-menu');\r\n\r\n window.disableBodyScroll(false, '.js-menu-body');\r\n window.disableBodyScroll(true, '.js-submenu-body');\r\n }\r\n });\r\n\r\n let subMenuClose = $('.js-submenu-dropdown-close');\r\n\r\n subMenuClose.click(function () {\r\n let thisMenu = $(this);\r\n $('.js-submenu-dropdown').removeClass('show');\r\n thisMenu.closest('.js-submenu-body').removeClass('show');\r\n $('body').removeClass('second-menu');\r\n $('body').addClass('first-menu');\r\n\r\n window.disableBodyScroll(false, '.js-submenu-body');\r\n window.disableBodyScroll(true, '.js-menu-body');\r\n });\r\n\r\n // Nav toggle\r\n let navToggle = $('.js-nav-toggle');\r\n let sideOverlay = $('.side-overlay');\r\n let wpAdminbar = $('#wpadminbar');\r\n let wpAdminbarHeight = 0;\r\n\r\n navToggle.click(function () {\r\n\r\n if (wpAdminbar) {\r\n wpAdminbarHeight = wpAdminbar.innerHeight();\r\n }\r\n\r\n sideOverlay.css('top', (header.innerHeight() + wpAdminbarHeight) + 'px')\r\n });\r\n\r\n};\r\n\r\nNav.transparency = function () {\r\n if (!header.hasClass('js-nav-transparent')) {\r\n return;\r\n } else {\r\n if( $('body').hasClass('home') ){\r\n $('body').addClass('no-padding-top');\r\n }\r\n\r\n if( $('body').hasClass('tax-silk_category') ){\r\n $('.text-intro-block').addClass('extend-category-bg');\r\n $('body').addClass('no-padding-top');\r\n }\r\n\r\n\t\tif($(window).scrollTop() < 120) {\r\n\t\t\theader.addClass('is-transparent');\r\n\t\t} else {\r\n\t\t\theader.removeClass('js-nav-transparent');\r\n\t\t}\r\n\r\n $(window).scroll(() => {\r\n let top_of_screen = $(window).scrollTop();\r\n if (top_of_screen > 120) {\r\n\t\t\t\theader.removeClass('is-transparent');\r\n } else {\r\n\t\t\t\tif(header.hasClass('js-nav-open')){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\theader.addClass('is-transparent');\r\n\t\t\t\t}\r\n\t\t\t\t\r\n }\r\n });\r\n\r\n\t\tconst navMouseIn = () => {\r\n\t\t\theader.addClass('js-nav-open');\r\n\t\t\tif(header.hasClass('js-nav-transparent')){\r\n\t\t\t\theader.removeClass('is-transparent');\r\n\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst navMouseOut = () => {\r\n\t\t\theader.removeClass('js-nav-open');\r\n\t\t\tif(header.hasClass('js-nav-transparent')){\r\n\t\t\t\tif($(window).scrollTop() < 120) {\r\n\t\t\t\t\theader.addClass('is-transparent');\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\r\n header.hover(navMouseIn, navMouseOut)\r\n }\r\n};\r\n\r\nNav.init();\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/nav.js","/* eslint-disable no-unused-vars */\r\nimport Headroom from '../vendor/headroom';\r\n\r\nlet headroom = {};\r\n\r\n( function($) {\r\n\r\n headroom.init = function() {\r\n let msg = document.getElementById( 'js-main-nav-msg' );\r\n let nav = document.getElementById( 'js-nav-menu' );\r\n let body = document.getElementsByTagName('body')[0];\r\n\r\n if( msg && nav ) {\r\n let headroom = new Headroom(nav, {\r\n offset: msg.offsetHeight,\r\n classes: {\r\n notTop: 'is-fixed-top',\r\n },\r\n onTop : function() {\r\n msg.classList.remove( 'd-none' );\r\n body.classList.remove( 'has-fineprint-hidden' );\r\n },\r\n onNotTop : function() {\r\n msg.classList.add( 'd-none' );\r\n body.classList.add( 'has-fineprint-hidden' );\r\n },\r\n } );\r\n\r\n headroom.init();\r\n }\r\n };\r\n\r\n headroom.init();\r\n\r\n})(jQuery);\r\n\r\nwindow.headroom = headroom;\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/headroom.js","/*!\r\n * headroom.js v0.9.4 - Give your page some headroom. Hide your header until you need it\r\n * Copyright (c) 2017 Nick Williams - http://wicky.nillia.ms/headroom.js\r\n * License: MIT\r\n */\r\n\r\n(function(root, factory) {\r\n 'use strict';\r\n\r\n if (typeof define === 'function' && define.amd) {\r\n // AMD. Register as an anonymous module.\r\n define([], factory);\r\n }\r\n else if (typeof exports === 'object') {\r\n // COMMONJS\r\n module.exports = factory();\r\n }\r\n else {\r\n // BROWSER\r\n root.Headroom = factory();\r\n }\r\n}(this, function() {\r\n 'use strict';\r\n\r\n /* exported features */\r\n \r\n var features = {\r\n bind : !!(function(){}.bind),\r\n classList : 'classList' in document.documentElement,\r\n rAF : !!(window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame),\r\n };\r\n window.requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame;\r\n \r\n /**\r\n * Handles debouncing of events via requestAnimationFrame\r\n * @see http://www.html5rocks.com/en/tutorials/speed/animations/\r\n * @param {Function} callback The callback to handle whichever event\r\n */\r\n function Debouncer (callback) {\r\n this.callback = callback;\r\n this.ticking = false;\r\n }\r\n Debouncer.prototype = {\r\n constructor : Debouncer,\r\n \r\n /**\r\n * dispatches the event to the supplied callback\r\n * @private\r\n */\r\n update : function() {\r\n this.callback && this.callback();\r\n this.ticking = false;\r\n },\r\n \r\n /**\r\n * ensures events don't get stacked\r\n * @private\r\n */\r\n requestTick : function() {\r\n if(!this.ticking) {\r\n requestAnimationFrame(this.rafCallback || (this.rafCallback = this.update.bind(this)));\r\n this.ticking = true;\r\n }\r\n },\r\n \r\n /**\r\n * Attach this as the event listeners\r\n */\r\n handleEvent : function() {\r\n this.requestTick();\r\n },\r\n };\r\n /**\r\n * Check if object is part of the DOM\r\n * @constructor\r\n * @param {Object} obj element to check\r\n */\r\n function isDOMElement(obj) {\r\n return obj && typeof window !== 'undefined' && (obj === window || obj.nodeType);\r\n }\r\n \r\n /**\r\n * Helper function for extending objects\r\n */\r\n function extend (object /*, objectN ... */) {\r\n if(arguments.length <= 0) {\r\n throw new Error('Missing arguments in extend function');\r\n }\r\n \r\n var result = object || {},\r\n key,\r\n i;\r\n \r\n for (i = 1; i < arguments.length; i++) {\r\n var replacement = arguments[i] || {};\r\n \r\n for (key in replacement) {\r\n // Recurse into object except if the object is a DOM element\r\n if(typeof result[key] === 'object' && ! isDOMElement(result[key])) {\r\n result[key] = extend(result[key], replacement[key]);\r\n }\r\n else {\r\n result[key] = result[key] || replacement[key];\r\n }\r\n }\r\n }\r\n \r\n return result;\r\n }\r\n \r\n /**\r\n * Helper function for normalizing tolerance option to object format\r\n */\r\n function normalizeTolerance (t) {\r\n return t === Object(t) ? t : { down : t, up : t };\r\n }\r\n \r\n /**\r\n * UI enhancement for fixed headers.\r\n * Hides header when scrolling down\r\n * Shows header when scrolling up\r\n * @constructor\r\n * @param {DOMElement} elem the header element\r\n * @param {Object} options options for the widget\r\n */\r\n function Headroom (elem, options) {\r\n options = extend(options, Headroom.options);\r\n \r\n this.lastKnownScrollY = 0;\r\n this.elem = elem;\r\n this.tolerance = normalizeTolerance(options.tolerance);\r\n this.classes = options.classes;\r\n this.offset = options.offset;\r\n this.scroller = options.scroller;\r\n this.initialised = false;\r\n this.onPin = options.onPin;\r\n this.onUnpin = options.onUnpin;\r\n this.onTop = options.onTop;\r\n this.onNotTop = options.onNotTop;\r\n this.onBottom = options.onBottom;\r\n this.onNotBottom = options.onNotBottom;\r\n }\r\n Headroom.prototype = {\r\n constructor : Headroom,\r\n \r\n /**\r\n * Initialises the widget\r\n */\r\n init : function() {\r\n if(!Headroom.cutsTheMustard) {\r\n return;\r\n }\r\n \r\n this.debouncer = new Debouncer(this.update.bind(this));\r\n this.elem.classList.add(this.classes.initial);\r\n \r\n // defer event registration to handle browser\r\n // potentially restoring previous scroll position\r\n setTimeout(this.attachEvent.bind(this), 100);\r\n \r\n return this;\r\n },\r\n \r\n /**\r\n * Unattaches events and removes any classes that were added\r\n */\r\n destroy : function() {\r\n var classes = this.classes;\r\n \r\n this.initialised = false;\r\n \r\n for (var key in classes) {\r\n if(classes.hasOwnProperty(key)) {\r\n this.elem.classList.remove(classes[key]);\r\n }\r\n }\r\n \r\n this.scroller.removeEventListener('scroll', this.debouncer, false);\r\n },\r\n \r\n /**\r\n * Attaches the scroll event\r\n * @private\r\n */\r\n attachEvent : function() {\r\n if(!this.initialised){\r\n this.lastKnownScrollY = this.getScrollY();\r\n this.initialised = true;\r\n this.scroller.addEventListener('scroll', this.debouncer, false);\r\n \r\n this.debouncer.handleEvent();\r\n }\r\n },\r\n \r\n /**\r\n * Unpins the header if it's currently pinned\r\n */\r\n unpin : function() {\r\n var classList = this.elem.classList,\r\n classes = this.classes;\r\n \r\n if(classList.contains(classes.pinned) || !classList.contains(classes.unpinned)) {\r\n classList.add(classes.unpinned);\r\n classList.remove(classes.pinned);\r\n this.onUnpin && this.onUnpin.call(this);\r\n }\r\n },\r\n \r\n /**\r\n * Pins the header if it's currently unpinned\r\n */\r\n pin : function() {\r\n var classList = this.elem.classList,\r\n classes = this.classes;\r\n \r\n if(classList.contains(classes.unpinned)) {\r\n classList.remove(classes.unpinned);\r\n classList.add(classes.pinned);\r\n this.onPin && this.onPin.call(this);\r\n }\r\n },\r\n \r\n /**\r\n * Handles the top states\r\n */\r\n top : function() {\r\n var classList = this.elem.classList,\r\n classes = this.classes;\r\n \r\n if(!classList.contains(classes.top)) {\r\n classList.add(classes.top);\r\n classList.remove(classes.notTop);\r\n this.onTop && this.onTop.call(this);\r\n }\r\n },\r\n \r\n /**\r\n * Handles the not top state\r\n */\r\n notTop : function() {\r\n var classList = this.elem.classList,\r\n classes = this.classes;\r\n \r\n if(!classList.contains(classes.notTop)) {\r\n classList.add(classes.notTop);\r\n classList.remove(classes.top);\r\n this.onNotTop && this.onNotTop.call(this);\r\n }\r\n },\r\n \r\n bottom : function() {\r\n var classList = this.elem.classList,\r\n classes = this.classes;\r\n \r\n if(!classList.contains(classes.bottom)) {\r\n classList.add(classes.bottom);\r\n classList.remove(classes.notBottom);\r\n this.onBottom && this.onBottom.call(this);\r\n }\r\n },\r\n \r\n /**\r\n * Handles the not top state\r\n */\r\n notBottom : function() {\r\n var classList = this.elem.classList,\r\n classes = this.classes;\r\n \r\n if(!classList.contains(classes.notBottom)) {\r\n classList.add(classes.notBottom);\r\n classList.remove(classes.bottom);\r\n this.onNotBottom && this.onNotBottom.call(this);\r\n }\r\n },\r\n \r\n /**\r\n * Gets the Y scroll position\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollY\r\n * @return {Number} pixels the page has scrolled along the Y-axis\r\n */\r\n getScrollY : function() {\r\n return (this.scroller.pageYOffset !== undefined)\r\n ? this.scroller.pageYOffset\r\n : (this.scroller.scrollTop !== undefined)\r\n ? this.scroller.scrollTop\r\n : (document.documentElement || document.body.parentNode || document.body).scrollTop;\r\n },\r\n \r\n /**\r\n * Gets the height of the viewport\r\n * @see http://andylangton.co.uk/blog/development/get-viewport-size-width-and-height-javascript\r\n * @return {int} the height of the viewport in pixels\r\n */\r\n getViewportHeight : function () {\r\n return window.innerHeight\r\n || document.documentElement.clientHeight\r\n || document.body.clientHeight;\r\n },\r\n \r\n /**\r\n * Gets the physical height of the DOM element\r\n * @param {Object} elm the element to calculate the physical height of which\r\n * @return {int} the physical height of the element in pixels\r\n */\r\n getElementPhysicalHeight : function (elm) {\r\n return Math.max(\r\n elm.offsetHeight,\r\n elm.clientHeight\r\n );\r\n },\r\n \r\n /**\r\n * Gets the physical height of the scroller element\r\n * @return {int} the physical height of the scroller element in pixels\r\n */\r\n getScrollerPhysicalHeight : function () {\r\n return (this.scroller === window || this.scroller === document.body)\r\n ? this.getViewportHeight()\r\n : this.getElementPhysicalHeight(this.scroller);\r\n },\r\n \r\n /**\r\n * Gets the height of the document\r\n * @see http://james.padolsey.com/javascript/get-document-height-cross-browser/\r\n * @return {int} the height of the document in pixels\r\n */\r\n getDocumentHeight : function () {\r\n var body = document.body,\r\n documentElement = document.documentElement;\r\n \r\n return Math.max(\r\n body.scrollHeight, documentElement.scrollHeight,\r\n body.offsetHeight, documentElement.offsetHeight,\r\n body.clientHeight, documentElement.clientHeight\r\n );\r\n },\r\n \r\n /**\r\n * Gets the height of the DOM element\r\n * @param {Object} elm the element to calculate the height of which\r\n * @return {int} the height of the element in pixels\r\n */\r\n getElementHeight : function (elm) {\r\n return Math.max(\r\n elm.scrollHeight,\r\n elm.offsetHeight,\r\n elm.clientHeight\r\n );\r\n },\r\n \r\n /**\r\n * Gets the height of the scroller element\r\n * @return {int} the height of the scroller element in pixels\r\n */\r\n getScrollerHeight : function () {\r\n return (this.scroller === window || this.scroller === document.body)\r\n ? this.getDocumentHeight()\r\n : this.getElementHeight(this.scroller);\r\n },\r\n \r\n /**\r\n * determines if the scroll position is outside of document boundaries\r\n * @param {int} currentScrollY the current y scroll position\r\n * @return {bool} true if out of bounds, false otherwise\r\n */\r\n isOutOfBounds : function (currentScrollY) {\r\n var pastTop = currentScrollY < 0,\r\n pastBottom = currentScrollY + this.getScrollerPhysicalHeight() > this.getScrollerHeight();\r\n \r\n return pastTop || pastBottom;\r\n },\r\n \r\n /**\r\n * determines if the tolerance has been exceeded\r\n * @param {int} currentScrollY the current scroll y position\r\n * @return {bool} true if tolerance exceeded, false otherwise\r\n */\r\n toleranceExceeded : function (currentScrollY, direction) {\r\n return Math.abs(currentScrollY-this.lastKnownScrollY) >= this.tolerance[direction];\r\n },\r\n \r\n /**\r\n * determine if it is appropriate to unpin\r\n * @param {int} currentScrollY the current y scroll position\r\n * @param {bool} toleranceExceeded has the tolerance been exceeded?\r\n * @return {bool} true if should unpin, false otherwise\r\n */\r\n shouldUnpin : function (currentScrollY, toleranceExceeded) {\r\n var scrollingDown = currentScrollY > this.lastKnownScrollY,\r\n pastOffset = currentScrollY >= this.offset;\r\n \r\n return scrollingDown && pastOffset && toleranceExceeded;\r\n },\r\n \r\n /**\r\n * determine if it is appropriate to pin\r\n * @param {int} currentScrollY the current y scroll position\r\n * @param {bool} toleranceExceeded has the tolerance been exceeded?\r\n * @return {bool} true if should pin, false otherwise\r\n */\r\n shouldPin : function (currentScrollY, toleranceExceeded) {\r\n var scrollingUp = currentScrollY < this.lastKnownScrollY,\r\n pastOffset = currentScrollY <= this.offset;\r\n \r\n return (scrollingUp && toleranceExceeded) || pastOffset;\r\n },\r\n \r\n /**\r\n * Handles updating the state of the widget\r\n */\r\n update : function() {\r\n var currentScrollY = this.getScrollY(),\r\n scrollDirection = currentScrollY > this.lastKnownScrollY ? 'down' : 'up',\r\n toleranceExceeded = this.toleranceExceeded(currentScrollY, scrollDirection);\r\n \r\n if(this.isOutOfBounds(currentScrollY)) { // Ignore bouncy scrolling in OSX\r\n return;\r\n }\r\n \r\n if (currentScrollY <= this.offset ) {\r\n this.top();\r\n } else {\r\n this.notTop();\r\n }\r\n \r\n if(currentScrollY + this.getViewportHeight() >= this.getScrollerHeight()) {\r\n this.bottom();\r\n }\r\n else {\r\n this.notBottom();\r\n }\r\n \r\n if(this.shouldUnpin(currentScrollY, toleranceExceeded)) {\r\n this.unpin();\r\n }\r\n else if(this.shouldPin(currentScrollY, toleranceExceeded)) {\r\n this.pin();\r\n }\r\n \r\n this.lastKnownScrollY = currentScrollY;\r\n },\r\n };\r\n /**\r\n * Default options\r\n * @type {Object}\r\n */\r\n Headroom.options = {\r\n tolerance : {\r\n up : 0,\r\n down : 0,\r\n },\r\n offset : 0,\r\n scroller: window,\r\n classes : {\r\n pinned : 'headroom--pinned',\r\n unpinned : 'headroom--unpinned',\r\n top : 'headroom--top',\r\n notTop : 'headroom--not-top',\r\n bottom : 'headroom--bottom',\r\n notBottom : 'headroom--not-bottom',\r\n initial : 'headroom',\r\n },\r\n };\r\n Headroom.cutsTheMustard = typeof features !== 'undefined' && features.rAF && features.bind && features.classList;\r\n\r\n return Headroom;\r\n}));\n\n\n// WEBPACK FOOTER //\n// ./scripts/vendor/headroom.js","/* COOKIES */\r\n\r\n(function ( $ ) {\r\n\r\n\tvar siteCookie = {};\r\n\r\n\tsiteCookie.set = function( cname, cvalue, exdays ) {\r\n\t\tvar d = new Date();\r\n\t\td.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));\r\n\t\tvar expires = 'expires=' +d.toUTCString();\r\n\t\tdocument.cookie = cname + '=' + cvalue + ';' + expires + ';path=/';\r\n\t};\r\n\r\n\tsiteCookie.get = function( cname ) {\r\n\t\tvar name = cname + '=';\r\n\t\tvar decodedCookie = decodeURIComponent(document.cookie);\r\n\t\tvar ca = decodedCookie.split(';');\r\n\r\n\t\tfor(var i = 0; i <ca.length; i++) {\r\n\t\t\tvar c = ca[i];\r\n\t\t\twhile (c.charAt(0) === ' ') {\r\n\t\t\t\tc = c.substring(1);\r\n\t\t\t}\r\n\r\n\t\t\tif (c.indexOf(name) === 0) {\r\n\t\t\t\treturn c.substring(name.length, c.length);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn '';\r\n\t};\r\n\r\n\tsiteCookie.init = function( wrapperID, btnClass ) {\r\n\t\tvar wrapper = $( wrapperID );\r\n\r\n\t\tif( !wrapper ) { return; }\r\n\r\n\t\tvar cookieName = wrapper.attr( 'data-cookie' );\r\n\r\n\t\t// if cookies allowed but not yet saved\r\n\t\tif( document.cookie.indexOf(cookieName) < 0 && navigator.cookieEnabled ) {\r\n\r\n\t\t\t//show cookie\r\n\t\t\twrapper.css( 'display' , 'block' );\r\n\r\n\t\t\t//init approval buttons\r\n\t\t\t// var button = wrapper.find( btnClass );\r\n\r\n\t\t\twrapper.on( 'click keydown', btnClass, function(e) {\r\n\t\t\t\tvar etype = e.type;\r\n\r\n\t\t\t\tif(etype === 'keydown' && (e.keyCode !== 13 && e.keyCode !== 32)) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\te.preventDefault();\t\r\n\r\n\t\t\t\tsiteCookie.set( cookieName, true, 365 );\r\n\r\n\t\t\t\twrapper.slideUp( 'slow' );\r\n\r\n\t\t\t} );\r\n\t\t}\r\n\t};\r\n\r\n\t$( document ).ready( function() {\r\n\t\tsiteCookie.init( '#js-cookie', '.js-cookie-approve' );\r\n\t});\r\n\r\n})( jQuery );\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/cookie.js","import Swiper, {Scrollbar} from '../../../../node_modules/swiper/swiper-bundle';\r\n\r\nlet supportsOrientationChange = 'onorientationchange' in window,\r\n orientationEvent = supportsOrientationChange ? 'orientationchange' : 'resize';\r\n\r\nlet Filter = {};\r\n\r\nFilter.toggle = function () {\r\n let openFilter = $('.js-filter-open');\r\n let closeFilter = $('.js-filter-close');\r\n let filterContent = $('.js-filter-collapse');\r\n\r\n openFilter.click(function () {\r\n filterContent.toggleClass('show');\r\n $('body').toggleClass('filter-is-open');\r\n if (matchMedia('screen and (max-width: 1023.98px)').matches) {\r\n window.disableBodyScroll(true, '.js-filter-collapse');\r\n }\r\n });\r\n\r\n closeFilter.click(function (e) {\r\n e.preventDefault();\r\n filterContent.removeClass('show');\r\n $('body').removeClass('filter-is-open');\r\n if (matchMedia('screen and (max-width: 1023.98px)').matches) {\r\n window.disableBodyScroll(false, '.js-filter-collapse');\r\n }\r\n });\r\n\r\n if ($('.product-filter')[0]) {\r\n window.addEventListener(orientationEvent, function () {\r\n filterContent.removeClass('show');\r\n $('body').removeClass('filter-is-open');\r\n if (matchMedia('screen and (max-width: 1023.98px)').matches) {\r\n window.disableBodyScroll(false, '.js-filter-collapse');\r\n }\r\n }, false);\r\n }\r\n\r\n $(document).on('click', '.js-filter-collapse .dropdown-menu', function (e) {\r\n e.stopPropagation();\r\n });\r\n};\r\n\r\nFilter.accordion = function () {\r\n var toggleAccordion = $('.js-filter-accordion-toggle');\r\n\r\n toggleAccordion.click(function () {\r\n var thisAccordion = $(this);\r\n if (thisAccordion.closest('.product-filter-dropdown').hasClass('show')) {\r\n thisAccordion.closest('.product-filter-dropdown').removeClass('show')\r\n } else {\r\n $('.product-filter-dropdown').removeClass('show');\r\n thisAccordion.closest('.product-filter-dropdown').addClass('show')\r\n }\r\n });\r\n};\r\n\r\nFilter.dropdownUpdate = function () {\r\n if ($('.product-filter .filter-container').length === 0) {\r\n return;\r\n }\r\n\r\n var $checkSelector = $('.product-filter .custom-dropdown');\r\n var $checkBox = $('.product-filter .custom-dropdown .check-selector .custom-control-input');\r\n\r\n $checkSelector.each(function () {\r\n var thisSelector = $(this);\r\n var count = thisSelector.find('.check-selector .custom-control-input:checked').length;\r\n\r\n if (!thisSelector.hasClass('sort')) {\r\n if (!count == 0) {\r\n thisSelector.addClass('has-dash').find('.dropdown-toggle .check-count').text(count);\r\n }\r\n }\r\n });\r\n\r\n $checkBox.change(function () {\r\n var countCheckedCheck = $(this).closest('.check-selector').find('.custom-control-input:checked').length;\r\n\r\n if (!countCheckedCheck == 0) {\r\n $(this).closest('.custom-dropdown').addClass('has-dash').find('.dropdown-toggle .check-count').text(countCheckedCheck);\r\n } else {\r\n $(this).closest('.custom-dropdown').removeClass('has-dash').find('.dropdown-toggle .check-count').text('');\r\n }\r\n });\r\n\r\n var dropdownSelector = $('.product-filter .custom-dropdown .dropdown-menu.sort ul>li');\r\n dropdownSelector.off('click').on('click', function () {\r\n dropdownSelector.each(function () {\r\n $(this).removeClass('selected');\r\n });\r\n\r\n $(this).addClass('selected');\r\n });\r\n};\r\n\r\nFilter.dropdownUpdate();\r\n\r\nFilter.swiper = function() {\r\n const categoryList = document.querySelector('.js-category-swiper');\r\n\r\n if (!categoryList) return;\r\n\r\n Swiper.use([Scrollbar]);\r\n const categorySwiper = new Swiper('.js-category-swiper', {\r\n loop: false,\r\n slidesPerView: 'auto',\r\n scrollbar: {\r\n el: '.swiper-scrollbar',\r\n draggable: true,\r\n },\r\n });\r\n\r\n categorySwiper.init();\r\n};\r\n\r\nvar FilterUpdater = {};\r\n\r\n(function ($) {\r\n Filter.toggle();\r\n Filter.accordion();\r\n Filter.swiper();\r\n var form = $('#silkFilterForm'),\r\n isSearch = $('body.search').length !== 0;\r\n\r\n // var initialLoad = true;\r\n\r\n FilterUpdater.update = function (filterProducts) {\r\n\r\n var products = $('.products .product');\r\n\r\n if (filterProducts) {\r\n products = filterProducts;\r\n }\r\n\r\n if (form.length === 0 || products.length === 0) {\r\n return;\r\n }\r\n\r\n // Hide all filter items\r\n if (isSearch) {\r\n form.find('input[type=checkbox]').parents('li').hide();\r\n } else {\r\n form.find('input[type=checkbox][name=material],input[type=checkbox][name=color],input[type=checkbox][name=size],input[type=checkbox][name=model],input[type=checkbox][name=heel],input[type=checkbox][name=category]').parents('li').hide();\r\n }\r\n\r\n // Show only filter items that matches with the products\r\n $.each(products, function () {\r\n var product = $(this),\r\n categories = product.data('category'),\r\n materials = product.data('material'),\r\n size = product.data('size'),\r\n color = product.data('color'),\r\n model = product.data('model'),\r\n heel = product.data('heel');\r\n\r\n // Filter categories only in search page\r\n if (categories) {\r\n // if (categories && isSearch) {\r\n $.each(categories.split('|'), function () {\r\n form.find('input[name=category][value=\"' + this + '\"]').parents('li').show();\r\n });\r\n }\r\n\r\n if (materials) {\r\n $.each(materials.split('|'), function () {\r\n form.find('input[name=material][value=\"' + this + '\"]').parents('li').show();\r\n });\r\n }\r\n\r\n if (size) {\r\n $.each(size.toString().split('|'), function () {\r\n form.find('input[name=size][value=\"' + this + '\"]').parents('li').show();\r\n });\r\n }\r\n\r\n if (color) {\r\n $.each(color.split('|'), function () {\r\n form.find('input[name=color][value=\"' + this + '\"]').parents('li').show();\r\n });\r\n }\r\n\r\n if (model) {\r\n $.each(model.split('|'), function () {\r\n form.find('input[name=model][value=\"' + this + '\"]').parents('li').show();\r\n });\r\n }\r\n\r\n if (heel) {\r\n $.each(heel.split('|'), function () {\r\n form.find('input[name=heel][value=\"' + this + '\"]').parents('li').show();\r\n });\r\n }\r\n /*\r\n console.log(\"show\");\r\n console.log( product.data( 'color' ) );\r\n */\r\n form.find('input[name=color][value=\"' + product.data('color') + '\"]').parents('li').show();\r\n form.find('input[name=size][value=\"' + product.data('size') + '\"]').parents('li').show();\r\n // form.find( 'input[name=category][data-name=\"' + product.data( 'category' ) + '\"]' ).parents( 'li' ).show();\r\n });\r\n\r\n // Hide filter group without visible items\r\n $.each($('ul.check-selector'), function () {\r\n var list = $(this),\r\n visibleCount = 0;\r\n\r\n $.each(list.children('li'), function () {\r\n visibleCount += $(this).css('display') === 'none' ? 0 : 1;\r\n });\r\n\r\n if (visibleCount < 1) {\r\n list.parents('.col-lg').hide();\r\n } else {\r\n list.parents('.col-lg').show();\r\n }\r\n });\r\n };\r\n\r\n FilterUpdater.update();\r\n\r\n window.FilterUpdater = FilterUpdater;\r\n window.Filter = Filter;\r\n})(jQuery);\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/filter.js","let Dropdown = {};\r\n\r\nDropdown.init = function() {\r\n Dropdown.overlayScroll();\r\n};\r\n\r\nDropdown.overlayScroll = function() {\r\n $('.js-dropdown-overlay').overlayScrollbars({ });\r\n};\r\n\r\n$(window).on('load', function(){\r\n Dropdown.init();\r\n});\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/dropdown.js","var Filter = {};\r\n\r\n//add class if certain color was detected\r\nFilter.for_color = function () {\r\n var el = document.getElementsByClassName('js-color');\r\n if (!el) {\r\n return;\r\n }\r\n for (var i = 0; i < el.length; i++) {\r\n var bgProp = window.getComputedStyle(el[i], null).getPropertyValue('background-color');\r\n if (Filter.color_detector(bgProp) == 'light') {\r\n el[i].classList.add('is-checkmark-dark');\r\n } else {\r\n el[i].classList.add('is-checkmark-white');\r\n }\r\n\r\n\r\n if (i > 10) {\r\n break;\r\n }\r\n }\r\n\r\n}\r\n\r\n//color detector\r\nFilter.color_detector = function (color) {\r\n // Variables for red, green, blue values\r\n var r, g, b, hsp;\r\n\r\n // Check the format of the color, HEX or RGB?\r\n if (color.match(/^rgb/)) {\r\n\r\n // If HEX --> store the red, green, blue values in separate variables\r\n color = color.match(/^rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*(\\d+(?:\\.\\d+)?))?\\)$/);\r\n\r\n r = color[1];\r\n g = color[2];\r\n b = color[3];\r\n } else {\r\n\r\n // If RGB --> Convert it to HEX: http://gist.github.com/983661\r\n color = +('0x' + color.slice(1).replace(\r\n color.length < 5 && /./g, '$&$&'));\r\n\r\n r = color >> 16;\r\n g = color >> 8 & 255;\r\n b = color & 255;\r\n }\r\n\r\n // HSP (Highly Sensitive Poo) equation from http://alienryderflex.com/hsp.html\r\n hsp = Math.sqrt(\r\n 0.299 * (r * r) +\r\n 0.587 * (g * g) +\r\n 0.114 * (b * b)\r\n );\r\n\r\n // Using the HSP value, determine whether the color is light or dark\r\n if (hsp > 127.5) {\r\n\r\n\r\n return 'light';\r\n } else {\r\n\r\n return 'dark';\r\n }\r\n}\r\n\r\nFilter.for_color();\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/picker.js","/* eslint-disable no-unused-vars */\r\n\r\nimport { stokpress, stokpressViewPort } from '../util/helper';\r\n/* eslint-disable no-undef */\r\n\r\nlet Video = { refs: [] };\r\n\r\nwindow.onload = function () {\r\n\r\n\t// Youtube callbacks\r\n\twindow.onYouTubeIframeAPIReady = function () {\r\n\t\tfor ( var i = 0; i < Video.iframes.length; i++ ) {\r\n\t\t\tif ( Video.iframes[i].getAttribute( 'data-source' ) !== 'youtube' ) continue;\r\n\r\n\t\t\tlet player = new YT.Player( Video.iframes[i].id, {\r\n\t\t\t\tevents: {\r\n\t\t\t\t\t'onStateChange': ( event ) => {\r\n\t\t\t\t\t\tif ( event.data == YT.PlayerState.PLAYING ) {\r\n\t\t\t\t\t\t\tVideo.removeElement( event.target.h.parentNode.querySelectorAll( '.js-hide-on-play' ) );\r\n\t\t\t\t\t\t\tevent.target.h.style.opacity = 1;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t} )\r\n\r\n\t\t\tvar playVideo = Video.iframes[i].parentNode.querySelector( '.js-playvideo' );\r\n\r\n\t\t\tif ( !playVideo ) { continue; }\r\n\r\n\t\t\tVideo.refs.push( {\r\n\t\t\t\tplayer: player,\r\n\t\t\t\telement: Video.iframes[i],\r\n\t\t\t\tcall: ( method ) => {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tswitch ( method ) {\r\n\t\t\t\t\t\t\tcase 'play':\r\n\t\t\t\t\t\t\t\tplayer.playVideo();\r\n\t\t\t\t\t\t\t\tplayer.unMute();\r\n\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase 'pause': player.pauseVideo(); break;\r\n\t\t\t\t\t\t\tcase 'stop': player.stopVideo(); break;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} catch ( error ) {\r\n\t\t\t\t\t\tconsole.log( error.message );\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t} );\r\n\r\n\t\t\tplayVideo.dataset.refIndex = Video.refs.length - 1;\r\n\r\n\t\t\tplayVideo.addEventListener( 'click', function ( event ) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tVideo.refs[this.dataset.refIndex].call( 'play' );\r\n\t\t\t} );\r\n\t\t}\r\n\t};\r\n\r\n\tVideo.isMobile = function () {\r\n\t\treturn stokpress.isMobile() || stokpressViewPort.documentWidth().width < 720;\r\n\t};\r\n\r\n\tVideo.initializeVimeo = function ( iframes ) {\r\n\t\tif ( iframes.length === 0 ) { return; }\r\n\r\n\t\tfor ( var i = 0; i < iframes.length; i++ ) {\r\n\t\t\tif ( iframes[i].getAttribute( 'data-source' ) !== 'vimeo' ) continue;\r\n\r\n\t\t\tvar playVideo = iframes[i].parentNode.parentNode.querySelector( '.js-playvideo' );\r\n\r\n\t\t\tif ( !playVideo ) { continue; }\r\n\r\n\t\t\tlet player = new Vimeo.Player( iframes[i] );\r\n\r\n\t\t\tVideo.refs.push( {\r\n\t\t\t\tplayer: player,\r\n\t\t\t\telement: player.element,\r\n\t\t\t\tcall: ( method ) => {\r\n\t\t\t\t\tswitch ( method ) {\r\n\t\t\t\t\t\tcase 'play': player.play(); break;\r\n\t\t\t\t\t\tcase 'pause': player.pause(); break;\r\n\t\t\t\t\t\tcase 'stop': player.unload(); break;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t} );\r\n\r\n\t\t\tplayVideo.dataset.refIndex = Video.refs.length - 1;\r\n\r\n\t\t\t// Fix issue not autoplaying on mobile\r\n\t\t\tconst playerId = player.element.dataset.id || null;\r\n\t\t\tif (playerId && player.element && player.element.dataset.autoplay) {\r\n\t\t\t\tplayer.loadVideo(playerId).then(function(id) {\r\n\t\t\t\t\tplayer.play()\r\n\t\t\t\t\tplayer.pause()\r\n\t\t\t\t\tsetTimeout(function() { player.play() }, 750)\r\n\t\t\t\t})\r\n\t\t\t}\r\n\r\n\t\t\tplayer.on( 'play', () => {\r\n\t\t\t\tVideo.removeElement( player.element.parentNode.querySelectorAll( '.js-hide-on-play' ) );\r\n\t\t\t\tplayer.element.style.opacity = 1;\r\n\t\t\t} );\r\n\r\n\t\t\tplayVideo.addEventListener( 'click', function ( event ) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tVideo.refs[this.dataset.refIndex].call( 'play' );\r\n\t\t\t} );\r\n\t\t}\r\n\t};\r\n\r\n\tVideo.iframeProcess = function () {\r\n\t\tvar includeYoutubeScript = false,\r\n\t\t\tincludeVimeoScript = false;\r\n\r\n\t\tfor ( var i = 0; i < Video.iframes.length; i++ ) {\r\n\t\t\tvar source = Video.iframes[i].getAttribute( 'data-source' ),\r\n\t\t\t\tautoplay = Video.iframes[i].getAttribute( 'data-autoplay' );\r\n\r\n\t\t\tif ( ( !autoplay && !Video.isMobile() ) || Video.isMobile() ) {\r\n\t\t\t\tif ( source === 'vimeo' ) {\r\n\t\t\t\t\tincludeVimeoScript = true;\r\n\t\t\t\t} else if ( source === 'youtube' ) {\r\n\t\t\t\t\tincludeYoutubeScript = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( !autoplay || ( Video.isMobile && source === 'youtube' ) )\r\n\t\t\t\t\tVideo.iframes[i].parentNode.parentNode.querySelectorAll( '.js-hide-on-play' ).forEach( ( element ) => {\r\n\t\t\t\t\t\telement.style.display = '';\r\n\t\t\t\t\t} );\r\n\t\t\t} else {\r\n\t\t\t\tVideo.iframes[i].style.opacity = 1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( includeVimeoScript )\r\n\t\t\tstokpress.getScript( 'https://player.vimeo.com/api/player.js', function () {\r\n\t\t\t\tVideo.initializeVimeo( Video.iframes );\r\n\t\t\t} );\r\n\r\n\t\tif ( includeYoutubeScript )\r\n\t\t\tstokpress.getScript( 'https://www.youtube.com/iframe_api' );\r\n\t};\r\n\r\n\tVideo.removeElement = function ( elToHide ) {\r\n\t\tif ( !elToHide ) { return; }\r\n\r\n\t\tArray.prototype.forEach.call( elToHide, function ( element ) {\r\n\t\t\telement.parentNode.removeChild( element );\r\n\t\t} );\r\n\t};\r\n\r\n\tVideo.init = function () {\r\n\t\tVideo.iframes = document.querySelectorAll( 'iframe.js-video-iframe' );\r\n\t\tVideo.tags = document.querySelectorAll( 'video.js-video-tag' );\r\n\r\n\t\tif ( Video.iframes.length ) {\r\n\t\t\tVideo.iframeProcess();\r\n\t\t}\r\n\r\n\t\tif ( Video.tags.length ) {\r\n\t\t\tfor ( var i = 0; i < Video.tags.length; i++ ) {\r\n\t\t\t\tlet player = Video.tags[i];\r\n\r\n\t\t\t\tVideo.refs.push( {\r\n\t\t\t\t\tplayer: player,\r\n\t\t\t\t\telement: player,\r\n\t\t\t\t\tcall: ( method ) => {\r\n\t\t\t\t\t\tswitch ( method ) {\r\n\t\t\t\t\t\t\tcase 'play': player.play(); break;\r\n\t\t\t\t\t\t\tcase 'pause': player.pause(); break;\r\n\t\t\t\t\t\t\tcase 'stop': player.load(); break;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t} );\r\n\r\n\t\t\t\tplayer.addEventListener( 'play', () => {\r\n\t\t\t\t\tVideo.removeElement( player.parentNode.querySelectorAll( '.js-hide-on-play' ) );\r\n\t\t\t\t\tplayer.style.zIndex = 1;\r\n\t\t\t\t} );\r\n\r\n\t\t\t\tif ( Video.tags[i].getAttribute( 'autoplay' ) ) {\r\n\t\t\t\t\tVideo.tags[i].style.zIndex = 1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Play video upon clicking the play button\r\n\t\t\t\t\tvar playVideo = player.parentNode.querySelector( '.js-playvideo' );\r\n\r\n\t\t\t\t\tif ( !playVideo ) { continue; }\r\n\r\n\t\t\t\t\tplayVideo.dataset.refIndex = Video.refs.length - 1;\r\n\r\n\t\t\t\t\tplayVideo.addEventListener( 'click', function ( event ) {\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\tVideo.refs[this.dataset.refIndex].call( 'play' );\r\n\t\t\t\t\t} );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tVideo.init();\r\n}\r\n\r\nwindow.Video = Video;\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/video.js","const openSidebarButtons = document.querySelectorAll('.js-open-sidebar');\r\nconst overlay = document.getElementById('js-overlay');\r\nconst closeIcons = document.querySelectorAll('.js-close-sidebar');\r\nconst body = document.querySelector('body');\r\n\r\nif (openSidebarButtons) {\r\n openSidebarButtons.forEach(function (button) {\r\n button.addEventListener('click', function (event) {\r\n event.preventDefault();\r\n const sidebarId = this.getAttribute('data-sidebar');\r\n const sidebar = document.querySelector(sidebarId);\r\n const sidebars = document.querySelectorAll('.sidebar');\r\n\r\n if(sidebars.length > 0) {\r\n sidebars.forEach(function (sidebar) {\r\n sidebar.classList.remove('sidebar-is-open');\r\n });\r\n }\r\n\r\n if(sidebar) {\r\n sidebar.classList.add('sidebar-is-open');\r\n if (overlay) {\r\n overlay.style.display = 'block';\r\n }\r\n body.classList.add('sidebar-no-scroll');\r\n }\r\n\r\n });\r\n });\r\n}\r\n\r\nif (closeIcons) {\r\n closeIcons.forEach(function(icon) {\r\n icon.addEventListener('click', function() {\r\n const sidebar = this.closest('.sidebar');\r\n if(sidebar) {\r\n sidebar.classList.remove('sidebar-is-open');\r\n if (overlay) {\r\n overlay.style.display = 'none';\r\n }\r\n body.classList.remove('sidebar-no-scroll');\r\n }\r\n });\r\n });\r\n}\r\n\r\nif (overlay) {\r\n overlay.addEventListener('click', function () {\r\n const sidebars = document.querySelectorAll('.sidebar');\r\n\r\n if(sidebars.length > 0) {\r\n sidebars.forEach(function (sidebar) {\r\n sidebar.classList.remove('sidebar-is-open');\r\n });\r\n }\r\n\r\n this.style.display = 'none';\r\n body.classList.remove('sidebar-no-scroll');\r\n });\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/sidebar.js","const measurementButtons = document.querySelectorAll('.js-measurement-guide-button');\r\nconst measurementTable = document.getElementById('measurement-table');\r\nconst defaultSizeSelected = 'data-cm';\r\n\r\nif(measurementButtons) {\r\n measurementButtons.forEach(button => {\r\n button.addEventListener('click', function () {\r\n measurementButtons.forEach(btn => btn.classList.remove('is-active'));\r\n button.classList.add('is-active');\r\n const attribute = button.dataset.measure;\r\n updateMeasurementTableContent(attribute);\r\n });\r\n });\r\n}\r\n\r\nfunction updateMeasurementTableContent(attribute) {\r\n const rows = measurementTable.querySelectorAll('tbody tr');\r\n rows.forEach(row => {\r\n const cells = row.querySelectorAll('td');\r\n cells.forEach(cell => {\r\n cell.textContent = cell.getAttribute(attribute);\r\n });\r\n });\r\n}\r\n\r\nif(measurementTable) {\r\n updateMeasurementTableContent(defaultSizeSelected);\r\n}\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/size-guide.js","var Instagram = {};\r\n\r\nfunction calculatePosition() {\r\n var tileInfoHeight = $('.instagram-gallery .tile-block-hidden').outerHeight();\r\n var infoHeight = $('.instagram-gallery .instagram-info').outerHeight();\r\n var instagramInfo = $('.instagram-info-margin');\r\n\r\n if (tileInfoHeight > infoHeight) {\r\n instagramInfo.css({\r\n 'margin-bottom': (tileInfoHeight * -1) + 'px',\r\n 'padding-top': ( tileInfoHeight - infoHeight) + 'px',\r\n });\r\n $('.instagram-gallery').removeClass('is-text-overlapping');\r\n } else {\r\n instagramInfo.css({\r\n 'margin-bottom': (tileInfoHeight * -1) + 'px',\r\n 'padding-top': '0',\r\n });\r\n $('.instagram-gallery').addClass('is-text-overlapping');\r\n }\r\n}\r\n\r\nInstagram.infoPosition = function() {\r\n calculatePosition();\r\n\r\n window.addEventListener('resize', window.stokpress.debounce(function () {\r\n calculatePosition();\r\n }, 500));\r\n};\r\n\r\nInstagram.infoPosition();\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/instagram.js","import { stokpress } from '../util/helper';\r\nimport Rule from '../util/Rule';\r\n\r\nvar Alert = require( '../components/alert' );\r\n\r\nvar Newsletter = {};\r\n\r\n( function ( $ ) {\r\n\r\n\tNewsletter.updateErrorHtml = function () {\r\n\t\tvar formError = this.parentNode.querySelector( '.js-form-error' );\r\n\r\n\t\tif ( !formError ) {\r\n\t\t\tformError = this.parentNode.parentNode.querySelector( '.js-form-error' );\r\n\t\t}\r\n\r\n\t\tif ( formError && formError.innerText.length > 0 ) {\r\n\t\t\tformError.innerText = null;\r\n\t\t\tthis.classList.remove( Newsletter.elClasses.error );\r\n\t\t}\r\n\t};\r\n\r\n\tNewsletter.removeErrors = function ( wrapperEl ) {\r\n\t\tvar inputs = wrapperEl.querySelectorAll( 'input' );\r\n\r\n\t\tif ( inputs.length === 0 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor ( var i = 0; i < inputs.length; i++ ) {\r\n\t\t\tinputs[i].addEventListener( 'focus', Newsletter.updateErrorHtml );\r\n\t\t\tinputs[i].addEventListener( 'click', Newsletter.updateErrorHtml );\r\n\t\t}\r\n\t};\r\n\r\n\tNewsletter.validateEmail = function ( email ) {\r\n\t\tvar re = /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i;\r\n\t\treturn re.test( email );\r\n\t};\r\n\r\n\tNewsletter.formValidation = function ( wrapperEl ) {\r\n\t\tvar errorMessages = JSON.parse( wrapperEl.getAttribute( 'data-messages' ) );\r\n\t\tvar email = wrapperEl.querySelector( 'input[name=\"esc_email\"]' );\r\n\t\tvar terms = wrapperEl.querySelector( 'input[name=\"accept_terms\"]' );\r\n\t\tvar errors = {};\r\n\r\n\t\t// Form validation\r\n\t\tif ( email.value.length === 0 ) {\r\n\t\t\terrors.email = ( errorMessages && errorMessages.required_email ) ? errorMessages.required_email : 'E-mail field is required';\r\n\t\t} else if ( !Newsletter.validateEmail( email.value ) ) {\r\n\t\t\terrors.email = ( errorMessages && errorMessages.invalid_email ) ? errorMessages.invalid_email : 'Email address is invalid';\r\n\t\t}\r\n\r\n\t\tif ( terms.checked === false ) {\r\n\t\t\terrors.terms = ( errorMessages && errorMessages.required_terms ) ? errorMessages.required_terms : 'Accept terms is required';\r\n\t\t}\r\n\r\n\t\t// Return false if no errors\r\n\t\tif ( Object.keys( errors ).length === 0 ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// Display error\r\n\t\tfor ( var key in errors ) {\r\n\t\t\tvar errorEl = wrapperEl.querySelector( '.js-form-error[data-field=\"' + key + '\"]' );\r\n\t\t\tif ( errorEl ) {\r\n\t\t\t\terrorEl.innerText = errors[key];\r\n\t\t\t}\r\n\r\n\t\t\tvar elToAddClass = key === 'email' ? email : terms;\r\n\t\t\telToAddClass.classList.add( Newsletter.elClasses.error );\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t};\r\n\r\n\tNewsletter.formSubmit = function ( form ) {\r\n\t\tif ( !form ) { return; }\r\n\r\n\t\tvar formData = new FormData( form );\r\n\t\tformData.append( 'ajax', 1 );\r\n\r\n\t\tvar button = form.querySelector( 'button[type=\"submit\"]' );\r\n\t\tbutton.classList.add( Newsletter.elClasses.isLoading );\r\n\r\n\t\tvar hasErrors = Newsletter.formValidation( form );\r\n\t\tif ( hasErrors ) {\r\n\t\t\treturn setTimeout( function () {\r\n\t\t\t\tbutton.classList.remove( Newsletter.elClasses.isLoading );\r\n\t\t\t}, 500 );\r\n\t\t}\r\n\r\n\t\tvar sendData = [];\r\n\t\tformData.forEach( function ( value, key ) {\r\n\t\t\tsendData.push( encodeURIComponent( key ) + '=' + encodeURIComponent( value ) );\r\n\t\t} );\r\n\r\n\t\tvar xhr = new XMLHttpRequest();\r\n\t\txhr.onreadystatechange = function () {\r\n\t\t\tif ( xhr.readyState == XMLHttpRequest.DONE ) {\r\n\t\t\t\tif ( xhr.status == 200 ) {\r\n\t\t\t\t\tvar response = JSON.parse( xhr.response );\r\n\r\n\t\t\t\t\tif ( response.success ) {\r\n\t\t\t\t\t\tsetTimeout( function () {\r\n\t\t\t\t\t\t\tbutton.classList.remove( Newsletter.elClasses.isLoading );\r\n\t\t\t\t\t\t\tNewsletter.formSuccess( form );\r\n\t\t\t\t\t\t}, 500 );\r\n\r\n\t\t\t\t\t\tvar targetEl = $( form.dataset.target );\r\n\t\t\t\t\t\tif ( targetEl && targetEl.attr( 'id' ) === 'js-newsletter-modal' ) {\r\n\t\t\t\t\t\t\tvar displayTime = targetEl.data( 'display_time' );\r\n\r\n\t\t\t\t\t\t\tif ( form.dataset.success_type === 'alert' ) {\r\n\t\t\t\t\t\t\t\tdisplayTime = 0;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tNewsletter.forceCloseModal( targetEl, displayTime );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tstokpress.setCookie( Newsletter.cookieName, true, 365 );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\txhr.open( 'POST', '/', true );\r\n\t\txhr.setRequestHeader( 'Accept', 'application/json, text/javascript, */*; q=0.01' );\r\n\t\txhr.setRequestHeader( 'Content-type', 'application/x-www-form-urlencoded;charset=UTF-8' );\r\n\r\n\t\tif ( formData.has( 'mailingList' ) ) {\r\n\t\t\tconst rule = new Rule();\r\n\r\n\t\t\trule.addSubscriber( formData.get( 'esc_email' ), formData.get( 'mailingList' ), formData.get( 'language' ) )\r\n\t\t\t\t.then( () => {\r\n\t\t\t\t\txhr.send( sendData.join( '&' ) );\r\n\t\t\t\t} );\r\n\t\t} else {\r\n\t\t\txhr.send( sendData.join( '&' ) );\r\n\t\t}\r\n\t};\r\n\r\n\tNewsletter.forceCloseModal = function ( el, displayTime ) {\r\n\t\tsetTimeout( function () {\r\n\t\t\tel.modal( 'hide' );\r\n\t\t}, displayTime * 1000 );\r\n\t};\r\n\r\n\tNewsletter.formSuccess = function ( form ) {\r\n\t\tvar targetContainer = document.querySelector( form.dataset.target );\r\n\t\tvar successType = form.dataset.success_type;\r\n\r\n\t\tif ( targetContainer && successType === 'success-message' ) {\r\n\t\t\tNewsletter.displaySuccessMessage( targetContainer, '.js-newsletter-success', '.js-newsletter-content' );\r\n\r\n\t\t} else if ( successType === 'alert' ) {\r\n\t\t\tAlert.show( 'success', form.dataset.alert_title, form.dataset.alert );\r\n\t\t\tsetTimeout( function () {\r\n\t\t\t\t$( '#js-alert' ).modal( 'hide' );\r\n\t\t\t}, 3000 );\r\n\t\t}\r\n\r\n\t\tNewsletter.resetForm( targetContainer, form, successType );\r\n\t};\r\n\r\n\tNewsletter.resetForm = function ( targetContainer, form, successType ) {\r\n\t\tform.querySelector( 'input[name=\"esc_email\"]' ).value = '';\r\n\t\tform.querySelector( 'input[name=\"accept_terms\"]' ).checked = false;\r\n\r\n\t\tif ( successType === 'success-message' ) {\r\n\t\t\tsetTimeout( function () {\r\n\t\t\t\tNewsletter.displaySuccessMessage( targetContainer, '.js-newsletter-content', '.js-newsletter-success' );\r\n\t\t\t}, 10000 );\r\n\t\t}\r\n\t};\r\n\r\n\tNewsletter.displaySuccessMessage = function ( targetContainer, toDisplayClass, toHideClass ) {\r\n\t\tif ( !targetContainer ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar contentToDisplay = targetContainer.querySelectorAll( toDisplayClass );\r\n\t\tvar contentToHide = targetContainer.querySelectorAll( toHideClass );\r\n\r\n\t\tif ( contentToHide.length > 0 ) {\r\n\t\t\tArray.prototype.forEach.call( contentToHide, function ( element ) {\r\n\t\t\t\telement.classList.add( Newsletter.elClasses.hidden );\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\tif ( contentToDisplay.length > 0 ) {\r\n\t\t\tArray.prototype.forEach.call( contentToDisplay, function ( element ) {\r\n\t\t\t\telement.classList.remove( Newsletter.elClasses.hidden );\r\n\t\t\t} );\r\n\t\t}\r\n\t};\r\n\r\n\tNewsletter.modal = function ( modal ) {\r\n\t\tif ( !modal ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tNewsletter.cookieName = modal.data( 'cookie' );\r\n\t\tvar delay = modal.data( 'delay' );\r\n\r\n\t\tif ( !stokpress.getCookie( Newsletter.cookieName ) ) {\r\n\t\t\t// Show modal\r\n\t\t\tsetTimeout( function () {\r\n\t\t\t\tmodal.modal( 'show' );\r\n\r\n\t\t\t\t$( '.newsletter-close' ).click( function () {\r\n\t\t\t\t\tstokpress.setCookie( Newsletter.cookieName, true, 365 );\r\n\t\t\t\t} );\r\n\t\t\t}, delay * 1000 );\r\n\t\t}\r\n\t};\r\n\r\n\tNewsletter.init = function ( mainWrapper, modalId ) {\r\n\t\tvar container = document.querySelectorAll( mainWrapper );\r\n\t\tif ( container.length === 0 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Hide honeypot fields\r\n\t\t$( container ).find( 'input[name=\"esc_first_name\"],input[name=\"esc_last_name\"],input[name=\"esc_phone_number\"],input[name=\"esc_country_code\"]' ).hide();\r\n\r\n\t\tfor ( var i = 0; i < container.length; i++ ) {\r\n\r\n\t\t\t// Form submit\r\n\t\t\tvar form = container[i];\r\n\t\t\tform.addEventListener( 'submit', function ( e ) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tNewsletter.formSubmit( this );\r\n\t\t\t} );\r\n\r\n\t\t\t// Remove Errors on input change\r\n\t\t\tNewsletter.removeErrors( form );\r\n\t\t}\r\n\r\n\t\t// Newsletter Modal\r\n\t\tvar modal = $( modalId );\r\n\t\tif ( modal.length ) {\r\n\t\t\tNewsletter.modal( modal );\r\n\t\t}\r\n\t};\r\n\r\n\tNewsletter.elClasses = {\r\n\t\thidden: 'd-none',\r\n\t\tisLoading: 'is-loading',\r\n\t\tisDisabled: 'is-disabled',\r\n\t\terror: 'is-invalid',\r\n\t};\r\n\r\n\tNewsletter.init( '.js-newsletter', '#js-newsletter-modal' );\r\n} )( jQuery );\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/newsletter.js","export default class Rule {\r\n\tconstructor() {\r\n\t\tconsole.log( 'Rule!' );\r\n\t}\r\n\taddSubscriber ( email, mailingList, language = 'en', isUpdate = false ) {\r\n\t\treturn fetch( `/wp-json/stok/v1/rule/subscriber/${email}`, {\r\n\t\t\tmethod: 'post',\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-type': 'application/json; charset=UTF-8',\r\n\t\t\t},\r\n\t\t\tbody: JSON.stringify( { mailingList: mailingList, language: language, isUpdate: isUpdate } ),\r\n\t\t} )\r\n\t\t\t.then( data => data.json() )\r\n\t\t\t.then( function ( data ) {\r\n\t\t\t\tconsole.log( 'Request succeeded with JSON response', data );\r\n\t\t\t} )\r\n\t\t\t.catch( function ( error ) {\r\n\t\t\t\tconsole.log( 'Request failed', error );\r\n\t\t\t} );\r\n\t}\r\n}\n\n\n// WEBPACK FOOTER //\n// ./scripts/util/Rule.js","( ( $ ) => {\r\n\tconst modal = $( '#js-unshippable-modal' );\r\n\r\n\tif ( modal.length === 0 ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tmodal.modal( 'show' );\r\n} )( jQuery );\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/unshippable.js","/*global FilterUpdater, Filter */\r\n\r\n( function ( $ ) {\r\n const $categoryDataElement = $('#categoryData'),\r\n categoryData = $categoryDataElement.length > 0 ? JSON.parse($categoryDataElement.text()) : false;\r\n\r\n if(!categoryData) {\r\n return;\r\n }\r\n\r\n let hashQueryString = window.location.hash,\r\n currentSort = $( '#js-current-sort' ),\r\n listingHolder = $( '#js-listing-holder' ),\r\n productContainer = $( '.js-productContainer' ),\r\n holder = $( '.silk-product-item-holder' ),\r\n language = categoryData.language,\r\n search = categoryData.search,\r\n perPage = parseInt(categoryData.perPage),\r\n paginationText = categoryData.paginationText,\r\n currentPage = 1,\r\n allProducts = $('.products .product').clone(),\r\n searchHitCountSelector = '.js-hit-count',\r\n silkForm = $('#silkFilterForm'),\r\n onPageLoad = false,\r\n loadMore = {\r\n $paginationText: $('#js-product-listing-pagination-text'),\r\n $button: $('#js-product-listing-load-more'),\r\n\t\t\t$progress: $('#js-product-listing-progress'),\r\n };\r\n\r\n const filterClasses = {\r\n 'hidden' : 'd-none',\r\n 'active' : 'active',\r\n }\r\n\r\n if (silkForm.length) {\r\n init();\r\n }\r\n\r\n function init() {\r\n if (silkForm.data('ajaxurl')) {\r\n filterDataLoad();\r\n }\r\n\r\n if (hashQueryString != '') {\r\n $('.silk-spinner').removeClass( filterClasses.hidden );\r\n }\r\n\r\n let silkHashClear = $('.silk-hash-clear');\r\n if (silkHashClear.length) {\r\n silkHashClear.on('click', function (e) {\r\n e.preventDefault();\r\n history.pushState( '', document.title, window.location.pathname + window.location.search );\r\n silkForm.trigger( 'reset' );\r\n $('.silk-hash-orderby').removeClass( filterClasses.active );\r\n $('.silk-hash-orderby.default').addClass( filterClasses.active );\r\n $('.silk-hash-select-item').removeClass( filterClasses.active );\r\n filterProducts();\r\n } );\r\n }\r\n\r\n let silkCustomFilter = $('.silk-custom-filter');\r\n if (silkCustomFilter.length) {\r\n silkCustomFilter.on('change', function(){\r\n if ($(this).data('term') && !$(this).hasClass('js-variant')) {\r\n renderVariants($(this).data('term'));\r\n }\r\n filterProducts();\r\n });\r\n }\r\n\r\n let silkHashSelectItem = $('.silk-hash-select-item');\r\n if (silkHashSelectItem.length) {\r\n silkHashSelectItem.on('click', function ( e ) {\r\n e.preventDefault();\r\n const _this = $(this);\r\n const parent = _this.parents('.silk-hash-select');\r\n\r\n if (parent) {\r\n parent.find('.silk-hash-select-item').removeClass( filterClasses.active );\r\n parent.find('.silk-hash-select-label').text( _this.text() );\r\n _this.addClass( filterClasses.active );\r\n filterProducts();\r\n }\r\n } );\r\n }\r\n\r\n let silkHashOrderby = $('.silk-hash-orderby');\r\n if (silkHashOrderby.length) {\r\n silkHashOrderby.on('click', function ( e ) {\r\n e.preventDefault();\r\n $('.silk-hash-orderby.active').removeClass( filterClasses.active );\r\n $(this).addClass( filterClasses.active );\r\n if( $(this).data('value') == 'price_asc' || $(this).data('value') == 'price_desc' ) {\r\n $(this).closest('.js-sort-custom-container').find('button.dropdown-toggle').addClass( filterClasses.active );\r\n } else {\r\n $(this).closest('.js-filter-accordion-body').find('.js-sort-custom-container').find('button.dropdown-toggle').removeClass( filterClasses.active );\r\n }\r\n currentSort.text( $( this ).text() );\r\n filterProducts();\r\n } );\r\n }\r\n\r\n let silkHashFilter = $('.silk-hash-filter');\r\n if (silkHashFilter.length) {\r\n silkHashFilter.on('click', function () {\r\n filterProducts();\r\n });\r\n }\r\n\r\n loadMore.$button.on('click', function () {\r\n silkProductLoad( ++currentPage );\r\n });\r\n }\r\n\r\n function filterProducts() {\r\n\r\n var colorList = '';\r\n var sizeList = '';\r\n var categoryList = '';\r\n var variantList = '';\r\n var materialList = '';\r\n\r\n var orderBy = $( '.silk-hash-orderby.active' ).data( 'value' ) ? $( '.silk-hash-orderby.active' ).data( 'value' ) : '';\r\n var collection = '';\r\n var price = '';\r\n var comma = '';\r\n\r\n $('.silk-hash-select').each( function () {\r\n var selectName = $(this).data('name');\r\n var selectValue = $(this).find('.silk-hash-select-item.active').data('value');\r\n if ( selectValue ) {\r\n switch ( selectName ) {\r\n case 'price':\r\n price = selectValue;\r\n priceFilter += selectName;\r\n break;\r\n\r\n case 'collection':\r\n collection = selectValue;\r\n collectionFilter += selectName;\r\n break;\r\n }\r\n }\r\n } );\r\n\r\n $('.silk-hash-filter').each( function () {\r\n var inputName = $( this ).attr( 'name' );\r\n var inputValue = $( this ).val();\r\n if ( $( this ).prop( 'checked' ) == true ) {\r\n switch ( inputName ) {\r\n case 'color':\r\n comma = '';\r\n if ( colorList != '' ) {\r\n comma = ',';\r\n }\r\n colorList += comma + inputValue;\r\n break;\r\n case 'size':\r\n comma = '';\r\n if ( sizeList != '' ) {\r\n comma = '|';\r\n }\r\n sizeList += comma + inputValue;\r\n break;\r\n case 'category':\r\n comma = '';\r\n if ( categoryList != '' ) {\r\n comma = ',';\r\n }\r\n categoryList += comma + inputValue;\r\n break;\r\n case 'variant':\r\n comma = '';\r\n if ( variantList != '' ) {\r\n comma = ',';\r\n }\r\n variantList += comma + inputValue;\r\n break;\r\n case 'material':\r\n comma = '';\r\n if ( materialList != '' ) {\r\n comma = '|';\r\n }\r\n materialList += comma + inputValue;\r\n break;\r\n }\r\n }\r\n } );\r\n\r\n var filterUrl = '';\r\n\r\n if ( categoryList != '' ) {\r\n filterUrl += 'category=' + categoryList;\r\n } else if(categoryData.currentCategory) {\r\n filterUrl += 'category=' + categoryData.currentCategory;\r\n }\r\n\r\n if ( colorList != '' ) {\r\n if ( filterUrl != '' ) {\r\n filterUrl += '&';\r\n }\r\n filterUrl += 'color=' + colorList;\r\n var colorFilter = new RegExp( colorList.replace(/,/g, '|'), 'g');\r\n }\r\n\r\n if ( sizeList != '' ) {\r\n if ( filterUrl != '' ) {\r\n filterUrl += '&';\r\n }\r\n filterUrl += 'size=' + sizeList;\r\n var sizeFilter = new RegExp( sizeList.replace(/,/g, '|'), 'g');\r\n }\r\n if ( materialList != '' ) {\r\n if ( filterUrl != '' ) {\r\n filterUrl += '&';\r\n }\r\n filterUrl += 'material=' + materialList;\r\n var materialFilter = new RegExp( materialList.replace(/,/g, '|'), 'g');\r\n }\r\n if ( orderBy != '' && typeof orderBy !== 'undefined' ) {\r\n if ( filterUrl != '' ) {\r\n filterUrl += '&';\r\n }\r\n filterUrl += 'orderBy=' + orderBy;\r\n }\r\n if ( price != '' && typeof price !== 'undefined' ) {\r\n if ( filterUrl != '' ) {\r\n filterUrl += '&';\r\n }\r\n filterUrl += 'price=' + price;\r\n var priceFilter = price;\r\n }\r\n if ( collection != '' && typeof collection !== 'undefined' ) {\r\n if ( filterUrl != '' ) {\r\n filterUrl += '&';\r\n }\r\n filterUrl += 'collection=' + collection;\r\n var collectionFilter = new RegExp( collection.replace(/,/g, '|'), 'g');\r\n }\r\n if ( variantList != '' && typeof variantList !== 'undefined' ) {\r\n if ( filterUrl != '' ) {\r\n filterUrl += '&';\r\n }\r\n filterUrl += 'variant=' + variantList;\r\n var variantFilter = new RegExp( variantList.replace(/,/g, '|'), 'g');\r\n }\r\n\r\n filterUrl = '#' + filterUrl;\r\n window.history.pushState( '', 'Title', filterUrl );\r\n\r\n var categoryFilter;\r\n\r\n if ( categoryList != '' ) {\r\n categoryFilter = new RegExp( categoryList.replace(/,/g, '|'), 'g');\r\n } else {\r\n categoryFilter = new RegExp( categoryData.currentCategory, 'g');\r\n }\r\n\r\n $('.products .product').remove();\r\n\r\n var filteredResult = '';\r\n\r\n filteredResult = allProducts.filter(function () { return $(this).data('category') ? $(this).data('category').match(categoryFilter) : false } ).clone();\r\n\r\n FilterUpdater.update(filteredResult, allProducts);\r\n Filter.dropdownUpdate();\r\n\r\n if( variantFilter ) {\r\n filteredResult = filteredResult.filter(function () { return $(this).data('variant') ? $(this).data('variant').match(variantFilter) : false } );\r\n }\r\n if( colorFilter ) {\r\n filteredResult = filteredResult.filter(function () { return $(this).data('color') ? $(this).data('color').match(colorFilter) : false } );\r\n }\r\n if( sizeFilter ) {\r\n filteredResult = filteredResult.filter(function () { return $(this).data('size') ? $(this).data('size').toString().match(sizeFilter) : false } );\r\n }\r\n if( materialFilter ) {\r\n filteredResult = filteredResult.filter(function () { return $(this).data('material') ? $(this).data('material').match(materialFilter) : false } );\r\n }\r\n\r\n if( collectionFilter ) {\r\n filteredResult = filteredResult.filter(function () { return $(this).data('collection') ? $(this).data('collection').match(collectionFilter) : false } );\r\n }\r\n\r\n if( priceFilter ) {\r\n let range = priceFilter.split('-');\r\n let start = range[0];\r\n let end = range[1] !== 'above' ? range[1] : null;\r\n\r\n filteredResult = filteredResult.filter(function () {\r\n let price = parseInt($(this).data('price'), 10);\r\n if (!end) {\r\n return price >= parseInt(start, 10);\r\n } else {\r\n return price >= parseInt(start, 10) && price <= parseInt(end, 10);\r\n }\r\n });\r\n }\r\n\r\n // Sort results\r\n filteredResult = sortProducts(filteredResult, orderBy);\r\n\r\n // Render product items\r\n appendProducts(filteredResult);\r\n\r\n // START REMOVE MASONRY\r\n // if( typeof window.productsMasonry !== 'undefined' ) {\r\n // // Rebuild masonry\r\n // window.productsMasonry.masonry( 'destroy' );\r\n // window.productsMasonry.masonry( {\r\n // itemSelector: '.product',\r\n // percentPosition: true,\r\n // } );\r\n // }\r\n\r\n // Reinitialize read more link\r\n // window.titleCardCollapse();\r\n // END REMOVE MASONRY\r\n\r\n window.lazyLoadInstance.update();\r\n\r\n // Filter tag listener\r\n filterTagInit();\r\n\r\n // Show Product Bg\r\n if ( $( '.bg-image' ).hasClass( filterClasses.hidden ) ) {\r\n $( '.bg-image' ).removeClass( filterClasses.hidden );\r\n }\r\n\r\n // Remove 2nd product image for hover if in mobile view\r\n var currentIsDesktop = matchMedia( 'screen and (min-width: 992px)' ).matches;\r\n if (currentIsDesktop === false) {\r\n var productImages = $( '.products .product figure img' );\r\n\r\n if (productImages.length > 0) {\r\n $.each( productImages, function() {\r\n if ($(this).hasClass( 'second-image' )) {\r\n $(this).parent().removeClass( 'has-second-image' );\r\n $(this).remove();\r\n }\r\n } );\r\n }\r\n }\r\n\r\n // Update hit count\r\n if ($( searchHitCountSelector ).length) {\r\n $.each( $( searchHitCountSelector ), function() {\r\n $(this).text( filteredResult.length );\r\n } );\r\n }\r\n\r\n currentPage = 1;\r\n updateLoadMore();\r\n }\r\n\r\n function renderVariants (term) {\r\n let variants = $('.js-variants');\r\n let itemSelector = '.js-variant';\r\n\r\n if (!variants.length) return;\r\n\r\n if (onPageLoad === false) {\r\n variants.find( itemSelector ).removeClass( filterClasses.active ).addClass( filterClasses.hidden );\r\n variants.find( itemSelector+ ' input[name=\"variant\"]' ).prop('checked', false);\r\n }\r\n\r\n if (!term && $('.silk-hash-filter[name=\"category\"]').prop('checked')) {\r\n term = $('.silk-hash-filter[name=\"category\"]').parent().data('term');\r\n }\r\n\r\n if (term && typeof(term) !== 'undefined' && variants.find( itemSelector+'[data-term=\"'+ term +'\"]' )) {\r\n variants.find( itemSelector ).addClass( filterClasses.hidden );\r\n variants.find( itemSelector+'[data-term=\"'+ term +'\"]' ).removeClass( filterClasses.hidden );\r\n } else if (!term || typeof(term) === 'undefined') {\r\n variants.find( itemSelector ).removeClass( filterClasses.hidden );\r\n }\r\n\r\n if (variants.find( itemSelector ).length === variants.find( itemSelector+'.'+filterClasses.hidden ).length) {\r\n variants.addClass( filterClasses.hidden );\r\n } else {\r\n variants.removeClass( filterClasses.hidden );\r\n }\r\n }\r\n\r\n function sortProducts (filteredResult, orderBy) {\r\n var sortTitleDesc = function(a,b) {\r\n a = $(a).data('name').toUpperCase();\r\n b = $(b).data('name').toUpperCase();\r\n if(a > b) {\r\n return -1;\r\n } else if(a < b) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n };\r\n\r\n var sortTitleAsc = function(a,b) {\r\n a = $(a).data('name').toUpperCase();\r\n b = $(b).data('name').toUpperCase();\r\n if(a < b) {\r\n return -1;\r\n } else if(a > b) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n };\r\n\r\n var sortPrizeDesc = function(a,b) {\r\n a = parseInt($(a).data('prize'), 10);\r\n b = parseInt($(b).data('prize'), 10);\r\n if(a > b) {\r\n return -1;\r\n } else if(a < b) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n };\r\n\r\n var sortPrizeAsc = function(a,b) {\r\n a = parseInt($(a).data('prize'), 10);\r\n b = parseInt($(b).data('prize'), 10);\r\n if(a < b) {\r\n return -1;\r\n } else if(a > b) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n };\r\n\r\n var sortIndexAsc = function(a,b) {\r\n a = parseInt($(a).data('index'), 10);\r\n b = parseInt($(b).data('index'), 10);\r\n if(a < b) {\r\n return -1;\r\n } else if(a > b) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n };\r\n\r\n var sortNewest = function ( a, b ) {\r\n a = parseInt( $( a ).data( 'new' ), 10 );\r\n b = parseInt( $( b ).data( 'new' ), 10 );\r\n if ( a > b ) {\r\n return -1;\r\n } else if ( a < b ) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n };\r\n\r\n switch ( orderBy ) {\r\n case 'price_asc':\r\n filteredResult = filteredResult.sort(sortPrizeAsc);\r\n break;\r\n case 'price_desc':\r\n filteredResult = filteredResult.sort(sortPrizeDesc);\r\n break;\r\n case 'title_desc':\r\n filteredResult = filteredResult.sort(sortTitleDesc);\r\n break;\r\n case 'title_asc':\r\n filteredResult = filteredResult.sort(sortTitleAsc);\r\n break;\r\n case 'newest':\r\n filteredResult = filteredResult.sort(sortNewest);\r\n break;\r\n case 'popular':\r\n filteredResult = filteredResult.sort(sortIndexAsc);\r\n break;\r\n }\r\n\r\n return filteredResult;\r\n }\r\n\r\n function filterDataLoad () {\r\n var ajaxUrl = $( '#silkFilterForm' ).data( 'ajaxurl' );\r\n var currentCategory = categoryData.currentCategory;\r\n var currentTaxonomy = categoryData.currentTaxonomy;\r\n var currentTermId = categoryData.currentTermId;\r\n\r\n if (currentCategory && currentTermId) {\r\n ajaxUrl += '&category=' + currentCategory + '&termid=' + currentTermId;\r\n }\r\n\r\n if (currentCategory && currentTermId) {\r\n ajaxUrl += '&taxonomy=' + currentTaxonomy;\r\n }\r\n\r\n if ( search ) {\r\n ajaxUrl += '&search=' + encodeURIComponent( search );\r\n }\r\n\r\n ajaxUrl = ajaxUrl.replace(/per_page=[\\d]{1,4}/,'per_page=1000');\r\n\r\n $.ajax( {\r\n url: ajaxUrl + '&lang=' + language,\r\n type: 'GET',\r\n async: true,\r\n error: function ( data, textStatus ) {\r\n console.log( data );\r\n console.log( textStatus );\r\n },\r\n success: function ( data ) {\r\n var orderBy = '';\r\n if ( search ) {\r\n orderBy = $('.silk-hash-orderby.active').data('value') ? $( '.silk-hash-orderby.active' ).data( 'value' ) : '';\r\n } else {\r\n orderBy = $('.silk-hash-orderby.active').data('value') ? $( '.silk-hash-orderby.active' ).data( 'value' ) : 'popular';\r\n }\r\n\r\n var html = '';\r\n\r\n if ( $( data ).length > 0 ) {\r\n html = '';\r\n\r\n $( '.silk-spinner' ).addClass( filterClasses.hidden );\r\n\r\n $( data ).each( function ( _, val ) {\r\n html += val.product_item.replace(/(\\r\\n|\\n|\\r)/gm, '');\r\n } );\r\n\r\n allProducts = $( html ).clone();\r\n\r\n if ( hashQueryString != '' ) {\r\n\r\n silkSetFilterUsingHash();\r\n filterProducts();\r\n\r\n // update variant\r\n onPageLoad = true;\r\n renderVariants();\r\n\r\n } else {\r\n let filteredResult = sortProducts( $(html), orderBy );\r\n appendProducts(filteredResult);\r\n\r\n // START REMOVE MASONRY\r\n // Rebuild masonry\r\n // if( typeof window.productsMasonry !== 'undefined' ) {\r\n // window.productsMasonry.masonry( 'destroy' );\r\n // window.productsMasonry.masonry( {\r\n // itemSelector: '.product',\r\n // percentPosition: true,\r\n // } );\r\n // window.productsMasonry.masonry('reloadItems');\r\n // }\r\n\r\n // // Reinitialize read more link\r\n // window.titleCardCollapse();\r\n // END REMOVE MASONRY\r\n\r\n window.lazyLoadInstance.update();\r\n\r\n FilterUpdater.update(filteredResult, allProducts);\r\n\r\n // Update hit count\r\n if ($( searchHitCountSelector ).length) {\r\n $.each( $( searchHitCountSelector ), function() {\r\n $(this).html( $( data ).length );\r\n } );\r\n }\r\n\r\n // Show Product Bg\r\n if ( $( '.bg-image' ).hasClass( filterClasses.hidden ) ) {\r\n $( '.bg-image' ).removeClass( filterClasses.hidden );\r\n }\r\n }\r\n\r\n } else {\r\n holder.html( '<p>' + holder.data( 'alt' ) + '</p>' );\r\n }\r\n\r\n onPageLoad = false;\r\n updateLoadMore();\r\n },\r\n complete: function () {\r\n // Show product listing\r\n listingHolder.removeClass( 'invisible' );\r\n showLoader( false );\r\n },\r\n } );\r\n }\r\n\r\n function updateLoadMore() {\r\n const allProducts = productContainer.find('.product'),\r\n\t\t\tvisibleProducts = productContainer.find('.product:visible');\r\n\r\n loadMore.$paginationText.text(\r\n paginationText\r\n .replace('[current]', visibleProducts.length)\r\n .replace('[total]', allProducts.length)\r\n );\r\n\t\tloadMore.$progress.css('width', ((visibleProducts.length / allProducts.length) * 100) + '%');\r\n\t\tloadMore.$progress.parent().show();\r\n Math.ceil(allProducts.length / perPage) === currentPage ? loadMore.$button.hide() : loadMore.$button.show();\r\n }\r\n\r\n function appendProducts(products) {\r\n if (!productContainer.length || !products) {\r\n return;\r\n }\r\n\r\n productContainer.empty();\r\n productContainer.each( function() {\r\n const start = $(this).data('start');\r\n const end = $(this).data('end');\r\n\r\n let targetContainer = $(this),\r\n items = [];\r\n\r\n $.each(products,function( pos, item ) {\r\n if (!item) return;\r\n\r\n let index = pos+1;\r\n\r\n // Paginate the results\r\n if(pos >= perPage) {\r\n if (item.classList) {\r\n item.classList.add(filterClasses.hidden);\r\n } else {\r\n item.className += ` ${filterClasses.hidden}`;\r\n }\r\n }\r\n\r\n if (parseInt(index) >= parseInt(start) && parseInt(index) <= parseInt(end)) {\r\n items.push(item);\r\n }\r\n });\r\n\r\n targetContainer.append(items);\r\n\r\n if (targetContainer.children().length) {\r\n targetContainer.parent().removeClass( filterClasses.hidden );\r\n } else {\r\n targetContainer.parent().addClass( filterClasses.hidden );\r\n }\r\n });\r\n\r\n // START REMOVE MASONRY\r\n // Rebuild masonry\r\n // if( typeof window.productsMasonry !== 'undefined' ) {\r\n // window.productsMasonry.masonry( 'destroy' );\r\n // window.productsMasonry.masonry( {\r\n // itemSelector: '.product',\r\n // percentPosition: true,\r\n // } );\r\n // }\r\n // END REMOVE MASONRY\r\n\r\n }\r\n\r\n function silkProductLoad( nextPage ) {\r\n $.each($('.products .product'),function( pos, item ) {\r\n if(pos >= perPage * nextPage) {\r\n item.classList.add(filterClasses.hidden);\r\n } else {\r\n item.classList.remove(filterClasses.hidden);\r\n }\r\n });\r\n\r\n currentPage = nextPage;\r\n\r\n // Rebuild masonry\r\n // window.productsMasonry.masonry( 'layout' );\r\n\r\n // Reinitialize read more link\r\n // window.titleCardCollapse();\r\n // END REMOVE MASONRY\r\n\r\n window.lazyLoadInstance.update();\r\n\r\n // Show Product Bg\r\n if ( $( '.bg-image' ).hasClass( filterClasses.hidden ) ) {\r\n $( '.bg-image' ).removeClass( filterClasses.hidden );\r\n }\r\n\r\n updateLoadMore();\r\n }\r\n\r\n function silkSetFilterUsingHash () {\r\n var hash = window.location.hash;\r\n hash = decodeURI(hash.replace( '#', '' ));\r\n var hashArr = hash.split( '&' );\r\n if ( hashArr.length > 0 ) {\r\n $( hashArr ).each( function ( key, queryItem ) {\r\n var queryItemArr = queryItem.split( '=' );\r\n if ( queryItemArr.length > 0 ) {\r\n $( queryItemArr ).each( function ( queryItemKey, queryItemValue ) {\r\n var queryItemValueArr = queryItemValue.split( ',' );\r\n\r\n if ( queryItemValue.indexOf( '|' ) !== -1 ) {\r\n queryItemValueArr = queryItemValue.split( '|' );\r\n }\r\n\r\n if ( queryItemValueArr.length > 0 ) {\r\n $( queryItemValueArr ).each( function ( queryItemSelectedKey, queryItemSelectedValue ) {\r\n if ( queryItemSelectedValue != '' ) {\r\n const inputName = queryItemArr[0];\r\n queryItemSelectedValue = decodeURIComponent(queryItemSelectedValue);\r\n\r\n if ( inputName == 'orderBy' ) {\r\n const currentSortField = $( 'a[data-value=' + queryItemSelectedValue + ']' );\r\n $( '.silk-hash-orderby.active' ).removeClass( filterClasses.active );\r\n currentSortField.addClass( filterClasses.active );\r\n currentSort.text( currentSortField.text() );\r\n\r\n } else if ($.inArray(inputName, ['collection', 'price']) !== -1) {\r\n const selectedField = $('.silk-hash-select .silk-hash-select-item[data-value=' + queryItemSelectedValue + ']');\r\n const selectedFieldParent = selectedField.parents('.silk-hash-select');\r\n\r\n if (selectedFieldParent) {\r\n selectedFieldParent.find('.silk-hash-select-item').removeClass( filterClasses.active );\r\n selectedFieldParent.find('.silk-hash-select-label').text( selectedField.text() );\r\n selectedField.addClass( filterClasses.active );\r\n }\r\n } else {\r\n const currentField = $( 'input[name=\"' + inputName + '\"][value=\"' + queryItemSelectedValue + '\"]' );\r\n if (currentField.length > 0) {\r\n currentField.prop( 'checked', true );\r\n\r\n if (currentField.parent().hasClass('silk-custom-filter')) {\r\n currentField.parent().addClass( filterClasses.active );\r\n }\r\n }\r\n\r\n }\r\n }\r\n } );\r\n }\r\n } );\r\n }\r\n } );\r\n }\r\n }\r\n\r\n function filterTagInit() {\r\n var filterTags = $('.silk-filter-tags');\r\n filterTags.find('.js-filter-tag').remove();\r\n filterTags.find('.js-filter-tag-bundle').remove();\r\n var colorFilterValues = [], colorFilterLabel = '';\r\n var sizeFilterValues = [], sizeFilterLabel = '';\r\n var categoryFilterValues = [], categoryFilterLabel = '';\r\n\r\n $('.silk-hash-filter').each( function () {\r\n var inputName = $(this).attr('name');\r\n var inputValue = $(this).val();\r\n if ( inputName !== 'orderBy' && $(this).prop('checked') === false )\r\n return;\r\n if( inputName === 'orderBy' && !$(this).hasClass('active') )\r\n return;\r\n switch ( inputName ) {\r\n case 'color':\r\n colorFilterValues.push(inputValue);\r\n colorFilterLabel = $(this).closest('.product-filter-dropdown').find('.js-filter-accordion-toggle').text();\r\n break;\r\n case 'size':\r\n sizeFilterValues.push(inputValue);\r\n sizeFilterLabel = $(this).closest('.product-filter-dropdown').find('.js-filter-accordion-toggle').text();\r\n break;\r\n case 'category':\r\n categoryFilterValues.push(inputValue);\r\n categoryFilterLabel = $(this).closest('.product-filter-dropdown').find('.js-filter-accordion-toggle').text();\r\n break;\r\n case 'orderBy':\r\n renderFilterTag($(this).closest('.js-sort-orderby-container').find('label').html(), inputValue, inputName);\r\n break;\r\n }\r\n });\r\n if( colorFilterValues.length > 0 ) {\r\n renderFilterTagBundle( colorFilterLabel + ' (' + colorFilterValues.length + ')', 'color', colorFilterValues );\r\n }\r\n if( sizeFilterValues.length > 0 ) {\r\n renderFilterTagBundle( sizeFilterLabel + ' (' + sizeFilterValues.length + ')', 'size', sizeFilterValues );\r\n }\r\n if( categoryFilterValues.length > 0 ) {\r\n renderFilterTagBundle( categoryFilterLabel + ' (' + categoryFilterValues.length + ')', 'category', categoryFilterValues );\r\n }\r\n\r\n if ($('.js-filter-tag').length === 0 && $('.js-filter-tag-bundle').length === 0) {\r\n\t\t\tfilterTags.find('.silk-hash-clear').addClass(filterClasses.hidden);\r\n\t\t\t$('.js-silk-filter').attr('style', 'display:none!important')\r\n } else {\r\n\t\t\tfilterTags.find('.silk-hash-clear').removeClass(filterClasses.hidden);\r\n\t\t\t$('.js-silk-filter').attr('style', '');\r\n\t\t}\r\n\r\n filterTagListener();\r\n filterTagListenerBundle();\r\n }\r\n\r\n function renderFilterTag(name, value, type) {\r\n var filterTags = $('.silk-filter-tags');\r\n\r\n if (filterTags.length === 0) return;\r\n\r\n var clearTag = filterTags.find('.js-silk-filter-tags');\r\n var label = name;\r\n\r\n if (type.indexOf('size_') > -1) {\r\n label = type.replace('size_', '').toUpperCase() + ' ' + name;\r\n } else if (type === 'size') {\r\n label = name;\r\n }\r\n if (filterTags.find('.js-filter-tag[data-value=\"'+ value +'\"]')) {\r\n var tag = '<div class=\"tag js-filter-tag btn btn-sm btn-tersiary\" data-value=\"'+ value +'\" data-name=\"'+ type +'\">'+\r\n label +\r\n '</div>';\r\n\r\n clearTag.prepend(tag);\r\n }\r\n }\r\n\r\n function renderFilterTagBundle(label, type, values) {\r\n var filterTags = $('.silk-filter-tags');\r\n\r\n if (filterTags.length === 0) return;\r\n\r\n var clearTag = filterTags.find('.js-silk-filter-tags');\r\n\r\n if (filterTags.find('.js-filter-tag-bundle[data-name=\"'+ type +'\"]')) {\r\n if( filterTags.find('.js-filter-tag-bundle[data-name=\"'+ type +'\"]').length > 0 ) {\r\n filterTags.find('.js-filter-tag-bundle[data-name=\"'+ type +'\"]').remove();\r\n }\r\n var tag = '<div class=\"tag js-filter-tag-bundle btn btn-sm btn-tersiary\" data-name=\"'+ type +'\" data-values=\"'+values+'\">'+\r\n label +\r\n '</div>';\r\n clearTag.prepend(tag);\r\n }\r\n }\r\n\r\n function filterTagListener() {\r\n var filterTags = $(document).find('.js-filter-tag');\r\n\r\n if (filterTags.length === 0) return;\r\n\r\n filterTags.on('click', function() {\r\n if( $(this).data('name') == 'orderBy' ) {\r\n $('#silkFilterForm').find('input[name=\"' + $(this).data('name') + '\"]').removeClass('active');\r\n filterProducts();\r\n } else {\r\n $('#silkFilterForm').find('input[name=\"' + $(this).data('name') + '\"][value=\"' + $(this).data('value') + '\"]').trigger('click');\r\n }\r\n\r\n $(this).remove();\r\n });\r\n }\r\n\r\n function filterTagListenerBundle() {\r\n var filterTags = $(document).find('.js-filter-tag-bundle');\r\n\r\n if (filterTags.length === 0) return;\r\n\r\n filterTags.on('click', function() {\r\n var $this = $(this);\r\n var name = $this.data('name');\r\n var values = $this.data('values').split(',');\r\n var findString = '';\r\n\r\n $.each(values, function( index, value ) {\r\n var withComma = ( index > 0 ) ? ',' : '';\r\n findString += withComma + 'input[name=\"' + name + '\"][value=\"' + value + '\"]';\r\n });\r\n\r\n $('#silkFilterForm').find(findString).trigger('click');\r\n $('.silk-filter-tags').find('.js-filter-tag-bundle[data-name=\"'+ name +'\"]').remove();\r\n });\r\n }\r\n\r\n function showLoader ( showLoader ) {\r\n var loader = $( document ).find( '.js-loader' );\r\n var hiddenClass = 'd-none';\r\n\r\n if ( !loader ) {\r\n return;\r\n }\r\n\r\n if ( showLoader ) {\r\n loader.removeClass( hiddenClass );\r\n } else {\r\n loader.addClass( hiddenClass );\r\n }\r\n }\r\n\r\n var h1Desktop = document.getElementById( 'js-desktop-h1' ),\r\n h1Mobile = document.getElementById( 'js-mobile-h1' ),\r\n isDesktop = true,\r\n timeOut = false;\r\n\r\n if ( !h1Desktop || !h1Mobile ) {\r\n return;\r\n }\r\n\r\n var checkH1 = function () {\r\n var currentIsDesktop = matchMedia( 'screen and (min-width: 992px)' ).matches;\r\n\r\n if ( isDesktop !== currentIsDesktop ) {\r\n $( '.js-dynamic-title' ).remove();\r\n\r\n if ( currentIsDesktop ) {\r\n $( h1Desktop ).after( unescape( h1Desktop.innerText ) );\r\n } else {\r\n $( h1Mobile ).after( unescape( h1Mobile.innerText ) );\r\n }\r\n }\r\n\r\n isDesktop = currentIsDesktop;\r\n };\r\n\r\n checkH1();\r\n $( window ).on('resize', function () {\r\n if ( timeOut ) {\r\n clearTimeout( timeOut );\r\n }\r\n\r\n timeOut = setTimeout( function () {\r\n checkH1();\r\n }, 100 );\r\n } );\r\n} )( jQuery );\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/category.js","import StickySidebar from 'sticky-sidebar/dist/sticky-sidebar';\r\n\r\nlet spacing;\r\nlet stickySidebar;\r\nlet productSidebar = $( '#js-sidebar' );\r\n\r\nlet selectedProduct = {};\r\n\r\nselectedProduct.init = function() {\r\n\t$('#productAccordion .product-accordion-item:eq(0) .collapse').addClass('show');\r\n\t$('#productAccordion .product-accordion-item:eq(0) .product-accordion-header').removeClass('collapsed');\r\n\r\n\t$('input[type=radio][name=product_color]').change(function() {\r\n\t\t$('.js-color-item').removeClass('is-active');\r\n\t\t$('input[name=product_color]:checked').closest('.js-color-item').addClass('is-active');\r\n\r\n\t\tselectedProduct.displayColorName();\r\n\t});\r\n\r\n $('#js-close-modal').click(function() {\r\n $('#sliderModal').modal('hide');\r\n });\r\n}\r\n\r\nselectedProduct.sticky = function() {\r\n\tlet navHeight = $( '.js-header' ).outerHeight() + 20;\r\n\tif ( $( 'body' ).hasClass( 'admin-bar' ) ) {\r\n\t\tspacing = 32 + navHeight;\r\n\t} else {\r\n\t\tspacing = navHeight;\r\n\t}\r\n\r\n\tif ( productSidebar.length > 0 ) {\r\n\t\tstickySidebar = new StickySidebar( '#js-sidebar', {\r\n\t\t\tcontainerSelector: '.container-fluid',\r\n\t\t\tinnerWrapperSelector: '.selected-product-inner',\r\n\t\t\ttopSpacing: spacing,\r\n\t\t\tminWidth: 1023,\r\n\t\t\tresizeSensor: true,\r\n\t\t});\r\n\t}\r\n}\r\n\r\nselectedProduct.updateStickyPosition = function() {\r\n\t$('#productAccordion').on('shown.bs.collapse', function () {\r\n\t\tstickySidebar.updateSticky();\r\n\t});\r\n\r\n\t$('#productAccordion').on('hidden.bs.collapse', function () {\r\n\t\tstickySidebar.updateSticky();\r\n\t});\r\n}\r\n\r\nselectedProduct.displayColorName = function() {\r\n\t$.each($('.js-color-selector'), function (i, el) {\r\n $(el).displayProp();\r\n\t});\r\n}\r\n\r\n$(window).resize(function () {\r\n\tif ( productSidebar.length > 0 ) {\r\n\t\t\tstickySidebar.updateSticky();\r\n\t}\r\n});\r\n\r\nselectedProduct.init();\r\nselectedProduct.sticky();\r\nselectedProduct.updateStickyPosition();\r\nselectedProduct.displayColorName();\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/product-selected.js","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.StickySidebar = factory());\n}(this, (function () { 'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\r\n * Sticky Sidebar JavaScript Plugin.\r\n * @version 3.3.1\r\n * @author Ahmed Bouhuolia <a.bouhuolia@gmail.com>\r\n * @license The MIT License (MIT)\r\n */\nvar StickySidebar = function () {\n\n // ---------------------------------\n // # Define Constants\n // ---------------------------------\n //\n var EVENT_KEY = '.stickySidebar';\n var DEFAULTS = {\n\n /**\r\n * Additional top spacing of the element when it becomes sticky.\r\n * @type {Numeric|Function}\r\n */\n topSpacing: 0,\n\n /**\r\n * Additional bottom spacing of the element when it becomes sticky.\r\n * @type {Numeric|Function}\r\n */\n bottomSpacing: 0,\n\n /**\r\n * Container sidebar selector to know what the beginning and end of sticky element.\r\n * @type {String|False}\r\n */\n containerSelector: false,\n\n /**\r\n * Inner wrapper selector.\r\n * @type {String}\r\n */\n innerWrapperSelector: '.inner-wrapper-sticky',\n\n /**\r\n * The name of CSS class to apply to elements when they have become stuck.\r\n * @type {String|False}\r\n */\n stickyClass: 'is-affixed',\n\n /**\r\n * Detect when sidebar and its container change height so re-calculate their dimensions.\r\n * @type {Boolean}\r\n */\n resizeSensor: true,\n\n /**\r\n * The sidebar returns to its normal position if its width below this value.\r\n * @type {Numeric}\r\n */\n minWidth: false\n };\n\n // ---------------------------------\n // # Class Definition\n // ---------------------------------\n //\n /**\r\n * Sticky Sidebar Class.\r\n * @public\r\n */\n\n var StickySidebar = function () {\n\n /**\r\n * Sticky Sidebar Constructor.\r\n * @constructor\r\n * @param {HTMLElement|String} sidebar - The sidebar element or sidebar selector.\r\n * @param {Object} options - The options of sticky sidebar.\r\n */\n function StickySidebar(sidebar) {\n var _this = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, StickySidebar);\n\n this.options = StickySidebar.extend(DEFAULTS, options);\n\n // Sidebar element query if there's no one, throw error.\n this.sidebar = 'string' === typeof sidebar ? document.querySelector(sidebar) : sidebar;\n if ('undefined' === typeof this.sidebar) throw new Error(\"There is no specific sidebar element.\");\n\n this.sidebarInner = false;\n this.container = this.sidebar.parentElement;\n\n // Current Affix Type of sidebar element.\n this.affixedType = 'STATIC';\n this.direction = 'down';\n this.support = {\n transform: false,\n transform3d: false\n };\n\n this._initialized = false;\n this._reStyle = false;\n this._breakpoint = false;\n this._resizeListeners = [];\n\n // Dimensions of sidebar, container and screen viewport.\n this.dimensions = {\n translateY: 0,\n topSpacing: 0,\n lastTopSpacing: 0,\n bottomSpacing: 0,\n lastBottomSpacing: 0,\n sidebarHeight: 0,\n sidebarWidth: 0,\n containerTop: 0,\n containerHeight: 0,\n viewportHeight: 0,\n viewportTop: 0,\n lastViewportTop: 0\n };\n\n // Bind event handlers for referencability.\n ['handleEvent'].forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n\n // Initialize sticky sidebar for first time.\n this.initialize();\n }\n\n /**\r\n * Initializes the sticky sidebar by adding inner wrapper, define its container, \r\n * min-width breakpoint, calculating dimensions, adding helper classes and inline style.\r\n * @private\r\n */\n\n\n _createClass(StickySidebar, [{\n key: 'initialize',\n value: function initialize() {\n var _this2 = this;\n\n this._setSupportFeatures();\n\n // Get sticky sidebar inner wrapper, if not found, will create one.\n if (this.options.innerWrapperSelector) {\n this.sidebarInner = this.sidebar.querySelector(this.options.innerWrapperSelector);\n\n if (null === this.sidebarInner) this.sidebarInner = false;\n }\n\n if (!this.sidebarInner) {\n var wrapper = document.createElement('div');\n wrapper.setAttribute('class', 'inner-wrapper-sticky');\n this.sidebar.appendChild(wrapper);\n\n while (this.sidebar.firstChild != wrapper) {\n wrapper.appendChild(this.sidebar.firstChild);\n }this.sidebarInner = this.sidebar.querySelector('.inner-wrapper-sticky');\n }\n\n // Container wrapper of the sidebar.\n if (this.options.containerSelector) {\n var containers = document.querySelectorAll(this.options.containerSelector);\n containers = Array.prototype.slice.call(containers);\n\n containers.forEach(function (container, item) {\n if (!container.contains(_this2.sidebar)) return;\n _this2.container = container;\n });\n\n if (!containers.length) throw new Error(\"The container does not contains on the sidebar.\");\n }\n\n // If top/bottom spacing is not function parse value to integer.\n if ('function' !== typeof this.options.topSpacing) this.options.topSpacing = parseInt(this.options.topSpacing) || 0;\n\n if ('function' !== typeof this.options.bottomSpacing) this.options.bottomSpacing = parseInt(this.options.bottomSpacing) || 0;\n\n // Breakdown sticky sidebar if screen width below `options.minWidth`.\n this._widthBreakpoint();\n\n // Calculate dimensions of sidebar, container and viewport.\n this.calcDimensions();\n\n // Affix sidebar in proper position.\n this.stickyPosition();\n\n // Bind all events.\n this.bindEvents();\n\n // Inform other properties the sticky sidebar is initialized.\n this._initialized = true;\n }\n\n /**\r\n * Bind all events of sticky sidebar plugin.\r\n * @protected\r\n */\n\n }, {\n key: 'bindEvents',\n value: function bindEvents() {\n window.addEventListener('resize', this, { passive: true, capture: false });\n window.addEventListener('scroll', this, { passive: true, capture: false });\n\n this.sidebar.addEventListener('update' + EVENT_KEY, this);\n\n if (this.options.resizeSensor && 'undefined' !== typeof ResizeSensor) {\n new ResizeSensor(this.sidebarInner, this.handleEvent);\n new ResizeSensor(this.container, this.handleEvent);\n }\n }\n\n /**\r\n * Handles all events of the plugin.\r\n * @param {Object} event - Event object passed from listener.\r\n */\n\n }, {\n key: 'handleEvent',\n value: function handleEvent(event) {\n this.updateSticky(event);\n }\n\n /**\r\n * Calculates dimensions of sidebar, container and screen viewpoint\r\n * @public\r\n */\n\n }, {\n key: 'calcDimensions',\n value: function calcDimensions() {\n if (this._breakpoint) return;\n var dims = this.dimensions;\n\n // Container of sticky sidebar dimensions.\n dims.containerTop = StickySidebar.offsetRelative(this.container).top;\n dims.containerHeight = this.container.clientHeight;\n dims.containerBottom = dims.containerTop + dims.containerHeight;\n\n // Sidebar dimensions.\n dims.sidebarHeight = this.sidebarInner.offsetHeight;\n dims.sidebarWidth = this.sidebar.offsetWidth;\n\n // Screen viewport dimensions.\n dims.viewportHeight = window.innerHeight;\n\n this._calcDimensionsWithScroll();\n }\n\n /**\r\n * Some dimensions values need to be up-to-date when scrolling the page.\r\n * @private\r\n */\n\n }, {\n key: '_calcDimensionsWithScroll',\n value: function _calcDimensionsWithScroll() {\n var dims = this.dimensions;\n\n dims.sidebarLeft = StickySidebar.offsetRelative(this.sidebar).left;\n\n dims.viewportTop = document.documentElement.scrollTop || document.body.scrollTop;\n dims.viewportBottom = dims.viewportTop + dims.viewportHeight;\n dims.viewportLeft = document.documentElement.scrollLeft || document.body.scrollLeft;\n\n dims.topSpacing = this.options.topSpacing;\n dims.bottomSpacing = this.options.bottomSpacing;\n\n if ('function' === typeof dims.topSpacing) dims.topSpacing = parseInt(dims.topSpacing(this.sidebar)) || 0;\n\n if ('function' === typeof dims.bottomSpacing) dims.bottomSpacing = parseInt(dims.bottomSpacing(this.sidebar)) || 0;\n\n if ('VIEWPORT-TOP' === this.affixedType) {\n // Adjust translate Y in the case decrease top spacing value.\n if (dims.topSpacing < dims.lastTopSpacing) {\n dims.translateY += dims.lastTopSpacing - dims.topSpacing;\n this._reStyle = true;\n }\n } else if ('VIEWPORT-BOTTOM' === this.affixedType) {\n // Adjust translate Y in the case decrease bottom spacing value.\n if (dims.bottomSpacing < dims.lastBottomSpacing) {\n dims.translateY += dims.lastBottomSpacing - dims.bottomSpacing;\n this._reStyle = true;\n }\n }\n\n dims.lastTopSpacing = dims.topSpacing;\n dims.lastBottomSpacing = dims.bottomSpacing;\n }\n\n /**\r\n * Determine whether the sidebar is bigger than viewport.\r\n * @public\r\n * @return {Boolean}\r\n */\n\n }, {\n key: 'isSidebarFitsViewport',\n value: function isSidebarFitsViewport() {\n return this.dimensions.sidebarHeight < this.dimensions.viewportHeight;\n }\n\n /**\r\n * Observe browser scrolling direction top and down.\r\n */\n\n }, {\n key: 'observeScrollDir',\n value: function observeScrollDir() {\n var dims = this.dimensions;\n if (dims.lastViewportTop === dims.viewportTop) return;\n\n var furthest = 'down' === this.direction ? Math.min : Math.max;\n\n // If the browser is scrolling not in the same direction.\n if (dims.viewportTop === furthest(dims.viewportTop, dims.lastViewportTop)) this.direction = 'down' === this.direction ? 'up' : 'down';\n }\n\n /**\r\n * Gets affix type of sidebar according to current scrollTop and scrollLeft.\r\n * Holds all logical affix of the sidebar when scrolling up and down and when sidebar \r\n * is bigger than viewport and vice versa.\r\n * @public\r\n * @return {String|False} - Proper affix type.\r\n */\n\n }, {\n key: 'getAffixType',\n value: function getAffixType() {\n var dims = this.dimensions,\n affixType = false;\n\n this._calcDimensionsWithScroll();\n\n var sidebarBottom = dims.sidebarHeight + dims.containerTop;\n var colliderTop = dims.viewportTop + dims.topSpacing;\n var colliderBottom = dims.viewportBottom - dims.bottomSpacing;\n\n // When browser is scrolling top.\n if ('up' === this.direction) {\n if (colliderTop <= dims.containerTop) {\n dims.translateY = 0;\n affixType = 'STATIC';\n } else if (colliderTop <= dims.translateY + dims.containerTop) {\n dims.translateY = colliderTop - dims.containerTop;\n affixType = 'VIEWPORT-TOP';\n } else if (!this.isSidebarFitsViewport() && dims.containerTop <= colliderTop) {\n affixType = 'VIEWPORT-UNBOTTOM';\n }\n // When browser is scrolling up.\n } else {\n // When sidebar element is not bigger than screen viewport.\n if (this.isSidebarFitsViewport()) {\n\n if (dims.sidebarHeight + colliderTop >= dims.containerBottom) {\n dims.translateY = dims.containerBottom - sidebarBottom;\n affixType = 'CONTAINER-BOTTOM';\n } else if (colliderTop >= dims.containerTop) {\n dims.translateY = colliderTop - dims.containerTop;\n affixType = 'VIEWPORT-TOP';\n }\n // When sidebar element is bigger than screen viewport.\n } else {\n\n if (dims.containerBottom <= colliderBottom) {\n dims.translateY = dims.containerBottom - sidebarBottom;\n affixType = 'CONTAINER-BOTTOM';\n } else if (sidebarBottom + dims.translateY <= colliderBottom) {\n dims.translateY = colliderBottom - sidebarBottom;\n affixType = 'VIEWPORT-BOTTOM';\n } else if (dims.containerTop + dims.translateY <= colliderTop) {\n affixType = 'VIEWPORT-UNBOTTOM';\n }\n }\n }\n\n // Make sure the translate Y is not bigger than container height.\n dims.translateY = Math.max(0, dims.translateY);\n dims.translateY = Math.min(dims.containerHeight, dims.translateY);\n\n dims.lastViewportTop = dims.viewportTop;\n return affixType;\n }\n\n /**\r\n * Gets inline style of sticky sidebar wrapper and inner wrapper according \r\n * to its affix type.\r\n * @private\r\n * @param {String} affixType - Affix type of sticky sidebar.\r\n * @return {Object}\r\n */\n\n }, {\n key: '_getStyle',\n value: function _getStyle(affixType) {\n if ('undefined' === typeof affixType) return;\n\n var style = { inner: {}, outer: {} };\n var dims = this.dimensions;\n\n switch (affixType) {\n case 'VIEWPORT-TOP':\n style.inner = { position: 'fixed', top: dims.topSpacing,\n left: dims.sidebarLeft - dims.viewportLeft, width: dims.sidebarWidth };\n break;\n case 'VIEWPORT-BOTTOM':\n style.inner = { position: 'fixed', top: 'auto', left: dims.sidebarLeft,\n bottom: dims.bottomSpacing, width: dims.sidebarWidth };\n break;\n case 'CONTAINER-BOTTOM':\n case 'VIEWPORT-UNBOTTOM':\n var translate = this._getTranslate(0, dims.translateY + 'px');\n\n if (translate) style.inner = { transform: translate };else style.inner = { position: 'absolute', top: dims.translateY, width: dims.sidebarWidth };\n break;\n }\n\n switch (affixType) {\n case 'VIEWPORT-TOP':\n case 'VIEWPORT-BOTTOM':\n case 'VIEWPORT-UNBOTTOM':\n case 'CONTAINER-BOTTOM':\n style.outer = { height: dims.sidebarHeight, position: 'relative' };\n break;\n }\n\n style.outer = StickySidebar.extend({ height: '', position: '' }, style.outer);\n style.inner = StickySidebar.extend({ position: 'relative', top: '', left: '',\n bottom: '', width: '', transform: this._getTranslate() }, style.inner);\n\n return style;\n }\n\n /**\r\n * Cause the sidebar to be sticky according to affix type by adding inline\r\n * style, adding helper class and trigger events.\r\n * @function\r\n * @protected\r\n * @param {string} force - Update sticky sidebar position by force.\r\n */\n\n }, {\n key: 'stickyPosition',\n value: function stickyPosition(force) {\n if (this._breakpoint) return;\n\n force = this._reStyle || force || false;\n\n var affixType = this.getAffixType();\n var style = this._getStyle(affixType);\n\n if ((this.affixedType != affixType || force) && affixType) {\n var affixEvent = 'affix.' + affixType.toLowerCase().replace('viewport-', '') + EVENT_KEY;\n StickySidebar.eventTrigger(this.sidebar, affixEvent);\n\n if ('STATIC' === affixType) StickySidebar.removeClass(this.sidebar, this.options.stickyClass);else StickySidebar.addClass(this.sidebar, this.options.stickyClass);\n\n for (var key in style.outer) {\n this.sidebar.style[key] = style.outer[key];\n }\n\n for (var _key in style.inner) {\n var _unit2 = 'number' === typeof style.inner[_key] ? 'px' : '';\n this.sidebarInner.style[_key] = style.inner[_key] + _unit2;\n }\n\n var affixedEvent = 'affixed.' + affixType.toLowerCase().replace('viewport-', '') + EVENT_KEY;\n StickySidebar.eventTrigger(this.sidebar, affixedEvent);\n } else {\n if (this._initialized) this.sidebarInner.style.left = style.inner.left;\n }\n\n this.affixedType = affixType;\n }\n\n /**\r\n * Breakdown sticky sidebar when window width is below `options.minWidth` value.\r\n * @protected\r\n */\n\n }, {\n key: '_widthBreakpoint',\n value: function _widthBreakpoint() {\n\n if (window.innerWidth <= this.options.minWidth) {\n this._breakpoint = true;\n this.affixedType = 'STATIC';\n\n this.sidebar.removeAttribute('style');\n StickySidebar.removeClass(this.sidebar, this.options.stickyClass);\n this.sidebarInner.removeAttribute('style');\n } else {\n this._breakpoint = false;\n }\n }\n\n /**\r\n * Switches between functions stack for each event type, if there's no \r\n * event, it will re-initialize sticky sidebar.\r\n * @public\r\n */\n\n }, {\n key: 'updateSticky',\n value: function updateSticky() {\n var _this3 = this;\n\n var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (this._running) return;\n this._running = true;\n\n (function (eventType) {\n\n requestAnimationFrame(function () {\n switch (eventType) {\n // When browser is scrolling and re-calculate just dimensions\n // within scroll. \n case 'scroll':\n _this3._calcDimensionsWithScroll();\n _this3.observeScrollDir();\n _this3.stickyPosition();\n break;\n\n // When browser is resizing or there's no event, observe width\n // breakpoint and re-calculate dimensions.\n case 'resize':\n default:\n _this3._widthBreakpoint();\n _this3.calcDimensions();\n _this3.stickyPosition(true);\n break;\n }\n _this3._running = false;\n });\n })(event.type);\n }\n\n /**\r\n * Set browser support features to the public property.\r\n * @private\r\n */\n\n }, {\n key: '_setSupportFeatures',\n value: function _setSupportFeatures() {\n var support = this.support;\n\n support.transform = StickySidebar.supportTransform();\n support.transform3d = StickySidebar.supportTransform(true);\n }\n\n /**\r\n * Get translate value, if the browser supports transfrom3d, it will adopt it.\r\n * and the same with translate. if browser doesn't support both return false.\r\n * @param {Number} y - Value of Y-axis.\r\n * @param {Number} x - Value of X-axis.\r\n * @param {Number} z - Value of Z-axis.\r\n * @return {String|False}\r\n */\n\n }, {\n key: '_getTranslate',\n value: function _getTranslate() {\n var y = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var x = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var z = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n\n if (this.support.transform3d) return 'translate3d(' + y + ', ' + x + ', ' + z + ')';else if (this.support.translate) return 'translate(' + y + ', ' + x + ')';else return false;\n }\n\n /**\r\n * Destroy sticky sidebar plugin.\r\n * @public\r\n */\n\n }, {\n key: 'destroy',\n value: function destroy() {\n window.removeEventListener('resize', this, { caption: false });\n window.removeEventListener('scroll', this, { caption: false });\n\n this.sidebar.classList.remove(this.options.stickyClass);\n this.sidebar.style.minHeight = '';\n\n this.sidebar.removeEventListener('update' + EVENT_KEY, this);\n\n var styleReset = { inner: {}, outer: {} };\n\n styleReset.inner = { position: '', top: '', left: '', bottom: '', width: '', transform: '' };\n styleReset.outer = { height: '', position: '' };\n\n for (var key in styleReset.outer) {\n this.sidebar.style[key] = styleReset.outer[key];\n }for (var _key2 in styleReset.inner) {\n this.sidebarInner.style[_key2] = styleReset.inner[_key2];\n }if (this.options.resizeSensor && 'undefined' !== typeof ResizeSensor) {\n ResizeSensor.detach(this.sidebarInner, this.handleEvent);\n ResizeSensor.detach(this.container, this.handleEvent);\n }\n }\n\n /**\r\n * Determine if the browser supports CSS transform feature.\r\n * @function\r\n * @static\r\n * @param {Boolean} transform3d - Detect transform with translate3d.\r\n * @return {String}\r\n */\n\n }], [{\n key: 'supportTransform',\n value: function supportTransform(transform3d) {\n var result = false,\n property = transform3d ? 'perspective' : 'transform',\n upper = property.charAt(0).toUpperCase() + property.slice(1),\n prefixes = ['Webkit', 'Moz', 'O', 'ms'],\n support = document.createElement('support'),\n style = support.style;\n\n (property + ' ' + prefixes.join(upper + ' ') + upper).split(' ').forEach(function (property, i) {\n if (style[property] !== undefined) {\n result = property;\n return false;\n }\n });\n return result;\n }\n\n /**\r\n * Trigger custom event.\r\n * @static\r\n * @param {DOMObject} element - Target element on the DOM.\r\n * @param {String} eventName - Event name.\r\n * @param {Object} data - \r\n */\n\n }, {\n key: 'eventTrigger',\n value: function eventTrigger(element, eventName, data) {\n try {\n var event = new CustomEvent(eventName, { detail: data });\n } catch (e) {\n var event = document.createEvent('CustomEvent');\n event.initCustomEvent(eventName, true, true, data);\n }\n element.dispatchEvent(event);\n }\n\n /**\r\n * Extend options object with defaults.\r\n * @function\r\n * @static\r\n */\n\n }, {\n key: 'extend',\n value: function extend(defaults, options) {\n var results = {};\n for (var key in defaults) {\n if ('undefined' !== typeof options[key]) results[key] = options[key];else results[key] = defaults[key];\n }\n return results;\n }\n\n /**\r\n * Get current coordinates left and top of specific element.\r\n * @static\r\n */\n\n }, {\n key: 'offsetRelative',\n value: function offsetRelative(element) {\n var result = { left: 0, top: 0 };\n\n do {\n var offsetTop = element.offsetTop;\n var offsetLeft = element.offsetLeft;\n\n if (!isNaN(offsetTop)) result.top += offsetTop;\n\n if (!isNaN(offsetLeft)) result.left += offsetLeft;\n\n element = 'BODY' === element.tagName ? element.parentElement : element.offsetParent;\n } while (element);\n return result;\n }\n\n /**\r\n * Add specific class name to specific element.\r\n * @static \r\n * @param {ObjectDOM} element \r\n * @param {String} className \r\n */\n\n }, {\n key: 'addClass',\n value: function addClass(element, className) {\n if (!StickySidebar.hasClass(element, className)) {\n if (element.classList) element.classList.add(className);else element.className += ' ' + className;\n }\n }\n\n /**\r\n * Remove specific class name to specific element\r\n * @static\r\n * @param {ObjectDOM} element \r\n * @param {String} className \r\n */\n\n }, {\n key: 'removeClass',\n value: function removeClass(element, className) {\n if (StickySidebar.hasClass(element, className)) {\n if (element.classList) element.classList.remove(className);else element.className = element.className.replace(new RegExp('(^|\\\\b)' + className.split(' ').join('|') + '(\\\\b|$)', 'gi'), ' ');\n }\n }\n\n /**\r\n * Determine weather the element has specific class name.\r\n * @static\r\n * @param {ObjectDOM} element \r\n * @param {String} className \r\n */\n\n }, {\n key: 'hasClass',\n value: function hasClass(element, className) {\n if (element.classList) return element.classList.contains(className);else return new RegExp('(^| )' + className + '( |$)', 'gi').test(element.className);\n }\n }]);\n\n return StickySidebar;\n }();\n\n return StickySidebar;\n}();\n\n// Global\n// -------------------------\nwindow.StickySidebar = StickySidebar;\n\nreturn StickySidebar;\n\n})));\n\n//# sourceMappingURL=sticky-sidebar.js.map\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/sticky-sidebar/dist/sticky-sidebar.js\n// module id = 52\n// module chunks = 0","/* eslint-disable no-unused-vars */\r\nimport { stokpress } from '../util/helper';\r\n// var StellarAccordion = require( '../components/accordion' );\r\n/* eslint-disable no-undef */\r\n\r\nconst Product = {};\r\n\r\nlet productSectionsContainer = document.getElementById( 'js-selected-product-sections' ),\r\n productInfoContainer = document.getElementById( 'js-selected-product-info' ),\r\n productSwitchSelector = 'js-change-product',\r\n productSizeSelector = 'js-change-size',\r\n ajaxRequestEnable = true;\r\n\r\nProduct.processChangeProduct = (el) => {\r\n let url = Product.ajaxUrl + el.dataset.id;\r\n\r\n if (Product.currentLang) {\r\n url = url + '?lang=' + Product.currentLang;\r\n }\r\n\r\n Product.processRequest( 'GET', url, el.dataset.url );\r\n}\r\n\r\nProduct.processRequest = (action, url, targetUrl) => {\r\n\r\n // To avoid double send of ajax request\r\n if( !ajaxRequestEnable ) {\r\n return;\r\n }\r\n\r\n let xhr = new XMLHttpRequest();\r\n\r\n ajaxRequestEnable = false;\r\n\r\n\txhr.onreadystatechange = function () {\r\n\t\tif ( xhr.readyState !== XMLHttpRequest.DONE ) { return; }\r\n\r\n\t\tif ( xhr.status === 200 ) {\r\n\t\t\ttry {\r\n let data = JSON.parse( xhr.response );\r\n\r\n Product.outputResult( data, targetUrl );\r\n ajaxRequestEnable = true;\r\n\t\t\t}\r\n\t\t\tcatch ( err ) {\r\n console.log( err );\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t};\r\n\r\n xhr.open( action, url, true );\r\n xhr.setRequestHeader( 'X-Requested-With', 'XMLHttpRequest' );\r\n xhr.send();\r\n}\r\n\r\nProduct.outputResult = (data, targetUrl) => {\r\n if( !data.product ) {\r\n return;\r\n }\r\n\r\n window.history.pushState( data, '', targetUrl );\r\n Product.updateHtml( data );\r\n}\r\n\r\nProduct.updateHtml = (data) => {\r\n productInfoContainer.innerHTML = data.product.info;\r\n productSectionsContainer.innerHTML = data.product.sections;\r\n\r\n if (data.product.current_color.name) {\r\n $( 'title' ).html( data.product.current_color.name );\r\n }\r\n \r\n Product.init( true );\r\n}\r\n\r\nProduct.changeProduct = (items) => {\r\n if (!items) {\r\n return;\r\n }\r\n\r\n Array.prototype.forEach.call( items, function (item) {\r\n\t\titem.addEventListener( 'change', function ( event ) {\r\n window.location.href = event.target.parentElement.dataset.url;\r\n\t\t});\r\n\t} );\r\n}\r\n\r\nProduct.changeSize = (items) => {\r\n if (!items) {\r\n return;\r\n }\r\n\r\n Array.prototype.forEach.call( items, function (item) {\r\n\t\titem.addEventListener( 'change', function () {\r\n let input = this.querySelector('input:checked'),\r\n parent = stokpress.findAncestor( input, 'js-dropdown' ),\r\n button = parent ? parent.querySelector( '.js-selected-label' ) : null;\r\n \r\n if (button) {\r\n const itemLabel = input.parentNode.querySelector( '.js-item-label' );\r\n button.innerHTML = itemLabel ? itemLabel.innerHTML : button.dataset.default_label;\r\n }\r\n\t\t});\r\n\t} );\r\n}\r\n\r\nProduct.init = (reinit) => {\r\n if (!productInfoContainer || !productSectionsContainer) {\r\n return;\r\n }\r\n\r\n Product.ajaxUrl = productInfoContainer.dataset.url;\r\n Product.currentLang = productInfoContainer.dataset.lang;\r\n Product.changeProduct( productInfoContainer.getElementsByClassName(productSwitchSelector) );\r\n Product.changeSize( productInfoContainer.getElementsByClassName(productSizeSelector) );\r\n\r\n if ( reinit ) {\r\n $('.js-plus-item').plusItem();\r\n window.lazyLoadInstance.update();\r\n window.BackgroundSwicher.refresh();\r\n window.ProductSelectedSlider.init();\r\n window.TrustbarSlider.init(); \r\n window.ProductSlider.init();\r\n window.FeatureSlider.init();\r\n window.Video.init();\r\n window.Cart.init();\r\n }\r\n}\r\n\r\nProduct.init(false);\r\nif ( typeof history.pushState !== 'undefined' ) {\r\n if ( Product.productColors ) {\r\n\r\n let initialColorData = {};\r\n initialColorData.product = {};\r\n initialColorData.product.info = productInfoContainer.innerHTML;\r\n initialColorData.product.sections = productSectionsContainer.innerHTML;\r\n\r\n window.history.replaceState( initialColorData, '', location.pathname );\r\n }\r\n\r\n window.addEventListener( 'popstate', function ( e ) {\r\n let data = e.state;\r\n\r\n if ( data && typeof data === 'object' ) {\r\n\r\n setTimeout( function(){\r\n Product.updateHtml( data );\r\n }, 500 );\r\n } else {\r\n // Product not loaded\r\n }\r\n } );\r\n}\r\nwindow.Product = Product;\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/product.js","/* eslint-disable no-unused-vars */\r\n\r\nimport { stokpress, stokpressViewPort } from '../util/helper';\r\n/* eslint-disable no-undef */\r\n\r\nvar Cart = {};\r\n\r\n( function ( $ ) {\r\n\tvar cartForm = '.js-selectProductSingle';\r\n\tvar navCart = '.js-cart-overlay';\r\n\tvar removeItem = '.js-cart-remove-item';\r\n\tvar cartItemCount = $( '.js-item-count' );\r\n\tvar cartItems = $( '.js-cart-items' );\r\n\tvar formButtonSelector = 'button[type=\"submit\"]';\r\n\tvar buttonText = '.js-button-text';\r\n\tvar singlePageScope = $( 'body.single' );\r\n\tvar cartAjaxRequestEnable = true;\r\n\r\n\tCart.ajaxCall = function ( type, data, url, button ) {\r\n\t\t// To avoid double send of ajax request\r\n\t\tif ( !cartAjaxRequestEnable ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t$.ajax( {\r\n\t\t\turl: url,\r\n\t\t\tdata: data,\r\n\t\t\ttype: type,\r\n\t\t\tdataType: 'json',\r\n\t\t\tbeforeSend: function () {\r\n\t\t\t\tcartAjaxRequestEnable = false;\r\n\r\n\t\t\t\tif ( button && button.length > 0 ) {\r\n\t\t\t\t\tbutton.attr( 'disabled', 'disabled' );\r\n\t\t\t\t\tbutton.addClass( 'is-loading' );\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tsuccess: function ( result ) {\r\n\r\n\t\t\t\t// Update cart item count\r\n\t\t\t\tif ( cartItemCount ) {\r\n\t\t\t\t\tcartItemCount.each( function () {\r\n\t\t\t\t\t\t$( this ).text( result.totalItems );\r\n\r\n\t\t\t\t\t\t// Hide / Show Cart count\r\n\t\t\t\t\t\tif ( !result.totalItems ) {\r\n\t\t\t\t\t\t\t$( this ).addClass( 'd-none' );\r\n\t\t\t\t\t\t\tcartItems.addClass( 'no-item' );\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t$( this ).removeClass( 'd-none' );\r\n\t\t\t\t\t\t\tcartItems.removeClass( 'no-item' );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( result.basket ) {\r\n\t\t\t\t\tcartItems.html( result.basket );\r\n\t\t\t\t\tCart.toggleCart( 'open' );\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tcomplete: function () {\r\n\t\t\t\tsetTimeout( function () {\r\n\t\t\t\t\tCart.toggleCart( 'close' );\r\n\r\n\t\t\t\t\tif ( button && button.length > 0 ) {\r\n\t\t\t\t\t\tbutton.removeAttr( 'disabled' );\r\n\t\t\t\t\t\tbutton.removeClass( 'is-loading' );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcartAjaxRequestEnable = true;\r\n\t\t\t\t}, 1500 );\r\n\r\n\t\t\t\t// Re initialize element events\r\n\t\t\t\tCart.init();\r\n\t\t\t},\r\n\t\t\terror: function ( request ) {\r\n\t\t\t\tconsole.debug( request );\r\n\t\t\t},\r\n\t\t} );\r\n\t};\r\n\r\n\tCart.toggleCart = function ( action ) {\r\n\t\tvar cartContainer = $( navCart );\r\n\t\tvar body = $( 'body' );\r\n\r\n\t\tif ( !cartContainer ) { return; }\r\n\r\n\t\tif ( action === 'open' ) {\r\n\r\n\t\t\tcartContainer.addClass( 'is-open' );\r\n\t\t\tbody.addClass( 'cart-overlay' );\r\n\t\t\twindow.CartSlider.init();\r\n\r\n\t\t} else if ( action === 'close' ) {\r\n\r\n\t\t\tcartContainer.removeClass( 'is-open' );\r\n\t\t\tbody.removeClass( 'cart-overlay' );\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tCart.add = function ( _this ) {\r\n\t\tvar buttonEl = _this.find( formButtonSelector );\r\n\r\n\t\tif ( _this.find( 'input[name=\"esc_product_item\"]:checked' ).length > 0 || _this.find( 'select[name=\"esc_product_item\"]' ).val() ) {\r\n\t\t\tvar data = _this.serialize();\r\n\r\n\t\t\tCart.ajaxCall( 'POST', data, null, buttonEl );\r\n\r\n\t\t} else {\r\n\t\t\t// Display error in button\r\n\t\t\tCart.updateButtonText( 'error', buttonEl );\r\n\r\n\t\t\tvar isMobile = stokpress.isMobile() || stokpressViewPort.documentWidth().width < 720;\r\n\t\t\tvar navHeight = $( 'nav' ).height();\r\n\t\t\tvar scrollToPos = 0;\r\n\r\n\t\t\t// Scroll to sizes\r\n\t\t\tif ( isMobile ) {\r\n\t\t\t\tscrollToPos = Math.abs( document.documentElement.clientHeight - buttonEl.offset().top - ( buttonEl.height() + navHeight ) );\r\n\t\t\t}\r\n\r\n\t\t\t// Scroll to size error if current page is single page\r\n\t\t\tif ( singlePageScope.length ) {\r\n\t\t\t\t$( 'html, body' ).animate( {\r\n\t\t\t\t\tscrollTop: scrollToPos,\r\n\t\t\t\t}, 1000 );\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tCart.updateButtonText = function ( dataAttr, buttonEl ) {\r\n\t\tif ( !buttonEl ) { return; }\r\n\r\n\t\tvar textVal = buttonEl.data( dataAttr );\r\n\t\tvar buttonTextEl = buttonEl.find( buttonText );\r\n\r\n\t\tif ( buttonTextEl ) {\r\n\t\t\tbuttonTextEl.text( textVal );\r\n\t\t}\r\n\t};\r\n\r\n\tCart.init = function () {\r\n\r\n\t\t// Add to bag\r\n\t\t$( document ).find( cartForm ).off( 'submit' ).on( 'submit', function ( e ) {\r\n\t\t\te.preventDefault();\r\n\t\t\tCart.add( $( this ) );\r\n\t\t} );\r\n\r\n\t\t// Remove product\r\n\t\t$( document ).find( removeItem ).off( 'click' ).on( 'click', function ( e ) {\r\n\t\t\te.preventDefault();\r\n\t\t\tvar _this = $( this );\r\n\t\t\t_this.parents( 'li.item' ).addClass( 'is-processing' );\r\n\t\t\tCart.ajaxCall( 'GET', null, _this.attr( 'href' ), null );\r\n\t\t} );\r\n\r\n\t\t// Has size selected\r\n\t\t$( document ).find( 'input[name=\"esc_product_item\"], select[name=\"esc_product_item\"]' ).off( 'change' ).on( 'change', function ( e ) {\r\n\t\t\te.preventDefault();\r\n\t\t\tCart.updateButtonText( 'text', $( cartForm ).find( formButtonSelector ) );\r\n\t\t} );\r\n\r\n\t};\r\n\r\n\tCart.init();\r\n\r\n} )( jQuery );\r\n\r\nwindow.Cart = Cart;\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/cart.js","let Search = {};\r\n\r\nSearch.init = function() {\r\n let searchOpen = $('.js-search-open');\r\n let searchClose = $('.js-search-close');\r\n\tlet searchForm = $('.js-search-form');\r\n\tlet searchInput = $('#js-search-input');\r\n\r\n searchOpen.on( 'click', function() {\r\n searchForm.addClass('show');\r\n\t$('body').addClass('search-active');\r\n\t$('.navbar-collapse').collapse('hide');\r\n\r\n let targetEl = $( $(this).data('focus') );\r\n\r\n if (targetEl) {\r\n targetEl.focus();\r\n\t}\r\n });\r\n\r\n searchClose.click( function() {\r\n searchForm.removeClass('show');\r\n\t\t$('body').removeClass('search-active');\r\n\t\tsearchInput.val('')\r\n });\r\n}\r\n\r\nSearch.init();\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/search.js","import Swiper, {Scrollbar} from '../../../../node_modules/swiper/swiper-bundle';\r\n\r\n( function ( $ ) {\r\n\tvar Checkout = {};\r\n\r\n\tvar editProduct = '.js-edit-item';\r\n\tvar cartContainer = $( document ).find( '#js-selectedItems' );\r\n\tvar selectedItemsContainer = $( document ).find( '#js-selectedItems--selection' );\r\n\tvar selectedTotalsContainer = $( document ).find( '#js-selectedTotals' );\r\n\tvar voucherContainer = $( document ).find( '#js-selectedVoucher' );\r\n\tvar paymentMethodContainer = $( document ).find( '#js-selectedPaymentMethod' );\r\n\tvar newsletterContainer = $( document ).find( '#js-selectedNewsletter' );\r\n\tvar giftContainer = $( document ).find( '#js-selectedGiftwrap' );\r\n\tvar paymentFieldsContainer = $( document ).find( '#js-paymentFields' );\r\n\tvar commentContainer = $( document ).find( '#js-selectedComment' );\r\n\tvar shippingMethodContainer = $( document ).find( '#js-selectedShippingMethod' );\r\n\tvar scope = $( document ).find( '#js-checkout-content' );\r\n\tvar totalDesktop = $( document ).find( '#js-checkout-sidebar' );\r\n\tvar totalMobile = $( document ).find( '#js-checkout-sidebar-mobile' );\r\n\tvar isDesktop;\r\n\tlet hideWhenNoZipFields = $( '.js-hidden-nozip' );\r\n\tvar $upsalesContainer = $( '#js-upsale-products' );\r\n\tvar $bundlesContainer = $( '#js-bundle-products' );\r\n\r\n\tCheckout.init = function () {\r\n\t\tisDesktop = true;\r\n\t\tCheckout.moveTotalSummaryContent();\r\n\t\tCheckout.initUpsales();\r\n\t\tCheckout.initBundles();\r\n\r\n\t\t// Payment form submit\r\n\t\tvar checkoutFormPurchase = $( document ).find( '.template-checkout #esc_purchase' );\r\n\t\tif ( checkoutFormPurchase ) {\r\n\t\t\tcheckoutFormPurchase.off( 'submit' ).on( 'submit', function () {\r\n\t\t\t\tvar hasError = Checkout.processPaymentFormValidation();\r\n\r\n\t\t\t\tif ( hasError === false ) {\r\n\t\t\t\t\treturn hasError;\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\t// Payment form input fields\r\n\t\tvar checkoutFormFields = paymentFieldsContainer.find( 'input' );\r\n\t\tif ( checkoutFormFields ) {\r\n\t\t\tcheckoutFormFields.off( 'focus' ).on( 'focus', function () {\r\n\t\t\t\t$( this ).removeClass( 'is-invalid' );\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\t// Voucher\r\n\t\tvar voucherField = $( document ).find( '#js-selectedVoucher #voucher' );\r\n\t\tif ( voucherField ) {\r\n\t\t\tvoucherField.off( 'keydown' ).on( 'keydown', function ( e ) {\r\n\t\t\t\tif ( e.keyCode !== 13 ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tCheckout.voucherProcess( $( this ).parent().next() );\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\tvar voucherButton = $( document ).find( '#js-selectedVoucher .js-voucher-button' );\r\n\t\tif ( voucherButton ) {\r\n\t\t\tvoucherButton.off( 'click' ).on( 'click', function ( e ) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tCheckout.voucherProcess( $( this ) );\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\t// Newsletter\r\n\t\tif ( newsletterContainer.find( ':checkbox' ) ) {\r\n\t\t\tnewsletterContainer.find( ':checkbox' ).off( 'change' ).on( 'change', function ( e ) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tCheckout.processNewsletter( 'click' );\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\t// Gift\r\n\t\tif ( giftContainer.find( ':checkbox' ) ) {\r\n\t\t\tgiftContainer.find( ':checkbox' ).off( 'change' ).on( 'change', function ( e ) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tCheckout.processComment( 'click' );\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\t// Comment\r\n\t\tif ( commentContainer.find( 'textarea' ) ) {\r\n\t\t\tcommentContainer.find( 'textarea' ).off( 'blur' ).on( 'blur', function ( e ) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tCheckout.processComment( 'click' );\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\t// Payment Method\r\n\t\tvar paymentOptions = $( document ).find( '#js-selectedPaymentMethod :radio' );\r\n\t\tif ( paymentOptions ) {\r\n\t\t\tpaymentOptions.off( 'change' ).on( 'change', function ( e ) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tCheckout.processPaymentMethod( paymentMethodContainer );\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\t// Shipping Method\r\n\t\tvar shippingOptions = $( document ).find( '#js-selectedShippingMethod :radio' );\r\n\t\tif ( shippingOptions ) {\r\n\t\t\tshippingOptions.off( 'change' ).on( 'change', function ( e ) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tCheckout.processShippingMethod( shippingMethodContainer );\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\t// Country\r\n\t\tvar countryOptions = $( document ).find( '#js-selectedCountry .js-country-item' );\r\n\t\tif ( countryOptions ) {\r\n\t\t\tcountryOptions.off( 'click' ).on( 'click', function ( e ) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tCheckout.countryChangeProcess( this.dataset.code, '', false );\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\t// State\r\n\t\tvar stateOptions = $( document ).find( '#js-selectedState .js-state-item' );\r\n\t\tif ( stateOptions ) {\r\n\t\t\tstateOptions.off( 'click' ).on( 'click', function ( e ) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tCheckout.countryChangeProcess( $( document ).find( '#js-selectedCountry .js-country-item.active' )[0].dataset.code, this.dataset.code, false );\r\n\t\t\t} );\r\n\t\t}\r\n\r\n var paymentOptionItems = $(document).find('input[type=radio][name=paymentCheckout]');\r\n paymentOptionItems.off( 'change' ).on( 'change', function () {\r\n\t\t\t$('.js-payment-item').removeClass('is-selected');\r\n\t\t\tif ( $(this).is(':checked')) {\r\n\t\t\t\t$(this).closest('.js-payment-item').addClass('is-selected');\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Check if zip code field was clears\r\n\t\tCheckout.hasZipCode();\r\n\r\n\t\t// Make sure there's a selected default shipping method\r\n\t\tlet selectedShippingMethod = shippingMethodContainer.find( 'input[name=\"shippingMethod\"]:checked' );\r\n\r\n\t\tif ( selectedShippingMethod.length === 0 ) {\r\n\t\t\tshippingMethodContainer.find( 'input[name=\"shippingMethod\"]:first' ).prop( 'checked', true ).trigger( 'change' );\r\n\t\t}\r\n\r\n\t\t// Catch Klarna form updates\r\n\t\tlet interval = setInterval( () => {\r\n\t\t\tconsole.log( 'waiting for window._klarnaCheckout...' );\r\n\r\n\t\t\tif ( typeof window._klarnaCheckout === 'undefined' ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tclearInterval( interval );\r\n\r\n\t\t\twindow._klarnaCheckout( function ( api ) {\r\n\t\t\t\tapi.on( {\r\n\t\t\t\t\t'shipping_address_change': function ( data ) {\r\n\t\t\t\t\t\tconsole.log( 'shipping_address_change', data );\r\n\r\n\t\t\t\t\t\tlet zipCode = ( data.hasOwnProperty( 'postal_code' ) && data.postal_code ) ? data.postal_code : null;\r\n\r\n\t\t\t\t\t\tif ( zipCode ) {\r\n\t\t\t\t\t\t\t$( '#js-zip-code' ).val( zipCode ).trigger( 'change' );\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif ( data.hasOwnProperty( 'email' ) && data.email ) {\r\n\t\t\t\t\t\t\t$.ajax( {\r\n\t\t\t\t\t\t\t\turl: '/wp-admin/admin-ajax.php',\r\n\t\t\t\t\t\t\t\tdataType: 'JSON',\r\n\t\t\t\t\t\t\t\ttype: 'POST',\r\n\t\t\t\t\t\t\t\tdata: {\r\n\t\t\t\t\t\t\t\t\taction: 'update_cart_abandonment',\r\n\t\t\t\t\t\t\t\t\temail: data.email,\r\n\t\t\t\t\t\t\t\t\tzip_code: zipCode,\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\terror: function ( request ) {\r\n\t\t\t\t\t\t\t\t\tconsole.debug( request );\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t} );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t} );\r\n\t\t\t} );\r\n\t\t}, 1000 );\r\n\t};\r\n\r\n\tCheckout.initUpsales = function () {\r\n\t\tvar $upsales = selectedItemsContainer.find( 'template#js-upsale-products-template' );\r\n\t\tvar $upsalesTimeline = $('#js-upsale-timeline');\r\n\r\n\t\tif ( $upsales.length === 0 ) {\r\n\t\t\t$upsalesContainer.hide();\r\n\t\t\tif ($upsalesTimeline.length) $upsalesTimeline.hide();\r\n\t\t} else {\r\n\t\t\tif ($upsalesTimeline.length) $upsalesTimeline.show();\r\n\t\t\t$upsalesContainer.show()\r\n\t\t\t\t.find( '.js-product-thumb-list' )\r\n\t\t\t\t.html( $upsales.html() );\r\n\r\n const upsellSlider = document.querySelector('.js-upsell-slider');\r\n if (!upsellSlider) return;\r\n\r\n Swiper.use([Scrollbar]);\r\n new Swiper('.js-upsell-slider', {\r\n loop: false,\r\n slidesPerView: 'auto',\r\n scrollbar: {\r\n el: '.swiper-scrollbar',\r\n draggable: true,\r\n },\r\n });\r\n\t\t}\r\n\t};\r\n\r\n\tCheckout.initBundles = function () {\r\n\t\tvar $bundles = selectedItemsContainer.find( 'template#js-bundle-products-template' );\r\n\r\n\t\tif ( $bundles.length === 0 ) {\r\n\t\t\t$bundlesContainer.hide();\r\n\t\t} else {\r\n\t\t\t$bundlesContainer\r\n\t\t\t\t.show()\r\n\t\t\t\t.html( $bundles.html() );\r\n\t\t}\r\n\t};\r\n\r\n\tCheckout.moveTotalSummaryContent = function () {\r\n\t\tif ( !totalDesktop || !totalMobile ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar currentIsDesktop = matchMedia( 'screen and (min-width: 1024px)' ).matches;\r\n\t\tvar appendContent = function ( from, to ) {\r\n\t\t\tvar content = from.children();\r\n\r\n\t\t\tif ( content ) {\r\n\t\t\t\tcontent.detach().appendTo( to );\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tif ( isDesktop !== currentIsDesktop ) {\r\n\t\t\tif ( currentIsDesktop ) {\r\n\t\t\t\tappendContent( totalMobile, totalDesktop );\r\n\t\t\t} else {\r\n\t\t\t\tappendContent( totalDesktop, totalMobile );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tisDesktop = currentIsDesktop;\r\n\t};\r\n\r\n\tCheckout.updateHtml = function ( data ) {\r\n\t\tconsole.log( 'reinit payments' );\r\n\r\n\t\tif ( data.totalItems === 0 ) {\r\n\t\t\twindow.location.href = location.pathname;\r\n\t\t} else {\r\n\t\t\tpaymentMethodContainer.html( data.paymentOptions );\r\n\t\t\tshippingMethodContainer.html( data.shippingOptions );\r\n\t\t\tpaymentFieldsContainer.html( data.payments );\r\n\t\t\tcartContainer.html( data.basket );\r\n\t\t\tselectedItemsContainer.html( data.items );\r\n\t\t\tselectedTotalsContainer.html( data.totals );\r\n\t\t\tvoucherContainer.html( data.voucher );\r\n\t\t\tCheckout.init();\r\n\t\t\twindow.lazyLoadInstance.update();\r\n\r\n\t\t\t// Update total price in header\r\n\t\t\t$( '#js-header-total-price' ).text( $( '.js-total-price' ).text() );\r\n\t\t}\r\n\r\n\t\tCheckout.showLoader( false );\r\n\t};\r\n\r\n\tCheckout.showLoader = function ( showLoader ) {\r\n\t\tvar loader = $( document ).find( '.js-loader' );\r\n\t\tvar hiddenClass = 'd-none';\r\n\r\n\t\tif ( !loader ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( showLoader ) {\r\n\t\t\tloader.removeClass( hiddenClass );\r\n\t\t} else {\r\n\t\t\tloader.addClass( hiddenClass );\r\n\t\t}\r\n\t};\r\n\r\n\tCheckout.validateEmail = function ( email ) {\r\n\t\t//eslint-disable-next-line\r\n\t\tvar re = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n\t\treturn re.test( email );\r\n\t};\r\n\r\n\tCheckout.processPaymentFormValidation = function () {\r\n\r\n\t\tvar hasError = false;\r\n\r\n\t\tvar formFields = [\r\n\t\t\t'email',\r\n\t\t\t'phoneNumber',\r\n\t\t\t'firstName',\r\n\t\t\t'lastName',\r\n\t\t\t'address1',\r\n\t\t\t'city',\r\n\t\t\t'zipCode',\r\n\t\t\t'termsAndConditions',\r\n\t\t];\r\n\r\n\t\t$.each( formFields, function ( index, field ) {\r\n\r\n\t\t\tvar formField = $( '#address_' + field + ':visible' );\r\n\r\n\t\t\tformField.removeClass( 'is-invalid' );\r\n\r\n\t\t\tif ( typeof ( formField.val() ) !== 'undefined' ) {\r\n\r\n\t\t\t\tif ( !formField.val() ) {\r\n\t\t\t\t\tformField.addClass( 'is-invalid' );\r\n\t\t\t\t\thasError = true;\r\n\t\t\t\t} else if ( field === 'email' ) {\r\n\t\t\t\t\tif ( !Checkout.validateEmail( formField.val() ) ) {\r\n\t\t\t\t\t\tformField.addClass( 'is-invalid' );\r\n\t\t\t\t\t\thasError = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if ( field === 'termsAndConditions' ) {\r\n\t\t\t\t\tif ( !formField.is( ':checked' ) ) {\r\n\t\t\t\t\t\tformField.addClass( 'is-invalid' );\r\n\t\t\t\t\t\thasError = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} );\r\n\r\n\r\n\t\tif ( hasError ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t};\r\n\r\n\tCheckout.processItems = function ( el ) {\r\n\t\tif ( !el ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t$.ajax( {\r\n\t\t\ttype: 'GET',\r\n\t\t\tdataType: 'json',\r\n\t\t\turl: el.attr( 'href' ) || el.data( 'href' ),\r\n\t\t\tbeforeSend: function () {\r\n\t\t\t\tif (el.find('span.spinner-border').length > 0) {\r\n\t\t\t\t\tel.addClass( 'is-loading' );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tel.parents( '.item' ).addClass( 'is-processing' );\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tsuccess: function ( data ) {\r\n\t\t\t\tif ( data.totalItems === 0 || data.items === '' ) {\r\n\t\t\t\t\twindow.location.href = location.pathname;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tCheckout.updateHtml( data );\r\n\t\t\t\t\tCheckout.initUpsales();\r\n\t\t\t\t\tCheckout.initBundles()\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tcomplete: () => {\r\n\t\t\t\tif (el.find('span.spinner-border').length > 0) {\r\n\t\t\t\t\tel.removeClass( 'is-loading' );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tel.parents( '.item' ).removeClass( 'is-processing' );\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\terror: function ( request ) {\r\n\t\t\t\tCheckout.showLoader( false );\r\n\t\t\t\tconsole.debug( request );\r\n\t\t\t},\r\n\t\t} );\r\n\t};\r\n\r\n\tCheckout.processPaymentMethod = function ( wrapper ) {\r\n\t\tvar paymentValue = wrapper.find( ':radio:checked' ).val();\r\n\r\n\t\tvar sendData = $( '#esc_purchase' ).serialize();\r\n\r\n\t\tsendData += '&payment_method=' + paymentValue + '&ajax=1';\r\n\r\n\t\tconsole.log( 'processPaymentMethod' );\r\n\r\n\t\t$.ajax( {\r\n\t\t\tdataType: 'JSON',\r\n\t\t\ttype: 'POST',\r\n\t\t\tdata: sendData,\r\n\t\t\tbeforeSend: function () {\r\n\t\t\t\tCheckout.showLoader( true );\r\n\t\t\t},\r\n\t\t\tsuccess: function ( data ) {\r\n\t\t\t\tCheckout.showLoader( false );\r\n\t\t\t\tCheckout.updateHtml( data );\r\n\t\t\t},\r\n\t\t\terror: function ( error ) {\r\n\t\t\t\tconsole.log( error );\r\n\t\t\t},\r\n\t\t} );\r\n\t}\r\n\r\n\t// Checkout.processPaymentMethod = function( wrapper ) {\r\n\t// \tvar paymentValue = wrapper.find( ':radio:checked' ).val();\r\n\r\n\t// console.log( 'processPaymentMethod' );\r\n\r\n\t// $.ajax( {\r\n\t// url: window.ajaxURL,\r\n\t// dataType: 'JSON',\r\n\t// data: {\r\n\t// action: 'get_payment_method_form',\r\n\t// payment_method: paymentValue,\r\n\t// },\r\n\t// beforeSend: function() {\r\n\t// Checkout.showLoader( true );\r\n\t// },\r\n\t// success: function ( result ) {\r\n\t// Checkout.showLoader( false );\r\n\t// if( result.html ) {\r\n\t// $( '#js-paymentFields' ).html( result.html );\r\n\t// } else {\r\n\t// window.location.reload();\r\n\t// }\r\n\t// },\r\n\t// error: function (request) {\r\n\t// Checkout.showLoader( false );\r\n\t// console.debug(request);\r\n\t// },\r\n\t// } );\r\n\t// }\r\n\r\n\tCheckout.voucherProcess = function ( $button ) {\r\n\t\tvar sendData = $( '#esc_purchase' ).serialize();\r\n\t\tvar buttonName = $button.attr( 'name' );\r\n\t\tvar buttonValue = encodeURIComponent( $button.attr( 'value' ) );\r\n\r\n\t\tsendData += '&' + buttonName + '=' + buttonValue + '&ajax=1';\r\n\r\n\t\t//Update all HTML\r\n\t\t$.ajax( {\r\n\t\t\tdata: sendData,\r\n\t\t\ttype: 'POST',\r\n\t\t\tdataType: 'JSON',\r\n\t\t\tbeforeSend: function () {\r\n\t\t\t\tCheckout.showLoader( true );\r\n\t\t\t},\r\n\t\t\tsuccess: function ( data ) {\r\n\t\t\t\tCheckout.updateHtml( data );\r\n\t\t\t},\r\n\t\t\terror: function ( request ) {\r\n\t\t\t\tCheckout.showLoader( false );\r\n\t\t\t\tconsole.debug( request );\r\n\t\t\t},\r\n\t\t} );\r\n\t};\r\n\r\n\tCheckout.countryChangeProcess = function ( countryCode, state, reloadPage ) {\r\n\t\tconsole.log( 'countryChangeProcess' );\r\n\r\n\t\tvar sendData = 'esc_action=esc_change_country';\r\n\r\n\t\tif ( !state ) {\r\n\t\t\tstate = '';\r\n\t\t}\r\n\r\n\t\tsendData += '&esc_country=' + countryCode + '&ajax=1';\r\n\t\tsendData += '&address[state]=' + state;\r\n\r\n\t\t//Update all HTML\r\n\t\t$.ajax( {\r\n\t\t\tdata: sendData,\r\n\t\t\ttype: 'POST',\r\n\t\t\tdataType: 'JSON',\r\n\t\t\tbeforeSend: function () {\r\n\t\t\t\tCheckout.showLoader( true );\r\n\t\t\t},\r\n\t\t\tsuccess: function ( data ) {\r\n\t\t\t\tif ( reloadPage ) {\r\n\t\t\t\t\twindow.location.reload( true );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tCheckout.updateHtml( data );\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\terror: function ( request ) {\r\n\t\t\t\twindow.location.reload( true );\r\n\t\t\t\tconsole.debug( request );\r\n\t\t\t},\r\n\t\t} );\r\n\t};\r\n\r\n\tCheckout.processShippingMethod = function ( wrapper ) {\r\n\r\n\t\tvar shippingValue = wrapper.find( ':radio:checked' ).val();\r\n\r\n\t\tvar sendData = $( '#esc_purchase' ).serialize();\r\n\r\n\t\tsendData += '&shipping_method=' + shippingValue + '&ajax=1';\r\n\r\n\t\tconsole.log( 'processShippingMethod' );\r\n\r\n\t\t$.ajax( {\r\n\t\t\tdataType: 'JSON',\r\n\t\t\ttype: 'POST',\r\n\t\t\tdata: sendData,\r\n\t\t\tbeforeSend: function () {\r\n\t\t\t\tCheckout.showLoader( true );\r\n\t\t\t},\r\n\t\t\tsuccess: function ( data ) {\r\n\t\t\t\tCheckout.updateHtml( data );\r\n\t\t\t},\r\n\t\t\terror: function ( request ) {\r\n\t\t\t\tCheckout.showLoader( false );\r\n\t\t\t\tconsole.debug( request );\r\n\t\t\t},\r\n\t\t} );\r\n\r\n\t};\r\n\r\n\tCheckout.processComment = function ( action ) {\r\n\r\n\t\tconsole.log( 'send comment' );\r\n\r\n\t\tvar value = giftContainer.find( ':checkbox:checked' ).length;\r\n\t\tvar form = $( '#esc_purchase' );\r\n\t\tvar sendData = form.serializeArray();\r\n\t\tvar voucher = form.find( '#js-voucher-field button' ).val();\r\n\r\n\t\t$.each( sendData, function () {\r\n\t\t\tif ( this.name === 'voucher' ) {\r\n\t\t\t\tthis.value = voucher;\r\n\t\t\t}\r\n\t\t} );\r\n\r\n\t\tsendData = $.param( sendData );\r\n\r\n\t\tif ( value === 0 ) {\r\n\t\t\tsendData += '&internalComment[giftwrap]=0';\r\n\t\t}\r\n\r\n\t\tsendData += '&submit_comment' + '=' + value + '&ajax=1';\r\n\r\n\t\t//Update all HTML\r\n\t\t$.ajax( {\r\n\t\t\tdata: sendData,\r\n\t\t\ttype: 'POST',\r\n\t\t\tdataType: 'JSON',\r\n\t\t\tbeforeSend: function () {\r\n\t\t\t\tCheckout.showLoader( true );\r\n\t\t\t},\r\n\t\t\tsuccess: function ( data ) {\r\n\t\t\t\tif ( action === 'click' ) {\r\n\t\t\t\t\tCheckout.updateHtml( data );\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\terror: function ( request ) {\r\n\t\t\t\tCheckout.showLoader( false );\r\n\t\t\t\tconsole.debug( request );\r\n\t\t\t},\r\n\t\t} );\r\n\t};\r\n\r\n\tCheckout.processNewsletter = function ( action ) {\r\n\t\tconsole.log( 'newsletter' );\r\n\r\n\t\tvar value = newsletterContainer.find( ':checkbox:checked' ).length;\r\n\t\tvar form = $( '#esc_purchase' );\r\n\t\tvar sendData = form.serializeArray();\r\n\t\tvar voucher = form.find( '#js-voucher-field button' ).val();\r\n\r\n\t\t$.each( sendData, function () {\r\n\t\t\tif ( this.name === 'voucher' ) {\r\n\t\t\t\tthis.value = voucher;\r\n\t\t\t}\r\n\t\t} );\r\n\r\n\t\tsendData = $.param( sendData );\r\n\r\n\t\tif ( value === 0 ) {\r\n\t\t\tsendData += '&address[newsletter]=0';\r\n\t\t}\r\n\r\n\t\tsendData += '&submit_newsletter' + '=' + value + '&ajax=1';\r\n\r\n\t\t//Update all HTML\r\n\t\t$.ajax( {\r\n\t\t\tdata: sendData,\r\n\t\t\ttype: 'POST',\r\n\t\t\tdataType: 'JSON',\r\n\t\t\tbeforeSend: function () {\r\n\t\t\t\tCheckout.showLoader( true );\r\n\t\t\t},\r\n\t\t\tsuccess: function ( data ) {\r\n\t\t\t\tif ( action === 'click' ) {\r\n\t\t\t\t\tCheckout.updateHtml( data );\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\terror: function ( request ) {\r\n\t\t\t\tCheckout.showLoader( false );\r\n\t\t\t\tconsole.debug( request );\r\n\t\t\t},\r\n\t\t} );\r\n\t};\r\n\r\n\tCheckout.discount = function () {\r\n\t\t$( document ).on( 'click', '.js-add-discount-button', ( event ) => {\r\n\t\t\tlet $addDiscountInput = $( document ).find( '.js-add-discount-input' );\r\n\t\t\tlet $addDiscountVoucher = $( document ).find( '.js-form-voucher' );\r\n\r\n\t\t\tif ( event.preventDefault ) event.preventDefault();\r\n\t\t\t$( $addDiscountVoucher ).toggleClass( 'd-none' );\r\n\t\t\t$( $addDiscountInput ).focus();\r\n\t\t} );\r\n\t}\r\n\r\n\tCheckout.hasZipCode = () => {\r\n\t\tlet field = $( '#js-zip-code' );\r\n\r\n\t\tif ( !field.val() ) {\r\n\t\t\thideWhenNoZipFields.attr( 'style', 'display:none!important' );\r\n\t\t\tscope.addClass( 'has-no-zipcode' );\r\n\r\n\t\t\treturn false;\r\n\r\n\t\t}\r\n\r\n\t\tconst isClosedCountry = Checkout.isClosedCountry();\r\n\r\n\t\tif ( isClosedCountry ) {\r\n\t\t\t$( '.js-closed-country' ).addClass( 'd-flex' ).removeClass( 'd-none' );\r\n\t\t\thideWhenNoZipFields.attr( 'style', 'display:none!important' );\r\n\t\t\tscope.addClass( 'has-no-zipcode' );\r\n\t\t} else {\r\n\t\t\t$( '.js-closed-country' ).removeClass( 'd-flex' ).addClass( 'd-none' );\r\n\t\t\thideWhenNoZipFields.removeAttr( 'style' );\r\n\t\t\tscope.removeClass( 'has-no-zipcode' );\r\n\t\t}\r\n\r\n\t\treturn !isClosedCountry;\r\n\t};\r\n\r\n\tCheckout.isClosedCountry = () => {\r\n\t\tlet zipCode = parseInt( $( '#js-zip-code' ).val() ),\r\n\t\t\tcountry = $( '.js-country-item.active' ).data( 'code' ),\r\n\t\t\tclosedCountriesData = JSON.parse( $( '#js-closed-countries-data' ).text() );\r\n\r\n\t\tif ( !closedCountriesData ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\treturn closedCountriesData.filter( closedCountry => closedCountry.centra_country === country )\r\n\t\t\t.filter( country => country.zip_codes\r\n\t\t\t\t.filter( closedCountryZipCode => closedCountryZipCode.start <= zipCode\r\n\t\t\t\t\t&& closedCountryZipCode.end >= zipCode ).length > 0 ).length > 0;\r\n\t};\r\n\r\n\tCheckout.initZipCodeField = () => {\r\n\t\t$( document ).on( 'change', '#js-zip-code', () => {\r\n\t\t\tif ( !Checkout.hasZipCode() ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t$.ajax( {\r\n\t\t\t\turl: '/wp-admin/admin-ajax.php',\r\n\t\t\t\tdataType: 'JSON',\r\n\t\t\t\ttype: 'POST',\r\n\t\t\t\tdata: {\r\n\t\t\t\t\taction: 'update_zip_code',\r\n\t\t\t\t\tzip_code: $( '#js-zip-code' ).val(),\r\n\t\t\t\t},\r\n\t\t\t\tbeforeSend: function () {\r\n\t\t\t\t\tCheckout.showLoader( true );\r\n\t\t\t\t\twindow.CentraCheckout.suspend();\r\n\t\t\t\t},\r\n\t\t\t\tsuccess: function ( data ) {\r\n\t\t\t\t\tshippingMethodContainer.html( data.data.shippingOptions );\r\n\t\t\t\t\tselectedTotalsContainer.html( data.data.totals );\r\n\t\t\t\t\tpaymentFieldsContainer.html( data.data.payments );\r\n\t\t\t\t\tCheckout.init();\r\n\r\n\t\t\t\t\t// Update total price in header\r\n\t\t\t\t\t$( '#js-header-total-price' ).text( $( '.js-total-price' ).text() );\r\n\t\t\t\t},\r\n\t\t\t\tcomplete: () => {\r\n\t\t\t\t\tCheckout.showLoader( false );\r\n\t\t\t\t\twindow.CentraCheckout.resume();\r\n\t\t\t\t},\r\n\t\t\t\terror: function ( request ) {\r\n\t\t\t\t\tCheckout.showLoader( false );\r\n\t\t\t\t\tconsole.debug( request );\r\n\t\t\t\t},\r\n\t\t\t} );\r\n\t\t} );\r\n\t};\r\n\r\n\tif ( scope.length > 0 ) {\r\n\t\t$( document ).ready( function () {\r\n\t\t\tCheckout.init();\r\n\r\n\t\t\t$( document ).on( 'change', 'select.js-upsale-product-size', function () {\r\n\t\t\t\t$( this ).parent().find( 'button.js-edit-item' ).attr( 'data-href', $( this ).val() );\r\n\t\t\t} );\r\n\r\n\t\t\t// Add/Remove product\r\n\t\t\t$( document ).on( 'click', editProduct, function ( e ) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tCheckout.processItems( $( this ) );\r\n\t\t\t} );\r\n\t\t} );\r\n\r\n\t\t$( window ).resize( function () {\r\n\t\t\tCheckout.moveTotalSummaryContent();\r\n\t\t} );\r\n\t}\r\n\r\n\tCheckout.discount();\r\n\tCheckout.initZipCodeField();\r\n\r\n\twindow.Checkout = Checkout;\r\n} )( jQuery );\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/checkout.js","( function ( $ ) {\r\n\tvar Scroll = {};\r\n\r\n\tScroll.To = function ( target, adjHeight ) {\r\n\t\ttarget = $( target );\r\n\r\n\t\tif( typeof adjHeight === 'undefined' || adjHeight === null ) { \r\n\t\t\tadjHeight = 0; \r\n\t\t}\t\t\r\n\r\n\t\tif ( target.length === 0 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar scrollTop = target.offset().top;\r\n\r\n\t\t// Get nav height and subtract to top offset of target element\r\n\t\tvar navBar = $( 'nav' );\r\n\t\tif ( navBar.length > 0 ) {\r\n\t\t\tscrollTop -= parseInt( navBar.css( 'height' ) );\r\n\t\t}\t\r\n\r\n\t\t// Get wpadminbar height and subtract to top offset of target element\r\n\t\tvar wpAdminBar = $( '#wpadminbar' );\r\n\t\tif ( wpAdminBar.length > 0 ) {\r\n\t\t\tscrollTop -= parseInt( wpAdminBar.css( 'height' ) );\r\n\t\t}\r\n\r\n\t\tif( adjHeight > 0 ) {\r\n\t\t\tscrollTop -= parseInt( adjHeight );\r\n\t\t}\r\n\r\n\t\t// Call stop() to avoid shaking behavior in Chrome\r\n\t\t$( 'html, body' ).stop( true ).animate( {\r\n\t\t\tscrollTop: scrollTop,\r\n\t\t}, 1000 );\r\n\t};\r\n\r\n\t$( window ).on( 'load', function() {\r\n\r\n\t\t// Scroll to specific element id on page load\r\n\t\tif( window.location.hash !== null && window.location.hash !== '' ) {\r\n\t\t\tvar hash = window.location.hash.substring(1);\r\n\r\n\t\t\t// Catch invalid selectors in hash such as filter values\r\n\t\t\ttry {\r\n\t\t\t\tvar target = $( '#' + hash );\r\n\r\n\t\t\t\tif (target.length) {\r\n\t\t\t\t\tScroll.To( target, 0 );\r\n\t\t\t\t}\r\n\t\t\t} catch (error) {\r\n\t\t\t\tconsole.log('Invalid selector');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar links = $(document).find( '.js-section-link' );\r\n\t\tif (links.length) {\r\n\t\t\tlinks.off('click').on( 'click', function(e) {\r\n\t\t\t\tvar targetLink = $(this).attr('href');\r\n\r\n\t\t\t\tif (targetLink && $( targetLink )) {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\tScroll.To( $( targetLink ), 0 );\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\r\n\t} );\r\n} )( jQuery );\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/scroll.js","var BackgroundSwicher = {};\r\n\r\nBackgroundSwicher.refresh = function () {\r\n $.each($('.js-bg-switch'), function () {\r\n\t\tlet breakPoint = $(this).data('bg-breakpoint');\r\n\t\tif (breakPoint == undefined) {\r\n\t\t\tbreakPoint = 1023.98;\r\n\t\t}\r\n\t\t$(this).backgroundSwitcher({\r\n\t\t\tbreakpoint: breakPoint,\r\n\t\t});\r\n });\r\n};\r\n\r\nBackgroundSwicher.refresh();\r\n\r\n$(window).resize(BackgroundSwicher.refresh);\r\n\r\nwindow.BackgroundSwicher = BackgroundSwicher;\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/backgroundSwitch.js","const articles = {};\r\n\r\nvar loadMoreButton = false;\r\n\r\narticles.init = () => {\r\n // Article Ajax Load More Start Here\r\n loadMoreButton = $( '.article-loadmore' );\r\n\r\n loadMoreButton.on( 'click', function () {\r\n var currentPage = $( this ).data( 'currentpage' );\r\n var nextPage = currentPage + 1;\r\n articleLoad( nextPage );\r\n $( this ).data( 'currentpage', nextPage );\r\n } );\r\n}\r\n\r\narticles.init();\r\n\r\nfunction articleLoad ( nextPage ) {\r\n var ajaxUrl = loadMoreButton.data( 'ajaxurl' );\r\n var order = loadMoreButton.data( 'order' );\r\n var orderBy = loadMoreButton.data( 'orderby' );\r\n var postsPerPage = loadMoreButton.data( 'postsperpage' );\r\n var currentTermId = loadMoreButton.data( 'currentterm_id' );\r\n var languange = loadMoreButton.data('language');\r\n // /wp-json/wp/v2/posts?per_page=10&page=1&categories=4,5&order=desc&order_by=post_date\r\n ajaxUrl += '?page=' + nextPage;\r\n ajaxUrl += '&per_page=' + postsPerPage;\r\n\r\n if(currentTermId) {\r\n ajaxUrl += '&categories=' + currentTermId;\r\n }\r\n\r\n // ajaxUrl += '&categories_exclude=1';\r\n ajaxUrl += '&order=' + order;\r\n ajaxUrl += '&order_by=' + orderBy;\r\n ajaxUrl += '&lang=' + languange;\r\n // console.log(ajaxUrl);\r\n $.ajax( {\r\n url: ajaxUrl,\r\n type: 'GET',\r\n beforeSend: function () {\r\n loadMoreButton.addClass( 'is-loading' );\r\n },\r\n error: function ( data, textStatus ) {\r\n console.log( data );\r\n console.log( textStatus );\r\n },\r\n success: function ( data, textStatus, jqXHR ) {\r\n if ( data ) {\r\n loadMoreButton.removeClass( 'is-loading' );\r\n\r\n // Need to clear list if Filter is trigger\r\n if ( nextPage == 1 ) {\r\n $( '.article-list' ).html( '' );\r\n }\r\n\r\n if ( $( data ).length > 0 ) {\r\n $( data ).each( function ( key, val ) {\r\n $( '.article-list' ).append( val.article_item );\r\n } );\r\n }\r\n\r\n var totalCount = parseInt( jqXHR.getResponseHeader( 'X-WP-Total' ), 10 );\r\n // if ($('.js-total-count')) {\r\n // \t$('.js-total-count').text( totalCount );\r\n // }\r\n\r\n if ( totalCount === 0 ) {\r\n loadMoreButton.addClass( 'd-none' );\r\n }\r\n\r\n var totalPage = parseInt( jqXHR.getResponseHeader( 'X-WP-TotalPages' ), 10 );\r\n if ( loadMoreButton.data( 'currentpage' ) == totalPage || data.length == 0 )\r\n loadMoreButton.addClass( 'd-none' ); // if last page, remove the button\r\n } else {\r\n loadMoreButton.addClass( 'd-none' ); // if no data, remove the button as well\r\n }\r\n },\r\n complete: function () {\r\n if ( window.lazyLoadInstance ) {\r\n window.lazyLoadInstance.update();\r\n }\r\n },\r\n } );\r\n}\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/articles.js","let textBanner = {};\r\n\r\ntextBanner.init = function () {\r\n let textBannerShowChar;\r\n\r\n if (matchMedia('screen and (max-width: 1023px)').matches) {\r\n textBannerShowChar = 150;\r\n } else {\r\n textBannerShowChar = 350;\r\n }\r\n\r\n // let textBannerEllipsisText = '...';\r\n let textBannerSection = $('.js-text-intro-block');\r\n\r\n $.each(textBannerSection, function () {\r\n let currentTextBanner = $(this);\r\n let textBannerMoreText = currentTextBanner.data('readmore');\r\n let textBannerLessText = currentTextBanner.data('readless');\r\n let textBannerMobile = currentTextBanner.find('.js-text-intro-block-content');\r\n let contentWrapper = currentTextBanner.find('.js-content');\r\n\r\n let content = currentTextBanner.find('.js-content').html();\r\n if (content && content.length > textBannerShowChar) {\r\n currentTextBanner.addClass('has-content-hidden');\r\n let textBannerShownContent = content.substr(0, textBannerShowChar);\r\n\r\n let htmlLess = '<div class=\"less\">' + textBannerShownContent + '</div>';\r\n let htmlMore = '<div class=\"more\">' + content + '</div>';\r\n let readButton = ' <a href=\"#\" class=\"js-readMore-link readMore-link\">' + textBannerMoreText + '</a>';\r\n currentTextBanner.find('.js-content').html(htmlLess);\r\n currentTextBanner.find('.js-content').append(htmlMore);\r\n currentTextBanner.find('.js-content').append(readButton);\r\n } else {\r\n currentTextBanner.find('.js-arrow-mobile').addClass('d-none');\r\n }\r\n\r\n currentTextBanner.find('.js-readMore-link').click(function () {\r\n if (contentWrapper.hasClass('toggle-content')) {\r\n textBannerMobile.removeClass('toggle-content');\r\n contentWrapper.removeClass('toggle-content');\r\n $(this).html(textBannerMoreText);\r\n } else {\r\n textBannerMobile.addClass('toggle-content');\r\n contentWrapper.addClass('toggle-content');\r\n $(this).html(textBannerLessText);\r\n }\r\n });\r\n\r\n textBannerMobile.click(function () {\r\n if (matchMedia('screen and (max-width: 1023.98px)').matches) {\r\n if (contentWrapper.hasClass('toggle-content')) {\r\n textBannerMobile.removeClass('toggle-content');\r\n contentWrapper.removeClass('toggle-content');\r\n } else {\r\n textBannerMobile.addClass('toggle-content');\r\n contentWrapper.addClass('toggle-content');\r\n }\r\n }\r\n });\r\n });\r\n}\r\n\r\ntextBanner.init();\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/text-banner.js","let Form = {};\r\n\r\nForm.init = function () {\r\n\t// TOGGLE IS_VALID CLASS ON CHECKBOX\r\n $('input[type=\"checkbox\"].custom-control-input').change(function () {\r\n if ($(this).prop('checked')) {\r\n $(this).removeClass('is-invalid')\r\n }\r\n });\r\n};\r\n\r\nForm.init();\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/forms.js","let hero = {};\r\n\r\nhero.video = function () {\r\n \r\n let currentIsDesktop = $('html.no-touchevents').length;\r\n let mobileVideo = $('.hero-mobile-vid')\r\n \r\n if (!currentIsDesktop) {\r\n let videoMobileClass = $('.hero-mb-vid');\r\n let videoDesktopClass = $('.hero-d-vid');\r\n\r\n if (videoMobileClass.hasClass('d-none') && videoMobileClass.hasClass('d-lg-block')) {\r\n videoMobileClass.removeClass('d-none d-lg-block').addClass('d-block d-lg-none');\r\n }\r\n\r\n if (videoDesktopClass) {\r\n videoDesktopClass.remove();\r\n }\r\n\r\n } else {\r\n mobileVideo.remove();\r\n }\r\n\r\n}\r\n\r\nhero.init = function () {\r\n hero.video();\r\n}\r\n\r\nhero.init();\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/hero.js","let StoreLocator = {};\r\nvar cartAjaxRequestEnable = true;\r\nvar selectedLocation = '';\r\nvar searchString = '';\r\n\r\nStoreLocator.init = function() {\r\n let locationFilter = $('.js-store-locator-location');\r\n locationFilter.on( 'click', function() {\r\n let selectedValue = $(this).attr('data-value');\r\n selectedLocation = selectedValue;\r\n let data = {\r\n 'action': 'store_locator_search',\r\n 'location': selectedValue,\r\n };\r\n\r\n if( searchString.length > 0 ) {\r\n data.city = searchString;\r\n }\r\n locationFilter.removeClass('btn-primary').addClass('btn-secondary');\r\n $(this).removeClass('btn-secondary').addClass('btn-primary');\r\n StoreLocator.ajaxCall( data );\r\n });\r\n\r\n // catch on enter\r\n let searchButton = $('#js-search-locator-button');\r\n let searchText = $('#js-search-locator-string');\r\n\r\n searchButton.on( 'click', function() {\r\n searchString = $.trim(searchText.val());\r\n if( searchString.length == 0 && selectedLocation.length == 0 ) {\r\n return false;\r\n }\r\n \r\n let data = {\r\n 'action': 'store_locator_search',\r\n };\r\n\r\n if( searchString.length > 0 ) {\r\n data.city = searchString;\r\n }\r\n if( selectedLocation.length > 0 ) {\r\n data.location = selectedLocation;\r\n }\r\n StoreLocator.ajaxCall( data );\r\n });\r\n\r\n searchText.on( 'keypress', function( e ) {\r\n if (e.keyCode == 13) {\r\n searchButton.trigger( 'click' );\r\n }\r\n });\r\n}\r\n\r\nStoreLocator.ajaxCall = function( data ) {\r\n // To avoid double send of ajax request\r\n if (!cartAjaxRequestEnable) {\r\n return;\r\n }\r\n\r\n $.ajax({\r\n url: '/wp-admin/admin-ajax.php',\r\n data: data,\r\n type: 'POST',\r\n dataType: 'json',\r\n beforeSend: function () {\r\n cartAjaxRequestEnable = false;\r\n },\r\n success: function (result) {\r\n $('#js-store-locator-search-result').html(result.html);\r\n },\r\n complete: function () {\r\n cartAjaxRequestEnable = true; \r\n },\r\n error: function (request) {\r\n console.debug(request);\r\n },\r\n });\r\n};\r\n\r\nStoreLocator.init();\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/store-locator.js","let BulletList = {};\r\n\r\nBulletList.init = () => {\r\n\tBulletList.collapse(4);\r\n}\r\n\r\nBulletList.collapse = (maxItem) => {\r\n\tlet bulletList = $('.js-bullet-list');\r\n\r\n\tif (bulletList.length === 0) {\r\n\t\treturn;\r\n\t}\r\n\r\n\t$.each(bulletList, function () {\r\n\t\tlet $bulletList = $(this);\r\n\r\n\t\tlet bulletListToggle = $bulletList.find('.js-bullet-list-toggle');\r\n\t\tlet bulletListItem = $bulletList.find('.js-bullet-list-collapse li');\r\n\t\tlet itemCount = $bulletList.find('.js-bullet-list-collapse li').length;\r\n\r\n\t\tif (itemCount > maxItem) {\r\n\t\t\t$bulletList.addClass('is-hidden');\r\n\t\t\tbulletListItem.slice(maxItem, itemCount).addClass('is-hidden');\r\n\t\t\r\n\t\t\tbulletListToggle.click(() => {\r\n\t\t\t\tif ($bulletList.hasClass('is-hidden')) {\r\n\t\t\t\t\t$bulletList.removeClass('is-hidden');\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$bulletList.addClass('is-hidden');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} \r\n\t});\r\n}\r\n\r\n\r\nBulletList.init();\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/bullet-list.js","( ( $ ) => {\r\n\tlet FlexibleBundles = {};\r\n\tconst $cartItems = $( '.js-cart-items' ),\r\n\t\tisSinglePage = $( 'body' ).hasClass( 'single-silk_products' );\r\n\r\n\tFlexibleBundles.changeColor = () => {\r\n\t\tif ( isSinglePage ) {\r\n\t\t\t$( '.js-color-item-checkbox' ).change( ( e ) => {\r\n\t\t\t\t$( '#js-images-' + e.currentTarget.dataset.section )\r\n\t\t\t\t\t.find( '.product-bundle-item-image' )\r\n\t\t\t\t\t.each( ( index, image ) => {\r\n\t\t\t\t\t\tif ( image.dataset.color != e.currentTarget.value ) {\r\n\t\t\t\t\t\t\timage.style.display = 'none';\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\timage.style.display = 'initial';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} )\r\n\t\t\t\t\t.end()\r\n\t\t\t\t\t.flickity( 'resize' );\r\n\r\n\t\t\t\t$( '#js-sizes-' + e.currentTarget.dataset.section + ' .js-size-list-item' )\r\n\t\t\t\t\t.each( ( index, item ) => {\r\n\t\t\t\t\t\tif ( item.dataset.color != e.currentTarget.value ) {\r\n\t\t\t\t\t\t\titem.style.display = 'none';\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\titem.style.display = 'initial';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} );\r\n\r\n\t\t\t\t$( '#js-sizes-' + e.currentTarget.dataset.section + ' input[type=radio]' )\r\n\t\t\t\t\t.prop( 'checked', false );\r\n\t\t\t} );\r\n\t\t} else {\r\n\t\t\t$( '.js-section-color' ).change( ( e ) => {\r\n\t\t\t\tconst section = e.currentTarget.dataset.section,\r\n\t\t\t\t\t$select = $( 'select#section-' + section + '-size' ),\r\n\t\t\t\t\t$selected = $( 'input[name=section-' + section + '-color]:checked' );\r\n\r\n\t\t\t\t$select.find( 'option' )\r\n\t\t\t\t\t.hide()\r\n\t\t\t\t\t.end()\r\n\t\t\t\t\t.find( 'option[data-color=' + $selected.val() + ']' )\r\n\t\t\t\t\t.show()\r\n\t\t\t\t\t.end()\r\n\t\t\t\t\t.find( 'option[data-color=' + $selected.val() + ']' )\r\n\t\t\t\t\t.not( ':disabled' )\r\n\t\t\t\t\t.first()\r\n\t\t\t\t\t.prop( 'selected', true );\r\n\t\t\t} );\r\n\t\t}\r\n\t};\r\n\r\n\tFlexibleBundles.removeBundle = () => {\r\n\t\t$( document ).on( 'click', '.js-remove-bundle', ( e ) => {\r\n\t\t\te.preventDefault();\r\n\r\n\t\t\tconst $element = $( e.currentTarget ),\r\n\t\t\t\tisCheckout = $element.data( 'checkout' );\r\n\r\n\t\t\t$.ajax( {\r\n\t\t\t\turl: window.ajaxURL,\r\n\t\t\t\ttype: 'POST',\r\n\t\t\t\tdataType: 'json',\r\n\t\t\t\tdata: {\r\n\t\t\t\t\taction: 'remove_bundle',\r\n\t\t\t\t\tline: $element.data( 'line' ),\r\n\t\t\t\t\tcheckout: isCheckout,\r\n\t\t\t\t},\r\n\t\t\t\tbeforeSend: () => {\r\n\t\t\t\t\tif ( isCheckout ) {\r\n\t\t\t\t\t\twindow.Checkout.showLoader( true );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$element.parents( 'li.item' ).addClass( 'is-processing' );\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\terror: ( data, textStatus ) => {\r\n\t\t\t\t\tconsole.log( data );\r\n\t\t\t\t\tconsole.log( textStatus );\r\n\t\t\t\t},\r\n\t\t\t\tsuccess: ( result ) => {\r\n\t\t\t\t\tif ( isCheckout ) {\r\n\t\t\t\t\t\tif ( result.totalItems === 0 || result.items === '' ) {\r\n\t\t\t\t\t\t\twindow.location.href = location.pathname;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\twindow.Checkout.updateHtml( result );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif ( result.success && result.data.cart ) {\r\n\t\t\t\t\t\t\t$cartItems.html( result.data.cart );\r\n\t\t\t\t\t\t\twindow.Cart.toggleCart( 'open' );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tcomplete: () => {\r\n\t\t\t\t\tif ( isCheckout ) {\r\n\t\t\t\t\t\twindow.Checkout.showLoader( false );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsetTimeout( function () {\r\n\t\t\t\t\t\t\twindow.Cart.toggleCart( 'close' );\r\n\t\t\t\t\t\t}, 1500 );\r\n\r\n\t\t\t\t\t\twindow.Cart.init();\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t} );\r\n\t\t} );\r\n\t};\r\n\r\n\tFlexibleBundles.addBundle = () => {\r\n\t\t$( '.js-bundle-form' ).submit( ( e ) => {\r\n\t\t\te.preventDefault();\r\n\r\n\t\t\tlet data = {\r\n\t\t\t\titem: '',\r\n\t\t\t\tsections: [],\r\n\t\t\t},\r\n\t\t\t\tpost = null,\r\n\t\t\t\thasSelectedSizes = true;\r\n\r\n\t\t\tconst $form = $( e.currentTarget ),\r\n\t\t\t\t$submit = $form.find( 'button[type=submit]' ),\r\n\t\t\t\t$submitText = $submit.find( '.js-button-text' );\r\n\r\n\t\t\t$submitText.text( $submit.data( 'text' ) );\r\n\r\n\t\t\tif ( isSinglePage ) {\r\n\t\t\t\t$( '.js-size-list' ).each( ( index, element ) => {\r\n\t\t\t\t\tif ( $( element ).find( 'input[type=radio]:checked' ).length === 0 ) {\r\n\t\t\t\t\t\thasSelectedSizes = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t} );\r\n\t\t\t}\r\n\r\n\t\t\tif ( !hasSelectedSizes ) {\r\n\t\t\t\t$submitText.text( $submit.data( 'error' ) );\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t$form\r\n\t\t\t\t.serializeArray()\r\n\t\t\t\t.forEach( ( item ) => {\r\n\t\t\t\t\tif ( item.name === 'item' ) {\r\n\t\t\t\t\t\tdata.item = item.value;\r\n\t\t\t\t\t} else if ( item.name.indexOf( '-size' ) !== -1 ) {\r\n\t\t\t\t\t\tdata.sections.push( {\r\n\t\t\t\t\t\t\tsection: item.name.split( '-' )[1],\r\n\t\t\t\t\t\t\titem: item.value,\r\n\t\t\t\t\t\t} );\r\n\t\t\t\t\t} else if ( item.name === 'post' ) {\r\n\t\t\t\t\t\tpost = item.value\r\n\t\t\t\t\t}\r\n\t\t\t\t} );\r\n\r\n\t\t\t$.ajax( {\r\n\t\t\t\turl: window.ajaxURL,\r\n\t\t\t\ttype: 'POST',\r\n\t\t\t\tdataType: 'json',\r\n\t\t\t\tdata: {\r\n\t\t\t\t\taction: 'add_bundle',\r\n\t\t\t\t\tpost: post,\r\n\t\t\t\t\tdata: data,\r\n\t\t\t\t\tesc_post: post,\r\n\t\t\t\t\tesc_product_item: data.item,\r\n\t\t\t\t},\r\n\t\t\t\tbeforeSend: () => {\r\n\t\t\t\t\t$submit.addClass( 'is-loading' );\r\n\t\t\t\t\t$submit.prop( 'disabled', true );\r\n\t\t\t\t},\r\n\t\t\t\terror: ( data, textStatus ) => {\r\n\t\t\t\t\tconsole.log( data );\r\n\t\t\t\t\tconsole.log( textStatus );\r\n\t\t\t\t},\r\n\t\t\t\tsuccess: ( result ) => {\r\n\t\t\t\t\tif ( result.success && result.data.cart ) {\r\n\t\t\t\t\t\t$cartItems.html( result.data.cart );\r\n\t\t\t\t\t\twindow.Cart.toggleCart( 'open' );\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tcomplete: () => {\r\n\t\t\t\t\tsetTimeout( function () {\r\n\t\t\t\t\t\twindow.Cart.toggleCart( 'close' );\r\n\t\t\t\t\t\t$submit.removeClass( 'is-loading' );\r\n\t\t\t\t\t\t$submit.prop( 'disabled', false );\r\n\t\t\t\t\t}, 1500 );\r\n\r\n\t\t\t\t\twindow.Cart.init();\r\n\t\t\t\t},\r\n\t\t\t} );\r\n\t\t} );\r\n\t};\r\n\r\n\tFlexibleBundles.init = () => {\r\n\t\tFlexibleBundles.changeColor();\r\n\t\tFlexibleBundles.addBundle();\r\n\t\tFlexibleBundles.removeBundle();\r\n\t};\r\n\r\n\tFlexibleBundles.init();\r\n} )( jQuery );\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/bundles.js","( ( $ ) => {\r\n\tlet Hotjar = {};\r\n\twindow.hj = window.hj || function () { ( window.hj.q = window.hj.q || [] ).push( arguments ) };\r\n\r\n\tHotjar.init = () => {\r\n\t\t$( '.js-search-open' ).on( 'click', () => {\r\n\t\t\twindow.hj( 'event', 'search' );\r\n\t\t} );\r\n\r\n\r\n\t\t$( '.js-filter-open' ).on( 'click', () => {\r\n\t\t\twindow.hj( 'event', 'filter' );\r\n\t\t} );\r\n\t};\r\n\r\n\t$( document ).on( 'ready', Hotjar.init );\r\n} )( jQuery );\n\n\n// WEBPACK FOOTER //\n// ./scripts/tracking/hotjar.js","let TextEditor = {};\r\n\r\nTextEditor.init = function() {\r\n\tlet readMore = $('.js-read-more');\r\n\tlet btnReadMore = $('.btn-read-more');\r\n\r\n\tif (readMore.length === 0){\r\n\t\treturn;\r\n\t}\r\n\r\n\treadMore.each(function(){\r\n\t\tlet thisReadMore = $(this);\r\n\t\tlet thisTextHeight = thisReadMore.find('.editor-content-text').height();\r\n\r\n\t\tif (thisTextHeight > 150){\r\n\t\t\tthisReadMore.addClass('collapse-read-more');\r\n\t\t}\r\n\t});\r\n\r\n\tbtnReadMore.click(function(){\r\n\t\tlet thisReadMoreBtn = $(this);\r\n\t\tlet editorContentCont = thisReadMoreBtn.closest('.js-read-more');\r\n\t\tlet hasCollapse = editorContentCont.hasClass('collapse-read-more');\r\n\r\n\t\tif(hasCollapse){\r\n\t\t\teditorContentCont.removeClass('collapse-read-more');\r\n\t\t\teditorContentCont.addClass('expand-read-more');\r\n\t\t} else {\r\n\t\t\teditorContentCont.addClass('collapse-read-more');\r\n\t\t\teditorContentCont.removeClass('expand-read-more');\r\n\t\t\t\r\n\t\t}\r\n\r\n\t});\r\n\t\r\n}\r\n\r\nTextEditor.init();\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/text-editor.js","( ( $ ) => {\r\n\t$( document ).on( 'ready', () => {\r\n\t\tif ( !( 'gtag' in window ) || !( 'dataLayer' in window ) ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\twindow.dataLayer.forEach( item => {\r\n\t\t\tif ( !( 'ecommerce' in item )\r\n\t\t\t\t|| ('ecommerce' in item && item.ecommerce === null )\r\n\t\t\t\t|| !( 'purchase' in item.ecommerce ) ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\twindow.gtag( 'event', 'purchase', {\r\n\t\t\t\ttransaction_id: item.ecommerce.purchase.actionField.id,\r\n\t\t\t\tvalue: item.ecommerce.purchase.actionField.revenue,\r\n\t\t\t\ttax: item.ecommerce.purchase.actionField.tax,\r\n\t\t\t\tshipping: item.ecommerce.purchase.actionField.shipping,\r\n\t\t\t\tcurrency: item.ecommerce.currencyCode,\r\n\t\t\t\tcoupon: item.ecommerce.purchase.actionField.coupon,\r\n\t\t\t\titems: item.ecommerce.purchase.products.map( product => {\r\n\t\t\t\t\treturn [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\titem_id: product.id,\r\n\t\t\t\t\t\t\titem_name: product.name,\r\n\t\t\t\t\t\t\taffiliation: product.brand,\r\n\t\t\t\t\t\t\titem_brand: product.brand,\r\n\t\t\t\t\t\t\titem_category: product.category,\r\n\t\t\t\t\t\t\titem_variant: product.variant,\r\n\t\t\t\t\t\t\tprice: product.price,\r\n\t\t\t\t\t\t\tquantity: product.quantity,\r\n\t\t\t\t\t\t}]\r\n\t\t\t\t} ),\r\n\t\t\t} );\r\n\t\t} );\r\n\t} );\r\n} )( jQuery );\n\n\n// WEBPACK FOOTER //\n// ./scripts/tracking/gtag.js","let topBanner = {};\r\n\r\nconst body = document.querySelector('body');\r\nconst overlay = document.getElementById('js-overlay');\r\nconst closePopup = document.getElementById('js-close-popup');\r\nconst uspTopBannerPopup = document.getElementById('js-usp-top-banner-popup');\r\nconst uspTopBannerItems = document.querySelectorAll('.js-usp-top-banner-item');\r\n\r\ntopBanner.animate = function() {\r\n window.addEventListener('load', function() {\r\n let currentIndex = 0;\r\n const totalItems = uspTopBannerItems.length;\r\n\r\n function showItem(index) {\r\n uspTopBannerItems.forEach((item, i) => {\r\n item.classList.remove('show');\r\n if (i === index) {\r\n item.classList.add('show');\r\n }\r\n });\r\n }\r\n\r\n function rotateItems() {\r\n showItem(currentIndex);\r\n currentIndex = (currentIndex + 1) % totalItems;\r\n }\r\n\r\n\r\n\t\tif (uspTopBannerItems.length > 0) {\r\n\t\t\t// Initialize the first item display\r\n\t\t\tshowItem(currentIndex);\r\n\r\n\t\t\t// Change item every 5 seconds\r\n\t\t\tsetInterval(rotateItems, 5000);\r\n\t\t}\r\n\r\n });\r\n}\r\n\r\ntopBanner.size = function() {\r\n const vh = window.innerHeight / 100;\r\n\tif(uspTopBannerPopup) {\r\n\t\tif (uspTopBannerPopup.offsetHeight > 80 * vh) {\r\n\t\t\tuspTopBannerPopup.classList.add('is-fullscreen');\r\n\t\t} else {\r\n\t\t\tuspTopBannerPopup.classList.remove('is-fullscreen');\r\n\t\t}\r\n\t}\r\n}\r\n\r\ntopBanner.close = function() {\r\n if (uspTopBannerPopup) {\r\n uspTopBannerPopup.classList.remove('is-open');\r\n\t\tif (overlay) {\r\n\t\t\toverlay.style.display = 'none';\r\n\t\t}\r\n body.classList.remove('usp-top-banner-popup-no-scroll');\r\n uspTopBannerPopup.classList.remove('is-fullscreen');\r\n }\r\n}\r\n\r\ntopBanner.init = function() {\r\n if (uspTopBannerItems.length > 0) {\r\n uspTopBannerItems.forEach(function (button) {\r\n button.addEventListener('click', function (event) {\r\n event.preventDefault();\r\n\r\n if(uspTopBannerPopup) {\r\n uspTopBannerPopup.classList.add('is-open');\r\n if (overlay) {\r\n overlay.style.display = 'block';\r\n }\r\n body.classList.add('usp-top-banner-popup-no-scroll');\r\n topBanner.size();\r\n }\r\n\r\n });\r\n });\r\n }\r\n\r\n\tif(closePopup) {\r\n\t\tclosePopup.addEventListener('click', topBanner.close);\r\n\t}\r\n\r\n\tif(overlay) {\r\n overlay.addEventListener('click', topBanner.close);\r\n\t}\r\n\r\n window.addEventListener('resize', window.stokpress.debounce(function () {\r\n topBanner.size();\r\n }, 500));\r\n}\r\n\r\ntopBanner.init();\r\ntopBanner.animate();\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/top-banner.js","export const sliders = {\r\n init() {\r\n require('./product-selected');\r\n require('./product-slider');\r\n require('./feature-slider');\r\n require('./article-slider');\r\n require('./article-listing');\r\n\trequire('./trustbar-slider');\r\n\trequire('./cart-slider');\r\n\trequire('./category-promo-slider');\r\n\trequire('./sub-navigation');\r\n\trequire('./product-bundle-page-slider');\r\n\r\n // IOS 13.1.3 Flickity Fix\r\n let touchingCarousel = false;\r\n let touchStartCoords;\r\n\r\n document.body.addEventListener('touchstart', function(e) {\r\n if (e.target.closest('.flickity-slider')) {\r\n touchingCarousel = true;\r\n } else {\r\n touchingCarousel = false;\r\n return;\r\n }\r\n\r\n touchStartCoords = {\r\n x: e.touches[0].pageX,\r\n y: e.touches[0].pageY,\r\n }\r\n });\r\n\r\n document.body.addEventListener('touchmove', function(e) {\r\n if (!(touchingCarousel && e.cancelable)) {\r\n return;\r\n }\r\n\r\n var moveVector = {\r\n x: e.touches[0].pageX - touchStartCoords.x,\r\n y: e.touches[0].pageY - touchStartCoords.y,\r\n };\r\n\r\n if (Math.abs(moveVector.x) > 7)\r\n e.preventDefault()\r\n\r\n }, {passive: false});\r\n },\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/sliders/index.js","let ProductSelectedSlider;\r\n\r\nlet $mobileSlider;\r\nlet $desktopSliderModal;\r\nlet $desktopSliderThumbnailModal;\r\nlet $flickityModal;\r\n\r\nProductSelectedSlider = {\r\n\tinit () {\r\n\t\t$mobileSlider = $( '.js-selected-product-mobile-slider' );\r\n\t\t$desktopSliderModal = $( '.js-selected-product-modal-slider' );\r\n\t\t$desktopSliderThumbnailModal = $( '.js-selected-product-modal-thumbnail-slider' );\r\n\t\t$flickityModal = $( '.flickity-modal' );\r\n\r\n\t\tlet options = {};\r\n\r\n\t\toptions.$mobileOption = {\r\n\t\t\tpageDots: true,\r\n\t\t\twrapAround: true,\r\n\t\t\tcellAlign: 'center',\r\n\t\t\tpercentPosition: false,\r\n\t\t\tdragThreshold: 10,\r\n\t\t\tprevNextButtons: true,\r\n\t\t\tfullscreen: false,\r\n\t\t\ton: {\r\n\t\t\t\tready: function () {\r\n\t\t\t\t\t$mobileSlider.removeClass( 'invisible' );\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t}\r\n\r\n\t\toptions.$desktopOption = {\r\n\t\t\tpageDots: false,\r\n\t\t\twrapAround: true,\r\n\t\t\tcellAlign: 'center',\r\n\t\t\tpercentPosition: false,\r\n\t\t\tdragThreshold: 10,\r\n\t\t\tprevNextButtons: true,\r\n\t\t\tfullscreen: false,\r\n\t\t}\r\n\r\n\t\toptions.$desktopSliderThumbnailModal = {\r\n\t\t\tpageDots: false,\r\n\t\t\twrapAround: false,\r\n\t\t\tcellAlign: 'center',\r\n\t\t\tpercentPosition: false,\r\n\t\t\tdragThreshold: 10,\r\n\t\t\tprevNextButtons: false,\r\n\t\t\tfullscreen: false,\r\n\t\t\tcontain: true,\r\n\t\t}\r\n\r\n\t\t$mobileSlider.flickity( options.$mobileOption );\r\n\t\t$desktopSliderModal.flickity( options.$desktopOption );\r\n\t\t// $desktopSliderThumbnailModal.flickity(options.$desktopSliderThumbnailModal);\r\n\r\n\t\t$mobileSlider.on( 'select.flickity', () => {\r\n\t\t\t// Pause all videos\r\n\t\t\tif ( typeof window.Video === 'object' ) {\r\n\t\t\t\twindow.Video.refs.forEach( ( item ) => {\r\n\t\t\t\t\titem.call( 'pause' );\r\n\t\t\t\t} );\r\n\t\t\t}\r\n\r\n\t\t\tif ( !$mobileSlider.is( ':visible' ) ) return;\r\n\r\n\t\t\t// Play video on active slide\r\n\t\t\tif ( typeof window.Video === 'object' ) {\r\n\t\t\t\twindow.Video.refs\r\n\t\t\t\t\t.filter( ( item ) => {\r\n\t\t\t\t\t\treturn $mobileSlider[0].contains( item.element )\r\n\t\t\t\t\t\t\t&& item.element.parentNode.classList.contains( 'is-selected' );\r\n\t\t\t\t\t} )\r\n\t\t\t\t\t.forEach( ( item ) => {\r\n\t\t\t\t\t\titem.call( 'play' );\r\n\t\t\t\t\t} );\r\n\t\t\t}\r\n\t\t} );\r\n\r\n\t\t$desktopSliderThumbnailModal.on( 'click', '.item', function () {\r\n\t\t\tlet _this = this;\r\n\t\t\t$desktopSliderThumbnailModal.find( '.item' ).removeClass( 'is-active' );\r\n\t\t\t$( _this ).addClass( 'is-active' );\r\n\t\t\tlet index = $( _this ).index();\r\n\t\t\t$desktopSliderModal.flickity( 'select', index );\r\n\t\t} );\r\n\r\n\t},\r\n\tsliderModal ( index ) {\r\n\t\t$flickityModal.modal( 'show' );\r\n\t\t$( 'body' ).addClass( 'product-modal-open' );\r\n\r\n\t\t$( document ).find( '.flickity-modal' ).off( 'shown.bs.modal' ).on( 'shown.bs.modal', function () {\r\n\t\t\tsetTimeout( () => {\r\n\t\t\t\t$( this ).find( '.modal-dialog' ).removeClass( 'invisible' );\r\n\t\t\t\t$desktopSliderModal.removeClass( 'invisible' );\r\n\t\t\t\t$desktopSliderModal.flickity( 'resize' );\r\n\t\t\t\t$desktopSliderThumbnailModal.removeClass( 'invisible' );\r\n\t\t\t\t$desktopSliderModal.flickity( 'select', index );\r\n\t\t\t\t$desktopSliderThumbnailModal.find( '.item' ).removeClass( 'is-active' );\r\n\t\t\t\t$desktopSliderThumbnailModal.find( '.item:eq(' + index + ')' ).addClass( 'is-active' );\r\n\t\t\t}, 500 );\r\n\t\t} );\r\n\r\n\t\t$( document ).find( '.flickity-modal' ).on( 'hidden.bs.modal', function () {\r\n\t\t\t$( 'body' ).removeClass( 'product-modal-open' );\r\n\t\t\t$desktopSliderThumbnailModal.find( '.item' ).removeClass( 'is-active' );\r\n\t\t} );\r\n\t},\r\n}\r\n\r\n$( '.js-slider-modal' ).click( function () {\r\n\tlet $this = $( this );\r\n\tProductSelectedSlider.sliderModal( $this.data( 'index' ) );\r\n} );\r\n\r\n\r\n$( window ).resize( function () {\r\n\tif ( matchMedia( 'screen and (max-width: 1023px)' ).matches ) {\r\n\t\t$flickityModal.modal( 'hide' );\r\n\t}\r\n} );\r\n\r\nProductSelectedSlider.init();\r\n\r\nwindow.ProductSelectedSlider = ProductSelectedSlider;\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/sliders/product-selected.js","let ProductSlider = {};\r\n\r\nProductSlider = {\r\n init() {\r\n let $productSlider = $('.js-product-slider');\r\n\r\n if ($productSlider.length === 0) {\r\n return;\r\n }\r\n\r\n $.each($productSlider, function(){\r\n let $slider = $(this);\r\n\r\n let options = {\r\n pageDots: false,\r\n groupCells: false,\r\n cellAlign: 'left',\r\n percentPosition: false,\r\n wrapAround: false,\r\n contain: true,\r\n dragThreshold: 10,\r\n prevNextButtons: true,\r\n on: {\r\n ready: function() {\r\n $slider.removeClass('invisible');\r\n $slider.addClass('first-el');\r\n },\r\n },\r\n };\r\n\r\n if (matchMedia('screen and (min-width: 768px)').matches) {\r\n options = {\r\n pageDots: false,\r\n groupCells: true,\r\n cellAlign: 'left',\r\n percentPosition: false,\r\n wrapAround: true,\r\n contain: false,\r\n dragThreshold: 15,\r\n prevNextButtons: true,\r\n on: {\r\n ready: function() {\r\n $slider.removeClass('invisible');\r\n $slider.addClass('first-el');\r\n },\r\n },\r\n }\r\n }\r\n\r\n let flkty = $slider.flickity(options);\r\n let flktyData = $slider.data('flickity');\r\n var count = flktyData.cells.length;\r\n\r\n if (count < 4) {\r\n options.groupCells = false\r\n options.wrapAround = false\r\n options.prevNextButtons = false\r\n options.contain = true\r\n\r\n if (count == 5) {\r\n $slider.addClass('is-indented');\r\n }\r\n\r\n $slider.flickity(options);\r\n $slider.addClass('no-prevnext');\r\n }\r\n\r\n if (matchMedia('screen and (max-width: 767px)').matches) {\r\n flkty.on('change.flickity', function () {\r\n if (flktyData.selectedIndex == 0) {\r\n $slider.addClass('first-el');\r\n } else {\r\n $slider.removeClass('first-el');\r\n }\r\n });\r\n } else if (matchMedia('screen and (min-width: 768px)').matches) {\r\n flkty.on('change.flickity', function () {\r\n if (flktyData.selectedIndex == 0) {\r\n $slider.addClass('is-indented');\r\n } else {\r\n $slider.removeClass('is-indented');\r\n }\r\n });\r\n }\r\n });\r\n },\r\n}\r\n\r\n$(function () {\r\n ProductSlider.init();\r\n\r\n window.addEventListener('resize', window.stokpress.debounce(function () {\r\n ProductSlider.init();\r\n }, 500));\r\n\r\n});\r\n\r\nwindow.ProductSlider = ProductSlider;\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/sliders/product-slider.js","var FeatureSlider = {}, $featureSlider;\r\n\r\nFeatureSlider = {\r\n init() {\r\n $featureSlider = $('.js-feature-slider');\r\n\r\n if ($featureSlider.length === 0) {\r\n return;\r\n }\r\n\r\n $.each( $featureSlider, function() {\r\n let $slider = $(this),\r\n $autoplay = $slider.data('autoplay');\r\n\r\n $slider.flickity({\r\n autoPlay: $autoplay,\r\n cellAlign: 'left',\r\n contain: true,\r\n prevNextButtons: false,\r\n pageDots: true,\r\n\t\t\t\tdragThreshold: 10,\r\n\t\t\t\twrapAround: true,\r\n\t\t\t});\r\n });\r\n },\r\n}\r\n\r\n$(function () {\r\n FeatureSlider.init();\r\n\r\n $(window).resize(function () {\r\n FeatureSlider.init();\r\n });\r\n});\r\n\r\nwindow.FeatureSlider = FeatureSlider;\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/sliders/feature-slider.js","let ArticleSlider = {};\r\n\r\nArticleSlider.slider = function () {\r\n let $articleSlider = $('#article-slider');\r\n\r\n $articleSlider.on('ready.flickity', function () {\r\n $articleSlider.css('visibility', 'visible');\r\n });\r\n\r\n var options = {\r\n contain: true,\r\n cellAlign: 'left',\r\n groupCells: false,\r\n prevNextButtons: true,\r\n pageDots: true,\r\n dragThreshold: 10,\r\n };\r\n\r\n $articleSlider.flickity(options);\r\n\r\n let $prevButton = $('.js-flickity-prev');\r\n let $nextButton = $('.js-flickity-next');\r\n\r\n $prevButton.click(function () {\r\n $articleSlider.flickity('previous');\r\n });\r\n\r\n $nextButton.click(function () {\r\n $articleSlider.flickity('next');\r\n });\r\n};\r\n\r\nArticleSlider.slider();\r\n\r\n$(window).resize(function () {\r\n ArticleSlider.slider();\r\n});\r\n\r\nwindow.addEventListener('resize', window.stokpress.debounce(function () {\r\n ArticleSlider.slider();\r\n}, 500));\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/sliders/article-slider.js","let ArticleListing = {};\r\n\r\nArticleListing = {\r\n init() {\r\n let articleListingSlider = $('.js-article-listing-slider');\r\n\r\n if(articleListingSlider.length === 0) {\r\n return;\r\n }\r\n\r\n $.each(articleListingSlider, function() {\r\n let $slider = $(this);\r\n\r\n let options = {\r\n contain: true,\r\n wrapAround: false,\r\n cellAlign: 'left',\r\n groupCells: false,\r\n prevNextButtons: true,\r\n pageDots: false,\r\n dragThreshold: 10,\r\n on: {\r\n ready: function() {\r\n $slider.addClass('first-el flickity-ready').removeClass('hidden');\r\n },\r\n },\r\n };\r\n\r\n if (matchMedia('screen and (max-width: 1023px)').matches) {\r\n options = {\r\n contain: true,\r\n wrapAround: false,\r\n cellAlign: 'left',\r\n groupCells: false,\r\n prevNextButtons: true,\r\n pageDots: false,\r\n dragThreshold: 10,\r\n on: {\r\n ready: function() {\r\n $slider.addClass('first-el flickity-ready').removeClass('hidden');\r\n },\r\n },\r\n };\r\n }\r\n\r\n let flkty = $slider.flickity(options);\r\n let flktyData = $slider.data('flickity');\r\n\t\t\t\r\n flkty.on('change.flickity', function () {\r\n\r\n if (matchMedia('screen and (max-width: 1023px)').matches) {\r\n if (flktyData.selectedIndex == 0) {\r\n $slider.addClass('first-el');\r\n } else {\r\n $slider.removeClass('first-el');\r\n }\r\n }\r\n });\r\n });\r\n },\r\n}\r\n\r\nArticleListing.init();\r\n\r\n$(window).resize(function () {\r\n ArticleListing.init();\r\n});\r\n\r\nwindow.ArticleListing = ArticleListing;\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/sliders/article-listing.js","let TrustbarSlider = {}, isInitialized = false, $trustbarSlider, $slider, $autoplay;\r\n\r\nTrustbarSlider = {\r\n init() {\r\n $trustbarSlider = $('.js-trustbar-slider');\r\n\r\n if ($trustbarSlider.length === 0) {\r\n return;\r\n }\r\n\r\n $.each( $trustbarSlider, function() {\r\n $slider = $(this);\r\n $autoplay = $slider.data('autoplay');\r\n\r\n $slider.flickity({\r\n autoPlay: $autoplay,\r\n pauseAutoPlayOnHover: false,\r\n cellAlign: 'left',\r\n contain: true,\r\n prevNextButtons: false,\r\n wrapAround: true,\r\n pageDots: true,\r\n\t\t\t\tdragThreshold: 10,\r\n\t\t\t\timagesLoaded: true,\r\n on: {\r\n ready: function () {\r\n if (matchMedia('screen and (max-width: 1023px)').matches) {\r\n isInitialized = true;\r\n }\r\n },\r\n },\r\n });\r\n\r\n if (matchMedia('screen and (min-width: 1024px)').matches) {\r\n isInitialized = false;\r\n }\r\n\r\n if (isInitialized == false) {\r\n $slider.flickity('destroy');\r\n }\r\n });\r\n },\r\n}\r\n\r\n$(function () {\r\n TrustbarSlider.init();\r\n\r\n $(window).resize(function () {\r\n TrustbarSlider.init();\r\n\t});\r\n\r\n});\r\n\r\nwindow.TrustbarSlider = TrustbarSlider;\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/sliders/trustbar-slider.js","let CartSlider = {};\r\n\r\nCartSlider = {\r\n init(event) {\r\n let $cartSlider = $('.js-cart-related-slider');\r\n\r\n if ($cartSlider.length === 0) {\r\n return;\r\n }\r\n\r\n $.each($cartSlider, function () {\r\n\t\t\tlet $slider = $(this);\r\n\t\t\tlet sliderItemLength = $slider.find('.product-thumb-item').length;\r\n\r\n let options = {\r\n pageDots: false,\r\n groupCells: false,\r\n cellAlign: 'center',\r\n percentPosition: false,\r\n wrapAround: false,\r\n contain: true,\r\n\t\t\t\tdragThreshold: 10,\r\n\t\t\t\tdraggable: sliderItemLength > 3 ? true : false,\r\n prevNextButtons: sliderItemLength > 3 ? true : false,\r\n on: {\r\n ready: function () {\r\n\t\t\t\t\t\t$slider.removeClass('invisible');\r\n },\r\n },\r\n };\r\n\r\n\t\t\t$slider.flickity(options);\r\n\r\n\t\t\tif (event == 'destroy') {\t\t\t\r\n\t\t\t\t$slider.flickity('destroy');\r\n\t\t\t\t$slider.addClass('invisible');\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (event == 'reInit') {\r\n\t\t\t\t$slider.flickity(options);\r\n\t\t\t}\t\t\t\r\n });\r\n },\r\n}\r\n\r\n$(function () {\r\n CartSlider.init();\r\n});\r\n\r\nwindow.CartSlider = CartSlider;\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/sliders/cart-slider.js","let CategoryPromoSlider = {},\r\n // isInitialized = false,\r\n $categoryPromoSlider, $slider;\r\n\r\nCategoryPromoSlider = {\r\n init() {\r\n $categoryPromoSlider = $('.js-category-promo-slider');\r\n\r\n if ($categoryPromoSlider.length === 0) {\r\n return;\r\n }\r\n\r\n $.each($categoryPromoSlider, function () {\r\n\t\t\t$slider = $(this);\r\n\t\t\tlet sliderItemLength = $slider.find('.categoryPromo-item').length;\r\n\r\n $slider.flickity({\r\n\t\t\t\tcellAlign: 'center',\r\n contain: true,\r\n prevNextButtons: false,\r\n pageDots: true,\r\n\t\t\t\tdragThreshold: 10,\r\n on: {\r\n ready: function () {\r\n if (sliderItemLength > 3) {\r\n\t\t\t\t\t\t\t$slider.addClass('is-multiple');\r\n\t\t\t\t\t\t}\r\n },\r\n },\r\n });\r\n });\r\n },\r\n}\r\n\r\n$(function () {\r\n CategoryPromoSlider.init();\r\n\r\n $(window).resize(function () {\r\n CategoryPromoSlider.init();\r\n });\r\n\r\n});\r\n\r\nwindow.CategoryPromoSlider = CategoryPromoSlider;\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/sliders/category-promo-slider.js","let SubNavigation = {};\r\n\r\nSubNavigation = {\r\n init() {\r\n let $subNavigationSlider = $('.js-sub-navigation-slider');\r\n\r\n if ($subNavigationSlider.length === 0) {\r\n return;\r\n }\r\n\r\n $.each($subNavigationSlider, function () {\r\n let $slider = $(this);\r\n\t\t\tlet slideCount = $slider.children().length;\r\n $slider.flickity({\r\n pageDots: false,\r\n groupCells: false,\r\n cellAlign: slideCount <= 4 ? 'center' : 'left',\r\n percentPosition: false,\r\n wrapAround: false,\r\n contain: true,\r\n dragThreshold: 10,\r\n\t\t\t\tprevNextButtons: false,\r\n on: {\r\n ready: function ready() {\r\n $slider.closest('.sub-navigation').removeClass('is-hidden').addClass('is-loaded');\r\n },\r\n },\r\n });\r\n });\r\n },\r\n}\r\n\r\n$(function () {\r\n SubNavigation.init();\r\n\r\n window.addEventListener('resize', window.stokpress.debounce(function () {\r\n SubNavigation.init();\r\n }, 500));\r\n\r\n});\r\n\r\nwindow.SubNavigation = SubNavigation;\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/sliders/sub-navigation.js","var ProductBundlePageSlider = {},\r\n $productBundlePageSlider;\r\n\r\nProductBundlePageSlider = {\r\n init() {\r\n $productBundlePageSlider = $('.js-product-bundle-page-slider');\r\n\r\n if ($productBundlePageSlider.length === 0) {\r\n return;\r\n }\r\n\r\n $.each($productBundlePageSlider, function () {\r\n let $slider = $(this);\r\n\r\n\t\t\t$slider.flickity(\r\n\t\t\t\t{\r\n\t\t\t\t\tcellAlign: 'left',\r\n\t\t\t\t\tcontain: true,\r\n\t\t\t\t\tprevNextButtons: true,\r\n\t\t\t\t\tpageDots: false,\r\n\t\t\t\t\twrapAround: true,\r\n\t\t\t\t\ton: {\r\n\t\t\t\t\t\tready: function () {\r\n\t\t\t\t\t\t\t$slider.addClass('first-el');\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t}\r\n\t\t\t);\r\n\r\n });\r\n },\r\n}\r\n\r\n$(function () {\r\n\tProductBundlePageSlider.init();\r\n});\r\n\r\nwindow.ProductBundlePageSlider = ProductBundlePageSlider;\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/sliders/product-bundle-page-slider.js","function _extends(){return(_extends=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(t[o]=n[o])}return t}).apply(this,arguments)}function _typeof(t){return(_typeof=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t})(t)}!function(t,e){\"object\"===(\"undefined\"==typeof exports?\"undefined\":_typeof(exports))&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):t.LazyLoad=e()}(this,function(){\"use strict\";var t=\"undefined\"!=typeof window,e=t&&!(\"onscroll\"in window)||\"undefined\"!=typeof navigator&&/(gle|ing|ro)bot|crawl|spider/i.test(navigator.userAgent),n=t&&\"IntersectionObserver\"in window,o=t&&\"classList\"in document.createElement(\"p\"),r={elements_selector:\"img\",container:e||t?document:null,threshold:300,thresholds:null,data_src:\"src\",data_srcset:\"srcset\",data_sizes:\"sizes\",data_bg:\"bg\",class_loading:\"loading\",class_loaded:\"loaded\",class_error:\"error\",load_delay:0,auto_unobserve:!0,callback_enter:null,callback_exit:null,callback_reveal:null,callback_loaded:null,callback_error:null,callback_finish:null,use_native:!1},a=function(t,e){var n,o=new t(e);try{n=new CustomEvent(\"LazyLoad::Initialized\",{detail:{instance:o}})}catch(t){(n=document.createEvent(\"CustomEvent\")).initCustomEvent(\"LazyLoad::Initialized\",!1,!1,{instance:o})}window.dispatchEvent(n)};var i=function(t,e){return t.getAttribute(\"data-\"+e)},s=function(t,e,n){var o=\"data-\"+e;null!==n?t.setAttribute(o,n):t.removeAttribute(o)},c=function(t){return\"true\"===i(t,\"was-processed\")},l=function(t,e){return s(t,\"ll-timeout\",e)},u=function(t){return i(t,\"ll-timeout\")},d=function(t,e){t&&t(e)},f=function(t,e){t._loadingCount+=e,0===t._elements.length&&0===t._loadingCount&&d(t._settings.callback_finish)},_=function(t){for(var e,n=[],o=0;e=t.children[o];o+=1)\"SOURCE\"===e.tagName&&n.push(e);return n},v=function(t,e,n){n&&t.setAttribute(e,n)},g=function(t,e){v(t,\"sizes\",i(t,e.data_sizes)),v(t,\"srcset\",i(t,e.data_srcset)),v(t,\"src\",i(t,e.data_src))},m={IMG:function(t,e){var n=t.parentNode;n&&\"PICTURE\"===n.tagName&&_(n).forEach(function(t){g(t,e)});g(t,e)},IFRAME:function(t,e){v(t,\"src\",i(t,e.data_src))},VIDEO:function(t,e){_(t).forEach(function(t){v(t,\"src\",i(t,e.data_src))}),v(t,\"src\",i(t,e.data_src)),t.load()}},b=function(t,e){var n,o,r=e._settings,a=t.tagName,s=m[a];if(s)return s(t,r),f(e,1),void(e._elements=(n=e._elements,o=t,n.filter(function(t){return t!==o})));!function(t,e){var n=i(t,e.data_src),o=i(t,e.data_bg);n&&(t.style.backgroundImage='url(\"'.concat(n,'\")')),o&&(t.style.backgroundImage=o)}(t,r)},h=function(t,e){o?t.classList.add(e):t.className+=(t.className?\" \":\"\")+e},p=function(t,e,n){t.addEventListener(e,n)},y=function(t,e,n){t.removeEventListener(e,n)},E=function(t,e,n){y(t,\"load\",e),y(t,\"loadeddata\",e),y(t,\"error\",n)},w=function(t,e,n){var r=n._settings,a=e?r.class_loaded:r.class_error,i=e?r.callback_loaded:r.callback_error,s=t.target;!function(t,e){o?t.classList.remove(e):t.className=t.className.replace(new RegExp(\"(^|\\\\s+)\"+e+\"(\\\\s+|$)\"),\" \").replace(/^\\s+/,\"\").replace(/\\s+$/,\"\")}(s,r.class_loading),h(s,a),d(i,s),f(n,-1)},I=function(t,e){var n=function n(r){w(r,!0,e),E(t,n,o)},o=function o(r){w(r,!1,e),E(t,n,o)};!function(t,e,n){p(t,\"load\",e),p(t,\"loadeddata\",e),p(t,\"error\",n)}(t,n,o)},k=[\"IMG\",\"IFRAME\",\"VIDEO\"],A=function(t,e){var n=e._observer;z(t,e),n&&e._settings.auto_unobserve&&n.unobserve(t)},L=function(t){var e=u(t);e&&(clearTimeout(e),l(t,null))},x=function(t,e){var n=e._settings.load_delay,o=u(t);o||(o=setTimeout(function(){A(t,e),L(t)},n),l(t,o))},z=function(t,e,n){var o=e._settings;!n&&c(t)||(k.indexOf(t.tagName)>-1&&(I(t,e),h(t,o.class_loading)),b(t,e),function(t){s(t,\"was-processed\",\"true\")}(t),d(o.callback_reveal,t),d(o.callback_set,t))},O=function(t){return!!n&&(t._observer=new IntersectionObserver(function(e){e.forEach(function(e){return function(t){return t.isIntersecting||t.intersectionRatio>0}(e)?function(t,e){var n=e._settings;d(n.callback_enter,t),n.load_delay?x(t,e):A(t,e)}(e.target,t):function(t,e){var n=e._settings;d(n.callback_exit,t),n.load_delay&&L(t)}(e.target,t)})},{root:(e=t._settings).container===document?null:e.container,rootMargin:e.thresholds||e.threshold+\"px\"}),!0);var e},N=[\"IMG\",\"IFRAME\"],C=function(t,e){return function(t){return t.filter(function(t){return!c(t)})}((n=t||function(t){return t.container.querySelectorAll(t.elements_selector)}(e),Array.prototype.slice.call(n)));var n},M=function(t,e){this._settings=function(t){return _extends({},r,t)}(t),this._loadingCount=0,O(this),this.update(e)};return M.prototype={update:function(t){var n,o=this,r=this._settings;(this._elements=C(t,r),!e&&this._observer)?(function(t){return t.use_native&&\"loading\"in HTMLImageElement.prototype}(r)&&((n=this)._elements.forEach(function(t){-1!==N.indexOf(t.tagName)&&(t.setAttribute(\"loading\",\"lazy\"),z(t,n))}),this._elements=C(t,r)),this._elements.forEach(function(t){o._observer.observe(t)})):this.loadAll()},destroy:function(){var t=this;this._observer&&(this._elements.forEach(function(e){t._observer.unobserve(e)}),this._observer=null),this._elements=null,this._settings=null},load:function(t,e){z(t,this,e)},loadAll:function(){var t=this;this._elements.forEach(function(e){A(e,t)})}},t&&function(t,e){if(e)if(e.length)for(var n,o=0;n=e[o];o+=1)a(t,n);else a(t,e)}(M,window.lazyLoadOptions),M});\n//# sourceMappingURL=lazyload.min.js.map\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/vanilla-lazyload/dist/lazyload.min.js\n// module id = 81\n// module chunks = 0","$.fn.plusItem = function () {\r\n let $btn, $items;\r\n\r\n $btn = $(this).find('.js-plus-item-btn'),\r\n $items = $(this).find('.item');\r\n\r\n if ($(window).innerWidth() > 991) {\r\n if ($items.length > 8) {\r\n $(this).find('.item:lt(8)').removeClass('d-none');\r\n $btn.removeClass('d-none');\r\n } else {\r\n $btn.addClass('d-none');\r\n $items.removeClass('d-none');\r\n }\r\n } else {\r\n if ($items.length > 6) {\r\n $(this).find('.item:lt(6)').removeClass('d-none');\r\n $btn.removeClass('d-none');\r\n } else {\r\n $btn.addClass('d-none');\r\n $items.removeClass('d-none');\r\n }\r\n }\r\n\r\n $btn.find('label').text('+' + $(this).find('.item.d-none').length);\r\n\r\n $btn.click(function () {\r\n $items.each(function () {\r\n setTimeout(() => {\r\n $(this).removeClass('d-none').fadeIn('slow');\r\n }, $(this).index() * 50);\r\n });\r\n $(this).addClass('d-none');\r\n });\r\n\r\n return this;\r\n};\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/util/plusItem.js","var Platform = {};\r\n\r\n(function () {\r\n\r\n Platform.detectDevice = function () {\r\n var body = document.body;\r\n var ua = navigator.userAgent;\r\n var checker = {\r\n // OS\r\n Windows: ua.match(/Windows/),\r\n MacOS: ua.match(/Mac/),\r\n Android: ua.match(/Android/),\r\n\r\n // Browser\r\n Msie: ua.match(/Trident/),\r\n Edge: ua.match(/Edge/),\r\n Chrome: ua.match(/Chrome/),\r\n Firefox: ua.match(/Firefox/),\r\n Safari: ua.match(/Safari/),\r\n\r\n // Device\r\n isApple: ua.match(/(iPhone|iPod|iPad)/),\r\n iPhone: ua.match(/iPhone/),\r\n iPad: ua.match(/iPad/),\r\n iPod: ua.match(/iPod/),\r\n };\r\n\r\n if (checker.isApple) {\r\n // Apple\r\n body.classList.add('isApple');\r\n\r\n if (checker.iPhone) {\r\n // Apple iPhone\r\n body.classList.add('iphone');\r\n } else if (checker.iPad) {\r\n // Apple iPad\r\n body.classList.add('ipad');\r\n } else if (checker.iPod) {\r\n // Apple iPod\r\n body.classList.add('ipod');\r\n }\r\n\r\n } else if (checker.Windows){\r\n // Windows OS\r\n body.classList.add('windowsOS');\r\n\r\n if (checker.Edge){\r\n // Edge Browser\r\n body.classList.add('edge');\r\n } else if (checker.Chrome){\r\n // Chrome Browser\r\n body.classList.add('chrome');\r\n } else if(checker.Safari){\r\n // Safari Browser\r\n body.classList.add('safari');\r\n } else if(checker.Firefox){\r\n // Firefox Browser\r\n body.classList.add('firefox');\r\n } else if(checker.Msie){\r\n // IE Browser\r\n body.classList.add('msie');\r\n }\r\n\r\n } else if (checker.MacOS){\r\n // Mac OS\r\n body.classList.add('macOS');\r\n\r\n if (checker.Chrome){\r\n // Chrome Browser\r\n body.classList.add('chrome');\r\n } else if(checker.Safari){\r\n // Safari Browser\r\n body.classList.add('safari');\r\n } else if(checker.Firefox){\r\n // Firefox Browser\r\n body.classList.add('firefox');\r\n }\r\n\r\n } else if (checker.Android){\r\n // Android OS\r\n body.classList.add('AndroidOS');\r\n }\r\n\r\n }\r\n\r\n Platform.detectDevice();\r\n\r\n})($);\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/util/crossPlatform.js","$.fn.autoPadding = function ($settings) {\r\n var $config = {\r\n source: null,\r\n },\r\n $target = $(this);\r\n\r\n if ($settings) jQuery.extend($config, $settings);\r\n\r\n $(this).css({\r\n paddingTop: $config.source.innerHeight() + 'px',\r\n });\r\n\r\n var windowWidth = $(window).width();\r\n\r\n $(window).resize(function () {\r\n\t\tif ($(window).width() != windowWidth) {\r\n\t\t\twindowWidth = $(window).width();\r\n\t\t\t\r\n\t\t\t$target.css({\r\n\t\t\t\tpaddingTop: $config.source.innerHeight() + 'px',\r\n\t\t\t});\r\n\t\t} \r\n\t});\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/util/autoPadding.js","// Promo Box\r\n$('.promo-box-name').txtTruncate({\r\n\tend: '...',\r\n\tlines: 1,\r\n});\r\n\r\n$('.promo-box-description').txtTruncate({\r\n\tend: '...',\r\n\tlines: 2,\r\n});\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/util/ellipsis.js","jQuery.fn.backgroundSwitcher = function ( settings ) {\r\n var config = {\r\n breakpoint: 991.98,\r\n bgDesktop: $( this ).data( 'bg-desktop' ),\r\n bgMobile: $( this ).data( 'bg-mobile' ),\r\n },\r\n self = $( this );\r\n\r\n if ( settings ) jQuery.extend( config, settings );\r\n\r\n changeBackground();\r\n\r\n function changeBackground () {\r\n var imageURL = config.bgDesktop;\r\n\r\n if ( $( window ).innerWidth() <= config.breakpoint ) {\r\n imageURL = config.bgMobile;\r\n }\r\n\r\n self.css( 'background-image', `url(${imageURL})` );\r\n\r\n // if ( self.prop( 'tagName' ) === 'IMG' ) {\r\n // if ( self.hasClass( 'lazy' ) && !self.hasClass( 'loaded' ) ) {\r\n // self.attr( 'data-src', imageURL );\r\n // } else {\r\n // self.attr( 'src', imageURL );\r\n // }\r\n // } else if ( [ 'DIV', 'SECTION' ].indexOf( self.prop( 'tagName' ) ) !== -1 ) {\r\n // if ( self.hasClass( 'lazy' ) && !self.data( 'wasProcessed' ) ) {\r\n // self.attr( 'data-bg', `url(${imageURL})` );\r\n // } else {\r\n // self.css( 'background-image', `url(${imageURL})` );\r\n // }\r\n // }\r\n }\r\n\r\n return this;\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/util/backgroundSwitcher.js","let articleGridFilter = {};\r\n\r\narticleGridFilter.dropdown = function() {\r\n var $articleDropdown = $('.article-dropdown .article-dropdown-title');\r\n var $articleContent = $('.article-dropdown .article-dropdown-menu');\r\n\r\n $articleDropdown.click(function() {\r\n var thisDropdown = $(this);\r\n\r\n if (thisDropdown.next('.article-dropdown-menu').hasClass('show')) {\r\n thisDropdown.next('.article-dropdown-menu').removeClass('show');\r\n } else {\r\n $articleContent.removeClass('show');\r\n thisDropdown.next('.article-dropdown-menu').addClass('show');\r\n }\r\n });\r\n\r\n window.onclick = function(event) {\r\n if (!event.target.matches('.article-dropdown-title')) {\r\n var dropdowns = document.getElementsByClassName('article-dropdown-menu');\r\n var i;\r\n for (i = 0; i < dropdowns.length; i++) {\r\n var openDropdown = dropdowns[i];\r\n if (openDropdown.classList.contains('show')) {\r\n openDropdown.classList.remove('show');\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n articleGridFilter.dropdown();\n\n\n// WEBPACK FOOTER //\n// ./scripts/util/articleFilter.js","let checkTouch = function() {\r\n let $html = $('html');\r\n\r\n if ('ontouchstart' in document.documentElement) {\r\n $html.removeClass('no-touchevents');\r\n $html.addClass('touchevents');\r\n }\r\n\r\n if ($html.hasClass('no-touchevents')) {\r\n $(window).on('touchstart.touchTest', function () {\r\n $html.removeClass('no-touchevents');\r\n $html.addClass('touchevents');\r\n $(window).off('touchstart.touchTest');\r\n });\r\n }\r\n};\r\n\r\ncheckTouch();\n\n\n// WEBPACK FOOTER //\n// ./scripts/util/checkTouch.js","$.fn.displayProp = function () {\r\n\tvar self, target, items;\r\n\r\n\tself = $( this );\r\n\ttarget = self.data( 'prop-target' );\r\n\titems = self.find( '.item' );\r\n\r\n\t$.each( items, function ( i, el ) {\r\n\t\t$( el ).on( 'mouseenter', function () {\r\n\t\t\t$( target ).text( $( this ).data( 'prop' ) );\r\n\t\t} ).on( 'mouseleave', function () {\r\n\t\t\t$( target ).text( self.find( 'input[type=radio]:checked' ).parents( 'li' ).data( 'prop' ) );\r\n\t\t} );\r\n\t} );\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/util/displayProp.js","let disableBodyScroll = (function () {\r\n\tlet _selector = false,\r\n\t\t_element = false,\r\n\t\t_clientY;\r\n\r\n\tif (!Element.prototype.matches)\r\n\t\tElement.prototype.matches = Element.prototype.msMatchesSelector ||\r\n\t\tElement.prototype.webkitMatchesSelector;\r\n\r\n\tif (!Element.prototype.closest)\r\n\t\tElement.prototype.closest = function (s) {\r\n\t\t\tlet el = this;\r\n\t\t\tif (!document.documentElement.contains(el)) return null;\r\n\t\t\tdo {\r\n\t\t\t\tif (el.matches(s)) return el;\r\n\t\t\t\tel = el.parentElement || el.parentNode;\r\n\t\t\t} while (el !== null && el.nodeType === 1);\r\n\t\t\treturn null;\r\n\t\t};\r\n\r\n\tlet preventBodyScroll = function (event) {\r\n\t\tif (false === _element || !event.target.closest(_selector)) {\r\n\t\t\tevent.preventDefault();\r\n\t\t}\r\n\t};\r\n\r\n\tlet captureClientY = function (event) {\r\n\t\tif (event.targetTouches.length === 1) {\r\n\t\t\t_clientY = event.targetTouches[0].clientY;\r\n\t\t}\r\n\t};\r\n\r\n\tlet preventOverscroll = function (event) {\r\n\t\tif (event.targetTouches.length !== 1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet clientY = event.targetTouches[0].clientY - _clientY;\r\n\r\n\t\tif (_element.scrollTop === 0 && clientY > 0) {\r\n\t\t\tevent.preventDefault();\r\n\t\t}\r\n\r\n\t\tif ((_element.scrollHeight - _element.scrollTop <= _element.clientHeight) && clientY < 0) {\r\n\t\t\tevent.preventDefault();\r\n\t\t}\r\n\t};\r\n\r\n\treturn function (allow, selector) {\r\n\t\tif (typeof selector !== 'undefined') {\r\n\t\t\t_selector = selector;\r\n\t\t\t_element = document.querySelector(selector);\r\n\t\t}\r\n\r\n\t\tif (true === allow) {\r\n\t\t\tif (false !== _element) {\r\n\t\t\t\t_element.addEventListener('touchstart', captureClientY, {\r\n\t\t\t\t\tpassive: false,\r\n\t\t\t\t});\r\n\t\t\t\t_element.addEventListener('touchmove', preventOverscroll, {\r\n\t\t\t\t\tpassive: false,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tdocument.body.addEventListener('touchmove', preventBodyScroll, {\r\n\t\t\t\tpassive: false,\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tif (false !== _element) {\r\n\t\t\t\t_element.removeEventListener('touchstart', captureClientY, {\r\n\t\t\t\t\tpassive: false,\r\n\t\t\t\t});\r\n\t\t\t\t_element.removeEventListener('touchmove', preventOverscroll, {\r\n\t\t\t\t\tpassive: false,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tdocument.body.removeEventListener('touchmove', preventBodyScroll, {\r\n\t\t\t\tpassive: false,\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n}());\r\n\r\nwindow.disableBodyScroll = disableBodyScroll;\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/util/disableBodyScroll.js","// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./styles/main.scss\n// module id = 91\n// module chunks = 0"],"sourceRoot":""}