{"version":3,"sources":["autocomplete.js","lazysizes.js","ofi.js","svg4everybody.js","util.js","sharer.js","swiper.js","codyhouse/_1_adaptive-navigation.js","codyhouse/_1_anim-menu-btn.js","codyhouse/_1_modal-window.js","codyhouse/_2_flexi-header.js","codyhouse/_2_hiding-nav.js","codyhouse/_2_modal-video.js","accordion.js","advanced-search.js","backtotop.js","search.js","share.js","testimonials.js","vendor-pinterest.js","vendor-youtube.js"],"names":["global","factory","exports","module","define","amd","self","autocomplete","this","settings","selected","debounceTimer","doc","document","container","createElement","containerStyle","style","userAgent","navigator","mobileFirefox","indexOf","debounceWaitMs","preventSubmit","keyUpEventName","items","inputValue","minLen","showOnFocus","keypressCounter","undefined","minLength","input","Error","clearDebounceTimer","window","clearTimeout","containerDisplayed","parentNode","clear","parent","removeChild","update","firstChild","render","item","currentValue","itemElement","textContent","label","renderGroup","groupName","groupDiv","fragment","createDocumentFragment","prevGroup","forEach","group","className","appendChild","div","addEventListener","ev","onSelect","preventDefault","stopPropagation","length","emptyMsg","empty","body","height","width","offsetWidth","inputRect","maxHeight","calc","customize","docEl","documentElement","clientTop","clientLeft","scrollTop","pageYOffset","scrollLeft","pageXOffset","top","getBoundingClientRect","offsetHeight","left","innerHeight","bottom","updatePosition","elements","getElementsByClassName","element","previous","previousElementSibling","offsetTop","selectBottom","containerBottom","updateScroll","updateIfDisplayed","resizeEventHandler","scrollEventHandler","e","target","keyupEventHandler","keyCode","which","_i","ignore_1","startFetch","keydownEventHandler","containerIsDisplayed","i","selectPrev","selectNext","focusEventHandler","trigger","savedKeypressCounter","val","value","setTimeout","fetch","blurEventHandler","activeElement","position","evt","destroy","removeEventListener","lazySizes","Date","lazysizes","lazySizesCfg","prop","lazySizesDefaults","lazyClass","loadedClass","loadingClass","preloadClass","errorClass","autosizesClass","srcAttr","srcsetAttr","sizesAttr","minSize","customMedia","init","expFactor","hFac","loadMode","loadHidden","ricTimeout","throttleDelay","lazySizesConfig","lazysizesConfig","cfg","noSupport","docElem","supportPicture","HTMLPictureElement","bind","requestAnimationFrame","requestIdleCallback","regPicture","loadEvents","regClassCache","Array","prototype","hasClass","ele","cls","RegExp","test","addClass","setAttribute","trim","removeClass","reg","replace","addRemoveLoadEvents","dom","fn","add","action","triggerEvent","elem","name","detail","noBubbles","noCancelable","event","createEvent","instance","initEvent","dispatchEvent","updatePolyfill","el","full","polyfill","picturefill","pf","src","reevaluate","getCSS","getComputedStyle","getWidth","_lazysizesWidth","rAF","firstFns","secondFns","fns","run","runFns","running","waiting","shift","rafBatch","queue","apply","arguments","push","hidden","_lsFlush","rAFIt","simple","that","args","debounce","func","timeout","timestamp","later","last","now","loader","regImg","regIframe","supportScroll","currentExpand","isLoading","lowRuns","resetPreloading","isVisible","isBodyHidden","isNestedVisible","elemExpand","outerRect","visible","eLtop","eLbottom","eLleft","eLright","offsetParent","right","checkElements","eLlen","rect","autoLoadElem","loadedSomething","elemNegativeExpand","elemExpandVal","beforeExpandVal","defaultExpand","preloadExpand","lazyloadElems","_lazyRace","prematureUnveil","unveilElement","expand","clientHeight","clientWidth","_defEx","eLvW","innerWidth","elvH","isCompleted","preloadElems","preloadAfterLoad","throttledCheckElements","lastTime","gDelay","rICTimeout","idleCallback","isPriority","delay","throttle","switchLoadingClass","_lazyCache","rafSwitchLoadingClass","rafedSwitchLoadingClass","handleSources","source","sourceSrcset","lazyUnveil","isAuto","sizes","isImg","srcset","isPicture","firesLoad","defaultPrevented","nodeName","resetPreloadingTimer","call","getElementsByTagName","contentWindow","location","changeIframeSrc","isLoaded","complete","naturalWidth","loading","autoSizer","updateElem","afterScroll","altLoadmodeScrollListner","onload","started","_","persisted","loadingElements","querySelectorAll","img","MutationObserver","observe","childList","subtree","attributes","setInterval","readyState","checkElems","unveil","_aLSL","sizeElement","sources","len","dataAttr","getSizeElement","debouncedUpdateElementsSizes","autosizesElems","uP","aC","rC","hC","fire","gW","objectFitImages","OFI","propRegex","testImg","Image","object-position","supportsObjectFit","supportsObjectPosition","supportsOFI","supportsCurrentSrc","currentSrc","nativeGetAttribute","getAttribute","nativeSetAttribute","autoModeEnabled","setPlaceholder","placeholder","onImageReady","callback","fixOne","parsed","fontFamily","props","exec","getStyle","ofi","skipTest","naturalHeight","descriptors","get","set","Object","defineProperty","ss","keepSrcUsable","err","console","warn","ns","evaled","fillImg","reselect","curSrc","supported","polyfillCurrentSrc","backgroundImage","backgroundPosition","backgroundRepeat","backgroundOrigin","backgroundSize","fix","imgs","opts","startAutoMode","tagName","watchMQ","getOfiImageMaybe","HTMLImageElement","String","hijackAttributes","root","svg4everybody","embed","svg","viewBox","hasAttribute","clone","cloneNode","childNodes","loadreadystatechange","xhr","onreadystatechange","cachedDocument","_cachedDocument","implementation","createHTMLDocument","innerHTML","responseText","_cachedTarget","_embeds","splice","map","id","getElementById","getSVGAncestor","node","toLowerCase","rawopts","inIframe","match","requests","uses","numberOfSvgUseElementsToBypass","oninterval","index","use","validate","srcSplit","split","url","join","XMLHttpRequest","open","send","Util","classList","contains","slice","remove","toggleClass","bool","setAttributes","attrs","key","getChildrenByClassName","children","childrenByClass","is","selector","nodeType","qa","setHeight","start","to","duration","cb","timeFunction","change","currentTime","animateHeight","progress","parseInt","Math","scrollTo","final","scrollEl","scrollY","animateScroll","easeInOutQuad","moveFocus","focus","getIndexInArray","array","cssSupports","property","CSS","supports","g","toUpperCase","extend","extended","deep","toString","merge","obj","hasOwnProperty","osHasReducedMotion","matchMedia","matchMediaObj","matches","Element","msMatchesSelector","webkitMatchesSelector","closest","s","parentElement","CustomEvent","params","bubbles","cancelable","initCustomEvent","Event","resetFocusTabsStyle","t","b","c","d","easeInQuart","easeOutQuart","easeInOutQuart","easeOutElastic","p","a","abs","PI","asin","pow","sin","focusTab","shouldInit","outlineStyle","eventDetected","detectClick","resetFocusStyle","detectTab","setProperty","initFocusTabs","Sharer","elems","l","currentTarget","srcElement","share","constructor","getValue","attr","startsWith","sharer","facebook","shareUrl","u","hashtag","email","subject","isLink","whatsapp","text","pinterest","media","description","urlSharer","keys","str","encodeURIComponent","href","popWidth","popHeight","screenX","popParams","screenY","newWindow","Swiper","blur","querySelector","hash","win","history","getPropertyValue","screen","Dom7","arr","$","context","els","tempParent","html","toCreate","unique","uniqueArray","Class","Methods","classes","j","toggle","arguments$1","attrName","removeAttr","removeAttribute","data","dom7ElementDataStorage","dataKey","transform","elStyle","webkitTransform","transition","webkitTransitionDuration","transitionDuration","on","assign","eventType","targetSelector","listener","capture","handleLiveEvent","eventData","dom7EventData","unshift","parents","k","handleEvent","events","event$1","dom7LiveListeners","proxyListener","dom7Listeners","off","handlers","handler","dom7proxy","filter","dataIndex","transitionEnd","fireCallBack","outerWidth","includeMargins","styles","parseFloat","outerHeight","offset","box","scrollX","css","each","compareWith","child","previousSibling","eq","returnIndex","append","newChild","tempDiv","prepend","insertBefore","next","nextElementSibling","nextAll","nextEls","prev","prevAll","prevEls","find","foundElements","found","matchedItems","toAdd","methodName","Utils","deleteProps","object","nextTick","getTranslate","axis","matrix","curTransform","transformMatrix","curStyle","WebKitCSSMatrix","MozTransform","OTransform","MsTransform","msTransform","m41","m42","parseUrlQuery","param","query","urlToParse","paramsPart","decodeURIComponent","isObject","o","len$1","nextSource","keysArray","nextIndex","nextKey","desc","getOwnPropertyDescriptor","enumerable","Support","touch","Modernizr","maxTouchPoints","DocumentTouch","pointerEvents","PointerEvent","observer","passiveListener","supportsPassive","gestures","SwiperClass","eventsListeners","eventName","staticAccessors","components","configurable","priority","method","once","onceHandler","f7proxy","eventHandler","emit","isArray","eventsArray","useModulesParams","instanceParams","modules","moduleName","useModules","modulesParams","moduleParams","modulePropName","moduleProp","moduleEventName","create","installModule","proto","static","install","m","concat","defineProperties","updateSize","$el","isHorizontal","isVertical","size","updateSlides","$wrapperEl","swiperSize","rtl","rtlTranslate","wrongRTL","isVirtual","virtual","enabled","previousSlidesLength","slides","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","slidesForMargin","slideIndex","cssMode","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","slidesNumberEvenToRows","slideSize","virtualSize","marginLeft","marginTop","marginRight","marginBottom","slidesPerColumn","floor","ceil","slidesPerView","slidesPerColumnFill","max","newSlidesGrid","slidesPerRow","numFullColumns","slide","newSlideOrderIndex","column","row","slidesPerGroup","groupIndex","slideIndexInGroup","columnsInGroup","min","-webkit-box-ordinal-group","-moz-box-ordinal-group","-ms-flex-order","-webkit-order","order","slideStyles","currentTransform","currentWebKitTransform","roundLengths","paddingLeft","paddingRight","boxSizing","paddingTop","paddingBottom","boxSizing$1","swiperSlideSize","centeredSlides","slidesPerGroupSkip","effect","setWrapperSize","i$1","slidesGridItem","i$2","slidesGridItem$1","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","allSlidesSize$1","allSlidesOffset","snapIndex","watchOverflow","checkOverflow","watchSlidesProgress","watchSlidesVisibility","updateSlidesOffset","updateAutoHeight","speed","activeSlides","newHeight","setTransition","activeIndex","swiperSlideOffset","offsetLeft","updateSlidesProgress","translate","offsetCenter","slideVisibleClass","visibleSlidesIndexes","visibleSlides","slideProgress","minTranslate","slideBefore","slideAfter","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","wasBeginning","wasEnd","updateSlidesClasses","activeSlide","realIndex","slideActiveClass","loop","slideDuplicateClass","slideDuplicateActiveClass","nextSlide","slideNextClass","prevSlide","slidePrevClass","slideDuplicateNextClass","slideDuplicatePrevClass","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","normalizeSlideIndex","skip","initialized","runCallbacksOnInit","updateClickedSlide","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","virtualTranslate","currentTranslate","setTranslate","byController","wrapperEl","x","y","previousTranslate","translateTo","runCallbacks","translateBounds","internal","swiper","animating","preventInteractionOnTransition","newTranslate","isH","behavior","onTranslateToWrapperTransitionEnd","destroyed","transition$1","transitionStart","direction","autoHeight","dir","slideTo","initialSlide","allowSlideNext","allowSlidePrev","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","loopedSlides","slideNext","increment","loopFix","_clientLeft","slidePrev","normalize","prevIndex","normalizedTranslate","normalizedSnapGrid","prevSnap","slideReset","slideToClosest","threshold","currentSnap","slidesPerViewDynamic","slideToIndex","loopCreate","loopFillGroupWithBlank","blankSlidesNum","blankNode","loopAdditionalSlides","prependSlides","appendSlides","diff","loopDestroy","grabCursor","setGrabCursor","moving","simulateTouch","isLocked","cursor","unsetGrabCursor","platform","ua","device","screenWidth","screenHeight","android","ipad","ipod","iphone","ie","edge","firefox","windows","electron","macos","manipulation","appendSlide","prependSlide","addSlide","activeIndexBuffer","baseLength","slidesBuffer","currentSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","Device","ios","androidChrome","desktop","cordova","phonegap","os","osVersion","webView","standalone","webview","pixelRatio","devicePixelRatio","onTouchStart","touchEventsData","touches","originalEvent","$targetEl","touchEventsTarget","isTouchEvent","type","button","isTouched","isMoved","noSwiping","noSwipingSelector","allowClick","swipeHandler","currentX","targetTouches","pageX","currentY","pageY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","formElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","onTouchMove","targetTouch","changedTouches","preventedByNestedSwiper","touchReleaseOnEdges","diffX","diffY","sqrt","touchAngle","atan2","touchMoveStopPropagation","nested","startTranslate","allowMomentumBounce","touchRatio","disableParentSwiper","resistanceRatio","resistance","followFinger","freeMode","velocities","time","onTouchEnd","currentPos","touchEndTime","timeDiff","lastClickTime","freeModeMomentum","lastMoveEvent","pop","velocityEvent","distance","velocity","freeModeMinimumVelocity","freeModeMomentumVelocityRatio","momentumDuration","freeModeMomentumRatio","momentumDistance","newPosition","afterBouncePosition","needsLoopFix","doBounce","bounceAmount","freeModeMomentumBounceRatio","freeModeMomentumBounce","freeModeSticky","moveDistance","currentSlideSize","longSwipesMs","stopIndex","groupSize","increment$1","ratio","longSwipes","longSwipesRatio","shortSwipes","navigation","nextEl","prevEl","onResize","breakpoints","setBreakpoint","autoplay","paused","onClick","preventClicks","preventClicksPropagation","stopImmediatePropagation","onScroll","dummyEventAttached","dummyEventListener","defaults","updateOnWindowResize","uniqueNavElements","preloadImages","updateOnImagesReady","noSwipingClass","passiveListeners","containerModifierClass","slideClass","slideBlankClass","wrapperClass","prototypes","attachEvents","touchEvents","move","end","passive","cancel","detachEvents","breakpoint","getBreakpoint","currentBreakpoint","breakpointOnlyParams","paramValue","breakpointParams","originalParams","wasMultiRow","isMultiRow","directionChanged","needsReLoop","changeDirection","points","point","minRatio","substr","sort","ref","wasLocked","lastSlidePosition","addClasses","classNames","suffixes","suffix","removeClasses","images","loadImage","imageEl","checkForComplete","image","onReady","onerror","imagesLoaded","imagesToLoad","extendedDefaults","prototypeGroup","protoMethod","moduleParamName","swiperParams","passedParams","swipers","containerEl","newParams","shadowRoot","options","touchEventsTouch","touchEventsDesktop","clickTimeout","__proto__","spv","breakLoop","translateValue","newDirection","needUpdate","currentDirection","slideEl","deleteInstance","cleanStyles","extendDefaults","newDefaults","Device$1","Support$1","support","Browser","isEdge","isSafari","isUiWebView","Browser$1","browser","Resize","resize","resizeHandler","orientationChangeHandler","Observer","WebkitMutationObserver","attach","ObserverFunc","mutations","observerUpdate","characterData","observers","observeParents","containerParents","observeSlideChildren","disconnect","Observer$1","Mousewheel","lastScrollTime","lastEventBeforeSnap","recentWheelEvents","isSupported","hasFeature","isEventSupported","sX","sY","pX","pY","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","shiftKey","deltaMode","spinX","spinY","pixelX","pixelY","handleMouseEnter","mouseEntered","handleMouseLeave","handle","mousewheel","eventsTarged","releaseOnEdges","delta","rtlFactor","forceToAxis","invert","newEvent$1","sign","ignoreWheelEvents","sensitivity","recentWheelEvents$1","prevEvent$1","firstEvent","snapToThreshold","autoplayDisableOnInteraction","stop","newEvent","raw","prevEvent","animateSlider","releaseScroll","returnValue","getTime","enable","disable","Navigation","$nextEl","$prevEl","disabledClass","lockClass","onPrevClick","onNextClick","Pagination","pagination","current","total","paginationType","bullets","firstIndex","lastIndex","midIndex","dynamicBullets","bulletSize","dynamicMainBullets","dynamicBulletIndex","bullet","$bullet","bulletIndex","bulletActiveClass","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","offsetProp","formatFractionCurrent","formatFractionTotal","progressbarDirection","progressbarOpposite","scale","scaleX","scaleY","renderCustom","paginationHTML","numberOfBullets","renderBullet","bulletClass","renderFraction","currentClass","totalClass","renderProgressbar","progressbarFillClass","clickable","clickableClass","modifierClass","progressbarOppositeClass","hiddenClass","Controller","LinearSpline","maxIndex","minIndex","guess","i1","i3","binarySearch","interpolate","x2","getInterpolateFunction","controller","spline","setTranslate$1","controlledTranslate","controlled","control","setControlledTranslate","by","inverse","setControlledTransition","a11y","makeElFocusable","addElRole","role","addElLabel","disableEl","enableEl","onEnterKey","notify","lastSlideMessage","nextSlideMessage","firstSlideMessage","prevSlideMessage","click","message","notification","liveRegion","updateNavigation","updatePagination","bulletEl","$bulletEl","paginationBulletMessage","Autoplay","$activeSlideEl","reverseDirection","stopOnLastSlide","pause","waitForTransition","onTransitionEnd","hideOnClick","toEdge","fromEdge","isHidden","bulletElement","number","activeIndexChange","snapIndexChange","slidesLengthChange","snapGridLengthChange","notificationClass","paginationUpdate","disableOnInteraction","onVisibilityChange","visibilityState","beforeTransitionStart","sliderFirstMove","touchEnd","AdaptNav","nav","list","moreBtn","dropdown","dropdownItems","dropdownClass","resizing","outrunIndex","resetAdaptNav","aria-expanded","aria-haspopup","aria-controls","toggleMoreDropdown","navigateItems","maxPosition","cloneList","hideAll","resetOutrun","outerHTML","adaptNavs","flexSupported","menuBtns","btn","status","Modal","triggers","firstFocusable","lastFocusable","moveFocusEl","modalFocus","selectedTrigger","preventScrollEl","getPreventScrollEl","showClass","initModal","getClientRects","closeModal","showModal","initModalEvents","getFocusableElements","emitModalEvents","overflow","cancelModalEvents","initClick","initKeyDown","trapFocus","allFocusable","focusableElString","getFirstVisible","getLastVisible","getFirstFocusable","modals","modalArrays","flexHeader","menuTrigger","firstFocusableElement","focusableEle","getMenuFirstFocusable","focusMenu","hidingNav","mainNav","subNav","scrolling","previousTop","currentTop","headerHeight","navIsFixed","triggerMobile","triggerMobileClass","getTriggerMobileMenu","resetHideNav","hideNavScrollDown","hideNavScrollUp","initSecondaryNav","ModalVideo","modalContent","contentIsIframe","modalIsOpen","initModalVideo","addLoadListener","revealContent","modalVideos","w","Accordion","multiItems","initAccordion","content","isOpen","aria-labelledby","initAccordionEvents","triggerAccordion","animateAccordion","initHeight","finalHeight","resetContentVisibility","closeSiblings","accordions","inputElement","then","response","json","result","backTop","checkBackToTop","windowTop","scrollOffset","scrollDuration","form","encodeURI","qs","field","humanizeNumber","num","toFixed","countButtons","totalContainer","totalValue","dataset","templateUrl","error","rawCount","count","counter","innerText","onCookiePolicyAccepted","async","defer"],"mappings":"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","file":"scripts.min.js","sourcesContent":["(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = global || self, global.autocomplete = factory());\n}(this, function () { 'use strict';\n\n  /*\n   * https://github.com/kraaden/autocomplete\n   * Copyright (c) 2016 Denys Krasnoshchok\n   * MIT License\n   */\n  function autocomplete(settings) {\n      // just an alias to minimize JS file size\n      var doc = document;\n      var container = doc.createElement(\"div\");\n      var containerStyle = container.style;\n      var userAgent = navigator.userAgent;\n      var mobileFirefox = userAgent.indexOf(\"Firefox\") !== -1 && userAgent.indexOf(\"Mobile\") !== -1;\n      var debounceWaitMs = settings.debounceWaitMs || 0;\n      var preventSubmit = settings.preventSubmit || false;\n      // 'keyup' event will not be fired on Mobile Firefox, so we have to use 'input' event instead\n      var keyUpEventName = mobileFirefox ? \"input\" : \"keyup\";\n      var items = [];\n      var inputValue = \"\";\n      var minLen = 2;\n      var showOnFocus = settings.showOnFocus;\n      var selected;\n      var keypressCounter = 0;\n      var debounceTimer;\n      if (settings.minLength !== undefined) {\n          minLen = settings.minLength;\n      }\n      if (!settings.input) {\n          throw new Error(\"input undefined\");\n      }\n      var input = settings.input;\n      container.className = \"autocomplete \" + (settings.className || \"\");\n      // IOS implementation for fixed positioning has many bugs, so we will use absolute positioning\n      containerStyle.position = \"absolute\";\n      /**\n       * Detach the container from DOM\n       */\n      function detach() {\n          var parent = container.parentNode;\n          if (parent) {\n              parent.removeChild(container);\n          }\n      }\n      /**\n       * Clear debouncing timer if assigned\n       */\n      function clearDebounceTimer() {\n          if (debounceTimer) {\n              window.clearTimeout(debounceTimer);\n          }\n      }\n      /**\n       * Attach the container to DOM\n       */\n      function attach() {\n          if (!container.parentNode) {\n              doc.body.appendChild(container);\n          }\n      }\n      /**\n       * Check if container for autocomplete is displayed\n       */\n      function containerDisplayed() {\n          return !!container.parentNode;\n      }\n      /**\n       * Clear autocomplete state and hide container\n       */\n      function clear() {\n          keypressCounter++;\n          items = [];\n          inputValue = \"\";\n          selected = undefined;\n          detach();\n      }\n      /**\n       * Update autocomplete position\n       */\n      function updatePosition() {\n          if (!containerDisplayed()) {\n              return;\n          }\n          containerStyle.height = \"auto\";\n          containerStyle.width = input.offsetWidth + \"px\";\n          var maxHeight = 0;\n          var inputRect;\n          function calc() {\n              var docEl = doc.documentElement;\n              var clientTop = docEl.clientTop || doc.body.clientTop || 0;\n              var clientLeft = docEl.clientLeft || doc.body.clientLeft || 0;\n              var scrollTop = window.pageYOffset || docEl.scrollTop;\n              var scrollLeft = window.pageXOffset || docEl.scrollLeft;\n              inputRect = input.getBoundingClientRect();\n              var top = inputRect.top + input.offsetHeight + scrollTop - clientTop;\n              var left = inputRect.left + scrollLeft - clientLeft;\n              containerStyle.top = top + \"px\";\n              containerStyle.left = left + \"px\";\n              maxHeight = window.innerHeight - (inputRect.top + input.offsetHeight);\n              if (maxHeight < 0) {\n                  maxHeight = 0;\n              }\n              containerStyle.top = top + \"px\";\n              containerStyle.bottom = \"\";\n              containerStyle.left = left + \"px\";\n              containerStyle.maxHeight = maxHeight + \"px\";\n          }\n          // the calc method must be called twice, otherwise the calculation may be wrong on resize event (chrome browser)\n          calc();\n          calc();\n          if (settings.customize && inputRect) {\n              settings.customize(input, inputRect, container, maxHeight);\n          }\n      }\n      /**\n       * Redraw the autocomplete div element with suggestions\n       */\n      function update() {\n          // delete all children from autocomplete DOM container\n          while (container.firstChild) {\n              container.removeChild(container.firstChild);\n          }\n          // function for rendering autocomplete suggestions\n          var render = function (item, currentValue) {\n              var itemElement = doc.createElement(\"div\");\n              itemElement.textContent = item.label || \"\";\n              return itemElement;\n          };\n          if (settings.render) {\n              render = settings.render;\n          }\n          // function to render autocomplete groups\n          var renderGroup = function (groupName, currentValue) {\n              var groupDiv = doc.createElement(\"div\");\n              groupDiv.textContent = groupName;\n              return groupDiv;\n          };\n          if (settings.renderGroup) {\n              renderGroup = settings.renderGroup;\n          }\n          var fragment = doc.createDocumentFragment();\n          var prevGroup = \"#9?$\";\n          items.forEach(function (item) {\n              if (item.group && item.group !== prevGroup) {\n                  prevGroup = item.group;\n                  var groupDiv = renderGroup(item.group, inputValue);\n                  if (groupDiv) {\n                      groupDiv.className += \" group\";\n                      fragment.appendChild(groupDiv);\n                  }\n              }\n              var div = render(item, inputValue);\n              if (div) {\n                  div.addEventListener(\"click\", function (ev) {\n                      settings.onSelect(item, input);\n                      clear();\n                      ev.preventDefault();\n                      ev.stopPropagation();\n                  });\n                  if (item === selected) {\n                      div.className += \" selected\";\n                  }\n                  fragment.appendChild(div);\n              }\n          });\n          container.appendChild(fragment);\n          if (items.length < 1) {\n              if (settings.emptyMsg) {\n                  var empty = doc.createElement(\"div\");\n                  empty.className = \"empty\";\n                  empty.textContent = settings.emptyMsg;\n                  container.appendChild(empty);\n              }\n              else {\n                  clear();\n                  return;\n              }\n          }\n          attach();\n          updatePosition();\n          updateScroll();\n      }\n      function updateIfDisplayed() {\n          if (containerDisplayed()) {\n              update();\n          }\n      }\n      function resizeEventHandler() {\n          updateIfDisplayed();\n      }\n      function scrollEventHandler(e) {\n          if (e.target !== container) {\n              updateIfDisplayed();\n          }\n          else {\n              e.preventDefault();\n          }\n      }\n      function keyupEventHandler(ev) {\n          var keyCode = ev.which || ev.keyCode || 0;\n          var ignore = [38 /* Up */, 13 /* Enter */, 27 /* Esc */, 39 /* Right */, 37 /* Left */, 16 /* Shift */, 17 /* Ctrl */, 18 /* Alt */, 20 /* CapsLock */, 91 /* WindowsKey */, 9 /* Tab */];\n          for (var _i = 0, ignore_1 = ignore; _i < ignore_1.length; _i++) {\n              var key = ignore_1[_i];\n              if (keyCode === key) {\n                  return;\n              }\n          }\n          // the down key is used to open autocomplete\n          if (keyCode === 40 /* Down */ && containerDisplayed()) {\n              return;\n          }\n          startFetch(0 /* Keyboard */);\n      }\n      /**\n       * Automatically move scroll bar if selected item is not visible\n       */\n      function updateScroll() {\n          var elements = container.getElementsByClassName(\"selected\");\n          if (elements.length > 0) {\n              var element = elements[0];\n              // make group visible\n              var previous = element.previousElementSibling;\n              if (previous && previous.className.indexOf(\"group\") !== -1 && !previous.previousElementSibling) {\n                  element = previous;\n              }\n              if (element.offsetTop < container.scrollTop) {\n                  container.scrollTop = element.offsetTop;\n              }\n              else {\n                  var selectBottom = element.offsetTop + element.offsetHeight;\n                  var containerBottom = container.scrollTop + container.offsetHeight;\n                  if (selectBottom > containerBottom) {\n                      container.scrollTop += selectBottom - containerBottom;\n                  }\n              }\n          }\n      }\n      /**\n       * Select the previous item in suggestions\n       */\n      function selectPrev() {\n          if (items.length < 1) {\n              selected = undefined;\n          }\n          else {\n              if (selected === items[0]) {\n                  selected = items[items.length - 1];\n              }\n              else {\n                  for (var i = items.length - 1; i > 0; i--) {\n                      if (selected === items[i] || i === 1) {\n                          selected = items[i - 1];\n                          break;\n                      }\n                  }\n              }\n          }\n      }\n      /**\n       * Select the next item in suggestions\n       */\n      function selectNext() {\n          if (items.length < 1) {\n              selected = undefined;\n          }\n          if (!selected || selected === items[items.length - 1]) {\n              selected = items[0];\n              return;\n          }\n          for (var i = 0; i < (items.length - 1); i++) {\n              if (selected === items[i]) {\n                  selected = items[i + 1];\n                  break;\n              }\n          }\n      }\n      function keydownEventHandler(ev) {\n          var keyCode = ev.which || ev.keyCode || 0;\n          if (keyCode === 38 /* Up */ || keyCode === 40 /* Down */ || keyCode === 27 /* Esc */) {\n              var containerIsDisplayed = containerDisplayed();\n              if (keyCode === 27 /* Esc */) {\n                  clear();\n              }\n              else {\n                  if (!containerDisplayed || items.length < 1) {\n                      return;\n                  }\n                  keyCode === 38 /* Up */\n                      ? selectPrev()\n                      : selectNext();\n                  update();\n              }\n              ev.preventDefault();\n              if (containerIsDisplayed) {\n                  ev.stopPropagation();\n              }\n              return;\n          }\n          if (keyCode === 13 /* Enter */) {\n              if (selected) {\n                  settings.onSelect(selected, input);\n                  clear();\n              }\n              if (preventSubmit) {\n                  ev.preventDefault();\n              }\n          }\n      }\n      function focusEventHandler() {\n          if (showOnFocus) {\n              startFetch(1 /* Focus */);\n          }\n      }\n      function startFetch(trigger) {\n          // if multiple keys were pressed, before we get update from server,\n          // this may cause redrawing our autocomplete multiple times after the last key press.\n          // to avoid this, the number of times keyboard was pressed will be\n          // saved and checked before redraw our autocomplete box.\n          var savedKeypressCounter = ++keypressCounter;\n          var val = input.value;\n          if (val.length >= minLen || trigger === 1 /* Focus */) {\n              clearDebounceTimer();\n              debounceTimer = window.setTimeout(function () {\n                  settings.fetch(val, function (elements) {\n                      if (keypressCounter === savedKeypressCounter && elements) {\n                          items = elements;\n                          inputValue = val;\n                          selected = items.length > 0 ? items[0] : undefined;\n                          update();\n                      }\n                  }, 0 /* Keyboard */);\n              }, trigger === 0 /* Keyboard */ ? debounceWaitMs : 0);\n          }\n          else {\n              clear();\n          }\n      }\n      function blurEventHandler() {\n          // we need to delay clear, because when we click on an item, blur will be called before click and remove items from DOM\n          setTimeout(function () {\n              if (doc.activeElement !== input) {\n                  clear();\n              }\n          }, 200);\n      }\n      /**\n       * Fixes #26: on long clicks focus will be lost and onSelect method will not be called\n       */\n      container.addEventListener(\"mousedown\", function (evt) {\n          evt.stopPropagation();\n          evt.preventDefault();\n      });\n      /**\n       * This function will remove DOM elements and clear event handlers\n       */\n      function destroy() {\n          input.removeEventListener(\"focus\", focusEventHandler);\n          input.removeEventListener(\"keydown\", keydownEventHandler);\n          input.removeEventListener(keyUpEventName, keyupEventHandler);\n          input.removeEventListener(\"blur\", blurEventHandler);\n          window.removeEventListener(\"resize\", resizeEventHandler);\n          doc.removeEventListener(\"scroll\", scrollEventHandler, true);\n          clearDebounceTimer();\n          clear();\n          // prevent the update call if there are pending AJAX requests\n          keypressCounter++;\n      }\n      // setup event handlers\n      input.addEventListener(\"keydown\", keydownEventHandler);\n      input.addEventListener(keyUpEventName, keyupEventHandler);\n      input.addEventListener(\"blur\", blurEventHandler);\n      input.addEventListener(\"focus\", focusEventHandler);\n      window.addEventListener(\"resize\", resizeEventHandler);\n      doc.addEventListener(\"scroll\", scrollEventHandler, true);\n      return {\n          destroy: destroy\n      };\n  }\n\n  return autocomplete;\n\n}));\n//# sourceMappingURL=autocomplete.js.map\n","(function(window, factory) {\n    var lazySizes = factory(window, window.document, Date);\n    window.lazySizes = lazySizes;\n    if(typeof module == 'object' && module.exports){\n        module.exports = lazySizes;\n    }\n}(typeof window != 'undefined' ?\n    window : {}, function l(window, document, Date) {\n        'use strict';\n        /*jshint eqnull:true */\n\n        var lazysizes, lazySizesCfg;\n\n        (function(){\n            var prop;\n\n            var lazySizesDefaults = {\n                lazyClass: 'lazyload',\n                loadedClass: 'lazyloaded',\n                loadingClass: 'lazyloading',\n                preloadClass: 'lazypreload',\n                errorClass: 'lazyerror',\n                //strictClass: 'lazystrict',\n                autosizesClass: 'lazyautosizes',\n                srcAttr: 'data-src',\n                srcsetAttr: 'data-srcset',\n                sizesAttr: 'data-sizes',\n                //preloadAfterLoad: false,\n                minSize: 40,\n                customMedia: {},\n                init: true,\n                expFactor: 1.5,\n                hFac: 0.8,\n                loadMode: 2,\n                loadHidden: true,\n                ricTimeout: 0,\n                throttleDelay: 125,\n            };\n\n            lazySizesCfg = window.lazySizesConfig || window.lazysizesConfig || {};\n\n            for(prop in lazySizesDefaults){\n                if(!(prop in lazySizesCfg)){\n                    lazySizesCfg[prop] = lazySizesDefaults[prop];\n                }\n            }\n        })();\n\n        if (!document || !document.getElementsByClassName) {\n            return {\n                init: function () {},\n                cfg: lazySizesCfg,\n                noSupport: true,\n            };\n        }\n\n        var docElem = document.documentElement;\n\n        var supportPicture = window.HTMLPictureElement;\n\n        var _addEventListener = 'addEventListener';\n\n        var _getAttribute = 'getAttribute';\n\n        var addEventListener = window[_addEventListener].bind(window);\n\n        var setTimeout = window.setTimeout;\n\n        var requestAnimationFrame = window.requestAnimationFrame || setTimeout;\n\n        var requestIdleCallback = window.requestIdleCallback;\n\n        var regPicture = /^picture$/i;\n\n        var loadEvents = ['load', 'error', 'lazyincluded', '_lazyloaded'];\n\n        var regClassCache = {};\n\n        var forEach = Array.prototype.forEach;\n\n        var hasClass = function(ele, cls) {\n            if(!regClassCache[cls]){\n                regClassCache[cls] = new RegExp('(\\\\s|^)'+cls+'(\\\\s|$)');\n            }\n            return regClassCache[cls].test(ele[_getAttribute]('class') || '') && regClassCache[cls];\n        };\n\n        var addClass = function(ele, cls) {\n            if (!hasClass(ele, cls)){\n                ele.setAttribute('class', (ele[_getAttribute]('class') || '').trim() + ' ' + cls);\n            }\n        };\n\n        var removeClass = function(ele, cls) {\n            var reg;\n            if ((reg = hasClass(ele,cls))) {\n                ele.setAttribute('class', (ele[_getAttribute]('class') || '').replace(reg, ' '));\n            }\n        };\n\n        var addRemoveLoadEvents = function(dom, fn, add){\n            var action = add ? _addEventListener : 'removeEventListener';\n            if(add){\n                addRemoveLoadEvents(dom, fn);\n            }\n            loadEvents.forEach(function(evt){\n                dom[action](evt, fn);\n            });\n        };\n\n        var triggerEvent = function(elem, name, detail, noBubbles, noCancelable){\n            var event = document.createEvent('Event');\n\n            if(!detail){\n                detail = {};\n            }\n\n            detail.instance = lazysizes;\n\n            event.initEvent(name, !noBubbles, !noCancelable);\n\n            event.detail = detail;\n\n            elem.dispatchEvent(event);\n            return event;\n        };\n\n        var updatePolyfill = function (el, full){\n            var polyfill;\n            if( !supportPicture && ( polyfill = (window.picturefill || lazySizesCfg.pf) ) ){\n                if(full && full.src && !el[_getAttribute]('srcset')){\n                    el.setAttribute('srcset', full.src);\n                }\n                polyfill({reevaluate: true, elements: [el]});\n            } else if(full && full.src){\n                el.src = full.src;\n            }\n        };\n\n        var getCSS = function (elem, style){\n            return (getComputedStyle(elem, null) || {})[style];\n        };\n\n        var getWidth = function(elem, parent, width){\n            width = width || elem.offsetWidth;\n\n            while(width < lazySizesCfg.minSize && parent && !elem._lazysizesWidth){\n                width =  parent.offsetWidth;\n                parent = parent.parentNode;\n            }\n\n            return width;\n        };\n\n        var rAF = (function(){\n            var running, waiting;\n            var firstFns = [];\n            var secondFns = [];\n            var fns = firstFns;\n\n            var run = function(){\n                var runFns = fns;\n\n                fns = firstFns.length ? secondFns : firstFns;\n\n                running = true;\n                waiting = false;\n\n                while(runFns.length){\n                    runFns.shift()();\n                }\n\n                running = false;\n            };\n\n            var rafBatch = function(fn, queue){\n                if(running && !queue){\n                    fn.apply(this, arguments);\n                } else {\n                    fns.push(fn);\n\n                    if(!waiting){\n                        waiting = true;\n                        (document.hidden ? setTimeout : requestAnimationFrame)(run);\n                    }\n                }\n            };\n\n            rafBatch._lsFlush = run;\n\n            return rafBatch;\n        })();\n\n        var rAFIt = function(fn, simple){\n            return simple ?\n                function() {\n                    rAF(fn);\n                } :\n                function(){\n                    var that = this;\n                    var args = arguments;\n                    rAF(function(){\n                        fn.apply(that, args);\n                    });\n                }\n                ;\n        };\n\n        var throttle = function(fn){\n            var running;\n            var lastTime = 0;\n            var gDelay = lazySizesCfg.throttleDelay;\n            var rICTimeout = lazySizesCfg.ricTimeout;\n            var run = function(){\n                running = false;\n                lastTime = Date.now();\n                fn();\n            };\n            var idleCallback = requestIdleCallback && rICTimeout > 49 ?\n                function(){\n                    requestIdleCallback(run, {timeout: rICTimeout});\n\n                    if(rICTimeout !== lazySizesCfg.ricTimeout){\n                        rICTimeout = lazySizesCfg.ricTimeout;\n                    }\n                } :\n                rAFIt(function(){\n                    setTimeout(run);\n                }, true)\n            ;\n\n            return function(isPriority){\n                var delay;\n\n                if((isPriority = isPriority === true)){\n                    rICTimeout = 33;\n                }\n\n                if(running){\n                    return;\n                }\n\n                running =  true;\n\n                delay = gDelay - (Date.now() - lastTime);\n\n                if(delay < 0){\n                    delay = 0;\n                }\n\n                if(isPriority || delay < 9){\n                    idleCallback();\n                } else {\n                    setTimeout(idleCallback, delay);\n                }\n            };\n        };\n\n        //based on http://modernjavascript.blogspot.de/2013/08/building-better-debounce.html\n        var debounce = function(func) {\n            var timeout, timestamp;\n            var wait = 99;\n            var run = function(){\n                timeout = null;\n                func();\n            };\n            var later = function() {\n                var last = Date.now() - timestamp;\n\n                if (last < wait) {\n                    setTimeout(later, wait - last);\n                } else {\n                    (requestIdleCallback || run)(run);\n                }\n            };\n\n            return function() {\n                timestamp = Date.now();\n\n                if (!timeout) {\n                    timeout = setTimeout(later, wait);\n                }\n            };\n        };\n\n        var loader = (function(){\n            var preloadElems, isCompleted, resetPreloadingTimer, loadMode, started;\n\n            var eLvW, elvH, eLtop, eLleft, eLright, eLbottom, isBodyHidden;\n\n            var regImg = /^img$/i;\n            var regIframe = /^iframe$/i;\n\n            var supportScroll = ('onscroll' in window) && !(/(gle|ing)bot/.test(navigator.userAgent));\n\n            var shrinkExpand = 0;\n            var currentExpand = 0;\n\n            var isLoading = 0;\n            var lowRuns = -1;\n\n            var resetPreloading = function(e){\n                isLoading--;\n                if(!e || isLoading < 0 || !e.target){\n                    isLoading = 0;\n                }\n            };\n\n            var isVisible = function (elem) {\n                if (isBodyHidden == null) {\n                    isBodyHidden = getCSS(document.body, 'visibility') == 'hidden';\n                }\n\n                return isBodyHidden || !(getCSS(elem.parentNode, 'visibility') == 'hidden' && getCSS(elem, 'visibility') == 'hidden');\n            };\n\n            var isNestedVisible = function(elem, elemExpand){\n                var outerRect;\n                var parent = elem;\n                var visible = isVisible(elem);\n\n                eLtop -= elemExpand;\n                eLbottom += elemExpand;\n                eLleft -= elemExpand;\n                eLright += elemExpand;\n\n                while(visible && (parent = parent.offsetParent) && parent != document.body && parent != docElem){\n                    visible = ((getCSS(parent, 'opacity') || 1) > 0);\n\n                    if(visible && getCSS(parent, 'overflow') != 'visible'){\n                        outerRect = parent.getBoundingClientRect();\n                        visible = eLright > outerRect.left &&\n                            eLleft < outerRect.right &&\n                            eLbottom > outerRect.top - 1 &&\n                            eLtop < outerRect.bottom + 1\n                        ;\n                    }\n                }\n\n                return visible;\n            };\n\n            var checkElements = function() {\n                var eLlen, i, rect, autoLoadElem, loadedSomething, elemExpand, elemNegativeExpand, elemExpandVal,\n                    beforeExpandVal, defaultExpand, preloadExpand, hFac;\n                var lazyloadElems = lazysizes.elements;\n\n                if((loadMode = lazySizesCfg.loadMode) && isLoading < 8 && (eLlen = lazyloadElems.length)){\n\n                    i = 0;\n\n                    lowRuns++;\n\n                    for(; i < eLlen; i++){\n\n                        if(!lazyloadElems[i] || lazyloadElems[i]._lazyRace){continue;}\n\n                        if(!supportScroll || (lazysizes.prematureUnveil && lazysizes.prematureUnveil(lazyloadElems[i]))){unveilElement(lazyloadElems[i]);continue;}\n\n                        if(!(elemExpandVal = lazyloadElems[i][_getAttribute]('data-expand')) || !(elemExpand = elemExpandVal * 1)){\n                            elemExpand = currentExpand;\n                        }\n\n                        if (!defaultExpand) {\n                            defaultExpand = (!lazySizesCfg.expand || lazySizesCfg.expand < 1) ?\n                                docElem.clientHeight > 500 && docElem.clientWidth > 500 ? 500 : 370 :\n                                lazySizesCfg.expand;\n\n                            lazysizes._defEx = defaultExpand;\n\n                            preloadExpand = defaultExpand * lazySizesCfg.expFactor;\n                            hFac = lazySizesCfg.hFac;\n                            isBodyHidden = null;\n\n                            if(currentExpand < preloadExpand && isLoading < 1 && lowRuns > 2 && loadMode > 2 && !document.hidden){\n                                currentExpand = preloadExpand;\n                                lowRuns = 0;\n                            } else if(loadMode > 1 && lowRuns > 1 && isLoading < 6){\n                                currentExpand = defaultExpand;\n                            } else {\n                                currentExpand = shrinkExpand;\n                            }\n                        }\n\n                        if(beforeExpandVal !== elemExpand){\n                            eLvW = innerWidth + (elemExpand * hFac);\n                            elvH = innerHeight + elemExpand;\n                            elemNegativeExpand = elemExpand * -1;\n                            beforeExpandVal = elemExpand;\n                        }\n\n                        rect = lazyloadElems[i].getBoundingClientRect();\n\n                        if ((eLbottom = rect.bottom) >= elemNegativeExpand &&\n                            (eLtop = rect.top) <= elvH &&\n                            (eLright = rect.right) >= elemNegativeExpand * hFac &&\n                            (eLleft = rect.left) <= eLvW &&\n                            (eLbottom || eLright || eLleft || eLtop) &&\n                            (lazySizesCfg.loadHidden || isVisible(lazyloadElems[i])) &&\n                            ((isCompleted && isLoading < 3 && !elemExpandVal && (loadMode < 3 || lowRuns < 4)) || isNestedVisible(lazyloadElems[i], elemExpand))){\n                            unveilElement(lazyloadElems[i]);\n                            loadedSomething = true;\n                            if(isLoading > 9){break;}\n                        } else if(!loadedSomething && isCompleted && !autoLoadElem &&\n                            isLoading < 4 && lowRuns < 4 && loadMode > 2 &&\n                            (preloadElems[0] || lazySizesCfg.preloadAfterLoad) &&\n                            (preloadElems[0] || (!elemExpandVal && ((eLbottom || eLright || eLleft || eLtop) || lazyloadElems[i][_getAttribute](lazySizesCfg.sizesAttr) != 'auto')))){\n                            autoLoadElem = preloadElems[0] || lazyloadElems[i];\n                        }\n                    }\n\n                    if(autoLoadElem && !loadedSomething){\n                        unveilElement(autoLoadElem);\n                    }\n                }\n            };\n\n            var throttledCheckElements = throttle(checkElements);\n\n            var switchLoadingClass = function(e){\n                var elem = e.target;\n\n                if (elem._lazyCache) {\n                    delete elem._lazyCache;\n                    return;\n                }\n\n                resetPreloading(e);\n                addClass(elem, lazySizesCfg.loadedClass);\n                removeClass(elem, lazySizesCfg.loadingClass);\n                addRemoveLoadEvents(elem, rafSwitchLoadingClass);\n                triggerEvent(elem, 'lazyloaded');\n            };\n            var rafedSwitchLoadingClass = rAFIt(switchLoadingClass);\n            var rafSwitchLoadingClass = function(e){\n                rafedSwitchLoadingClass({target: e.target});\n            };\n\n            var changeIframeSrc = function(elem, src){\n                try {\n                    elem.contentWindow.location.replace(src);\n                } catch(e){\n                    elem.src = src;\n                }\n            };\n\n            var handleSources = function(source){\n                var customMedia;\n\n                var sourceSrcset = source[_getAttribute](lazySizesCfg.srcsetAttr);\n\n                if( (customMedia = lazySizesCfg.customMedia[source[_getAttribute]('data-media') || source[_getAttribute]('media')]) ){\n                    source.setAttribute('media', customMedia);\n                }\n\n                if(sourceSrcset){\n                    source.setAttribute('srcset', sourceSrcset);\n                }\n            };\n\n            var lazyUnveil = rAFIt(function (elem, detail, isAuto, sizes, isImg){\n                var src, srcset, parent, isPicture, event, firesLoad;\n\n                if(!(event = triggerEvent(elem, 'lazybeforeunveil', detail)).defaultPrevented){\n\n                    if(sizes){\n                        if(isAuto){\n                            addClass(elem, lazySizesCfg.autosizesClass);\n                        } else {\n                            elem.setAttribute('sizes', sizes);\n                        }\n                    }\n\n                    srcset = elem[_getAttribute](lazySizesCfg.srcsetAttr);\n                    src = elem[_getAttribute](lazySizesCfg.srcAttr);\n\n                    if(isImg) {\n                        parent = elem.parentNode;\n                        isPicture = parent && regPicture.test(parent.nodeName || '');\n                    }\n\n                    firesLoad = detail.firesLoad || (('src' in elem) && (srcset || src || isPicture));\n\n                    event = {target: elem};\n\n                    addClass(elem, lazySizesCfg.loadingClass);\n\n                    if(firesLoad){\n                        clearTimeout(resetPreloadingTimer);\n                        resetPreloadingTimer = setTimeout(resetPreloading, 2500);\n                        addRemoveLoadEvents(elem, rafSwitchLoadingClass, true);\n                    }\n\n                    if(isPicture){\n                        forEach.call(parent.getElementsByTagName('source'), handleSources);\n                    }\n\n                    if(srcset){\n                        elem.setAttribute('srcset', srcset);\n                    } else if(src && !isPicture){\n                        if(regIframe.test(elem.nodeName)){\n                            changeIframeSrc(elem, src);\n                        } else {\n                            elem.src = src;\n                        }\n                    }\n\n                    if(isImg && (srcset || isPicture)){\n                        updatePolyfill(elem, {src: src});\n                    }\n                }\n\n                if(elem._lazyRace){\n                    delete elem._lazyRace;\n                }\n                removeClass(elem, lazySizesCfg.lazyClass);\n\n                rAF(function(){\n                    // Part of this can be removed as soon as this fix is older: https://bugs.chromium.org/p/chromium/issues/detail?id=7731 (2015)\n                    var isLoaded = elem.complete && elem.naturalWidth > 1;\n\n                    if( !firesLoad || isLoaded){\n                        if (isLoaded) {\n                            addClass(elem, 'ls-is-cached');\n                        }\n                        switchLoadingClass(event);\n                        elem._lazyCache = true;\n                        setTimeout(function(){\n                            if ('_lazyCache' in elem) {\n                                delete elem._lazyCache;\n                            }\n                        }, 9);\n                    }\n                    if (elem.loading == 'lazy') {\n                        isLoading--;\n                    }\n                }, true);\n            });\n\n            var unveilElement = function (elem){\n                if (elem._lazyRace) {return;}\n                var detail;\n\n                var isImg = regImg.test(elem.nodeName);\n\n                //allow using sizes=\"auto\", but don't use. it's invalid. Use data-sizes=\"auto\" or a valid value for sizes instead (i.e.: sizes=\"80vw\")\n                var sizes = isImg && (elem[_getAttribute](lazySizesCfg.sizesAttr) || elem[_getAttribute]('sizes'));\n                var isAuto = sizes == 'auto';\n\n                if( (isAuto || !isCompleted) && isImg && (elem[_getAttribute]('src') || elem.srcset) && !elem.complete && !hasClass(elem, lazySizesCfg.errorClass) && hasClass(elem, lazySizesCfg.lazyClass)){return;}\n\n                detail = triggerEvent(elem, 'lazyunveilread').detail;\n\n                if(isAuto){\n                    autoSizer.updateElem(elem, true, elem.offsetWidth);\n                }\n\n                elem._lazyRace = true;\n                isLoading++;\n\n                lazyUnveil(elem, detail, isAuto, sizes, isImg);\n            };\n\n            var afterScroll = debounce(function(){\n                lazySizesCfg.loadMode = 3;\n                throttledCheckElements();\n            });\n\n            var altLoadmodeScrollListner = function(){\n                if(lazySizesCfg.loadMode == 3){\n                    lazySizesCfg.loadMode = 2;\n                }\n                afterScroll();\n            };\n\n            var onload = function(){\n                if(isCompleted){return;}\n                if(Date.now() - started < 999){\n                    setTimeout(onload, 999);\n                    return;\n                }\n\n\n                isCompleted = true;\n\n                lazySizesCfg.loadMode = 3;\n\n                throttledCheckElements();\n\n                addEventListener('scroll', altLoadmodeScrollListner, true);\n            };\n\n            return {\n                _: function(){\n                    started = Date.now();\n\n                    lazysizes.elements = document.getElementsByClassName(lazySizesCfg.lazyClass);\n                    preloadElems = document.getElementsByClassName(lazySizesCfg.lazyClass + ' ' + lazySizesCfg.preloadClass);\n\n                    addEventListener('scroll', throttledCheckElements, true);\n\n                    addEventListener('resize', throttledCheckElements, true);\n\n                    addEventListener('pageshow', function (e) {\n                        if (e.persisted) {\n                            var loadingElements = document.querySelectorAll('.' + lazySizesCfg.loadingClass);\n\n                            if (loadingElements.length && loadingElements.forEach) {\n                                requestAnimationFrame(function () {\n                                    loadingElements.forEach( function (img) {\n                                        if (img.complete) {\n                                            unveilElement(img);\n                                        }\n                                    });\n                                });\n                            }\n                        }\n                    });\n\n                    if(window.MutationObserver){\n                        new MutationObserver( throttledCheckElements ).observe( docElem, {childList: true, subtree: true, attributes: true} );\n                    } else {\n                        docElem[_addEventListener]('DOMNodeInserted', throttledCheckElements, true);\n                        docElem[_addEventListener]('DOMAttrModified', throttledCheckElements, true);\n                        setInterval(throttledCheckElements, 999);\n                    }\n\n                    addEventListener('hashchange', throttledCheckElements, true);\n\n                    //, 'fullscreenchange'\n                    ['focus', 'mouseover', 'click', 'load', 'transitionend', 'animationend'].forEach(function(name){\n                        document[_addEventListener](name, throttledCheckElements, true);\n                    });\n\n                    if((/d$|^c/.test(document.readyState))){\n                        onload();\n                    } else {\n                        addEventListener('load', onload);\n                        document[_addEventListener]('DOMContentLoaded', throttledCheckElements);\n                        setTimeout(onload, 20000);\n                    }\n\n                    if(lazysizes.elements.length){\n                        checkElements();\n                        rAF._lsFlush();\n                    } else {\n                        throttledCheckElements();\n                    }\n                },\n                checkElems: throttledCheckElements,\n                unveil: unveilElement,\n                _aLSL: altLoadmodeScrollListner,\n            };\n        })();\n\n\n        var autoSizer = (function(){\n            var autosizesElems;\n\n            var sizeElement = rAFIt(function(elem, parent, event, width){\n                var sources, i, len;\n                elem._lazysizesWidth = width;\n                width += 'px';\n\n                elem.setAttribute('sizes', width);\n\n                if(regPicture.test(parent.nodeName || '')){\n                    sources = parent.getElementsByTagName('source');\n                    for(i = 0, len = sources.length; i < len; i++){\n                        sources[i].setAttribute('sizes', width);\n                    }\n                }\n\n                if(!event.detail.dataAttr){\n                    updatePolyfill(elem, event.detail);\n                }\n            });\n            var getSizeElement = function (elem, dataAttr, width){\n                var event;\n                var parent = elem.parentNode;\n\n                if(parent){\n                    width = getWidth(elem, parent, width);\n                    event = triggerEvent(elem, 'lazybeforesizes', {width: width, dataAttr: !!dataAttr});\n\n                    if(!event.defaultPrevented){\n                        width = event.detail.width;\n\n                        if(width && width !== elem._lazysizesWidth){\n                            sizeElement(elem, parent, event, width);\n                        }\n                    }\n                }\n            };\n\n            var updateElementsSizes = function(){\n                var i;\n                var len = autosizesElems.length;\n                if(len){\n                    i = 0;\n\n                    for(; i < len; i++){\n                        getSizeElement(autosizesElems[i]);\n                    }\n                }\n            };\n\n            var debouncedUpdateElementsSizes = debounce(updateElementsSizes);\n\n            return {\n                _: function(){\n                    autosizesElems = document.getElementsByClassName(lazySizesCfg.autosizesClass);\n                    addEventListener('resize', debouncedUpdateElementsSizes);\n                },\n                checkElems: debouncedUpdateElementsSizes,\n                updateElem: getSizeElement\n            };\n        })();\n\n        var init = function(){\n            if(!init.i && document.getElementsByClassName){\n                init.i = true;\n                autoSizer._();\n                loader._();\n            }\n        };\n\n        setTimeout(function(){\n            if(lazySizesCfg.init){\n                init();\n            }\n        });\n\n        lazysizes = {\n            cfg: lazySizesCfg,\n            autoSizer: autoSizer,\n            loader: loader,\n            init: init,\n            uP: updatePolyfill,\n            aC: addClass,\n            rC: removeClass,\n            hC: hasClass,\n            fire: triggerEvent,\n            gW: getWidth,\n            rAF: rAF,\n        };\n\n        return lazysizes;\n    }\n));","/*! npm.im/object-fit-images 3.2.4 */\nvar objectFitImages = (function () {\n\t'use strict';\n\n\tvar OFI = 'fregante:object-fit-images';\n\tvar propRegex = /(object-fit|object-position)\\s*:\\s*([-.\\w\\s%]+)/g;\n\tvar testImg = typeof Image === 'undefined' ? {style: {'object-position': 1}} : new Image();\n\tvar supportsObjectFit = 'object-fit' in testImg.style;\n\tvar supportsObjectPosition = 'object-position' in testImg.style;\n\tvar supportsOFI = 'background-size' in testImg.style;\n\tvar supportsCurrentSrc = typeof testImg.currentSrc === 'string';\n\tvar nativeGetAttribute = testImg.getAttribute;\n\tvar nativeSetAttribute = testImg.setAttribute;\n\tvar autoModeEnabled = false;\n\n\tfunction createPlaceholder(w, h) {\n\t\treturn (\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='\" + w + \"' height='\" + h + \"'%3E%3C/svg%3E\");\n\t}\n\n\tfunction polyfillCurrentSrc(el) {\n\t\tif (el.srcset && !supportsCurrentSrc && window.picturefill) {\n\t\t\tvar pf = window.picturefill._;\n\t\t\t// parse srcset with picturefill where currentSrc isn't available\n\t\t\tif (!el[pf.ns] || !el[pf.ns].evaled) {\n\t\t\t\t// force synchronous srcset parsing\n\t\t\t\tpf.fillImg(el, {reselect: true});\n\t\t\t}\n\n\t\t\tif (!el[pf.ns].curSrc) {\n\t\t\t\t// force picturefill to parse srcset\n\t\t\t\tel[pf.ns].supported = false;\n\t\t\t\tpf.fillImg(el, {reselect: true});\n\t\t\t}\n\n\t\t\t// retrieve parsed currentSrc, if any\n\t\t\tel.currentSrc = el[pf.ns].curSrc || el.src;\n\t\t}\n\t}\n\n\tfunction getStyle(el) {\n\t\tvar style = getComputedStyle(el).fontFamily;\n\t\tvar parsed;\n\t\tvar props = {};\n\t\twhile ((parsed = propRegex.exec(style)) !== null) {\n\t\t\tprops[parsed[1]] = parsed[2];\n\t\t}\n\t\treturn props;\n\t}\n\n\tfunction setPlaceholder(img, width, height) {\n\t\t// Default: fill width, no height\n\t\tvar placeholder = createPlaceholder(width || 1, height || 0);\n\n\t\t// Only set placeholder if it's different\n\t\tif (nativeGetAttribute.call(img, 'src') !== placeholder) {\n\t\t\tnativeSetAttribute.call(img, 'src', placeholder);\n\t\t}\n\t}\n\n\tfunction onImageReady(img, callback) {\n\t\t// naturalWidth is only available when the image headers are loaded,\n\t\t// this loop will poll it every 100ms.\n\t\tif (img.naturalWidth) {\n\t\t\tcallback(img);\n\t\t} else {\n\t\t\tsetTimeout(onImageReady, 100, img, callback);\n\t\t}\n\t}\n\n\tfunction fixOne(el) {\n\t\tvar style = getStyle(el);\n\t\tvar ofi = el[OFI];\n\t\tstyle['object-fit'] = style['object-fit'] || 'fill'; // default value\n\n\t\t// Avoid running where unnecessary, unless OFI had already done its deed\n\t\tif (!ofi.img) {\n\t\t\t// fill is the default behavior so no action is necessary\n\t\t\tif (style['object-fit'] === 'fill') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Where object-fit is supported and object-position isn't (Safari < 10)\n\t\t\tif (\n\t\t\t\t!ofi.skipTest && // unless user wants to apply regardless of browser support\n\t\t\t\tsupportsObjectFit && // if browser already supports object-fit\n\t\t\t\t!style['object-position'] // unless object-position is used\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// keep a clone in memory while resetting the original to a blank\n\t\tif (!ofi.img) {\n\t\t\tofi.img = new Image(el.width, el.height);\n\t\t\tofi.img.srcset = nativeGetAttribute.call(el, \"data-ofi-srcset\") || el.srcset;\n\t\t\tofi.img.src = nativeGetAttribute.call(el, \"data-ofi-src\") || el.src;\n\n\t\t\t// preserve for any future cloneNode calls\n\t\t\t// https://github.com/fregante/object-fit-images/issues/53\n\t\t\tnativeSetAttribute.call(el, \"data-ofi-src\", el.src);\n\t\t\tif (el.srcset) {\n\t\t\t\tnativeSetAttribute.call(el, \"data-ofi-srcset\", el.srcset);\n\t\t\t}\n\n\t\t\tsetPlaceholder(el, el.naturalWidth || el.width, el.naturalHeight || el.height);\n\n\t\t\t// remove srcset because it overrides src\n\t\t\tif (el.srcset) {\n\t\t\t\tel.srcset = '';\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tkeepSrcUsable(el);\n\t\t\t} catch (err) {\n\t\t\t\tif (window.console) {\n\t\t\t\t\tconsole.warn('https://bit.ly/ofi-old-browser');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tpolyfillCurrentSrc(ofi.img);\n\n\t\tel.style.backgroundImage = \"url(\\\"\" + ((ofi.img.currentSrc || ofi.img.src).replace(/\"/g, '\\\\\"')) + \"\\\")\";\n\t\tel.style.backgroundPosition = style['object-position'] || 'center';\n\t\tel.style.backgroundRepeat = 'no-repeat';\n\t\tel.style.backgroundOrigin = 'content-box';\n\n\t\tif (/scale-down/.test(style['object-fit'])) {\n\t\t\tonImageReady(ofi.img, function () {\n\t\t\t\tif (ofi.img.naturalWidth > el.width || ofi.img.naturalHeight > el.height) {\n\t\t\t\t\tel.style.backgroundSize = 'contain';\n\t\t\t\t} else {\n\t\t\t\t\tel.style.backgroundSize = 'auto';\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tel.style.backgroundSize = style['object-fit'].replace('none', 'auto').replace('fill', '100% 100%');\n\t\t}\n\n\t\tonImageReady(ofi.img, function (img) {\n\t\t\tsetPlaceholder(el, img.naturalWidth, img.naturalHeight);\n\t\t});\n\t}\n\n\tfunction keepSrcUsable(el) {\n\t\tvar descriptors = {\n\t\t\tget: function get(prop) {\n\t\t\t\treturn el[OFI].img[prop ? prop : 'src'];\n\t\t\t},\n\t\t\tset: function set(value, prop) {\n\t\t\t\tel[OFI].img[prop ? prop : 'src'] = value;\n\t\t\t\tnativeSetAttribute.call(el, (\"data-ofi-\" + prop), value); // preserve for any future cloneNode\n\t\t\t\tfixOne(el);\n\t\t\t\treturn value;\n\t\t\t}\n\t\t};\n\t\tObject.defineProperty(el, 'src', descriptors);\n\t\tObject.defineProperty(el, 'currentSrc', {\n\t\t\tget: function () { return descriptors.get('currentSrc'); }\n\t\t});\n\t\tObject.defineProperty(el, 'srcset', {\n\t\t\tget: function () { return descriptors.get('srcset'); },\n\t\t\tset: function (ss) { return descriptors.set(ss, 'srcset'); }\n\t\t});\n\t}\n\n\tfunction hijackAttributes() {\n\t\tfunction getOfiImageMaybe(el, name) {\n\t\t\treturn el[OFI] && el[OFI].img && (name === 'src' || name === 'srcset') ? el[OFI].img : el;\n\t\t}\n\t\tif (!supportsObjectPosition) {\n\t\t\tHTMLImageElement.prototype.getAttribute = function (name) {\n\t\t\t\treturn nativeGetAttribute.call(getOfiImageMaybe(this, name), name);\n\t\t\t};\n\n\t\t\tHTMLImageElement.prototype.setAttribute = function (name, value) {\n\t\t\t\treturn nativeSetAttribute.call(getOfiImageMaybe(this, name), name, String(value));\n\t\t\t};\n\t\t}\n\t}\n\n\tfunction fix(imgs, opts) {\n\t\tvar startAutoMode = !autoModeEnabled && !imgs;\n\t\topts = opts || {};\n\t\timgs = imgs || 'img';\n\n\t\tif ((supportsObjectPosition && !opts.skipTest) || !supportsOFI) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// use imgs as a selector or just select all images\n\t\tif (imgs === 'img') {\n\t\t\timgs = document.getElementsByTagName('img');\n\t\t} else if (typeof imgs === 'string') {\n\t\t\timgs = document.querySelectorAll(imgs);\n\t\t} else if (!('length' in imgs)) {\n\t\t\timgs = [imgs];\n\t\t}\n\n\t\t// apply fix to all\n\t\tfor (var i = 0; i < imgs.length; i++) {\n\t\t\timgs[i][OFI] = imgs[i][OFI] || {\n\t\t\t\tskipTest: opts.skipTest\n\t\t\t};\n\t\t\tfixOne(imgs[i]);\n\t\t}\n\n\t\tif (startAutoMode) {\n\t\t\tdocument.body.addEventListener('load', function (e) {\n\t\t\t\tif (e.target.tagName === 'IMG') {\n\t\t\t\t\tfix(e.target, {\n\t\t\t\t\t\tskipTest: opts.skipTest\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}, true);\n\t\t\tautoModeEnabled = true;\n\t\t\timgs = 'img'; // reset to a generic selector for watchMQ\n\t\t}\n\n\t\t// if requested, watch media queries for object-fit change\n\t\tif (opts.watchMQ) {\n\t\t\twindow.addEventListener('resize', fix.bind(null, imgs, {\n\t\t\t\tskipTest: opts.skipTest\n\t\t\t}));\n\t\t}\n\t}\n\n\tfix.supportsObjectFit = supportsObjectFit;\n\tfix.supportsObjectPosition = supportsObjectPosition;\n\n\thijackAttributes();\n\n\treturn fix;\n\n}());","!function(root, factory) {\n    \"function\" == typeof define && define.amd ? // AMD. Register as an anonymous module unless amdModuleId is set\n        define([], function() {\n            return root.svg4everybody = factory();\n        }) : \"object\" == typeof module && module.exports ? // Node. Does not work with strict CommonJS, but\n            // only CommonJS-like environments that support module.exports,\n            // like Node.\n            module.exports = factory() : root.svg4everybody = factory();\n}(this, function() {\n    /*! svg4everybody v2.1.7 | github.com/jonathantneal/svg4everybody */\n    function embed(parent, svg, target) {\n        // if the target exists\n        if (target) {\n            // create a document fragment to hold the contents of the target\n            var fragment = document.createDocumentFragment(), viewBox = !svg.hasAttribute(\"viewBox\") && target.getAttribute(\"viewBox\");\n            // conditionally set the viewBox on the svg\n            viewBox && svg.setAttribute(\"viewBox\", viewBox);\n            // copy the contents of the clone into the fragment\n            for (// clone the target\n                var clone = target.cloneNode(!0); clone.childNodes.length; ) {\n                fragment.appendChild(clone.firstChild);\n            }\n            // append the fragment into the svg\n            parent.appendChild(fragment);\n        }\n    }\n    function loadreadystatechange(xhr) {\n        // listen to changes in the request\n        xhr.onreadystatechange = function() {\n            // if the request is ready\n            if (4 === xhr.readyState) {\n                // get the cached html document\n                var cachedDocument = xhr._cachedDocument;\n                // ensure the cached html document based on the xhr response\n                cachedDocument || (cachedDocument = xhr._cachedDocument = document.implementation.createHTMLDocument(\"\"),\n                    cachedDocument.body.innerHTML = xhr.responseText, xhr._cachedTarget = {}), // clear the xhr embeds list and embed each item\n                    xhr._embeds.splice(0).map(function(item) {\n                        // get the cached target\n                        var target = xhr._cachedTarget[item.id];\n                        // ensure the cached target\n                        target || (target = xhr._cachedTarget[item.id] = cachedDocument.getElementById(item.id)),\n                            // embed the target into the svg\n                            embed(item.parent, item.svg, target);\n                    });\n            }\n        }, // test the ready state change immediately\n            xhr.onreadystatechange();\n    }\n    function svg4everybody(rawopts) {\n        function oninterval() {\n            // while the index exists in the live <use> collection\n            for (// get the cached <use> index\n                var index = 0; index < uses.length; ) {\n                // get the current <use>\n                var use = uses[index], parent = use.parentNode, svg = getSVGAncestor(parent);\n                if (svg) {\n                    var src = use.getAttribute(\"xlink:href\") || use.getAttribute(\"href\");\n                    if (polyfill) {\n                        if (!opts.validate || opts.validate(src, svg, use)) {\n                            // remove the <use> element\n                            parent.removeChild(use);\n                            // parse the src and get the url and id\n                            var srcSplit = src.split(\"#\"), url = srcSplit.shift(), id = srcSplit.join(\"#\");\n                            // if the link is external\n                            if (url.length) {\n                                // get the cached xhr request\n                                var xhr = requests[url];\n                                // ensure the xhr request exists\n                                xhr || (xhr = requests[url] = new XMLHttpRequest(), xhr.open(\"GET\", url), xhr.send(),\n                                    xhr._embeds = []), // add the svg and id as an item to the xhr embeds list\n                                    xhr._embeds.push({\n                                        parent: parent,\n                                        svg: svg,\n                                        id: id\n                                    }), // prepare the xhr ready state change event\n                                    loadreadystatechange(xhr);\n                            } else {\n                                // embed the local id into the svg\n                                embed(parent, svg, document.getElementById(id));\n                            }\n                        } else {\n                            // increase the index when the previous value was not \"valid\"\n                            ++index, ++numberOfSvgUseElementsToBypass;\n                        }\n                    }\n                } else {\n                    // increase the index when the previous value was not \"valid\"\n                    ++index;\n                }\n            }\n            // continue the interval\n            (!uses.length || uses.length - numberOfSvgUseElementsToBypass > 0) && requestAnimationFrame(oninterval, 67);\n        }\n        var polyfill, opts = Object(rawopts), newerIEUA = /\\bTrident\\/[567]\\b|\\bMSIE (?:9|10)\\.0\\b/, webkitUA = /\\bAppleWebKit\\/(\\d+)\\b/, olderEdgeUA = /\\bEdge\\/12\\.(\\d+)\\b/, edgeUA = /\\bEdge\\/.(\\d+)\\b/, inIframe = window.top !== window.self;\n        polyfill = \"polyfill\" in opts ? opts.polyfill : newerIEUA.test(navigator.userAgent) || (navigator.userAgent.match(olderEdgeUA) || [])[1] < 10547 || (navigator.userAgent.match(webkitUA) || [])[1] < 537 || edgeUA.test(navigator.userAgent) && inIframe;\n        // create xhr requests object\n        var requests = {}, requestAnimationFrame = window.requestAnimationFrame || setTimeout, uses = document.getElementsByTagName(\"use\"), numberOfSvgUseElementsToBypass = 0;\n        // conditionally start the interval if the polyfill is active\n        polyfill && oninterval();\n    }\n    function getSVGAncestor(node) {\n        for (var svg = node; \"svg\" !== svg.nodeName.toLowerCase() && (svg = svg.parentNode); ) {}\n        return svg;\n    }\n    return svg4everybody;\n});\n","// Utility function\nfunction Util () {};\n\n/*\n\tclass manipulation functions\n*/\nUtil.hasClass = function(el, className) {\n    if (el.classList) return el.classList.contains(className);\n    else return !!el.getAttribute('class').match(new RegExp('(\\\\s|^)' + className + '(\\\\s|$)'));\n};\n\nUtil.addClass = function(el, className) {\n    var classList = className.split(' ');\n    if (el.classList) el.classList.add(classList[0]);\n    else if (!Util.hasClass(el, classList[0])) el.setAttribute('class', el.getAttribute('class') +  \" \" + classList[0]);\n    if (classList.length > 1) Util.addClass(el, classList.slice(1).join(' '));\n};\n\nUtil.removeClass = function(el, className) {\n    var classList = className.split(' ');\n    if (el.classList) el.classList.remove(classList[0]);\n    else if(Util.hasClass(el, classList[0])) {\n        var reg = new RegExp('(\\\\s|^)' + classList[0] + '(\\\\s|$)');\n        el.setAttribute('class', el.getAttribute('class').replace(reg, ' '));\n    }\n    if (classList.length > 1) Util.removeClass(el, classList.slice(1).join(' '));\n};\n\nUtil.toggleClass = function(el, className, bool) {\n    if(bool) Util.addClass(el, className);\n    else Util.removeClass(el, className);\n};\n\nUtil.setAttributes = function(el, attrs) {\n    for(var key in attrs) {\n        el.setAttribute(key, attrs[key]);\n    }\n};\n\n/*\n  DOM manipulation\n*/\nUtil.getChildrenByClassName = function(el, className) {\n    var children = el.children,\n        childrenByClass = [];\n    for (var i = 0; i < el.children.length; i++) {\n        if (Util.hasClass(el.children[i], className)) childrenByClass.push(el.children[i]);\n    }\n    return childrenByClass;\n};\n\nUtil.is = function(elem, selector) {\n    if(selector.nodeType){\n        return elem === selector;\n    }\n\n    var qa = (typeof(selector) === 'string' ? document.querySelectorAll(selector) : selector),\n        length = qa.length,\n        returnArr = [];\n\n    while(length--){\n        if(qa[length] === elem){\n            return true;\n        }\n    }\n\n    return false;\n};\n\n/*\n\tAnimate height of an element\n*/\nUtil.setHeight = function(start, to, element, duration, cb, timeFunction) {\n    var change = to - start,\n        currentTime = null;\n\n    var animateHeight = function(timestamp){\n        if (!currentTime) currentTime = timestamp;\n        var progress = timestamp - currentTime;\n        if(progress > duration) progress = duration;\n        var val = parseInt((progress/duration)*change + start);\n        if(timeFunction) {\n            val = Math[timeFunction](progress, start, to - start, duration);\n        }\n        element.style.height = val+\"px\";\n        if(progress < duration) {\n            window.requestAnimationFrame(animateHeight);\n        } else {\n            if(cb) cb();\n        }\n    };\n\n    //set the height of the element before starting animation -> fix bug on Safari\n    element.style.height = start+\"px\";\n    window.requestAnimationFrame(animateHeight);\n};\n\n/*\n\tSmooth Scroll\n*/\n\nUtil.scrollTo = function(final, duration, cb, scrollEl) {\n    var element = scrollEl || window;\n    var start = element.scrollTop || document.documentElement.scrollTop,\n        currentTime = null;\n\n    if(!scrollEl) start = window.scrollY || document.documentElement.scrollTop;\n\n    var animateScroll = function(timestamp){\n        if (!currentTime) currentTime = timestamp;\n        var progress = timestamp - currentTime;\n        if(progress > duration) progress = duration;\n        var val = Math.easeInOutQuad(progress, start, final-start, duration);\n        element.scrollTo(0, val);\n        if(progress < duration) {\n            window.requestAnimationFrame(animateScroll);\n        } else {\n            cb && cb();\n        }\n    };\n\n    window.requestAnimationFrame(animateScroll);\n};\n\n/*\n  Focus utility classes\n*/\n\n//Move focus to an element\nUtil.moveFocus = function (element) {\n    if( !element ) element = document.getElementsByTagName(\"body\")[0];\n    element.focus();\n    if (document.activeElement !== element) {\n        element.setAttribute('tabindex','-1');\n        element.focus();\n    }\n};\n\n/*\n  Misc\n*/\n\nUtil.getIndexInArray = function(array, el) {\n    return Array.prototype.indexOf.call(array, el);\n};\n\nUtil.cssSupports = function(property, value) {\n    if('CSS' in window) {\n        return CSS.supports(property, value);\n    } else {\n        var jsProperty = property.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase();});\n        return jsProperty in document.body.style;\n    }\n};\n\n// merge a set of user options into plugin defaults\n// https://gomakethings.com/vanilla-javascript-version-of-jquery-extend/\nUtil.extend = function() {\n    // Variables\n    var extended = {};\n    var deep = false;\n    var i = 0;\n    var length = arguments.length;\n\n    // Check if a deep merge\n    if ( Object.prototype.toString.call( arguments[0] ) === '[object Boolean]' ) {\n        deep = arguments[0];\n        i++;\n    }\n\n    // Merge the object into the extended object\n    var merge = function (obj) {\n        for ( var prop in obj ) {\n            if ( Object.prototype.hasOwnProperty.call( obj, prop ) ) {\n                // If deep merge and property is an object, merge properties\n                if ( deep && Object.prototype.toString.call(obj[prop]) === '[object Object]' ) {\n                    extended[prop] = extend( true, extended[prop], obj[prop] );\n                } else {\n                    extended[prop] = obj[prop];\n                }\n            }\n        }\n    };\n\n    // Loop through each object and conduct a merge\n    for ( ; i < length; i++ ) {\n        var obj = arguments[i];\n        merge(obj);\n    }\n\n    return extended;\n};\n\n// Check if Reduced Motion is enabled\nUtil.osHasReducedMotion = function() {\n    if(!window.matchMedia) return false;\n    var matchMediaObj = window.matchMedia('(prefers-reduced-motion: reduce)');\n    if(matchMediaObj) return matchMediaObj.matches;\n    return false; // return false if not supported\n};\n\n/*\n\tPolyfills\n*/\n//Closest() method\nif (!Element.prototype.matches) {\n    Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n}\n\nif (!Element.prototype.closest) {\n    Element.prototype.closest = function(s) {\n        var el = this;\n        if (!document.documentElement.contains(el)) return null;\n        do {\n            if (el.matches(s)) return el;\n            el = el.parentElement || el.parentNode;\n        } while (el !== null && el.nodeType === 1);\n        return null;\n    };\n}\n\n//Custom Event() constructor\nif ( typeof window.CustomEvent !== \"function\" ) {\n\n    function CustomEvent ( event, params ) {\n        params = params || { bubbles: false, cancelable: false, detail: undefined };\n        var evt = document.createEvent( 'CustomEvent' );\n        evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );\n        return evt;\n    }\n\n    CustomEvent.prototype = window.Event.prototype;\n\n    window.CustomEvent = CustomEvent;\n}\n\n/*\n\tAnimation curves\n*/\nMath.easeInOutQuad = function (t, b, c, d) {\n    t /= d/2;\n    if (t < 1) return c/2*t*t + b;\n    t--;\n    return -c/2 * (t*(t-2) - 1) + b;\n};\n\nMath.easeInQuart = function (t, b, c, d) {\n    t /= d;\n    return c*t*t*t*t + b;\n};\n\nMath.easeOutQuart = function (t, b, c, d) {\n    t /= d;\n    t--;\n    return -c * (t*t*t*t - 1) + b;\n};\n\nMath.easeInOutQuart = function (t, b, c, d) {\n    t /= d/2;\n    if (t < 1) return c/2*t*t*t*t + b;\n    t -= 2;\n    return -c/2 * (t*t*t*t - 2) + b;\n};\n\nMath.easeOutElastic = function (t, b, c, d) {\n    var s=1.70158;var p=d*0.7;var a=c;\n    if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;\n    if (a < Math.abs(c)) { a=c; var s=p/4; }\n    else var s = p/(2*Math.PI) * Math.asin (c/a);\n    return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;\n};\n\n\n/* JS Utility Classes */\n\n// make focus ring visible only for keyboard navigation (i.e., tab key)\n(function() {\n    var focusTab = document.getElementsByClassName('js-tab-focus'),\n        shouldInit = false,\n        outlineStyle = false,\n        eventDetected = false;\n\n    function detectClick() {\n        if(focusTab.length > 0) {\n            resetFocusStyle(false);\n            window.addEventListener('keydown', detectTab);\n        }\n        window.removeEventListener('mousedown', detectClick);\n        outlineStyle = false;\n        eventDetected = true;\n    };\n\n    function detectTab(event) {\n        if(event.keyCode !== 9) return;\n        resetFocusStyle(true);\n        window.removeEventListener('keydown', detectTab);\n        window.addEventListener('mousedown', detectClick);\n        outlineStyle = true;\n    };\n\n    function resetFocusStyle(bool) {\n        var outlineStyle = bool ? '' : 'none';\n        for(var i = 0; i < focusTab.length; i++) {\n            focusTab[i].style.setProperty('outline', outlineStyle);\n        }\n    };\n\n    function initFocusTabs() {\n        if(shouldInit) {\n            if(eventDetected) resetFocusStyle(outlineStyle);\n            return;\n        }\n        shouldInit = focusTab.length > 0;\n        window.addEventListener('mousedown', detectClick);\n    };\n\n    initFocusTabs();\n    window.addEventListener('initFocusTabs', initFocusTabs);\n}());\n\nfunction resetFocusTabsStyle() {\n    window.dispatchEvent(new CustomEvent('initFocusTabs'));\n};","/**\n * Sharer.js\n *\n * @description Create your own social share buttons\n * @version 0.4.0\n * @author Ellison Leao <ellisonleao@gmail.com>\n * @license GPLv3\n *\n */\n\n(function(window, document) {\n    'use strict';\n    /**\n     * @constructor\n     */\n    var Sharer = function(elem) {\n        this.elem = elem;\n    };\n\n    /**\n     *  @function init\n     *  @description bind the events for multiple sharer elements\n     *  @returns {Empty}\n     */\n    Sharer.init = function() {\n        var elems = document.querySelectorAll('[data-sharer]'),\n            i,\n            l = elems.length;\n\n        for (i = 0; i < l; i++) {\n            elems[i].addEventListener('click', Sharer.add);\n        }\n    };\n\n    /**\n     *  @function add\n     *  @description bind the share event for a single dom element\n     *  @returns {Empty}\n     */\n    Sharer.add = function(elem) {\n        var target = elem.currentTarget || elem.srcElement;\n        var sharer = new Sharer(target);\n        sharer.share();\n    };\n\n    // instance methods\n    Sharer.prototype = {\n        constructor: Sharer,\n        /**\n         *  @function getValue\n         *  @description Helper to get the attribute of a DOM element\n         *  @param {String} attr DOM element attribute\n         *  @returns {String|Empty} returns the attr value or empty string\n         */\n        getValue: function(attr) {\n            var val = this.elem.getAttribute('data-' + attr);\n            // handing facebook hashtag attribute\n            if (val && attr === 'hashtag') {\n                if (!val.startsWith('#')) {\n                    val = '#' + val;\n                }\n            }\n            return val;\n        },\n\n        /**\n         * @event share\n         * @description Main share event. Will pop a window or redirect to a link\n         * based on the data-sharer attribute.\n         */\n        share: function() {\n            var sharer = this.getValue('sharer').toLowerCase(),\n                sharers = {\n                    facebook: {\n                        shareUrl: 'https://www.facebook.com/sharer/sharer.php',\n                        params: {\n                            u: this.getValue('url'),\n                            hashtag: this.getValue('hashtag')\n                        }\n                    },\n                    email: {\n                        shareUrl: 'mailto:' + this.getValue('to') || '',\n                        params: {\n                            subject: this.getValue('subject'),\n                            body: this.getValue('title') + '\\n' + this.getValue('url')\n                        },\n                        isLink: true\n                    },\n                    whatsapp: {\n                        shareUrl: this.getValue('web') !== null ? 'https://api.whatsapp.com/send' : 'whatsapp://send',\n                        params: {\n                            text: this.getValue('title') + ' ' + this.getValue('url')\n                        },\n                        isLink: true\n                    },\n                    pinterest: {\n                        shareUrl: 'https://www.pinterest.com/pin/create/button/',\n                        params: {\n                            url: this.getValue('url'),\n                            media: this.getValue('image'),\n                            description: this.getValue('description')\n                        }\n                    },\n                },\n                s = sharers[sharer];\n\n            // custom popups sizes\n            if (s) {\n                s.width = this.getValue('width');\n                s.height = this.getValue('height');\n            }\n            return s !== undefined ? this.urlSharer(s) : false;\n        },\n        /**\n         * @event urlSharer\n         * @param {Object} sharer\n         */\n        urlSharer: function(sharer) {\n            var p = sharer.params || {},\n                keys = Object.keys(p),\n                i,\n                str = keys.length > 0 ? '?' : '';\n            for (i = 0; i < keys.length; i++) {\n                if (str !== '?') {\n                    str += '&';\n                }\n                if (p[keys[i]]) {\n                    str += keys[i] + '=' + encodeURIComponent(p[keys[i]]);\n                }\n            }\n            sharer.shareUrl += str;\n\n            if (!sharer.isLink) {\n                var popWidth = sharer.width || 600,\n                    popHeight = sharer.height || 480,\n                    left = window.innerWidth / 2 - popWidth / 2 + window.screenX,\n                    top = window.innerHeight / 2 - popHeight / 2 + window.screenY,\n                    popParams = 'scrollbars=no, width=' + popWidth + ', height=' + popHeight + ', top=' + top + ', left=' + left,\n                    newWindow = window.open(sharer.shareUrl, '', popParams);\n\n                if (window.focus) {\n                    newWindow.focus();\n                }\n            } else {\n                window.location.href = sharer.shareUrl;\n            }\n        }\n    };\n\n    // adding sharer events on domcontentload\n    if (document.readyState === 'complete' || document.readyState !== 'loading') {\n        Sharer.init();\n    } else {\n        document.addEventListener('DOMContentLoaded', Sharer.init);\n    }\n\n    // turbolinks 3 compatibility\n    window.addEventListener('page:load', Sharer.init);\n\n    // turbolinks 5 compatibility\n    window.addEventListener('turbolinks:load', Sharer.init);\n\n    // exporting sharer for external usage\n    window.Sharer = Sharer;\n})(window, document);\n","/**\n * Swiper 5.3.0\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * http://swiperjs.com\n *\n * Copyright 2014-2020 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: January 29, 2020\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 = global || self, global.Swiper = factory());\n}(this, function () { 'use strict';\n\n  /**\n   * SSR Window 1.0.1\n   * Better handling for window object in SSR environment\n   * https://github.com/nolimits4web/ssr-window\n   *\n   * Copyright 2018, Vladimir Kharlampidi\n   *\n   * Licensed under MIT\n   *\n   * Released on: July 18, 2018\n   */\n  var doc = (typeof document === 'undefined') ? {\n    body: {},\n    addEventListener: function addEventListener() {},\n    removeEventListener: function removeEventListener() {},\n    activeElement: {\n      blur: function blur() {},\n      nodeName: '',\n    },\n    querySelector: function querySelector() {\n      return null;\n    },\n    querySelectorAll: function querySelectorAll() {\n      return [];\n    },\n    getElementById: function getElementById() {\n      return null;\n    },\n    createEvent: function createEvent() {\n      return {\n        initEvent: function initEvent() {},\n      };\n    },\n    createElement: function createElement() {\n      return {\n        children: [],\n        childNodes: [],\n        style: {},\n        setAttribute: function setAttribute() {},\n        getElementsByTagName: function getElementsByTagName() {\n          return [];\n        },\n      };\n    },\n    location: { hash: '' },\n  } : document; // eslint-disable-line\n\n  var win = (typeof window === 'undefined') ? {\n    document: doc,\n    navigator: {\n      userAgent: '',\n    },\n    location: {},\n    history: {},\n    CustomEvent: function CustomEvent() {\n      return this;\n    },\n    addEventListener: function addEventListener() {},\n    removeEventListener: function removeEventListener() {},\n    getComputedStyle: function getComputedStyle() {\n      return {\n        getPropertyValue: function getPropertyValue() {\n          return '';\n        },\n      };\n    },\n    Image: function Image() {},\n    Date: function Date() {},\n    screen: {},\n    setTimeout: function setTimeout() {},\n    clearTimeout: function clearTimeout() {},\n  } : window; // eslint-disable-line\n\n  /**\n   * Dom7 2.1.3\n   * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n   * http://framework7.io/docs/dom.html\n   *\n   * Copyright 2019, Vladimir Kharlampidi\n   * The iDangero.us\n   * http://www.idangero.us/\n   *\n   * Licensed under MIT\n   *\n   * Released on: February 11, 2019\n   */\n\n  var Dom7 = function Dom7(arr) {\n    var self = this;\n    // Create array-like object\n    for (var i = 0; i < arr.length; i += 1) {\n      self[i] = arr[i];\n    }\n    self.length = arr.length;\n    // Return collection with methods\n    return this;\n  };\n\n  function $(selector, context) {\n    var arr = [];\n    var i = 0;\n    if (selector && !context) {\n      if (selector instanceof Dom7) {\n        return selector;\n      }\n    }\n    if (selector) {\n      // String\n      if (typeof selector === 'string') {\n        var els;\n        var tempParent;\n        var html = selector.trim();\n        if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n          var 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          tempParent = doc.createElement(toCreate);\n          tempParent.innerHTML = html;\n          for (i = 0; i < tempParent.childNodes.length; i += 1) {\n            arr.push(tempParent.childNodes[i]);\n          }\n        } else {\n          if (!context && selector[0] === '#' && !selector.match(/[ .<>:~]/)) {\n            // Pure ID selector\n            els = [doc.getElementById(selector.trim().split('#')[1])];\n          } else {\n            // Other selectors\n            els = (context || doc).querySelectorAll(selector.trim());\n          }\n          for (i = 0; i < els.length; i += 1) {\n            if (els[i]) { arr.push(els[i]); }\n          }\n        }\n      } else if (selector.nodeType || selector === win || selector === doc) {\n        // Node/element\n        arr.push(selector);\n      } else if (selector.length > 0 && selector[0].nodeType) {\n        // Array of elements or instance of Dom\n        for (i = 0; i < selector.length; i += 1) {\n          arr.push(selector[i]);\n        }\n      }\n    }\n    return new Dom7(arr);\n  }\n\n  $.fn = Dom7.prototype;\n  $.Class = Dom7;\n  $.Dom7 = Dom7;\n\n  function unique(arr) {\n    var uniqueArray = [];\n    for (var i = 0; i < arr.length; i += 1) {\n      if (uniqueArray.indexOf(arr[i]) === -1) { uniqueArray.push(arr[i]); }\n    }\n    return uniqueArray;\n  }\n\n  // Classes and attributes\n  function addClass(className) {\n    if (typeof className === 'undefined') {\n      return this;\n    }\n    var classes = className.split(' ');\n    for (var i = 0; i < classes.length; i += 1) {\n      for (var j = 0; j < this.length; j += 1) {\n        if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') { this[j].classList.add(classes[i]); }\n      }\n    }\n    return this;\n  }\n  function removeClass(className) {\n    var classes = className.split(' ');\n    for (var i = 0; i < classes.length; i += 1) {\n      for (var j = 0; j < this.length; j += 1) {\n        if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') { this[j].classList.remove(classes[i]); }\n      }\n    }\n    return this;\n  }\n  function hasClass(className) {\n    if (!this[0]) { return false; }\n    return this[0].classList.contains(className);\n  }\n  function toggleClass(className) {\n    var classes = className.split(' ');\n    for (var i = 0; i < classes.length; i += 1) {\n      for (var j = 0; j < this.length; j += 1) {\n        if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') { this[j].classList.toggle(classes[i]); }\n      }\n    }\n    return this;\n  }\n  function attr(attrs, value) {\n    var arguments$1 = arguments;\n\n    if (arguments.length === 1 && typeof attrs === 'string') {\n      // Get attr\n      if (this[0]) { return this[0].getAttribute(attrs); }\n      return undefined;\n    }\n\n    // Set attrs\n    for (var i = 0; i < this.length; i += 1) {\n      if (arguments$1.length === 2) {\n        // String\n        this[i].setAttribute(attrs, value);\n      } else {\n        // Object\n        // eslint-disable-next-line\n        for (var attrName in attrs) {\n          this[i][attrName] = attrs[attrName];\n          this[i].setAttribute(attrName, attrs[attrName]);\n        }\n      }\n    }\n    return this;\n  }\n  // eslint-disable-next-line\n  function removeAttr(attr) {\n    for (var i = 0; i < this.length; i += 1) {\n      this[i].removeAttribute(attr);\n    }\n    return this;\n  }\n  function data(key, value) {\n    var el;\n    if (typeof value === 'undefined') {\n      el = this[0];\n      // Get value\n      if (el) {\n        if (el.dom7ElementDataStorage && (key in el.dom7ElementDataStorage)) {\n          return el.dom7ElementDataStorage[key];\n        }\n\n        var dataKey = el.getAttribute((\"data-\" + key));\n        if (dataKey) {\n          return dataKey;\n        }\n        return undefined;\n      }\n      return undefined;\n    }\n\n    // Set value\n    for (var i = 0; i < this.length; i += 1) {\n      el = this[i];\n      if (!el.dom7ElementDataStorage) { el.dom7ElementDataStorage = {}; }\n      el.dom7ElementDataStorage[key] = value;\n    }\n    return this;\n  }\n  // Transforms\n  // eslint-disable-next-line\n  function transform(transform) {\n    for (var i = 0; i < this.length; i += 1) {\n      var elStyle = this[i].style;\n      elStyle.webkitTransform = transform;\n      elStyle.transform = transform;\n    }\n    return this;\n  }\n  function transition(duration) {\n    if (typeof duration !== 'string') {\n      duration = duration + \"ms\"; // eslint-disable-line\n    }\n    for (var i = 0; i < this.length; i += 1) {\n      var elStyle = this[i].style;\n      elStyle.webkitTransitionDuration = duration;\n      elStyle.transitionDuration = duration;\n    }\n    return this;\n  }\n  // Events\n  function on() {\n    var assign;\n\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n    var eventType = args[0];\n    var targetSelector = args[1];\n    var listener = args[2];\n    var capture = args[3];\n    if (typeof args[1] === 'function') {\n      (assign = args, eventType = assign[0], listener = assign[1], capture = assign[2]);\n      targetSelector = undefined;\n    }\n    if (!capture) { capture = false; }\n\n    function handleLiveEvent(e) {\n      var target = e.target;\n      if (!target) { return; }\n      var eventData = e.target.dom7EventData || [];\n      if (eventData.indexOf(e) < 0) {\n        eventData.unshift(e);\n      }\n      if ($(target).is(targetSelector)) { listener.apply(target, eventData); }\n      else {\n        var parents = $(target).parents(); // eslint-disable-line\n        for (var k = 0; k < parents.length; k += 1) {\n          if ($(parents[k]).is(targetSelector)) { listener.apply(parents[k], eventData); }\n        }\n      }\n    }\n    function handleEvent(e) {\n      var eventData = e && e.target ? e.target.dom7EventData || [] : [];\n      if (eventData.indexOf(e) < 0) {\n        eventData.unshift(e);\n      }\n      listener.apply(this, eventData);\n    }\n    var events = eventType.split(' ');\n    var j;\n    for (var i = 0; i < this.length; i += 1) {\n      var el = this[i];\n      if (!targetSelector) {\n        for (j = 0; j < events.length; j += 1) {\n          var event = events[j];\n          if (!el.dom7Listeners) { el.dom7Listeners = {}; }\n          if (!el.dom7Listeners[event]) { el.dom7Listeners[event] = []; }\n          el.dom7Listeners[event].push({\n            listener: 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          var event$1 = events[j];\n          if (!el.dom7LiveListeners) { el.dom7LiveListeners = {}; }\n          if (!el.dom7LiveListeners[event$1]) { el.dom7LiveListeners[event$1] = []; }\n          el.dom7LiveListeners[event$1].push({\n            listener: listener,\n            proxyListener: handleLiveEvent,\n          });\n          el.addEventListener(event$1, handleLiveEvent, capture);\n        }\n      }\n    }\n    return this;\n  }\n  function off() {\n    var assign;\n\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n    var eventType = args[0];\n    var targetSelector = args[1];\n    var listener = args[2];\n    var capture = args[3];\n    if (typeof args[1] === 'function') {\n      (assign = args, eventType = assign[0], listener = assign[1], capture = assign[2]);\n      targetSelector = undefined;\n    }\n    if (!capture) { capture = false; }\n\n    var events = eventType.split(' ');\n    for (var i = 0; i < events.length; i += 1) {\n      var event = events[i];\n      for (var j = 0; j < this.length; j += 1) {\n        var el = this[j];\n        var handlers = (void 0);\n        if (!targetSelector && el.dom7Listeners) {\n          handlers = el.dom7Listeners[event];\n        } else if (targetSelector && el.dom7LiveListeners) {\n          handlers = el.dom7LiveListeners[event];\n        }\n        if (handlers && handlers.length) {\n          for (var k = handlers.length - 1; k >= 0; k -= 1) {\n            var handler = handlers[k];\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    return this;\n  }\n  function trigger() {\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n\n    var events = args[0].split(' ');\n    var eventData = args[1];\n    for (var i = 0; i < events.length; i += 1) {\n      var event = events[i];\n      for (var j = 0; j < this.length; j += 1) {\n        var el = this[j];\n        var evt = (void 0);\n        try {\n          evt = new win.CustomEvent(event, {\n            detail: eventData,\n            bubbles: true,\n            cancelable: true,\n          });\n        } catch (e) {\n          evt = doc.createEvent('Event');\n          evt.initEvent(event, true, true);\n          evt.detail = eventData;\n        }\n        // eslint-disable-next-line\n        el.dom7EventData = args.filter(function (data, dataIndex) { return dataIndex > 0; });\n        el.dispatchEvent(evt);\n        el.dom7EventData = [];\n        delete el.dom7EventData;\n      }\n    }\n    return this;\n  }\n  function transitionEnd(callback) {\n    var events = ['webkitTransitionEnd', 'transitionend'];\n    var dom = this;\n    var i;\n    function fireCallBack(e) {\n      /* jshint validthis:true */\n      if (e.target !== this) { return; }\n      callback.call(this, e);\n      for (i = 0; i < events.length; i += 1) {\n        dom.off(events[i], fireCallBack);\n      }\n    }\n    if (callback) {\n      for (i = 0; i < events.length; i += 1) {\n        dom.on(events[i], fireCallBack);\n      }\n    }\n    return this;\n  }\n  function outerWidth(includeMargins) {\n    if (this.length > 0) {\n      if (includeMargins) {\n        // eslint-disable-next-line\n        var styles = this.styles();\n        return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n      }\n      return this[0].offsetWidth;\n    }\n    return null;\n  }\n  function outerHeight(includeMargins) {\n    if (this.length > 0) {\n      if (includeMargins) {\n        // eslint-disable-next-line\n        var styles = this.styles();\n        return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n      }\n      return this[0].offsetHeight;\n    }\n    return null;\n  }\n  function offset() {\n    if (this.length > 0) {\n      var el = this[0];\n      var box = el.getBoundingClientRect();\n      var body = doc.body;\n      var clientTop = el.clientTop || body.clientTop || 0;\n      var clientLeft = el.clientLeft || body.clientLeft || 0;\n      var scrollTop = el === win ? win.scrollY : el.scrollTop;\n      var scrollLeft = el === win ? win.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  function styles() {\n    if (this[0]) { return win.getComputedStyle(this[0], null); }\n    return {};\n  }\n  function css(props, value) {\n    var i;\n    if (arguments.length === 1) {\n      if (typeof props === 'string') {\n        if (this[0]) { return win.getComputedStyle(this[0], null).getPropertyValue(props); }\n      } else {\n        for (i = 0; i < this.length; i += 1) {\n          // eslint-disable-next-line\n          for (var prop in props) {\n            this[i].style[prop] = props[prop];\n          }\n        }\n        return this;\n      }\n    }\n    if (arguments.length === 2 && typeof props === 'string') {\n      for (i = 0; i < this.length; i += 1) {\n        this[i].style[props] = value;\n      }\n      return this;\n    }\n    return this;\n  }\n  // Iterate over the collection passing elements to `callback`\n  function each(callback) {\n    // Don't bother continuing without a callback\n    if (!callback) { return this; }\n    // Iterate over the current collection\n    for (var i = 0; i < this.length; i += 1) {\n      // If the callback returns false\n      if (callback.call(this[i], i, this[i]) === false) {\n        // End the loop early\n        return this;\n      }\n    }\n    // Return `this` to allow chained DOM operations\n    return this;\n  }\n  function filter(callback) {\n    var matchedItems = [];\n    var dom = this;\n    for (var i = 0; i < dom.length; i += 1) {\n      if (callback.call(dom[i], i, dom[i])) { matchedItems.push(dom[i]); }\n    }\n    return new Dom7(matchedItems);\n  }\n  // eslint-disable-next-line\n  function html(html) {\n    if (typeof html === 'undefined') {\n      return this[0] ? this[0].innerHTML : undefined;\n    }\n\n    for (var i = 0; i < this.length; i += 1) {\n      this[i].innerHTML = html;\n    }\n    return this;\n  }\n  // eslint-disable-next-line\n  function text(text) {\n    if (typeof text === 'undefined') {\n      if (this[0]) {\n        return this[0].textContent.trim();\n      }\n      return null;\n    }\n\n    for (var i = 0; i < this.length; i += 1) {\n      this[i].textContent = text;\n    }\n    return this;\n  }\n  function is(selector) {\n    var el = this[0];\n    var compareWith;\n    var i;\n    if (!el || typeof selector === 'undefined') { return false; }\n    if (typeof selector === 'string') {\n      if (el.matches) { return el.matches(selector); }\n      else if (el.webkitMatchesSelector) { return el.webkitMatchesSelector(selector); }\n      else if (el.msMatchesSelector) { return el.msMatchesSelector(selector); }\n\n      compareWith = $(selector);\n      for (i = 0; i < compareWith.length; i += 1) {\n        if (compareWith[i] === el) { return true; }\n      }\n      return false;\n    } else if (selector === doc) { return el === doc; }\n    else if (selector === win) { return el === win; }\n\n    if (selector.nodeType || selector instanceof Dom7) {\n      compareWith = selector.nodeType ? [selector] : selector;\n      for (i = 0; i < compareWith.length; i += 1) {\n        if (compareWith[i] === el) { return true; }\n      }\n      return false;\n    }\n    return false;\n  }\n  function index() {\n    var child = this[0];\n    var i;\n    if (child) {\n      i = 0;\n      // eslint-disable-next-line\n      while ((child = child.previousSibling) !== null) {\n        if (child.nodeType === 1) { i += 1; }\n      }\n      return i;\n    }\n    return undefined;\n  }\n  // eslint-disable-next-line\n  function eq(index) {\n    if (typeof index === 'undefined') { return this; }\n    var length = this.length;\n    var returnIndex;\n    if (index > length - 1) {\n      return new Dom7([]);\n    }\n    if (index < 0) {\n      returnIndex = length + index;\n      if (returnIndex < 0) { return new Dom7([]); }\n      return new Dom7([this[returnIndex]]);\n    }\n    return new Dom7([this[index]]);\n  }\n  function append() {\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n\n    var newChild;\n\n    for (var k = 0; k < args.length; k += 1) {\n      newChild = args[k];\n      for (var i = 0; i < this.length; i += 1) {\n        if (typeof newChild === 'string') {\n          var tempDiv = doc.createElement('div');\n          tempDiv.innerHTML = newChild;\n          while (tempDiv.firstChild) {\n            this[i].appendChild(tempDiv.firstChild);\n          }\n        } else if (newChild instanceof Dom7) {\n          for (var 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  function prepend(newChild) {\n    var i;\n    var j;\n    for (i = 0; i < this.length; i += 1) {\n      if (typeof newChild === 'string') {\n        var tempDiv = doc.createElement('div');\n        tempDiv.innerHTML = newChild;\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    return this;\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 new Dom7([this[0].nextElementSibling]);\n        }\n        return new Dom7([]);\n      }\n\n      if (this[0].nextElementSibling) { return new Dom7([this[0].nextElementSibling]); }\n      return new Dom7([]);\n    }\n    return new Dom7([]);\n  }\n  function nextAll(selector) {\n    var nextEls = [];\n    var el = this[0];\n    if (!el) { return new Dom7([]); }\n    while (el.nextElementSibling) {\n      var next = el.nextElementSibling; // eslint-disable-line\n      if (selector) {\n        if ($(next).is(selector)) { nextEls.push(next); }\n      } else { nextEls.push(next); }\n      el = next;\n    }\n    return new Dom7(nextEls);\n  }\n  function prev(selector) {\n    if (this.length > 0) {\n      var el = this[0];\n      if (selector) {\n        if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n          return new Dom7([el.previousElementSibling]);\n        }\n        return new Dom7([]);\n      }\n\n      if (el.previousElementSibling) { return new Dom7([el.previousElementSibling]); }\n      return new Dom7([]);\n    }\n    return new Dom7([]);\n  }\n  function prevAll(selector) {\n    var prevEls = [];\n    var el = this[0];\n    if (!el) { return new Dom7([]); }\n    while (el.previousElementSibling) {\n      var prev = el.previousElementSibling; // eslint-disable-line\n      if (selector) {\n        if ($(prev).is(selector)) { prevEls.push(prev); }\n      } else { prevEls.push(prev); }\n      el = prev;\n    }\n    return new Dom7(prevEls);\n  }\n  function parent(selector) {\n    var parents = []; // eslint-disable-line\n    for (var 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    return $(unique(parents));\n  }\n  function parents(selector) {\n    var parents = []; // eslint-disable-line\n    for (var i = 0; i < this.length; i += 1) {\n      var parent = this[i].parentNode; // eslint-disable-line\n      while (parent) {\n        if (selector) {\n          if ($(parent).is(selector)) { parents.push(parent); }\n        } else {\n          parents.push(parent);\n        }\n        parent = parent.parentNode;\n      }\n    }\n    return $(unique(parents));\n  }\n  function closest(selector) {\n    var closest = this; // eslint-disable-line\n    if (typeof selector === 'undefined') {\n      return new Dom7([]);\n    }\n    if (!closest.is(selector)) {\n      closest = closest.parents(selector).eq(0);\n    }\n    return closest;\n  }\n  function find(selector) {\n    var foundElements = [];\n    for (var i = 0; i < this.length; i += 1) {\n      var found = this[i].querySelectorAll(selector);\n      for (var j = 0; j < found.length; j += 1) {\n        foundElements.push(found[j]);\n      }\n    }\n    return new Dom7(foundElements);\n  }\n  function children(selector) {\n    var children = []; // eslint-disable-line\n    for (var i = 0; i < this.length; i += 1) {\n      var childNodes = this[i].childNodes;\n\n      for (var j = 0; j < childNodes.length; j += 1) {\n        if (!selector) {\n          if (childNodes[j].nodeType === 1) { children.push(childNodes[j]); }\n        } else if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) {\n          children.push(childNodes[j]);\n        }\n      }\n    }\n    return new Dom7(unique(children));\n  }\n  function remove() {\n    for (var i = 0; i < this.length; i += 1) {\n      if (this[i].parentNode) { this[i].parentNode.removeChild(this[i]); }\n    }\n    return this;\n  }\n  function add() {\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n\n    var dom = this;\n    var i;\n    var j;\n    for (i = 0; i < args.length; i += 1) {\n      var toAdd = $(args[i]);\n      for (j = 0; j < toAdd.length; j += 1) {\n        dom[dom.length] = toAdd[j];\n        dom.length += 1;\n      }\n    }\n    return dom;\n  }\n\n  var Methods = {\n    addClass: addClass,\n    removeClass: removeClass,\n    hasClass: hasClass,\n    toggleClass: toggleClass,\n    attr: attr,\n    removeAttr: removeAttr,\n    data: data,\n    transform: transform,\n    transition: transition,\n    on: on,\n    off: off,\n    trigger: trigger,\n    transitionEnd: transitionEnd,\n    outerWidth: outerWidth,\n    outerHeight: outerHeight,\n    offset: offset,\n    css: css,\n    each: each,\n    html: html,\n    text: text,\n    is: is,\n    index: index,\n    eq: eq,\n    append: append,\n    prepend: prepend,\n    next: next,\n    nextAll: nextAll,\n    prev: prev,\n    prevAll: prevAll,\n    parent: parent,\n    parents: parents,\n    closest: closest,\n    find: find,\n    children: children,\n    filter: filter,\n    remove: remove,\n    add: add,\n    styles: styles,\n  };\n\n  Object.keys(Methods).forEach(function (methodName) {\n    $.fn[methodName] = $.fn[methodName] || Methods[methodName];\n  });\n\n  var Utils = {\n    deleteProps: function deleteProps(obj) {\n      var object = obj;\n      Object.keys(object).forEach(function (key) {\n        try {\n          object[key] = null;\n        } catch (e) {\n          // no getter for object\n        }\n        try {\n          delete object[key];\n        } catch (e) {\n          // something got wrong\n        }\n      });\n    },\n    nextTick: function nextTick(callback, delay) {\n      if ( delay === void 0 ) delay = 0;\n\n      return setTimeout(callback, delay);\n    },\n    now: function now() {\n      return Date.now();\n    },\n    getTranslate: function getTranslate(el, axis) {\n      if ( axis === void 0 ) axis = 'x';\n\n      var matrix;\n      var curTransform;\n      var transformMatrix;\n\n      var curStyle = win.getComputedStyle(el, null);\n\n      if (win.WebKitCSSMatrix) {\n        curTransform = curStyle.transform || curStyle.webkitTransform;\n        if (curTransform.split(',').length > 6) {\n          curTransform = curTransform.split(', ').map(function (a) { return a.replace(',', '.'); }).join(', ');\n        }\n        // Some old versions of Webkit choke when 'none' is passed; pass\n        // empty string instead in this case\n        transformMatrix = new win.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 (win.WebKitCSSMatrix) { curTransform = transformMatrix.m41; }\n        // Crazy IE10 Matrix\n        else if (matrix.length === 16) { curTransform = parseFloat(matrix[12]); }\n        // Normal Browsers\n        else { curTransform = parseFloat(matrix[4]); }\n      }\n      if (axis === 'y') {\n        // Latest Chrome and webkits Fix\n        if (win.WebKitCSSMatrix) { curTransform = transformMatrix.m42; }\n        // Crazy IE10 Matrix\n        else if (matrix.length === 16) { curTransform = parseFloat(matrix[13]); }\n        // Normal Browsers\n        else { curTransform = parseFloat(matrix[5]); }\n      }\n      return curTransform || 0;\n    },\n    parseUrlQuery: function parseUrlQuery(url) {\n      var query = {};\n      var urlToParse = url || win.location.href;\n      var i;\n      var params;\n      var param;\n      var length;\n      if (typeof urlToParse === 'string' && urlToParse.length) {\n        urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\\S*\\?/, '') : '';\n        params = urlToParse.split('&').filter(function (paramsPart) { return paramsPart !== ''; });\n        length = params.length;\n\n        for (i = 0; i < length; i += 1) {\n          param = params[i].replace(/#\\S+/g, '').split('=');\n          query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';\n        }\n      }\n      return query;\n    },\n    isObject: function isObject(o) {\n      return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;\n    },\n    extend: function extend() {\n      var args = [], len$1 = arguments.length;\n      while ( len$1-- ) args[ len$1 ] = arguments[ len$1 ];\n\n      var to = Object(args[0]);\n      for (var i = 1; i < args.length; i += 1) {\n        var nextSource = args[i];\n        if (nextSource !== undefined && nextSource !== null) {\n          var keysArray = Object.keys(Object(nextSource));\n          for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n            var nextKey = keysArray[nextIndex];\n            var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n            if (desc !== undefined && desc.enumerable) {\n              if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n                Utils.extend(to[nextKey], nextSource[nextKey]);\n              } else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n                to[nextKey] = {};\n                Utils.extend(to[nextKey], nextSource[nextKey]);\n              } else {\n                to[nextKey] = nextSource[nextKey];\n              }\n            }\n          }\n        }\n      }\n      return to;\n    },\n  };\n\n  var Support = (function Support() {\n    return {\n      touch: (win.Modernizr && win.Modernizr.touch === true) || (function checkTouch() {\n        return !!((win.navigator.maxTouchPoints > 0) || ('ontouchstart' in win) || (win.DocumentTouch && doc instanceof win.DocumentTouch));\n      }()),\n\n      pointerEvents: !!win.PointerEvent && ('maxTouchPoints' in win.navigator) && win.navigator.maxTouchPoints > 0,\n\n      observer: (function checkObserver() {\n        return ('MutationObserver' in win || 'WebkitMutationObserver' in win);\n      }()),\n\n      passiveListener: (function checkPassiveListener() {\n        var supportsPassive = false;\n        try {\n          var opts = Object.defineProperty({}, 'passive', {\n            // eslint-disable-next-line\n            get: function get() {\n              supportsPassive = true;\n            },\n          });\n          win.addEventListener('testPassiveListener', null, opts);\n        } catch (e) {\n          // No support\n        }\n        return supportsPassive;\n      }()),\n\n      gestures: (function checkGestures() {\n        return 'ongesturestart' in win;\n      }()),\n    };\n  }());\n\n  var SwiperClass = function SwiperClass(params) {\n    if ( params === void 0 ) params = {};\n\n    var self = this;\n    self.params = params;\n\n    // Events\n    self.eventsListeners = {};\n\n    if (self.params && self.params.on) {\n      Object.keys(self.params.on).forEach(function (eventName) {\n        self.on(eventName, self.params.on[eventName]);\n      });\n    }\n  };\n\n  var staticAccessors = { components: { configurable: true } };\n\n  SwiperClass.prototype.on = function on (events, handler, priority) {\n    var self = this;\n    if (typeof handler !== 'function') { return self; }\n    var method = priority ? 'unshift' : 'push';\n    events.split(' ').forEach(function (event) {\n      if (!self.eventsListeners[event]) { self.eventsListeners[event] = []; }\n      self.eventsListeners[event][method](handler);\n    });\n    return self;\n  };\n\n  SwiperClass.prototype.once = function once (events, handler, priority) {\n    var self = this;\n    if (typeof handler !== 'function') { return self; }\n    function onceHandler() {\n      var args = [], len = arguments.length;\n      while ( len-- ) args[ len ] = arguments[ len ];\n\n      self.off(events, onceHandler);\n      if (onceHandler.f7proxy) {\n        delete onceHandler.f7proxy;\n      }\n      handler.apply(self, args);\n    }\n    onceHandler.f7proxy = handler;\n    return self.on(events, onceHandler, priority);\n  };\n\n  SwiperClass.prototype.off = function off (events, handler) {\n    var self = this;\n    if (!self.eventsListeners) { return self; }\n    events.split(' ').forEach(function (event) {\n      if (typeof handler === 'undefined') {\n        self.eventsListeners[event] = [];\n      } else if (self.eventsListeners[event] && self.eventsListeners[event].length) {\n        self.eventsListeners[event].forEach(function (eventHandler, index) {\n          if (eventHandler === handler || (eventHandler.f7proxy && eventHandler.f7proxy === handler)) {\n            self.eventsListeners[event].splice(index, 1);\n          }\n        });\n      }\n    });\n    return self;\n  };\n\n  SwiperClass.prototype.emit = function emit () {\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n\n    var self = this;\n    if (!self.eventsListeners) { return self; }\n    var events;\n    var data;\n    var context;\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    var eventsArray = Array.isArray(events) ? events : events.split(' ');\n    eventsArray.forEach(function (event) {\n      if (self.eventsListeners && self.eventsListeners[event]) {\n        var handlers = [];\n        self.eventsListeners[event].forEach(function (eventHandler) {\n          handlers.push(eventHandler);\n        });\n        handlers.forEach(function (eventHandler) {\n          eventHandler.apply(context, data);\n        });\n      }\n    });\n    return self;\n  };\n\n  SwiperClass.prototype.useModulesParams = function useModulesParams (instanceParams) {\n    var instance = this;\n    if (!instance.modules) { return; }\n    Object.keys(instance.modules).forEach(function (moduleName) {\n      var module = instance.modules[moduleName];\n      // Extend params\n      if (module.params) {\n        Utils.extend(instanceParams, module.params);\n      }\n    });\n  };\n\n  SwiperClass.prototype.useModules = function useModules (modulesParams) {\n    if ( modulesParams === void 0 ) modulesParams = {};\n\n    var instance = this;\n    if (!instance.modules) { return; }\n    Object.keys(instance.modules).forEach(function (moduleName) {\n      var module = instance.modules[moduleName];\n      var moduleParams = modulesParams[moduleName] || {};\n      // Extend instance methods and props\n      if (module.instance) {\n        Object.keys(module.instance).forEach(function (modulePropName) {\n          var moduleProp = module.instance[modulePropName];\n          if (typeof moduleProp === 'function') {\n            instance[modulePropName] = moduleProp.bind(instance);\n          } else {\n            instance[modulePropName] = moduleProp;\n          }\n        });\n      }\n      // Add event listeners\n      if (module.on && instance.on) {\n        Object.keys(module.on).forEach(function (moduleEventName) {\n          instance.on(moduleEventName, module.on[moduleEventName]);\n        });\n      }\n\n      // Module create callback\n      if (module.create) {\n        module.create.bind(instance)(moduleParams);\n      }\n    });\n  };\n\n  staticAccessors.components.set = function (components) {\n    var Class = this;\n    if (!Class.use) { return; }\n    Class.use(components);\n  };\n\n  SwiperClass.installModule = function installModule (module) {\n    var params = [], len = arguments.length - 1;\n    while ( len-- > 0 ) params[ len ] = arguments[ len + 1 ];\n\n    var Class = this;\n    if (!Class.prototype.modules) { Class.prototype.modules = {}; }\n    var name = module.name || (((Object.keys(Class.prototype.modules).length) + \"_\" + (Utils.now())));\n    Class.prototype.modules[name] = module;\n    // Prototype\n    if (module.proto) {\n      Object.keys(module.proto).forEach(function (key) {\n        Class.prototype[key] = module.proto[key];\n      });\n    }\n    // Class\n    if (module.static) {\n      Object.keys(module.static).forEach(function (key) {\n        Class[key] = module.static[key];\n      });\n    }\n    // Callback\n    if (module.install) {\n      module.install.apply(Class, params);\n    }\n    return Class;\n  };\n\n  SwiperClass.use = function use (module) {\n    var params = [], len = arguments.length - 1;\n    while ( len-- > 0 ) params[ len ] = arguments[ len + 1 ];\n\n    var Class = this;\n    if (Array.isArray(module)) {\n      module.forEach(function (m) { return Class.installModule(m); });\n      return Class;\n    }\n    return Class.installModule.apply(Class, [ module ].concat( params ));\n  };\n\n  Object.defineProperties( SwiperClass, staticAccessors );\n\n  function updateSize () {\n    var swiper = this;\n    var width;\n    var height;\n    var $el = swiper.$el;\n    if (typeof swiper.params.width !== 'undefined') {\n      width = swiper.params.width;\n    } else {\n      width = $el[0].clientWidth;\n    }\n    if (typeof swiper.params.height !== 'undefined') {\n      height = swiper.params.height;\n    } else {\n      height = $el[0].clientHeight;\n    }\n    if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) {\n      return;\n    }\n\n    // Subtract paddings\n    width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10);\n    height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10);\n\n    Utils.extend(swiper, {\n      width: width,\n      height: height,\n      size: swiper.isHorizontal() ? width : height,\n    });\n  }\n\n  function updateSlides () {\n    var swiper = this;\n    var params = swiper.params;\n\n    var $wrapperEl = swiper.$wrapperEl;\n    var swiperSize = swiper.size;\n    var rtl = swiper.rtlTranslate;\n    var wrongRTL = swiper.wrongRTL;\n    var isVirtual = swiper.virtual && params.virtual.enabled;\n    var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n    var slides = $wrapperEl.children((\".\" + (swiper.params.slideClass)));\n    var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n    var snapGrid = [];\n    var slidesGrid = [];\n    var slidesSizesGrid = [];\n\n    function slidesForMargin(slideIndex) {\n      if (!params.cssMode) { return true; }\n      if (slideIndex === slides.length - 1) {\n        return false;\n      }\n      return true;\n    }\n\n    var offsetBefore = params.slidesOffsetBefore;\n    if (typeof offsetBefore === 'function') {\n      offsetBefore = params.slidesOffsetBefore.call(swiper);\n    }\n\n    var offsetAfter = params.slidesOffsetAfter;\n    if (typeof offsetAfter === 'function') {\n      offsetAfter = params.slidesOffsetAfter.call(swiper);\n    }\n\n    var previousSnapGridLength = swiper.snapGrid.length;\n    var previousSlidesGridLength = swiper.snapGrid.length;\n\n    var spaceBetween = params.spaceBetween;\n    var slidePosition = -offsetBefore;\n    var prevSlideSize = 0;\n    var index = 0;\n    if (typeof swiperSize === 'undefined') {\n      return;\n    }\n    if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n      spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize;\n    }\n\n    swiper.virtualSize = -spaceBetween;\n\n    // reset margins\n    if (rtl) { slides.css({ marginLeft: '', marginTop: '' }); }\n    else { slides.css({ marginRight: '', marginBottom: '' }); }\n\n    var slidesNumberEvenToRows;\n    if (params.slidesPerColumn > 1) {\n      if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {\n        slidesNumberEvenToRows = slidesLength;\n      } else {\n        slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;\n      }\n      if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {\n        slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);\n      }\n    }\n\n    // Calc slides\n    var slideSize;\n    var slidesPerColumn = params.slidesPerColumn;\n    var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n    var numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);\n    for (var i = 0; i < slidesLength; i += 1) {\n      slideSize = 0;\n      var slide = slides.eq(i);\n      if (params.slidesPerColumn > 1) {\n        // Set slides order\n        var newSlideOrderIndex = (void 0);\n        var column = (void 0);\n        var row = (void 0);\n        if (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) {\n          var groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn));\n          var slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex;\n          var columnsInGroup = groupIndex === 0\n              ? params.slidesPerGroup\n              : Math.min(Math.ceil((slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / slidesPerColumn), params.slidesPerGroup);\n          row = Math.floor(slideIndexInGroup / columnsInGroup);\n          column = (slideIndexInGroup - row * columnsInGroup) + groupIndex * params.slidesPerGroup;\n\n          newSlideOrderIndex = column + ((row * slidesNumberEvenToRows) / slidesPerColumn);\n          slide\n              .css({\n                '-webkit-box-ordinal-group': newSlideOrderIndex,\n                '-moz-box-ordinal-group': newSlideOrderIndex,\n                '-ms-flex-order': newSlideOrderIndex,\n                '-webkit-order': newSlideOrderIndex,\n                order: newSlideOrderIndex,\n              });\n        } else if (params.slidesPerColumnFill === 'column') {\n          column = Math.floor(i / slidesPerColumn);\n          row = i - (column * slidesPerColumn);\n          if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn - 1)) {\n            row += 1;\n            if (row >= slidesPerColumn) {\n              row = 0;\n              column += 1;\n            }\n          }\n        } else {\n          row = Math.floor(i / slidesPerRow);\n          column = i - (row * slidesPerRow);\n        }\n        slide.css(\n            (\"margin-\" + (swiper.isHorizontal() ? 'top' : 'left')),\n            (row !== 0 && params.spaceBetween) && (((params.spaceBetween) + \"px\"))\n        );\n      }\n      if (slide.css('display') === 'none') { continue; } // eslint-disable-line\n\n      if (params.slidesPerView === 'auto') {\n        var slideStyles = win.getComputedStyle(slide[0], null);\n        var currentTransform = slide[0].style.transform;\n        var currentWebKitTransform = slide[0].style.webkitTransform;\n        if (currentTransform) {\n          slide[0].style.transform = 'none';\n        }\n        if (currentWebKitTransform) {\n          slide[0].style.webkitTransform = 'none';\n        }\n        if (params.roundLengths) {\n          slideSize = swiper.isHorizontal()\n              ? slide.outerWidth(true)\n              : slide.outerHeight(true);\n        } else {\n          // eslint-disable-next-line\n          if (swiper.isHorizontal()) {\n            var width = parseFloat(slideStyles.getPropertyValue('width'));\n            var paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left'));\n            var paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right'));\n            var marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left'));\n            var marginRight = parseFloat(slideStyles.getPropertyValue('margin-right'));\n            var boxSizing = slideStyles.getPropertyValue('box-sizing');\n            if (boxSizing && boxSizing === 'border-box') {\n              slideSize = width + marginLeft + marginRight;\n            } else {\n              slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight;\n            }\n          } else {\n            var height = parseFloat(slideStyles.getPropertyValue('height'));\n            var paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top'));\n            var paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom'));\n            var marginTop = parseFloat(slideStyles.getPropertyValue('margin-top'));\n            var marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom'));\n            var boxSizing$1 = slideStyles.getPropertyValue('box-sizing');\n            if (boxSizing$1 && boxSizing$1 === 'border-box') {\n              slideSize = height + marginTop + marginBottom;\n            } else {\n              slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom;\n            }\n          }\n        }\n        if (currentTransform) {\n          slide[0].style.transform = currentTransform;\n        }\n        if (currentWebKitTransform) {\n          slide[0].style.webkitTransform = currentWebKitTransform;\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          if (swiper.isHorizontal()) {\n            slides[i].style.width = slideSize + \"px\";\n          } else {\n            slides[i].style.height = slideSize + \"px\";\n          }\n        }\n      }\n      if (slides[i]) {\n        slides[i].swiperSlideSize = slideSize;\n      }\n      slidesSizesGrid.push(slideSize);\n\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\n      prevSlideSize = slideSize;\n\n      index += 1;\n    }\n    swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n    var newSlidesGrid;\n\n    if (\n        rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n      $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + \"px\") });\n    }\n    if (params.setWrapperSize) {\n      if (swiper.isHorizontal()) { $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n      else { $wrapperEl.css({ height: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n    }\n\n    if (params.slidesPerColumn > 1) {\n      swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;\n      swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;\n      if (swiper.isHorizontal()) { $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n      else { $wrapperEl.css({ height: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n      if (params.centeredSlides) {\n        newSlidesGrid = [];\n        for (var i$1 = 0; i$1 < snapGrid.length; i$1 += 1) {\n          var slidesGridItem = snapGrid[i$1];\n          if (params.roundLengths) { slidesGridItem = Math.floor(slidesGridItem); }\n          if (snapGrid[i$1] < swiper.virtualSize + snapGrid[0]) { newSlidesGrid.push(slidesGridItem); }\n        }\n        snapGrid = newSlidesGrid;\n      }\n    }\n\n    // Remove last grid elements depending on width\n    if (!params.centeredSlides) {\n      newSlidesGrid = [];\n      for (var i$2 = 0; i$2 < snapGrid.length; i$2 += 1) {\n        var slidesGridItem$1 = snapGrid[i$2];\n        if (params.roundLengths) { slidesGridItem$1 = Math.floor(slidesGridItem$1); }\n        if (snapGrid[i$2] <= swiper.virtualSize - swiperSize) {\n          newSlidesGrid.push(slidesGridItem$1);\n        }\n      }\n      snapGrid = newSlidesGrid;\n      if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n        snapGrid.push(swiper.virtualSize - swiperSize);\n      }\n    }\n    if (snapGrid.length === 0) { snapGrid = [0]; }\n\n    if (params.spaceBetween !== 0) {\n      if (swiper.isHorizontal()) {\n        if (rtl) { slides.filter(slidesForMargin).css({ marginLeft: (spaceBetween + \"px\") }); }\n        else { slides.filter(slidesForMargin).css({ marginRight: (spaceBetween + \"px\") }); }\n      } else { slides.filter(slidesForMargin).css({ marginBottom: (spaceBetween + \"px\") }); }\n    }\n\n    if (params.centeredSlides && params.centeredSlidesBounds) {\n      var allSlidesSize = 0;\n      slidesSizesGrid.forEach(function (slideSizeValue) {\n        allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n      });\n      allSlidesSize -= params.spaceBetween;\n      var maxSnap = allSlidesSize - swiperSize;\n      snapGrid = snapGrid.map(function (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      var allSlidesSize$1 = 0;\n      slidesSizesGrid.forEach(function (slideSizeValue) {\n        allSlidesSize$1 += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n      });\n      allSlidesSize$1 -= params.spaceBetween;\n      if (allSlidesSize$1 < swiperSize) {\n        var allSlidesOffset = (swiperSize - allSlidesSize$1) / 2;\n        snapGrid.forEach(function (snap, snapIndex) {\n          snapGrid[snapIndex] = snap - allSlidesOffset;\n        });\n        slidesGrid.forEach(function (snap, snapIndex) {\n          slidesGrid[snapIndex] = snap + allSlidesOffset;\n        });\n      }\n    }\n\n    Utils.extend(swiper, {\n      slides: slides,\n      snapGrid: snapGrid,\n      slidesGrid: slidesGrid,\n      slidesSizesGrid: slidesSizesGrid,\n    });\n\n    if (slidesLength !== previousSlidesLength) {\n      swiper.emit('slidesLengthChange');\n    }\n    if (snapGrid.length !== previousSnapGridLength) {\n      if (swiper.params.watchOverflow) { swiper.checkOverflow(); }\n      swiper.emit('snapGridLengthChange');\n    }\n    if (slidesGrid.length !== previousSlidesGridLength) {\n      swiper.emit('slidesGridLengthChange');\n    }\n\n    if (params.watchSlidesProgress || params.watchSlidesVisibility) {\n      swiper.updateSlidesOffset();\n    }\n  }\n\n  function updateAutoHeight (speed) {\n    var swiper = this;\n    var activeSlides = [];\n    var newHeight = 0;\n    var i;\n    if (typeof speed === 'number') {\n      swiper.setTransition(speed);\n    } else if (speed === true) {\n      swiper.setTransition(swiper.params.speed);\n    }\n    // Find slides currently in view\n    if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n      for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n        var index = swiper.activeIndex + i;\n        if (index > swiper.slides.length) { break; }\n        activeSlides.push(swiper.slides.eq(index)[0]);\n      }\n    } else {\n      activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);\n    }\n\n    // Find new height from highest slide in view\n    for (i = 0; i < activeSlides.length; i += 1) {\n      if (typeof activeSlides[i] !== 'undefined') {\n        var height = activeSlides[i].offsetHeight;\n        newHeight = height > newHeight ? height : newHeight;\n      }\n    }\n\n    // Update Height\n    if (newHeight) { swiper.$wrapperEl.css('height', (newHeight + \"px\")); }\n  }\n\n  function updateSlidesOffset () {\n    var swiper = this;\n    var slides = swiper.slides;\n    for (var 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) {\n    if ( translate === void 0 ) translate = (this && this.translate) || 0;\n\n    var swiper = this;\n    var params = swiper.params;\n\n    var slides = swiper.slides;\n    var rtl = swiper.rtlTranslate;\n\n    if (slides.length === 0) { return; }\n    if (typeof slides[0].swiperSlideOffset === 'undefined') { swiper.updateSlidesOffset(); }\n\n    var offsetCenter = -translate;\n    if (rtl) { offsetCenter = translate; }\n\n    // Visible Slides\n    slides.removeClass(params.slideVisibleClass);\n\n    swiper.visibleSlidesIndexes = [];\n    swiper.visibleSlides = [];\n\n    for (var i = 0; i < slides.length; i += 1) {\n      var slide = slides[i];\n      var slideProgress = (\n          (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0)) - slide.swiperSlideOffset\n      ) / (slide.swiperSlideSize + params.spaceBetween);\n      if (params.watchSlidesVisibility) {\n        var slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n        var slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n        var isVisible = (slideBefore >= 0 && slideBefore < swiper.size - 1)\n            || (slideAfter > 1 && slideAfter <= swiper.size)\n            || (slideBefore <= 0 && slideAfter >= swiper.size);\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    }\n    swiper.visibleSlides = $(swiper.visibleSlides);\n  }\n\n  function updateProgress (translate) {\n    var swiper = this;\n    if (typeof translate === 'undefined') {\n      var multiplier = swiper.rtlTranslate ? -1 : 1;\n      // eslint-disable-next-line\n      translate = (swiper && swiper.translate && (swiper.translate * multiplier)) || 0;\n    }\n    var params = swiper.params;\n    var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n    var progress = swiper.progress;\n    var isBeginning = swiper.isBeginning;\n    var isEnd = swiper.isEnd;\n    var wasBeginning = isBeginning;\n    var wasEnd = isEnd;\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    Utils.extend(swiper, {\n      progress: progress,\n      isBeginning: isBeginning,\n      isEnd: isEnd,\n    });\n\n    if (params.watchSlidesProgress || params.watchSlidesVisibility) { swiper.updateSlidesProgress(translate); }\n\n    if (isBeginning && !wasBeginning) {\n      swiper.emit('reachBeginning toEdge');\n    }\n    if (isEnd && !wasEnd) {\n      swiper.emit('reachEnd toEdge');\n    }\n    if ((wasBeginning && !isBeginning) || (wasEnd && !isEnd)) {\n      swiper.emit('fromEdge');\n    }\n\n    swiper.emit('progress', progress);\n  }\n\n  function updateSlidesClasses () {\n    var swiper = this;\n\n    var slides = swiper.slides;\n    var params = swiper.params;\n    var $wrapperEl = swiper.$wrapperEl;\n    var activeIndex = swiper.activeIndex;\n    var realIndex = swiper.realIndex;\n    var isVirtual = swiper.virtual && params.virtual.enabled;\n\n    slides.removeClass(((params.slideActiveClass) + \" \" + (params.slideNextClass) + \" \" + (params.slidePrevClass) + \" \" + (params.slideDuplicateActiveClass) + \" \" + (params.slideDuplicateNextClass) + \" \" + (params.slideDuplicatePrevClass)));\n\n    var activeSlide;\n    if (isVirtual) {\n      activeSlide = swiper.$wrapperEl.find((\".\" + (params.slideClass) + \"[data-swiper-slide-index=\\\"\" + activeIndex + \"\\\"]\"));\n    } else {\n      activeSlide = slides.eq(activeIndex);\n    }\n\n    // Active classes\n    activeSlide.addClass(params.slideActiveClass);\n\n    if (params.loop) {\n      // Duplicate to all looped slides\n      if (activeSlide.hasClass(params.slideDuplicateClass)) {\n        $wrapperEl\n            .children((\".\" + (params.slideClass) + \":not(.\" + (params.slideDuplicateClass) + \")[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]\"))\n            .addClass(params.slideDuplicateActiveClass);\n      } else {\n        $wrapperEl\n            .children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]\"))\n            .addClass(params.slideDuplicateActiveClass);\n      }\n    }\n    // Next Slide\n    var nextSlide = activeSlide.nextAll((\".\" + (params.slideClass))).eq(0).addClass(params.slideNextClass);\n    if (params.loop && nextSlide.length === 0) {\n      nextSlide = slides.eq(0);\n      nextSlide.addClass(params.slideNextClass);\n    }\n    // Prev Slide\n    var prevSlide = activeSlide.prevAll((\".\" + (params.slideClass))).eq(0).addClass(params.slidePrevClass);\n    if (params.loop && prevSlide.length === 0) {\n      prevSlide = slides.eq(-1);\n      prevSlide.addClass(params.slidePrevClass);\n    }\n    if (params.loop) {\n      // Duplicate to all looped slides\n      if (nextSlide.hasClass(params.slideDuplicateClass)) {\n        $wrapperEl\n            .children((\".\" + (params.slideClass) + \":not(.\" + (params.slideDuplicateClass) + \")[data-swiper-slide-index=\\\"\" + (nextSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n            .addClass(params.slideDuplicateNextClass);\n      } else {\n        $wrapperEl\n            .children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + (nextSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n            .addClass(params.slideDuplicateNextClass);\n      }\n      if (prevSlide.hasClass(params.slideDuplicateClass)) {\n        $wrapperEl\n            .children((\".\" + (params.slideClass) + \":not(.\" + (params.slideDuplicateClass) + \")[data-swiper-slide-index=\\\"\" + (prevSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n            .addClass(params.slideDuplicatePrevClass);\n      } else {\n        $wrapperEl\n            .children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + (prevSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n            .addClass(params.slideDuplicatePrevClass);\n      }\n    }\n  }\n\n  function updateActiveIndex (newActiveIndex) {\n    var swiper = this;\n    var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n    var slidesGrid = swiper.slidesGrid;\n    var snapGrid = swiper.snapGrid;\n    var params = swiper.params;\n    var previousIndex = swiper.activeIndex;\n    var previousRealIndex = swiper.realIndex;\n    var previousSnapIndex = swiper.snapIndex;\n    var activeIndex = newActiveIndex;\n    var snapIndex;\n    if (typeof activeIndex === 'undefined') {\n      for (var 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      }\n      // Normalize slideIndex\n      if (params.normalizeSlideIndex) {\n        if (activeIndex < 0 || typeof activeIndex === 'undefined') { activeIndex = 0; }\n      }\n    }\n    if (snapGrid.indexOf(translate) >= 0) {\n      snapIndex = snapGrid.indexOf(translate);\n    } else {\n      var skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n      snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n    }\n    if (snapIndex >= snapGrid.length) { snapIndex = snapGrid.length - 1; }\n    if (activeIndex === previousIndex) {\n      if (snapIndex !== previousSnapIndex) {\n        swiper.snapIndex = snapIndex;\n        swiper.emit('snapIndexChange');\n      }\n      return;\n    }\n\n    // Get real index\n    var realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n\n    Utils.extend(swiper, {\n      snapIndex: snapIndex,\n      realIndex: realIndex,\n      previousIndex: previousIndex,\n      activeIndex: activeIndex,\n    });\n    swiper.emit('activeIndexChange');\n    swiper.emit('snapIndexChange');\n    if (previousRealIndex !== realIndex) {\n      swiper.emit('realIndexChange');\n    }\n    if (swiper.initialized || swiper.runCallbacksOnInit) {\n      swiper.emit('slideChange');\n    }\n  }\n\n  function updateClickedSlide (e) {\n    var swiper = this;\n    var params = swiper.params;\n    var slide = $(e.target).closest((\".\" + (params.slideClass)))[0];\n    var slideFound = false;\n    if (slide) {\n      for (var i = 0; i < swiper.slides.length; i += 1) {\n        if (swiper.slides[i] === slide) { slideFound = true; }\n      }\n    }\n\n    if (slide && slideFound) {\n      swiper.clickedSlide = slide;\n      if (swiper.virtual && swiper.params.virtual.enabled) {\n        swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n      } else {\n        swiper.clickedIndex = $(slide).index();\n      }\n    } else {\n      swiper.clickedSlide = undefined;\n      swiper.clickedIndex = undefined;\n      return;\n    }\n    if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n      swiper.slideToClickedSlide();\n    }\n  }\n\n  var update = {\n    updateSize: updateSize,\n    updateSlides: updateSlides,\n    updateAutoHeight: updateAutoHeight,\n    updateSlidesOffset: updateSlidesOffset,\n    updateSlidesProgress: updateSlidesProgress,\n    updateProgress: updateProgress,\n    updateSlidesClasses: updateSlidesClasses,\n    updateActiveIndex: updateActiveIndex,\n    updateClickedSlide: updateClickedSlide,\n  };\n\n  function getTranslate (axis) {\n    if ( axis === void 0 ) axis = this.isHorizontal() ? 'x' : 'y';\n\n    var swiper = this;\n\n    var params = swiper.params;\n    var rtl = swiper.rtlTranslate;\n    var translate = swiper.translate;\n    var $wrapperEl = swiper.$wrapperEl;\n\n    if (params.virtualTranslate) {\n      return rtl ? -translate : translate;\n    }\n    if (params.cssMode) {\n      return translate;\n    }\n\n    var currentTranslate = Utils.getTranslate($wrapperEl[0], axis);\n    if (rtl) { currentTranslate = -currentTranslate; }\n\n    return currentTranslate || 0;\n  }\n\n  function setTranslate (translate, byController) {\n    var swiper = this;\n    var rtl = swiper.rtlTranslate;\n    var params = swiper.params;\n    var $wrapperEl = swiper.$wrapperEl;\n    var wrapperEl = swiper.wrapperEl;\n    var progress = swiper.progress;\n    var x = 0;\n    var y = 0;\n    var 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    swiper.previousTranslate = swiper.translate;\n    swiper.translate = swiper.isHorizontal() ? x : y;\n\n    // Check if we need to update progress\n    var newProgress;\n    var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n    if (translatesDiff === 0) {\n      newProgress = 0;\n    } else {\n      newProgress = (translate - swiper.minTranslate()) / (translatesDiff);\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, speed, runCallbacks, translateBounds, internal) {\n    var obj;\n\n    if ( translate === void 0 ) translate = 0;\n    if ( speed === void 0 ) speed = this.params.speed;\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n    if ( translateBounds === void 0 ) translateBounds = true;\n    var swiper = this;\n\n    var params = swiper.params;\n    var wrapperEl = swiper.wrapperEl;\n\n    if (swiper.animating && params.preventInteractionOnTransition) {\n      return false;\n    }\n\n    var minTranslate = swiper.minTranslate();\n    var maxTranslate = swiper.maxTranslate();\n    var newTranslate;\n    if (translateBounds && translate > minTranslate) { newTranslate = minTranslate; }\n    else if (translateBounds && translate < maxTranslate) { newTranslate = maxTranslate; }\n    else { newTranslate = translate; }\n\n    // Update progress\n    swiper.updateProgress(newTranslate);\n\n    if (params.cssMode) {\n      var isH = swiper.isHorizontal();\n      if (speed === 0) {\n        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n      } else {\n        // eslint-disable-next-line\n        if (wrapperEl.scrollTo) {\n          wrapperEl.scrollTo(( obj = {}, obj[isH ? 'left' : 'top'] = -newTranslate, obj.behavior = 'smooth', obj ));\n        } else {\n          wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n        }\n      }\n      return true;\n    }\n\n    if (speed === 0) {\n      swiper.setTransition(0);\n      swiper.setTranslate(newTranslate);\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      if (runCallbacks) {\n        swiper.emit('beforeTransitionStart', speed, internal);\n        swiper.emit('transitionStart');\n      }\n      if (!swiper.animating) {\n        swiper.animating = true;\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            if (runCallbacks) {\n              swiper.emit('transitionEnd');\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: getTranslate,\n    setTranslate: setTranslate,\n    minTranslate: minTranslate,\n    maxTranslate: maxTranslate,\n    translateTo: translateTo,\n  };\n\n  function setTransition (duration, byController) {\n    var 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 transitionStart (runCallbacks, direction) {\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n\n    var swiper = this;\n    var activeIndex = swiper.activeIndex;\n    var params = swiper.params;\n    var previousIndex = swiper.previousIndex;\n    if (params.cssMode) { return; }\n    if (params.autoHeight) {\n      swiper.updateAutoHeight();\n    }\n\n    var dir = direction;\n    if (!dir) {\n      if (activeIndex > previousIndex) { dir = 'next'; }\n      else if (activeIndex < previousIndex) { dir = 'prev'; }\n      else { dir = 'reset'; }\n    }\n\n    swiper.emit('transitionStart');\n\n    if (runCallbacks && activeIndex !== previousIndex) {\n      if (dir === 'reset') {\n        swiper.emit('slideResetTransitionStart');\n        return;\n      }\n      swiper.emit('slideChangeTransitionStart');\n      if (dir === 'next') {\n        swiper.emit('slideNextTransitionStart');\n      } else {\n        swiper.emit('slidePrevTransitionStart');\n      }\n    }\n  }\n\n  function transitionEnd$1 (runCallbacks, direction) {\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n\n    var swiper = this;\n    var activeIndex = swiper.activeIndex;\n    var previousIndex = swiper.previousIndex;\n    var params = swiper.params;\n    swiper.animating = false;\n    if (params.cssMode) { return; }\n    swiper.setTransition(0);\n\n    var dir = direction;\n    if (!dir) {\n      if (activeIndex > previousIndex) { dir = 'next'; }\n      else if (activeIndex < previousIndex) { dir = 'prev'; }\n      else { dir = 'reset'; }\n    }\n\n    swiper.emit('transitionEnd');\n\n    if (runCallbacks && activeIndex !== previousIndex) {\n      if (dir === 'reset') {\n        swiper.emit('slideResetTransitionEnd');\n        return;\n      }\n      swiper.emit('slideChangeTransitionEnd');\n      if (dir === 'next') {\n        swiper.emit('slideNextTransitionEnd');\n      } else {\n        swiper.emit('slidePrevTransitionEnd');\n      }\n    }\n  }\n\n  var transition$1 = {\n    setTransition: setTransition,\n    transitionStart: transitionStart,\n    transitionEnd: transitionEnd$1,\n  };\n\n  function slideTo (index, speed, runCallbacks, internal) {\n    var obj;\n\n    if ( index === void 0 ) index = 0;\n    if ( speed === void 0 ) speed = this.params.speed;\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n    var swiper = this;\n    var slideIndex = index;\n    if (slideIndex < 0) { slideIndex = 0; }\n\n    var params = swiper.params;\n    var snapGrid = swiper.snapGrid;\n    var slidesGrid = swiper.slidesGrid;\n    var previousIndex = swiper.previousIndex;\n    var activeIndex = swiper.activeIndex;\n    var rtl = swiper.rtlTranslate;\n    var wrapperEl = swiper.wrapperEl;\n    if (swiper.animating && params.preventInteractionOnTransition) {\n      return false;\n    }\n\n    var skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n    var snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n    if (snapIndex >= slidesGrid.length) { snapIndex = slidesGrid.length - 1; }\n\n    if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n      swiper.emit('beforeSlideChangeStart');\n    }\n\n    var translate = -snapGrid[snapIndex];\n\n    // Update progress\n    swiper.updateProgress(translate);\n\n    // Normalize slideIndex\n    if (params.normalizeSlideIndex) {\n      for (var i = 0; i < slidesGrid.length; i += 1) {\n        if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {\n          slideIndex = i;\n        }\n      }\n    }\n    // Directions locks\n    if (swiper.initialized && slideIndex !== activeIndex) {\n      if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n        return false;\n      }\n      if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n        if ((activeIndex || 0) !== slideIndex) { return false; }\n      }\n    }\n\n    var direction;\n    if (slideIndex > activeIndex) { direction = 'next'; }\n    else if (slideIndex < activeIndex) { direction = 'prev'; }\n    else { direction = 'reset'; }\n\n\n    // Update Index\n    if ((rtl && -translate === swiper.translate) || (!rtl && translate === swiper.translate)) {\n      swiper.updateActiveIndex(slideIndex);\n      // Update Height\n      if (params.autoHeight) {\n        swiper.updateAutoHeight();\n      }\n      swiper.updateSlidesClasses();\n      if (params.effect !== 'slide') {\n        swiper.setTranslate(translate);\n      }\n      if (direction !== 'reset') {\n        swiper.transitionStart(runCallbacks, direction);\n        swiper.transitionEnd(runCallbacks, direction);\n      }\n      return false;\n    }\n    if (params.cssMode) {\n      var isH = swiper.isHorizontal();\n      if (speed === 0) {\n        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -translate;\n      } else {\n        // eslint-disable-next-line\n        if (wrapperEl.scrollTo) {\n          wrapperEl.scrollTo(( obj = {}, obj[isH ? 'left' : 'top'] = -translate, obj.behavior = 'smooth', obj ));\n        } else {\n          wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -translate;\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      if (!swiper.animating) {\n        swiper.animating = true;\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        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, speed, runCallbacks, internal) {\n    if ( index === void 0 ) index = 0;\n    if ( speed === void 0 ) speed = this.params.speed;\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n\n    var swiper = this;\n    var newIndex = index;\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, runCallbacks, internal) {\n    if ( speed === void 0 ) speed = this.params.speed;\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n\n    var swiper = this;\n    var params = swiper.params;\n    var animating = swiper.animating;\n    var increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup;\n    if (params.loop) {\n      if (animating) { return false; }\n      swiper.loopFix();\n      // eslint-disable-next-line\n      swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n    }\n    return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n  }\n\n  /* eslint no-unused-vars: \"off\" */\n  function slidePrev (speed, runCallbacks, internal) {\n    if ( speed === void 0 ) speed = this.params.speed;\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n\n    var swiper = this;\n    var params = swiper.params;\n    var animating = swiper.animating;\n    var snapGrid = swiper.snapGrid;\n    var slidesGrid = swiper.slidesGrid;\n    var rtlTranslate = swiper.rtlTranslate;\n\n    if (params.loop) {\n      if (animating) { return false; }\n      swiper.loopFix();\n      // eslint-disable-next-line\n      swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n    }\n    var translate = rtlTranslate ? swiper.translate : -swiper.translate;\n    function normalize(val) {\n      if (val < 0) { return -Math.floor(Math.abs(val)); }\n      return Math.floor(val);\n    }\n    var normalizedTranslate = normalize(translate);\n    var normalizedSnapGrid = snapGrid.map(function (val) { return normalize(val); });\n    var normalizedSlidesGrid = slidesGrid.map(function (val) { return normalize(val); });\n\n    var currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];\n    var prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n    if (typeof prevSnap === 'undefined' && params.cssMode) {\n      snapGrid.forEach(function (snap) {\n        if (!prevSnap && normalizedTranslate >= snap) { prevSnap = snap; }\n      });\n    }\n    var prevIndex;\n    if (typeof prevSnap !== 'undefined') {\n      prevIndex = slidesGrid.indexOf(prevSnap);\n      if (prevIndex < 0) { prevIndex = swiper.activeIndex - 1; }\n    }\n    return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n  }\n\n  /* eslint no-unused-vars: \"off\" */\n  function slideReset (speed, runCallbacks, internal) {\n    if ( speed === void 0 ) speed = this.params.speed;\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n\n    var swiper = this;\n    return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n  }\n\n  /* eslint no-unused-vars: \"off\" */\n  function slideToClosest (speed, runCallbacks, internal, threshold) {\n    if ( speed === void 0 ) speed = this.params.speed;\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n    if ( threshold === void 0 ) threshold = 0.5;\n\n    var swiper = this;\n    var index = swiper.activeIndex;\n    var skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n    var snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n\n    var 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      var currentSnap = swiper.snapGrid[snapIndex];\n      var nextSnap = swiper.snapGrid[snapIndex + 1];\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      var prevSnap = swiper.snapGrid[snapIndex - 1];\n      var currentSnap$1 = swiper.snapGrid[snapIndex];\n      if ((translate - prevSnap) <= (currentSnap$1 - prevSnap) * threshold) {\n        index -= swiper.params.slidesPerGroup;\n      }\n    }\n    index = Math.max(index, 0);\n    index = Math.min(index, swiper.slidesGrid.length - 1);\n\n    return swiper.slideTo(index, speed, runCallbacks, internal);\n  }\n\n  function slideToClickedSlide () {\n    var swiper = this;\n    var params = swiper.params;\n    var $wrapperEl = swiper.$wrapperEl;\n\n    var slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n    var slideToIndex = swiper.clickedIndex;\n    var realIndex;\n    if (params.loop) {\n      if (swiper.animating) { return; }\n      realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n      if (params.centeredSlides) {\n        if (\n            (slideToIndex < swiper.loopedSlides - (slidesPerView / 2))\n            || (slideToIndex > (swiper.slides.length - swiper.loopedSlides) + (slidesPerView / 2))\n        ) {\n          swiper.loopFix();\n          slideToIndex = $wrapperEl\n              .children((\".\" + (params.slideClass) + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]:not(.\" + (params.slideDuplicateClass) + \")\"))\n              .eq(0)\n              .index();\n\n          Utils.nextTick(function () {\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\n            .children((\".\" + (params.slideClass) + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]:not(.\" + (params.slideDuplicateClass) + \")\"))\n            .eq(0)\n            .index();\n\n        Utils.nextTick(function () {\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: slideTo,\n    slideToLoop: slideToLoop,\n    slideNext: slideNext,\n    slidePrev: slidePrev,\n    slideReset: slideReset,\n    slideToClosest: slideToClosest,\n    slideToClickedSlide: slideToClickedSlide,\n  };\n\n  function loopCreate () {\n    var swiper = this;\n    var params = swiper.params;\n    var $wrapperEl = swiper.$wrapperEl;\n    // Remove duplicated slides\n    $wrapperEl.children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass))).remove();\n\n    var slides = $wrapperEl.children((\".\" + (params.slideClass)));\n\n    if (params.loopFillGroupWithBlank) {\n      var blankSlidesNum = params.slidesPerGroup - (slides.length % params.slidesPerGroup);\n      if (blankSlidesNum !== params.slidesPerGroup) {\n        for (var i = 0; i < blankSlidesNum; i += 1) {\n          var blankNode = $(doc.createElement('div')).addClass(((params.slideClass) + \" \" + (params.slideBlankClass)));\n          $wrapperEl.append(blankNode);\n        }\n        slides = $wrapperEl.children((\".\" + (params.slideClass)));\n      }\n    }\n\n    if (params.slidesPerView === 'auto' && !params.loopedSlides) { params.loopedSlides = slides.length; }\n\n    swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n    swiper.loopedSlides += params.loopAdditionalSlides;\n    if (swiper.loopedSlides > slides.length) {\n      swiper.loopedSlides = slides.length;\n    }\n\n    var prependSlides = [];\n    var appendSlides = [];\n    slides.each(function (index, el) {\n      var slide = $(el);\n      if (index < swiper.loopedSlides) { appendSlides.push(el); }\n      if (index < slides.length && index >= slides.length - swiper.loopedSlides) { prependSlides.push(el); }\n      slide.attr('data-swiper-slide-index', index);\n    });\n    for (var i$1 = 0; i$1 < appendSlides.length; i$1 += 1) {\n      $wrapperEl.append($(appendSlides[i$1].cloneNode(true)).addClass(params.slideDuplicateClass));\n    }\n    for (var i$2 = prependSlides.length - 1; i$2 >= 0; i$2 -= 1) {\n      $wrapperEl.prepend($(prependSlides[i$2].cloneNode(true)).addClass(params.slideDuplicateClass));\n    }\n  }\n\n  function loopFix () {\n    var swiper = this;\n\n    swiper.emit('beforeLoopFix');\n\n    var activeIndex = swiper.activeIndex;\n    var slides = swiper.slides;\n    var loopedSlides = swiper.loopedSlides;\n    var allowSlidePrev = swiper.allowSlidePrev;\n    var allowSlideNext = swiper.allowSlideNext;\n    var snapGrid = swiper.snapGrid;\n    var rtl = swiper.rtlTranslate;\n    var newIndex;\n    swiper.allowSlidePrev = true;\n    swiper.allowSlideNext = true;\n\n    var snapTranslate = -snapGrid[activeIndex];\n    var diff = snapTranslate - swiper.getTranslate();\n\n    // Fix For Negative Oversliding\n    if (activeIndex < loopedSlides) {\n      newIndex = (slides.length - (loopedSlides * 3)) + activeIndex;\n      newIndex += loopedSlides;\n      var slideChanged = swiper.slideTo(newIndex, 0, false, true);\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      var slideChanged$1 = swiper.slideTo(newIndex, 0, false, true);\n      if (slideChanged$1 && diff !== 0) {\n        swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n      }\n    }\n    swiper.allowSlidePrev = allowSlidePrev;\n    swiper.allowSlideNext = allowSlideNext;\n\n    swiper.emit('loopFix');\n  }\n\n  function loopDestroy () {\n    var swiper = this;\n    var $wrapperEl = swiper.$wrapperEl;\n    var params = swiper.params;\n    var slides = swiper.slides;\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: loopCreate,\n    loopFix: loopFix,\n    loopDestroy: loopDestroy,\n  };\n\n  function setGrabCursor (moving) {\n    var swiper = this;\n    if (Support.touch || !swiper.params.simulateTouch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) { return; }\n    var el = swiper.el;\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    var swiper = this;\n    if (Support.touch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) { return; }\n    swiper.el.style.cursor = '';\n  }\n\n  var grabCursor = {\n    setGrabCursor: setGrabCursor,\n    unsetGrabCursor: unsetGrabCursor,\n  };\n\n  function appendSlide (slides) {\n    var swiper = this;\n    var $wrapperEl = swiper.$wrapperEl;\n    var params = swiper.params;\n    if (params.loop) {\n      swiper.loopDestroy();\n    }\n    if (typeof slides === 'object' && 'length' in slides) {\n      for (var i = 0; i < slides.length; i += 1) {\n        if (slides[i]) { $wrapperEl.append(slides[i]); }\n      }\n    } else {\n      $wrapperEl.append(slides);\n    }\n    if (params.loop) {\n      swiper.loopCreate();\n    }\n    if (!(params.observer && Support.observer)) {\n      swiper.update();\n    }\n  }\n\n  function prependSlide (slides) {\n    var swiper = this;\n    var params = swiper.params;\n    var $wrapperEl = swiper.$wrapperEl;\n    var activeIndex = swiper.activeIndex;\n\n    if (params.loop) {\n      swiper.loopDestroy();\n    }\n    var newActiveIndex = activeIndex + 1;\n    if (typeof slides === 'object' && 'length' in slides) {\n      for (var i = 0; i < slides.length; i += 1) {\n        if (slides[i]) { $wrapperEl.prepend(slides[i]); }\n      }\n      newActiveIndex = activeIndex + slides.length;\n    } else {\n      $wrapperEl.prepend(slides);\n    }\n    if (params.loop) {\n      swiper.loopCreate();\n    }\n    if (!(params.observer && Support.observer)) {\n      swiper.update();\n    }\n    swiper.slideTo(newActiveIndex, 0, false);\n  }\n\n  function addSlide (index, slides) {\n    var swiper = this;\n    var $wrapperEl = swiper.$wrapperEl;\n    var params = swiper.params;\n    var activeIndex = swiper.activeIndex;\n    var activeIndexBuffer = activeIndex;\n    if (params.loop) {\n      activeIndexBuffer -= swiper.loopedSlides;\n      swiper.loopDestroy();\n      swiper.slides = $wrapperEl.children((\".\" + (params.slideClass)));\n    }\n    var baseLength = swiper.slides.length;\n    if (index <= 0) {\n      swiper.prependSlide(slides);\n      return;\n    }\n    if (index >= baseLength) {\n      swiper.appendSlide(slides);\n      return;\n    }\n    var newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n\n    var slidesBuffer = [];\n    for (var i = baseLength - 1; i >= index; i -= 1) {\n      var currentSlide = swiper.slides.eq(i);\n      currentSlide.remove();\n      slidesBuffer.unshift(currentSlide);\n    }\n\n    if (typeof slides === 'object' && 'length' in slides) {\n      for (var i$1 = 0; i$1 < slides.length; i$1 += 1) {\n        if (slides[i$1]) { $wrapperEl.append(slides[i$1]); }\n      }\n      newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n    } else {\n      $wrapperEl.append(slides);\n    }\n\n    for (var i$2 = 0; i$2 < slidesBuffer.length; i$2 += 1) {\n      $wrapperEl.append(slidesBuffer[i$2]);\n    }\n\n    if (params.loop) {\n      swiper.loopCreate();\n    }\n    if (!(params.observer && Support.observer)) {\n      swiper.update();\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    var swiper = this;\n    var params = swiper.params;\n    var $wrapperEl = swiper.$wrapperEl;\n    var activeIndex = swiper.activeIndex;\n\n    var activeIndexBuffer = activeIndex;\n    if (params.loop) {\n      activeIndexBuffer -= swiper.loopedSlides;\n      swiper.loopDestroy();\n      swiper.slides = $wrapperEl.children((\".\" + (params.slideClass)));\n    }\n    var newActiveIndex = activeIndexBuffer;\n    var indexToRemove;\n\n    if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n      for (var 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      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 && Support.observer)) {\n      swiper.update();\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    var swiper = this;\n\n    var slidesIndexes = [];\n    for (var i = 0; i < swiper.slides.length; i += 1) {\n      slidesIndexes.push(i);\n    }\n    swiper.removeSlide(slidesIndexes);\n  }\n\n  var manipulation = {\n    appendSlide: appendSlide,\n    prependSlide: prependSlide,\n    addSlide: addSlide,\n    removeSlide: removeSlide,\n    removeAllSlides: removeAllSlides,\n  };\n\n  var Device = (function Device() {\n    var platform = win.navigator.platform;\n    var ua = win.navigator.userAgent;\n\n    var device = {\n      ios: false,\n      android: false,\n      androidChrome: false,\n      desktop: false,\n      iphone: false,\n      ipod: false,\n      ipad: false,\n      edge: false,\n      ie: false,\n      firefox: false,\n      macos: false,\n      windows: false,\n      cordova: !!(win.cordova || win.phonegap),\n      phonegap: !!(win.cordova || win.phonegap),\n      electron: false,\n    };\n\n    var screenWidth = win.screen.width;\n    var screenHeight = win.screen.height;\n\n    var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n    var ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n    var ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n    var iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n    var ie = ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;\n    var edge = ua.indexOf('Edge/') >= 0;\n    var firefox = ua.indexOf('Gecko/') >= 0 && ua.indexOf('Firefox/') >= 0;\n    var windows = platform === 'Win32';\n    var electron = ua.toLowerCase().indexOf('electron') >= 0;\n    var macos = platform === 'MacIntel';\n\n    // iPadOs 13 fix\n    if (!ipad\n        && macos\n        && Support.touch\n        && (\n            (screenWidth === 1024 && screenHeight === 1366) // Pro 12.9\n            || (screenWidth === 834 && screenHeight === 1194) // Pro 11\n            || (screenWidth === 834 && screenHeight === 1112) // Pro 10.5\n            || (screenWidth === 768 && screenHeight === 1024) // other\n        )\n    ) {\n      ipad = ua.match(/(Version)\\/([\\d.]+)/);\n      macos = false;\n    }\n\n    device.ie = ie;\n    device.edge = edge;\n    device.firefox = firefox;\n\n    // Android\n    if (android && !windows) {\n      device.os = 'android';\n      device.osVersion = android[2];\n      device.android = true;\n      device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;\n    }\n    if (ipad || iphone || ipod) {\n      device.os = 'ios';\n      device.ios = true;\n    }\n    // iOS\n    if (iphone && !ipod) {\n      device.osVersion = iphone[2].replace(/_/g, '.');\n      device.iphone = true;\n    }\n    if (ipad) {\n      device.osVersion = ipad[2].replace(/_/g, '.');\n      device.ipad = true;\n    }\n    if (ipod) {\n      device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\n      device.ipod = true;\n    }\n    // iOS 8+ changed UA\n    if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {\n      if (device.osVersion.split('.')[0] === '10') {\n        device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];\n      }\n    }\n\n    // Webview\n    device.webView = !!((iphone || ipad || ipod) && (ua.match(/.*AppleWebKit(?!.*Safari)/i) || win.navigator.standalone))\n        || (win.matchMedia && win.matchMedia('(display-mode: standalone)').matches);\n    device.webview = device.webView;\n    device.standalone = device.webView;\n\n    // Desktop\n    device.desktop = !(device.ios || device.android) || electron;\n    if (device.desktop) {\n      device.electron = electron;\n      device.macos = macos;\n      device.windows = windows;\n      if (device.macos) {\n        device.os = 'macos';\n      }\n      if (device.windows) {\n        device.os = 'windows';\n      }\n    }\n\n    // Pixel Ratio\n    device.pixelRatio = win.devicePixelRatio || 1;\n\n    // Export object\n    return device;\n  }());\n\n  function onTouchStart (event) {\n    var swiper = this;\n    var data = swiper.touchEventsData;\n    var params = swiper.params;\n    var touches = swiper.touches;\n\n    if (swiper.animating && params.preventInteractionOnTransition) {\n      return;\n    }\n    var e = event;\n    if (e.originalEvent) { e = e.originalEvent; }\n    var $targetEl = $(e.target);\n\n    if (params.touchEventsTarget === 'wrapper') {\n      if (!$targetEl.closest(swiper.wrapperEl).length) { return; }\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; }\n    if (params.noSwiping && $targetEl.closest(params.noSwipingSelector ? params.noSwipingSelector : (\".\" + (params.noSwipingClass)))[0]) {\n      swiper.allowClick = true;\n      return;\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    var startX = touches.currentX;\n    var startY = touches.currentY;\n\n    // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore\n\n    var edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n    var edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n    if (\n        edgeSwipeDetection\n        && ((startX <= edgeSwipeThreshold)\n        || (startX >= win.screen.width - edgeSwipeThreshold))\n    ) {\n      return;\n    }\n\n    Utils.extend(data, {\n      isTouched: true,\n      isMoved: false,\n      allowTouchCallbacks: true,\n      isScrolling: undefined,\n      startMoving: undefined,\n    });\n\n    touches.startX = startX;\n    touches.startY = startY;\n    data.touchStartTime = Utils.now();\n    swiper.allowClick = true;\n    swiper.updateSize();\n    swiper.swipeDirection = undefined;\n    if (params.threshold > 0) { data.allowThresholdMove = false; }\n    if (e.type !== 'touchstart') {\n      var preventDefault = true;\n      if ($targetEl.is(data.formElements)) { preventDefault = false; }\n      if (\n          doc.activeElement\n          && $(doc.activeElement).is(data.formElements)\n          && doc.activeElement !== $targetEl[0]\n      ) {\n        doc.activeElement.blur();\n      }\n\n      var shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n      if (params.touchStartForcePreventDefault || shouldPreventDefault) {\n        e.preventDefault();\n      }\n    }\n    swiper.emit('touchStart', e);\n  }\n\n  function onTouchMove (event) {\n    var swiper = this;\n    var data = swiper.touchEventsData;\n    var params = swiper.params;\n    var touches = swiper.touches;\n    var rtl = swiper.rtlTranslate;\n    var e = event;\n    if (e.originalEvent) { e = e.originalEvent; }\n    if (!data.isTouched) {\n      if (data.startMoving && data.isScrolling) {\n        swiper.emit('touchMoveOpposite', e);\n      }\n      return;\n    }\n    if (data.isTouchEvent && e.type === 'mousemove') { return; }\n    var targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n    var pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n    var pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n    if (e.preventedByNestedSwiper) {\n      touches.startX = pageX;\n      touches.startY = pageY;\n      return;\n    }\n    if (!swiper.allowTouchMove) {\n      // isMoved = true;\n      swiper.allowClick = false;\n      if (data.isTouched) {\n        Utils.extend(touches, {\n          startX: pageX,\n          startY: pageY,\n          currentX: pageX,\n          currentY: pageY,\n        });\n        data.touchStartTime = Utils.now();\n      }\n      return;\n    }\n    if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n      if (swiper.isVertical()) {\n        // Vertical\n        if (\n            (pageY < touches.startY && swiper.translate <= swiper.maxTranslate())\n            || (pageY > touches.startY && swiper.translate >= swiper.minTranslate())\n        ) {\n          data.isTouched = false;\n          data.isMoved = false;\n          return;\n        }\n      } else if (\n          (pageX < touches.startX && swiper.translate <= swiper.maxTranslate())\n          || (pageX > touches.startX && swiper.translate >= swiper.minTranslate())\n      ) {\n        return;\n      }\n    }\n    if (data.isTouchEvent && doc.activeElement) {\n      if (e.target === doc.activeElement && $(e.target).is(data.formElements)) {\n        data.isMoved = true;\n        swiper.allowClick = false;\n        return;\n      }\n    }\n    if (data.allowTouchCallbacks) {\n      swiper.emit('touchMove', e);\n    }\n    if (e.targetTouches && e.targetTouches.length > 1) { return; }\n\n    touches.currentX = pageX;\n    touches.currentY = pageY;\n\n    var diffX = touches.currentX - touches.startX;\n    var diffY = touches.currentY - touches.startY;\n    if (swiper.params.threshold && Math.sqrt((Math.pow( diffX, 2 )) + (Math.pow( diffY, 2 ))) < swiper.params.threshold) { return; }\n\n    if (typeof data.isScrolling === 'undefined') {\n      var touchAngle;\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    if (data.isScrolling) {\n      swiper.emit('touchMoveOpposite', e);\n    }\n    if (typeof data.startMoving === 'undefined') {\n      if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n        data.startMoving = true;\n      }\n    }\n    if (data.isScrolling) {\n      data.isTouched = false;\n      return;\n    }\n    if (!data.startMoving) {\n      return;\n    }\n    swiper.allowClick = false;\n    if (!params.cssMode) {\n      e.preventDefault();\n    }\n    if (params.touchMoveStopPropagation && !params.nested) {\n      e.stopPropagation();\n    }\n\n    if (!data.isMoved) {\n      if (params.loop) {\n        swiper.loopFix();\n      }\n      data.startTranslate = swiper.getTranslate();\n      swiper.setTransition(0);\n      if (swiper.animating) {\n        swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n      }\n      data.allowMomentumBounce = false;\n      // Grab Cursor\n      if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n        swiper.setGrabCursor(true);\n      }\n      swiper.emit('sliderFirstMove', e);\n    }\n    swiper.emit('sliderMove', e);\n    data.isMoved = true;\n\n    var diff = swiper.isHorizontal() ? diffX : diffY;\n    touches.diff = diff;\n\n    diff *= params.touchRatio;\n    if (rtl) { diff = -diff; }\n\n    swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n    data.currentTranslate = diff + data.startTranslate;\n\n    var disableParentSwiper = true;\n    var resistanceRatio = params.resistanceRatio;\n    if (params.touchReleaseOnEdges) {\n      resistanceRatio = 0;\n    }\n    if ((diff > 0 && data.currentTranslate > swiper.minTranslate())) {\n      disableParentSwiper = false;\n      if (params.resistance) { data.currentTranslate = (swiper.minTranslate() - 1) + (Math.pow( (-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) - (Math.pow( (swiper.maxTranslate() - data.startTranslate - diff), resistanceRatio )); }\n    }\n\n    if (disableParentSwiper) {\n      e.preventedByNestedSwiper = true;\n    }\n\n    // Directions locks\n    if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n      data.currentTranslate = data.startTranslate;\n    }\n    if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n      data.currentTranslate = data.startTranslate;\n    }\n\n\n    // Threshold\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; }\n\n    // Update active index in free mode\n    if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    }\n    if (params.freeMode) {\n      // Velocity\n      if (data.velocities.length === 0) {\n        data.velocities.push({\n          position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n          time: data.touchStartTime,\n        });\n      }\n      data.velocities.push({\n        position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n        time: Utils.now(),\n      });\n    }\n    // Update progress\n    swiper.updateProgress(data.currentTranslate);\n    // Update translate\n    swiper.setTranslate(data.currentTranslate);\n  }\n\n  function onTouchEnd (event) {\n    var swiper = this;\n    var data = swiper.touchEventsData;\n\n    var params = swiper.params;\n    var touches = swiper.touches;\n    var rtl = swiper.rtlTranslate;\n    var $wrapperEl = swiper.$wrapperEl;\n    var slidesGrid = swiper.slidesGrid;\n    var snapGrid = swiper.snapGrid;\n    var e = event;\n    if (e.originalEvent) { e = e.originalEvent; }\n    if (data.allowTouchCallbacks) {\n      swiper.emit('touchEnd', e);\n    }\n    data.allowTouchCallbacks = false;\n    if (!data.isTouched) {\n      if (data.isMoved && params.grabCursor) {\n        swiper.setGrabCursor(false);\n      }\n      data.isMoved = false;\n      data.startMoving = false;\n      return;\n    }\n    // Return Grab Cursor\n    if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n      swiper.setGrabCursor(false);\n    }\n\n    // Time diff\n    var touchEndTime = Utils.now();\n    var timeDiff = touchEndTime - data.touchStartTime;\n\n    // Tap, doubleTap, Click\n    if (swiper.allowClick) {\n      swiper.updateClickedSlide(e);\n      swiper.emit('tap click', e);\n      if (timeDiff < 300 && (touchEndTime - data.lastClickTime) < 300) {\n        swiper.emit('doubleTap doubleClick', e);\n      }\n    }\n\n    data.lastClickTime = Utils.now();\n    Utils.nextTick(function () {\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    data.isTouched = false;\n    data.isMoved = false;\n    data.startMoving = false;\n\n    var currentPos;\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 (params.freeMode) {\n      if (currentPos < -swiper.minTranslate()) {\n        swiper.slideTo(swiper.activeIndex);\n        return;\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        return;\n      }\n\n      if (params.freeModeMomentum) {\n        if (data.velocities.length > 1) {\n          var lastMoveEvent = data.velocities.pop();\n          var velocityEvent = data.velocities.pop();\n\n          var distance = lastMoveEvent.position - velocityEvent.position;\n          var time = lastMoveEvent.time - velocityEvent.time;\n          swiper.velocity = distance / time;\n          swiper.velocity /= 2;\n          if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {\n            swiper.velocity = 0;\n          }\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          if (time > 150 || (Utils.now() - lastMoveEvent.time) > 300) {\n            swiper.velocity = 0;\n          }\n        } else {\n          swiper.velocity = 0;\n        }\n        swiper.velocity *= params.freeModeMomentumVelocityRatio;\n\n        data.velocities.length = 0;\n        var momentumDuration = 1000 * params.freeModeMomentumRatio;\n        var momentumDistance = swiper.velocity * momentumDuration;\n\n        var newPosition = swiper.translate + momentumDistance;\n        if (rtl) { newPosition = -newPosition; }\n\n        var doBounce = false;\n        var afterBouncePosition;\n        var bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;\n        var needsLoopFix;\n        if (newPosition < swiper.maxTranslate()) {\n          if (params.freeModeMomentumBounce) {\n            if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n              newPosition = swiper.maxTranslate() - bounceAmount;\n            }\n            afterBouncePosition = swiper.maxTranslate();\n            doBounce = true;\n            data.allowMomentumBounce = true;\n          } else {\n            newPosition = swiper.maxTranslate();\n          }\n          if (params.loop && params.centeredSlides) { needsLoopFix = true; }\n        } else if (newPosition > swiper.minTranslate()) {\n          if (params.freeModeMomentumBounce) {\n            if (newPosition - swiper.minTranslate() > bounceAmount) {\n              newPosition = swiper.minTranslate() + bounceAmount;\n            }\n            afterBouncePosition = swiper.minTranslate();\n            doBounce = true;\n            data.allowMomentumBounce = true;\n          } else {\n            newPosition = swiper.minTranslate();\n          }\n          if (params.loop && params.centeredSlides) { needsLoopFix = true; }\n        } else if (params.freeModeSticky) {\n          var nextSlide;\n          for (var 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          newPosition = -newPosition;\n        }\n        if (needsLoopFix) {\n          swiper.once('transitionEnd', function () {\n            swiper.loopFix();\n          });\n        }\n        // Fix duration\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          if (params.freeModeSticky) {\n            // If freeModeSticky 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            var moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n            var currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\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.freeModeSticky) {\n          swiper.slideToClosest();\n          return;\n        }\n\n        if (params.freeModeMomentumBounce && 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(function () {\n            if (!swiper || swiper.destroyed || !data.allowMomentumBounce) { return; }\n            swiper.emit('momentumBounce');\n\n            swiper.setTransition(params.speed);\n            swiper.setTranslate(afterBouncePosition);\n            $wrapperEl.transitionEnd(function () {\n              if (!swiper || swiper.destroyed) { return; }\n              swiper.transitionEnd();\n            });\n          });\n        } else if (swiper.velocity) {\n          swiper.updateProgress(newPosition);\n          swiper.setTransition(momentumDuration);\n          swiper.setTranslate(newPosition);\n          swiper.transitionStart(true, swiper.swipeDirection);\n          if (!swiper.animating) {\n            swiper.animating = true;\n            $wrapperEl.transitionEnd(function () {\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.freeModeSticky) {\n        swiper.slideToClosest();\n        return;\n      }\n\n      if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {\n        swiper.updateProgress();\n        swiper.updateActiveIndex();\n        swiper.updateSlidesClasses();\n      }\n      return;\n    }\n\n    // Find current slide\n    var stopIndex = 0;\n    var groupSize = swiper.slidesSizesGrid[0];\n    for (var i = 0; i < slidesGrid.length; i += (i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup)) {\n      var increment$1 = (i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup);\n      if (typeof slidesGrid[i + increment$1] !== 'undefined') {\n        if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment$1]) {\n          stopIndex = i;\n          groupSize = slidesGrid[i + increment$1] - slidesGrid[i];\n        }\n      } else if (currentPos >= slidesGrid[i]) {\n        stopIndex = i;\n        groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n      }\n    }\n\n    // Find current slide size\n    var ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n    var 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      if (swiper.swipeDirection === 'next') {\n        if (ratio >= params.longSwipesRatio) { swiper.slideTo(stopIndex + increment); }\n        else { swiper.slideTo(stopIndex); }\n      }\n      if (swiper.swipeDirection === 'prev') {\n        if (ratio > (1 - params.longSwipesRatio)) { swiper.slideTo(stopIndex + increment); }\n        else { swiper.slideTo(stopIndex); }\n      }\n    } else {\n      // Short swipes\n      if (!params.shortSwipes) {\n        swiper.slideTo(swiper.activeIndex);\n        return;\n      }\n      var isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n      if (!isNavButtonTarget) {\n        if (swiper.swipeDirection === 'next') {\n          swiper.slideTo(stopIndex + increment);\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    var swiper = this;\n\n    var params = swiper.params;\n    var el = swiper.el;\n\n    if (el && el.offsetWidth === 0) { return; }\n\n    // Breakpoints\n    if (params.breakpoints) {\n      swiper.setBreakpoint();\n    }\n\n    // Save locks\n    var allowSlideNext = swiper.allowSlideNext;\n    var allowSlidePrev = swiper.allowSlidePrev;\n    var snapGrid = swiper.snapGrid;\n\n    // Disable locks on resize\n    swiper.allowSlideNext = true;\n    swiper.allowSlidePrev = true;\n\n    swiper.updateSize();\n    swiper.updateSlides();\n\n    swiper.updateSlidesClasses();\n    if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !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    }\n    // Return locks after resize\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    var swiper = this;\n    if (!swiper.allowClick) {\n      if (swiper.params.preventClicks) { e.preventDefault(); }\n      if (swiper.params.preventClicksPropagation && swiper.animating) {\n        e.stopPropagation();\n        e.stopImmediatePropagation();\n      }\n    }\n  }\n\n  function onScroll () {\n    var swiper = this;\n    var wrapperEl = swiper.wrapperEl;\n    swiper.previousTranslate = swiper.translate;\n    swiper.translate = swiper.isHorizontal() ? -wrapperEl.scrollLeft : -wrapperEl.scrollTop;\n    // eslint-disable-next-line\n    if (swiper.translate === -0) { swiper.translate = 0; }\n\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n\n    var newProgress;\n    var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n    if (translatesDiff === 0) {\n      newProgress = 0;\n    } else {\n      newProgress = (swiper.translate - swiper.minTranslate()) / (translatesDiff);\n    }\n    if (newProgress !== swiper.progress) {\n      swiper.updateProgress(swiper.translate);\n    }\n\n    swiper.emit('setTranslate', swiper.translate, false);\n  }\n\n  var dummyEventAttached = false;\n  function dummyEventListener() {}\n\n  function attachEvents() {\n    var swiper = this;\n    var params = swiper.params;\n    var touchEvents = swiper.touchEvents;\n    var el = swiper.el;\n    var wrapperEl = swiper.wrapperEl;\n\n    swiper.onTouchStart = onTouchStart.bind(swiper);\n    swiper.onTouchMove = onTouchMove.bind(swiper);\n    swiper.onTouchEnd = onTouchEnd.bind(swiper);\n    if (params.cssMode) {\n      swiper.onScroll = onScroll.bind(swiper);\n    }\n\n    swiper.onClick = onClick.bind(swiper);\n\n    var capture = !!params.nested;\n\n    // Touch Events\n    if (!Support.touch && Support.pointerEvents) {\n      el.addEventListener(touchEvents.start, swiper.onTouchStart, false);\n      doc.addEventListener(touchEvents.move, swiper.onTouchMove, capture);\n      doc.addEventListener(touchEvents.end, swiper.onTouchEnd, false);\n    } else {\n      if (Support.touch) {\n        var passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n        el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n        el.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? { passive: false, capture: capture } : capture);\n        el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n        if (touchEvents.cancel) {\n          el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n        }\n        if (!dummyEventAttached) {\n          doc.addEventListener('touchstart', dummyEventListener);\n          dummyEventAttached = true;\n        }\n      }\n      if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n        el.addEventListener('mousedown', swiper.onTouchStart, false);\n        doc.addEventListener('mousemove', swiper.onTouchMove, capture);\n        doc.addEventListener('mouseup', swiper.onTouchEnd, false);\n      }\n    }\n    // Prevent Links Clicks\n    if (params.preventClicks || params.preventClicksPropagation) {\n      el.addEventListener('click', swiper.onClick, true);\n    }\n    if (params.cssMode) {\n      wrapperEl.addEventListener('scroll', swiper.onScroll);\n    }\n\n    // Resize handler\n    if (params.updateOnWindowResize) {\n      swiper.on((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize, true);\n    } else {\n      swiper.on('observerUpdate', onResize, true);\n    }\n  }\n\n  function detachEvents() {\n    var swiper = this;\n\n    var params = swiper.params;\n    var touchEvents = swiper.touchEvents;\n    var el = swiper.el;\n    var wrapperEl = swiper.wrapperEl;\n\n    var capture = !!params.nested;\n\n    // Touch Events\n    if (!Support.touch && Support.pointerEvents) {\n      el.removeEventListener(touchEvents.start, swiper.onTouchStart, false);\n      doc.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n      doc.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);\n    } else {\n      if (Support.touch) {\n        var passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n        el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n        el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n        el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n        if (touchEvents.cancel) {\n          el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n        }\n      }\n      if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n        el.removeEventListener('mousedown', swiper.onTouchStart, false);\n        doc.removeEventListener('mousemove', swiper.onTouchMove, capture);\n        doc.removeEventListener('mouseup', swiper.onTouchEnd, false);\n      }\n    }\n    // Prevent Links Clicks\n    if (params.preventClicks || params.preventClicksPropagation) {\n      el.removeEventListener('click', swiper.onClick, true);\n    }\n\n    if (params.cssMode) {\n      wrapperEl.removeEventListener('scroll', swiper.onScroll);\n    }\n\n    // Resize handler\n    swiper.off((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize);\n  }\n\n  var events = {\n    attachEvents: attachEvents,\n    detachEvents: detachEvents,\n  };\n\n  function setBreakpoint () {\n    var swiper = this;\n    var activeIndex = swiper.activeIndex;\n    var initialized = swiper.initialized;\n    var loopedSlides = swiper.loopedSlides; if ( loopedSlides === void 0 ) loopedSlides = 0;\n    var params = swiper.params;\n    var $el = swiper.$el;\n    var breakpoints = params.breakpoints;\n    if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) { return; }\n\n    // Get breakpoint for window width and update parameters\n    var breakpoint = swiper.getBreakpoint(breakpoints);\n\n    if (breakpoint && swiper.currentBreakpoint !== breakpoint) {\n      var breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n      if (breakpointOnlyParams) {\n        ['slidesPerView', 'spaceBetween', 'slidesPerGroup', 'slidesPerGroupSkip', 'slidesPerColumn'].forEach(function (param) {\n          var paramValue = breakpointOnlyParams[param];\n          if (typeof paramValue === 'undefined') { return; }\n          if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {\n            breakpointOnlyParams[param] = 'auto';\n          } else if (param === 'slidesPerView') {\n            breakpointOnlyParams[param] = parseFloat(paramValue);\n          } else {\n            breakpointOnlyParams[param] = parseInt(paramValue, 10);\n          }\n        });\n      }\n\n      var breakpointParams = breakpointOnlyParams || swiper.originalParams;\n      var wasMultiRow = params.slidesPerColumn > 1;\n      var isMultiRow = breakpointParams.slidesPerColumn > 1;\n      if (wasMultiRow && !isMultiRow) {\n        $el.removeClass(((params.containerModifierClass) + \"multirow \" + (params.containerModifierClass) + \"multirow-column\"));\n      } else if (!wasMultiRow && isMultiRow) {\n        $el.addClass(((params.containerModifierClass) + \"multirow\"));\n        if (breakpointParams.slidesPerColumnFill === 'column') {\n          $el.addClass(((params.containerModifierClass) + \"multirow-column\"));\n        }\n      }\n\n      var directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n      var needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n      if (directionChanged && initialized) {\n        swiper.changeDirection();\n      }\n\n      Utils.extend(swiper.params, breakpointParams);\n\n      Utils.extend(swiper, {\n        allowTouchMove: swiper.params.allowTouchMove,\n        allowSlideNext: swiper.params.allowSlideNext,\n        allowSlidePrev: swiper.params.allowSlidePrev,\n      });\n\n      swiper.currentBreakpoint = breakpoint;\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\n  function getBreakpoint (breakpoints) {\n    // Get breakpoint for window width\n    if (!breakpoints) { return undefined; }\n    var breakpoint = false;\n\n    var points = Object.keys(breakpoints).map(function (point) {\n      if (typeof point === 'string' && point.startsWith('@')) {\n        var minRatio = parseFloat(point.substr(1));\n        var value = win.innerHeight * minRatio;\n        return { value: value, point: point };\n      }\n      return { value: point, point: point };\n    });\n\n    points.sort(function (a, b) { return parseInt(a.value, 10) - parseInt(b.value, 10); });\n    for (var i = 0; i < points.length; i += 1) {\n      var ref = points[i];\n      var point = ref.point;\n      var value = ref.value;\n      if (value <= win.innerWidth) {\n        breakpoint = point;\n      }\n    }\n    return breakpoint || 'max';\n  }\n\n  var breakpoints = { setBreakpoint: setBreakpoint, getBreakpoint: getBreakpoint };\n\n  function addClasses () {\n    var swiper = this;\n    var classNames = swiper.classNames;\n    var params = swiper.params;\n    var rtl = swiper.rtl;\n    var $el = swiper.$el;\n    var suffixes = [];\n\n    suffixes.push('initialized');\n    suffixes.push(params.direction);\n\n    if (params.freeMode) {\n      suffixes.push('free-mode');\n    }\n    if (params.autoHeight) {\n      suffixes.push('autoheight');\n    }\n    if (rtl) {\n      suffixes.push('rtl');\n    }\n    if (params.slidesPerColumn > 1) {\n      suffixes.push('multirow');\n      if (params.slidesPerColumnFill === 'column') {\n        suffixes.push('multirow-column');\n      }\n    }\n    if (Device.android) {\n      suffixes.push('android');\n    }\n    if (Device.ios) {\n      suffixes.push('ios');\n    }\n\n    if (params.cssMode) {\n      suffixes.push('css-mode');\n    }\n\n    suffixes.forEach(function (suffix) {\n      classNames.push(params.containerModifierClass + suffix);\n    });\n\n    $el.addClass(classNames.join(' '));\n  }\n\n  function removeClasses () {\n    var swiper = this;\n    var $el = swiper.$el;\n    var classNames = swiper.classNames;\n\n    $el.removeClass(classNames.join(' '));\n  }\n\n  var classes = { addClasses: addClasses, removeClasses: removeClasses };\n\n  function loadImage (imageEl, src, srcset, sizes, checkForComplete, callback) {\n    var image;\n    function onReady() {\n      if (callback) { callback(); }\n    }\n    if (!imageEl.complete || !checkForComplete) {\n      if (src) {\n        image = new win.Image();\n        image.onload = onReady;\n        image.onerror = onReady;\n        if (sizes) {\n          image.sizes = sizes;\n        }\n        if (srcset) {\n          image.srcset = srcset;\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    var swiper = this;\n    swiper.imagesToLoad = swiper.$el.find('img');\n    function onReady() {\n      if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) { return; }\n      if (swiper.imagesLoaded !== undefined) { swiper.imagesLoaded += 1; }\n      if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n        if (swiper.params.updateOnImagesReady) { swiper.update(); }\n        swiper.emit('imagesReady');\n      }\n    }\n    for (var i = 0; i < swiper.imagesToLoad.length; i += 1) {\n      var imageEl = swiper.imagesToLoad[i];\n      swiper.loadImage(\n          imageEl,\n          imageEl.currentSrc || imageEl.getAttribute('src'),\n          imageEl.srcset || imageEl.getAttribute('srcset'),\n          imageEl.sizes || imageEl.getAttribute('sizes'),\n          true,\n          onReady\n      );\n    }\n  }\n\n  var images = {\n    loadImage: loadImage,\n    preloadImages: preloadImages,\n  };\n\n  function checkOverflow() {\n    var swiper = this;\n    var params = swiper.params;\n    var wasLocked = swiper.isLocked;\n    var lastSlidePosition = swiper.slides.length > 0 && (params.slidesOffsetBefore + (params.spaceBetween * (swiper.slides.length - 1)) + ((swiper.slides[0]).offsetWidth) * swiper.slides.length);\n\n    if (params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition) {\n      swiper.isLocked = lastSlidePosition <= swiper.size;\n    } else {\n      swiper.isLocked = swiper.snapGrid.length === 1;\n    }\n\n    swiper.allowSlideNext = !swiper.isLocked;\n    swiper.allowSlidePrev = !swiper.isLocked;\n\n    // events\n    if (wasLocked !== swiper.isLocked) { swiper.emit(swiper.isLocked ? 'lock' : 'unlock'); }\n\n    if (wasLocked && wasLocked !== swiper.isLocked) {\n      swiper.isEnd = false;\n      swiper.navigation.update();\n    }\n  }\n\n  var checkOverflow$1 = { checkOverflow: checkOverflow };\n\n  var defaults = {\n    init: true,\n    direction: 'horizontal',\n    touchEventsTarget: 'container',\n    initialSlide: 0,\n    speed: 300,\n    cssMode: false,\n    updateOnWindowResize: true,\n    //\n    preventInteractionOnTransition: false,\n\n    // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).\n    edgeSwipeDetection: false,\n    edgeSwipeThreshold: 20,\n\n    // Free mode\n    freeMode: false,\n    freeModeMomentum: true,\n    freeModeMomentumRatio: 1,\n    freeModeMomentumBounce: true,\n    freeModeMomentumBounceRatio: 1,\n    freeModeMomentumVelocityRatio: 1,\n    freeModeSticky: false,\n    freeModeMinimumVelocity: 0.02,\n\n    // Autoheight\n    autoHeight: false,\n\n    // Set wrapper width\n    setWrapperSize: false,\n\n    // Virtual Translate\n    virtualTranslate: false,\n\n    // Effects\n    effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n    // Breakpoints\n    breakpoints: undefined,\n\n    // Slides grid\n    spaceBetween: 0,\n    slidesPerView: 1,\n    slidesPerColumn: 1,\n    slidesPerColumnFill: 'column',\n    slidesPerGroup: 1,\n    slidesPerGroupSkip: 0,\n    centeredSlides: false,\n    centeredSlidesBounds: false,\n    slidesOffsetBefore: 0, // in px\n    slidesOffsetAfter: 0, // in px\n    normalizeSlideIndex: true,\n    centerInsufficientSlides: false,\n\n    // Disable swiper and hide navigation when container not overflow\n    watchOverflow: false,\n\n    // Round length\n    roundLengths: false,\n\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\n    // Unique Navigation Elements\n    uniqueNavElements: true,\n\n    // Resistance\n    resistance: true,\n    resistanceRatio: 0.85,\n\n    // Progress\n    watchSlidesProgress: false,\n    watchSlidesVisibility: false,\n\n    // Cursor\n    grabCursor: false,\n\n    // Clicks\n    preventClicks: true,\n    preventClicksPropagation: true,\n    slideToClickedSlide: false,\n\n    // Images\n    preloadImages: true,\n    updateOnImagesReady: true,\n\n    // loop\n    loop: false,\n    loopAdditionalSlides: 0,\n    loopedSlides: null,\n    loopFillGroupWithBlank: false,\n\n    // Swiping/no swiping\n    allowSlidePrev: true,\n    allowSlideNext: true,\n    swipeHandler: null, // '.swipe-handler',\n    noSwiping: true,\n    noSwipingClass: 'swiper-no-swiping',\n    noSwipingSelector: null,\n\n    // Passive Listeners\n    passiveListeners: true,\n\n    // NS\n    containerModifierClass: 'swiper-container-', // 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\n    // Callbacks\n    runCallbacksOnInit: true,\n  };\n\n  /* eslint no-param-reassign: \"off\" */\n\n  var prototypes = {\n    update: update,\n    translate: translate,\n    transition: transition$1,\n    slide: slide,\n    loop: loop,\n    grabCursor: grabCursor,\n    manipulation: manipulation,\n    events: events,\n    breakpoints: breakpoints,\n    checkOverflow: checkOverflow$1,\n    classes: classes,\n    images: images,\n  };\n\n  var extendedDefaults = {};\n\n  var Swiper = /*@__PURE__*/(function (SwiperClass) {\n    function Swiper() {\n      var assign;\n\n      var args = [], len = arguments.length;\n      while ( len-- ) args[ len ] = arguments[ len ];\n      var el;\n      var params;\n      if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {\n        params = args[0];\n      } else {\n        (assign = args, el = assign[0], params = assign[1]);\n      }\n      if (!params) { params = {}; }\n\n      params = Utils.extend({}, params);\n      if (el && !params.el) { params.el = el; }\n\n      SwiperClass.call(this, params);\n\n      Object.keys(prototypes).forEach(function (prototypeGroup) {\n        Object.keys(prototypes[prototypeGroup]).forEach(function (protoMethod) {\n          if (!Swiper.prototype[protoMethod]) {\n            Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n          }\n        });\n      });\n\n      // Swiper Instance\n      var swiper = this;\n      if (typeof swiper.modules === 'undefined') {\n        swiper.modules = {};\n      }\n      Object.keys(swiper.modules).forEach(function (moduleName) {\n        var module = swiper.modules[moduleName];\n        if (module.params) {\n          var moduleParamName = Object.keys(module.params)[0];\n          var moduleParams = module.params[moduleParamName];\n          if (typeof moduleParams !== 'object' || moduleParams === null) { return; }\n          if (!(moduleParamName in params && 'enabled' in moduleParams)) { return; }\n          if (params[moduleParamName] === true) {\n            params[moduleParamName] = { enabled: true };\n          }\n          if (\n              typeof params[moduleParamName] === 'object'\n              && !('enabled' in params[moduleParamName])\n          ) {\n            params[moduleParamName].enabled = true;\n          }\n          if (!params[moduleParamName]) { params[moduleParamName] = { enabled: false }; }\n        }\n      });\n\n      // Extend defaults with modules params\n      var swiperParams = Utils.extend({}, defaults);\n      swiper.useModulesParams(swiperParams);\n\n      // Extend defaults with passed params\n      swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params);\n      swiper.originalParams = Utils.extend({}, swiper.params);\n      swiper.passedParams = Utils.extend({}, params);\n\n      // Save Dom lib\n      swiper.$ = $;\n\n      // Find el\n      var $el = $(swiper.params.el);\n      el = $el[0];\n\n      if (!el) {\n        return undefined;\n      }\n\n      if ($el.length > 1) {\n        var swipers = [];\n        $el.each(function (index, containerEl) {\n          var newParams = Utils.extend({}, params, { el: containerEl });\n          swipers.push(new Swiper(newParams));\n        });\n        return swipers;\n      }\n\n      el.swiper = swiper;\n      $el.data('swiper', swiper);\n\n      // Find Wrapper\n      var $wrapperEl;\n      if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n        $wrapperEl = $(el.shadowRoot.querySelector((\".\" + (swiper.params.wrapperClass))));\n        // Children needs to return slot items\n        $wrapperEl.children = function (options) { return $el.children(options); };\n      } else {\n        $wrapperEl = $el.children((\".\" + (swiper.params.wrapperClass)));\n      }\n      // Extend Swiper\n      Utils.extend(swiper, {\n        $el: $el,\n        el: el,\n        $wrapperEl: $wrapperEl,\n        wrapperEl: $wrapperEl[0],\n\n        // Classes\n        classNames: [],\n\n        // Slides\n        slides: $(),\n        slidesGrid: [],\n        snapGrid: [],\n        slidesSizesGrid: [],\n\n        // isDirection\n        isHorizontal: function isHorizontal() {\n          return swiper.params.direction === 'horizontal';\n        },\n        isVertical: function isVertical() {\n          return swiper.params.direction === 'vertical';\n        },\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        // Indexes\n        activeIndex: 0,\n        realIndex: 0,\n\n        //\n        isBeginning: true,\n        isEnd: false,\n\n        // Props\n        translate: 0,\n        previousTranslate: 0,\n        progress: 0,\n        velocity: 0,\n        animating: false,\n\n        // Locks\n        allowSlideNext: swiper.params.allowSlideNext,\n        allowSlidePrev: swiper.params.allowSlidePrev,\n\n        // Touch Events\n        touchEvents: (function touchEvents() {\n          var touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n          var desktop = ['mousedown', 'mousemove', 'mouseup'];\n          if (Support.pointerEvents) {\n            desktop = ['pointerdown', 'pointermove', 'pointerup'];\n          }\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 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          formElements: 'input, select, option, textarea, button, video',\n          // Last click time\n          lastClickTime: Utils.now(),\n          clickTimeout: undefined,\n          // Velocities\n          velocities: [],\n          allowMomentumBounce: undefined,\n          isTouchEvent: undefined,\n          startMoving: undefined,\n        },\n\n        // Clicks\n        allowClick: true,\n\n        // Touches\n        allowTouchMove: swiper.params.allowTouchMove,\n\n        touches: {\n          startX: 0,\n          startY: 0,\n          currentX: 0,\n          currentY: 0,\n          diff: 0,\n        },\n\n        // Images\n        imagesToLoad: [],\n        imagesLoaded: 0,\n\n      });\n\n      // Install Modules\n      swiper.useModules();\n\n      // Init\n      if (swiper.params.init) {\n        swiper.init();\n      }\n\n      // Return app instance\n      return swiper;\n    }\n\n    if ( SwiperClass ) Swiper.__proto__ = SwiperClass;\n    Swiper.prototype = Object.create( SwiperClass && SwiperClass.prototype );\n    Swiper.prototype.constructor = Swiper;\n\n    var staticAccessors = { extendedDefaults: { configurable: true },defaults: { configurable: true },Class: { configurable: true },$: { configurable: true } };\n\n    Swiper.prototype.slidesPerViewDynamic = function slidesPerViewDynamic () {\n      var swiper = this;\n      var params = swiper.params;\n      var slides = swiper.slides;\n      var slidesGrid = swiper.slidesGrid;\n      var swiperSize = swiper.size;\n      var activeIndex = swiper.activeIndex;\n      var spv = 1;\n      if (params.centeredSlides) {\n        var slideSize = slides[activeIndex].swiperSlideSize;\n        var breakLoop;\n        for (var 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        for (var i$1 = activeIndex - 1; i$1 >= 0; i$1 -= 1) {\n          if (slides[i$1] && !breakLoop) {\n            slideSize += slides[i$1].swiperSlideSize;\n            spv += 1;\n            if (slideSize > swiperSize) { breakLoop = true; }\n          }\n        }\n      } else {\n        for (var i$2 = activeIndex + 1; i$2 < slides.length; i$2 += 1) {\n          if (slidesGrid[i$2] - slidesGrid[activeIndex] < swiperSize) {\n            spv += 1;\n          }\n        }\n      }\n      return spv;\n    };\n\n    Swiper.prototype.update = function update () {\n      var swiper = this;\n      if (!swiper || swiper.destroyed) { return; }\n      var snapGrid = swiper.snapGrid;\n      var params = swiper.params;\n      // Breakpoints\n      if (params.breakpoints) {\n        swiper.setBreakpoint();\n      }\n      swiper.updateSize();\n      swiper.updateSlides();\n      swiper.updateProgress();\n      swiper.updateSlidesClasses();\n\n      function setTranslate() {\n        var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n        var newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n        swiper.setTranslate(newTranslate);\n        swiper.updateActiveIndex();\n        swiper.updateSlidesClasses();\n      }\n      var translated;\n      if (swiper.params.freeMode) {\n        setTranslate();\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        if (!translated) {\n          setTranslate();\n        }\n      }\n      if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n        swiper.checkOverflow();\n      }\n      swiper.emit('update');\n    };\n\n    Swiper.prototype.changeDirection = function changeDirection (newDirection, needUpdate) {\n      if ( needUpdate === void 0 ) needUpdate = true;\n\n      var swiper = this;\n      var currentDirection = swiper.params.direction;\n      if (!newDirection) {\n        // eslint-disable-next-line\n        newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n      }\n      if ((newDirection === currentDirection) || (newDirection !== 'horizontal' && newDirection !== 'vertical')) {\n        return swiper;\n      }\n\n      swiper.$el\n          .removeClass((\"\" + (swiper.params.containerModifierClass) + currentDirection))\n          .addClass((\"\" + (swiper.params.containerModifierClass) + newDirection));\n\n      swiper.params.direction = newDirection;\n\n      swiper.slides.each(function (slideIndex, slideEl) {\n        if (newDirection === 'vertical') {\n          slideEl.style.width = '';\n        } else {\n          slideEl.style.height = '';\n        }\n      });\n\n      swiper.emit('changeDirection');\n      if (needUpdate) { swiper.update(); }\n\n      return swiper;\n    };\n\n    Swiper.prototype.init = function init () {\n      var swiper = this;\n      if (swiper.initialized) { return; }\n\n      swiper.emit('beforeInit');\n\n      // Set breakpoint\n      if (swiper.params.breakpoints) {\n        swiper.setBreakpoint();\n      }\n\n      // Add Classes\n      swiper.addClasses();\n\n      // Create loop\n      if (swiper.params.loop) {\n        swiper.loopCreate();\n      }\n\n      // Update size\n      swiper.updateSize();\n\n      // Update slides\n      swiper.updateSlides();\n\n      if (swiper.params.watchOverflow) {\n        swiper.checkOverflow();\n      }\n\n      // Set Grab Cursor\n      if (swiper.params.grabCursor) {\n        swiper.setGrabCursor();\n      }\n\n      if (swiper.params.preloadImages) {\n        swiper.preloadImages();\n      }\n\n      // Slide To Initial Slide\n      if (swiper.params.loop) {\n        swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);\n      } else {\n        swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);\n      }\n\n      // Attach events\n      swiper.attachEvents();\n\n      // Init Flag\n      swiper.initialized = true;\n\n      // Emit\n      swiper.emit('init');\n    };\n\n    Swiper.prototype.destroy = function destroy (deleteInstance, cleanStyles) {\n      if ( deleteInstance === void 0 ) deleteInstance = true;\n      if ( cleanStyles === void 0 ) cleanStyles = true;\n\n      var swiper = this;\n      var params = swiper.params;\n      var $el = swiper.$el;\n      var $wrapperEl = swiper.$wrapperEl;\n      var slides = swiper.slides;\n\n      if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n        return null;\n      }\n\n      swiper.emit('beforeDestroy');\n\n      // Init Flag\n      swiper.initialized = false;\n\n      // Detach events\n      swiper.detachEvents();\n\n      // Destroy loop\n      if (params.loop) {\n        swiper.loopDestroy();\n      }\n\n      // Cleanup styles\n      if (cleanStyles) {\n        swiper.removeClasses();\n        $el.removeAttr('style');\n        $wrapperEl.removeAttr('style');\n        if (slides && slides.length) {\n          slides\n              .removeClass([\n                params.slideVisibleClass,\n                params.slideActiveClass,\n                params.slideNextClass,\n                params.slidePrevClass ].join(' '))\n              .removeAttr('style')\n              .removeAttr('data-swiper-slide-index');\n        }\n      }\n\n      swiper.emit('destroy');\n\n      // Detach emitter events\n      Object.keys(swiper.eventsListeners).forEach(function (eventName) {\n        swiper.off(eventName);\n      });\n\n      if (deleteInstance !== false) {\n        swiper.$el[0].swiper = null;\n        swiper.$el.data('swiper', null);\n        Utils.deleteProps(swiper);\n      }\n      swiper.destroyed = true;\n\n      return null;\n    };\n\n    Swiper.extendDefaults = function extendDefaults (newDefaults) {\n      Utils.extend(extendedDefaults, newDefaults);\n    };\n\n    staticAccessors.extendedDefaults.get = function () {\n      return extendedDefaults;\n    };\n\n    staticAccessors.defaults.get = function () {\n      return defaults;\n    };\n\n    staticAccessors.Class.get = function () {\n      return SwiperClass;\n    };\n\n    staticAccessors.$.get = function () {\n      return $;\n    };\n\n    Object.defineProperties( Swiper, staticAccessors );\n\n    return Swiper;\n  }(SwiperClass));\n\n  var Device$1 = {\n    name: 'device',\n    proto: {\n      device: Device,\n    },\n    static: {\n      device: Device,\n    },\n  };\n\n  var Support$1 = {\n    name: 'support',\n    proto: {\n      support: Support,\n    },\n    static: {\n      support: Support,\n    },\n  };\n\n  var Browser = (function Browser() {\n    function isSafari() {\n      var ua = win.navigator.userAgent.toLowerCase();\n      return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);\n    }\n    return {\n      isEdge: !!win.navigator.userAgent.match(/Edge/g),\n      isSafari: isSafari(),\n      isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(win.navigator.userAgent),\n    };\n  }());\n\n  var Browser$1 = {\n    name: 'browser',\n    proto: {\n      browser: Browser,\n    },\n    static: {\n      browser: Browser,\n    },\n  };\n\n  var Resize = {\n    name: 'resize',\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        resize: {\n          resizeHandler: function resizeHandler() {\n            if (!swiper || swiper.destroyed || !swiper.initialized) { return; }\n            swiper.emit('beforeResize');\n            swiper.emit('resize');\n          },\n          orientationChangeHandler: function orientationChangeHandler() {\n            if (!swiper || swiper.destroyed || !swiper.initialized) { return; }\n            swiper.emit('orientationchange');\n          },\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        // Emit resize\n        win.addEventListener('resize', swiper.resize.resizeHandler);\n\n        // Emit orientationchange\n        win.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        win.removeEventListener('resize', swiper.resize.resizeHandler);\n        win.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n      },\n    },\n  };\n\n  var Observer = {\n    func: win.MutationObserver || win.WebkitMutationObserver,\n    attach: function attach(target, options) {\n      if ( options === void 0 ) options = {};\n\n      var swiper = this;\n\n      var ObserverFunc = Observer.func;\n      var observer = new ObserverFunc(function (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          swiper.emit('observerUpdate', mutations[0]);\n          return;\n        }\n        var observerUpdate = function observerUpdate() {\n          swiper.emit('observerUpdate', mutations[0]);\n        };\n\n        if (win.requestAnimationFrame) {\n          win.requestAnimationFrame(observerUpdate);\n        } else {\n          win.setTimeout(observerUpdate, 0);\n        }\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\n      swiper.observer.observers.push(observer);\n    },\n    init: function init() {\n      var swiper = this;\n      if (!Support.observer || !swiper.params.observer) { return; }\n      if (swiper.params.observeParents) {\n        var containerParents = swiper.$el.parents();\n        for (var i = 0; i < containerParents.length; i += 1) {\n          swiper.observer.attach(containerParents[i]);\n        }\n      }\n      // Observe container\n      swiper.observer.attach(swiper.$el[0], { childList: swiper.params.observeSlideChildren });\n\n      // Observe wrapper\n      swiper.observer.attach(swiper.$wrapperEl[0], { attributes: false });\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      swiper.observer.observers.forEach(function (observer) {\n        observer.disconnect();\n      });\n      swiper.observer.observers = [];\n    },\n  };\n\n  var Observer$1 = {\n    name: 'observer',\n    params: {\n      observer: false,\n      observeParents: false,\n      observeSlideChildren: false,\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        observer: {\n          init: Observer.init.bind(swiper),\n          attach: Observer.attach.bind(swiper),\n          destroy: Observer.destroy.bind(swiper),\n          observers: [],\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        swiper.observer.init();\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        swiper.observer.destroy();\n      },\n    },\n  };\n\n  function isEventSupported() {\n    var eventName = 'onwheel';\n    var isSupported = eventName in doc;\n\n    if (!isSupported) {\n      var element = doc.createElement('div');\n      element.setAttribute(eventName, 'return;');\n      isSupported = typeof element[eventName] === 'function';\n    }\n\n    if (!isSupported\n        && doc.implementation\n        && doc.implementation.hasFeature\n        // always returns true in newer browsers as per the standard.\n        // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n        && doc.implementation.hasFeature('', '') !== true\n    ) {\n      // This is the only way to test support for the `wheel` event in IE9+.\n      isSupported = doc.implementation.hasFeature('Events.wheel', '3.0');\n    }\n\n    return isSupported;\n  }\n  var Mousewheel = {\n    lastScrollTime: Utils.now(),\n    lastEventBeforeSnap: undefined,\n    recentWheelEvents: [],\n    event: function event() {\n      if (win.navigator.userAgent.indexOf('firefox') > -1) { return 'DOMMouseScroll'; }\n      return isEventSupported() ? 'wheel' : 'mousewheel';\n    },\n    normalize: function normalize(e) {\n      // Reasonable defaults\n      var PIXEL_STEP = 10;\n      var LINE_HEIGHT = 40;\n      var PAGE_HEIGHT = 800;\n\n      var sX = 0;\n      var sY = 0; // spinX, spinY\n      var pX = 0;\n      var pY = 0; // pixelX, pixelY\n\n      // Legacy\n      if ('detail' in e) {\n        sY = e.detail;\n      }\n      if ('wheelDelta' in e) {\n        sY = -e.wheelDelta / 120;\n      }\n      if ('wheelDeltaY' in e) {\n        sY = -e.wheelDeltaY / 120;\n      }\n      if ('wheelDeltaX' in e) {\n        sX = -e.wheelDeltaX / 120;\n      }\n\n      // side scrolling on FF with DOMMouseScroll\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      if ('deltaX' in e) {\n        pX = e.deltaX;\n      }\n\n      if (e.shiftKey && !pX) { // 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) { // delta in LINE units\n          pX *= LINE_HEIGHT;\n          pY *= LINE_HEIGHT;\n        } else { // delta in PAGE units\n          pX *= PAGE_HEIGHT;\n          pY *= PAGE_HEIGHT;\n        }\n      }\n\n      // Fall-back if spin cannot be determined\n      if (pX && !sX) {\n        sX = (pX < 1) ? -1 : 1;\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    handleMouseEnter: function handleMouseEnter() {\n      var swiper = this;\n      swiper.mouseEntered = true;\n    },\n    handleMouseLeave: function handleMouseLeave() {\n      var swiper = this;\n      swiper.mouseEntered = false;\n    },\n    handle: function handle(event) {\n      var e = event;\n      var swiper = this;\n      var params = swiper.params.mousewheel;\n\n      if (swiper.params.cssMode) {\n        e.preventDefault();\n      }\n\n      var target = swiper.$el;\n      if (swiper.params.mousewheel.eventsTarged !== 'container') {\n        target = $(swiper.params.mousewheel.eventsTarged);\n      }\n      if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) { return true; }\n\n      if (e.originalEvent) { e = e.originalEvent; } // jquery fix\n      var delta = 0;\n      var rtlFactor = swiper.rtlTranslate ? -1 : 1;\n\n      var data = Mousewheel.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; }\n          else { return true; }\n        } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) { delta = data.pixelY; }\n        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\n      if (params.invert) { delta = -delta; }\n\n      if (!swiper.params.freeMode) {\n        // Register the new event in a variable which stores the relevant data\n        var newEvent = {\n          time: Utils.now(),\n          delta: Math.abs(delta),\n          direction: Math.sign(delta),\n          raw: event,\n        };\n\n        // Keep the most recent events\n        var recentWheelEvents = swiper.mousewheel.recentWheelEvents;\n        if (recentWheelEvents.length >= 2) {\n          recentWheelEvents.shift(); // only store the last N events\n        }\n        var prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n        recentWheelEvents.push(newEvent);\n\n        // 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        if (prevEvent) {\n          if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta) {\n            swiper.mousewheel.animateSlider(newEvent);\n          }\n        } else {\n          swiper.mousewheel.animateSlider(newEvent);\n        }\n\n        // If it's time to release the scroll:\n        //   Return now so you don't hit the preventDefault.\n        if (swiper.mousewheel.releaseScroll(newEvent)) {\n          return true;\n        }\n      } else {\n        // Freemode or scrollContainer:\n\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        var newEvent$1 = { time: Utils.now(), delta: Math.abs(delta), direction: Math.sign(delta) };\n        var ref = swiper.mousewheel;\n        var lastEventBeforeSnap = ref.lastEventBeforeSnap;\n        var ignoreWheelEvents = lastEventBeforeSnap\n            && newEvent$1.time < lastEventBeforeSnap.time + 500\n            && newEvent$1.delta <= lastEventBeforeSnap.delta\n            && newEvent$1.direction === lastEventBeforeSnap.direction;\n        if (!ignoreWheelEvents) {\n          swiper.mousewheel.lastEventBeforeSnap = undefined;\n\n          if (swiper.params.loop) {\n            swiper.loopFix();\n          }\n          var position = swiper.getTranslate() + (delta * params.sensitivity);\n          var wasBeginning = swiper.isBeginning;\n          var wasEnd = swiper.isEnd;\n\n          if (position >= swiper.minTranslate()) { position = swiper.minTranslate(); }\n          if (position <= swiper.maxTranslate()) { position = swiper.maxTranslate(); }\n\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.freeModeSticky) {\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 momuntum 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(swiper.mousewheel.timeout);\n            swiper.mousewheel.timeout = undefined;\n            var recentWheelEvents$1 = swiper.mousewheel.recentWheelEvents;\n            if (recentWheelEvents$1.length >= 15) {\n              recentWheelEvents$1.shift(); // only store the last N events\n            }\n            var prevEvent$1 = recentWheelEvents$1.length ? recentWheelEvents$1[recentWheelEvents$1.length - 1] : undefined;\n            var firstEvent = recentWheelEvents$1[0];\n            recentWheelEvents$1.push(newEvent$1);\n            if (prevEvent$1 && (newEvent$1.delta > prevEvent$1.delta || newEvent$1.direction !== prevEvent$1.direction)) {\n              // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n              recentWheelEvents$1.splice(0);\n            } else if (recentWheelEvents$1.length >= 15\n                && newEvent$1.time - firstEvent.time < 500\n                && firstEvent.delta - newEvent$1.delta >= 1\n                && newEvent$1.delta <= 6\n            ) {\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              var snapToThreshold = delta > 0 ? 0.8 : 0.2;\n              swiper.mousewheel.lastEventBeforeSnap = newEvent$1;\n              recentWheelEvents$1.splice(0);\n              swiper.mousewheel.timeout = Utils.nextTick(function () {\n                swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n              }, 0); // no delay; move on next tick\n            }\n            if (!swiper.mousewheel.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              swiper.mousewheel.timeout = Utils.nextTick(function () {\n                var snapToThreshold = 0.5;\n                swiper.mousewheel.lastEventBeforeSnap = newEvent$1;\n                recentWheelEvents$1.splice(0);\n                swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n              }, 500);\n            }\n          }\n\n          // Emit event\n          if (!ignoreWheelEvents) { swiper.emit('scroll', e); }\n\n          // Stop autoplay\n          if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) { swiper.autoplay.stop(); }\n          // Return page scroll on edge positions\n          if (position === swiper.minTranslate() || position === swiper.maxTranslate()) { return true; }\n        }\n      }\n\n      if (e.preventDefault) { e.preventDefault(); }\n      else { e.returnValue = false; }\n      return false;\n    },\n    animateSlider: function animateSlider(newEvent) {\n      var swiper = this;\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      if (newEvent.delta >= 6 && Utils.now() - swiper.mousewheel.lastScrollTime < 60) {\n        // Return false as a default\n        return true;\n      }\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      if (newEvent.direction < 0) {\n        if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n          swiper.slideNext();\n          swiper.emit('scroll', newEvent.raw);\n        }\n      } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n        swiper.slidePrev();\n        swiper.emit('scroll', newEvent.raw);\n      }\n      // If you got here is because an animation has been triggered so store the current time\n      swiper.mousewheel.lastScrollTime = (new win.Date()).getTime();\n      // Return false as a default\n      return false;\n    },\n    releaseScroll: function releaseScroll(newEvent) {\n      var swiper = this;\n      var params = swiper.params.mousewheel;\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      return false;\n    },\n    enable: function enable() {\n      var swiper = this;\n      var event = Mousewheel.event();\n      if (swiper.params.cssMode) {\n        swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle);\n        return true;\n      }\n      if (!event) { return false; }\n      if (swiper.mousewheel.enabled) { return false; }\n      var target = swiper.$el;\n      if (swiper.params.mousewheel.eventsTarged !== 'container') {\n        target = $(swiper.params.mousewheel.eventsTarged);\n      }\n      target.on('mouseenter', swiper.mousewheel.handleMouseEnter);\n      target.on('mouseleave', swiper.mousewheel.handleMouseLeave);\n      target.on(event, swiper.mousewheel.handle);\n      swiper.mousewheel.enabled = true;\n      return true;\n    },\n    disable: function disable() {\n      var swiper = this;\n      var event = Mousewheel.event();\n      if (swiper.params.cssMode) {\n        swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle);\n        return true;\n      }\n      if (!event) { return false; }\n      if (!swiper.mousewheel.enabled) { return false; }\n      var target = swiper.$el;\n      if (swiper.params.mousewheel.eventsTarged !== 'container') {\n        target = $(swiper.params.mousewheel.eventsTarged);\n      }\n      target.off(event, swiper.mousewheel.handle);\n      swiper.mousewheel.enabled = false;\n      return true;\n    },\n  };\n\n  var Mousewheel$1 = {\n    name: 'mousewheel',\n    params: {\n      mousewheel: {\n        enabled: false,\n        releaseOnEdges: false,\n        invert: false,\n        forceToAxis: false,\n        sensitivity: 1,\n        eventsTarged: 'container',\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        mousewheel: {\n          enabled: false,\n          enable: Mousewheel.enable.bind(swiper),\n          disable: Mousewheel.disable.bind(swiper),\n          handle: Mousewheel.handle.bind(swiper),\n          handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper),\n          handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper),\n          animateSlider: Mousewheel.animateSlider.bind(swiper),\n          releaseScroll: Mousewheel.releaseScroll.bind(swiper),\n          lastScrollTime: Utils.now(),\n          lastEventBeforeSnap: undefined,\n          recentWheelEvents: [],\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n          swiper.mousewheel.disable();\n        }\n        if (swiper.params.mousewheel.enabled) { swiper.mousewheel.enable(); }\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        if (swiper.params.cssMode) {\n          swiper.mousewheel.enable();\n        }\n        if (swiper.mousewheel.enabled) { swiper.mousewheel.disable(); }\n      },\n    },\n  };\n\n  var Navigation = {\n    update: function update() {\n      // Update Navigation Buttons\n      var swiper = this;\n      var params = swiper.params.navigation;\n\n      if (swiper.params.loop) { return; }\n      var ref = swiper.navigation;\n      var $nextEl = ref.$nextEl;\n      var $prevEl = ref.$prevEl;\n\n      if ($prevEl && $prevEl.length > 0) {\n        if (swiper.isBeginning) {\n          $prevEl.addClass(params.disabledClass);\n        } else {\n          $prevEl.removeClass(params.disabledClass);\n        }\n        $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n      }\n      if ($nextEl && $nextEl.length > 0) {\n        if (swiper.isEnd) {\n          $nextEl.addClass(params.disabledClass);\n        } else {\n          $nextEl.removeClass(params.disabledClass);\n        }\n        $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n      }\n    },\n    onPrevClick: function onPrevClick(e) {\n      var swiper = this;\n      e.preventDefault();\n      if (swiper.isBeginning && !swiper.params.loop) { return; }\n      swiper.slidePrev();\n    },\n    onNextClick: function onNextClick(e) {\n      var swiper = this;\n      e.preventDefault();\n      if (swiper.isEnd && !swiper.params.loop) { return; }\n      swiper.slideNext();\n    },\n    init: function init() {\n      var swiper = this;\n      var params = swiper.params.navigation;\n      if (!(params.nextEl || params.prevEl)) { return; }\n\n      var $nextEl;\n      var $prevEl;\n      if (params.nextEl) {\n        $nextEl = $(params.nextEl);\n        if (\n            swiper.params.uniqueNavElements\n            && typeof params.nextEl === 'string'\n            && $nextEl.length > 1\n            && swiper.$el.find(params.nextEl).length === 1\n        ) {\n          $nextEl = swiper.$el.find(params.nextEl);\n        }\n      }\n      if (params.prevEl) {\n        $prevEl = $(params.prevEl);\n        if (\n            swiper.params.uniqueNavElements\n            && typeof params.prevEl === 'string'\n            && $prevEl.length > 1\n            && swiper.$el.find(params.prevEl).length === 1\n        ) {\n          $prevEl = swiper.$el.find(params.prevEl);\n        }\n      }\n\n      if ($nextEl && $nextEl.length > 0) {\n        $nextEl.on('click', swiper.navigation.onNextClick);\n      }\n      if ($prevEl && $prevEl.length > 0) {\n        $prevEl.on('click', swiper.navigation.onPrevClick);\n      }\n\n      Utils.extend(swiper.navigation, {\n        $nextEl: $nextEl,\n        nextEl: $nextEl && $nextEl[0],\n        $prevEl: $prevEl,\n        prevEl: $prevEl && $prevEl[0],\n      });\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      var ref = swiper.navigation;\n      var $nextEl = ref.$nextEl;\n      var $prevEl = ref.$prevEl;\n      if ($nextEl && $nextEl.length) {\n        $nextEl.off('click', swiper.navigation.onNextClick);\n        $nextEl.removeClass(swiper.params.navigation.disabledClass);\n      }\n      if ($prevEl && $prevEl.length) {\n        $prevEl.off('click', swiper.navigation.onPrevClick);\n        $prevEl.removeClass(swiper.params.navigation.disabledClass);\n      }\n    },\n  };\n\n  var Navigation$1 = {\n    name: 'navigation',\n    params: {\n      navigation: {\n        nextEl: null,\n        prevEl: null,\n\n        hideOnClick: false,\n        disabledClass: 'swiper-button-disabled',\n        hiddenClass: 'swiper-button-hidden',\n        lockClass: 'swiper-button-lock',\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        navigation: {\n          init: Navigation.init.bind(swiper),\n          update: Navigation.update.bind(swiper),\n          destroy: Navigation.destroy.bind(swiper),\n          onNextClick: Navigation.onNextClick.bind(swiper),\n          onPrevClick: Navigation.onPrevClick.bind(swiper),\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        swiper.navigation.init();\n        swiper.navigation.update();\n      },\n      toEdge: function toEdge() {\n        var swiper = this;\n        swiper.navigation.update();\n      },\n      fromEdge: function fromEdge() {\n        var swiper = this;\n        swiper.navigation.update();\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        swiper.navigation.destroy();\n      },\n      click: function click(e) {\n        var swiper = this;\n        var ref = swiper.navigation;\n        var $nextEl = ref.$nextEl;\n        var $prevEl = ref.$prevEl;\n        if (\n            swiper.params.navigation.hideOnClick\n            && !$(e.target).is($prevEl)\n            && !$(e.target).is($nextEl)\n        ) {\n          var isHidden;\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          if (isHidden === true) {\n            swiper.emit('navigationShow', swiper);\n          } else {\n            swiper.emit('navigationHide', swiper);\n          }\n          if ($nextEl) {\n            $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n          }\n          if ($prevEl) {\n            $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n          }\n        }\n      },\n    },\n  };\n\n  var Pagination = {\n    update: function update() {\n      // Render || Update Pagination bullets/items\n      var swiper = this;\n      var rtl = swiper.rtl;\n      var params = swiper.params.pagination;\n      if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }\n      var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n      var $el = swiper.pagination.$el;\n      // Current/Total\n      var current;\n      var total = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n      if (swiper.params.loop) {\n        current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n        if (current > slidesLength - 1 - (swiper.loopedSlides * 2)) {\n          current -= (slidesLength - (swiper.loopedSlides * 2));\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      }\n      // Types\n      if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n        var bullets = swiper.pagination.bullets;\n        var firstIndex;\n        var lastIndex;\n        var midIndex;\n        if (params.dynamicBullets) {\n          swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n          $el.css(swiper.isHorizontal() ? 'width' : 'height', ((swiper.pagination.bulletSize * (params.dynamicMainBullets + 4)) + \"px\"));\n          if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n            swiper.pagination.dynamicBulletIndex += (current - swiper.previousIndex);\n            if (swiper.pagination.dynamicBulletIndex > (params.dynamicMainBullets - 1)) {\n              swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;\n            } else if (swiper.pagination.dynamicBulletIndex < 0) {\n              swiper.pagination.dynamicBulletIndex = 0;\n            }\n          }\n          firstIndex = current - swiper.pagination.dynamicBulletIndex;\n          lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n          midIndex = (lastIndex + firstIndex) / 2;\n        }\n        bullets.removeClass(((params.bulletActiveClass) + \" \" + (params.bulletActiveClass) + \"-next \" + (params.bulletActiveClass) + \"-next-next \" + (params.bulletActiveClass) + \"-prev \" + (params.bulletActiveClass) + \"-prev-prev \" + (params.bulletActiveClass) + \"-main\"));\n        if ($el.length > 1) {\n          bullets.each(function (index, bullet) {\n            var $bullet = $(bullet);\n            var bulletIndex = $bullet.index();\n            if (bulletIndex === current) {\n              $bullet.addClass(params.bulletActiveClass);\n            }\n            if (params.dynamicBullets) {\n              if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n                $bullet.addClass(((params.bulletActiveClass) + \"-main\"));\n              }\n              if (bulletIndex === firstIndex) {\n                $bullet\n                    .prev()\n                    .addClass(((params.bulletActiveClass) + \"-prev\"))\n                    .prev()\n                    .addClass(((params.bulletActiveClass) + \"-prev-prev\"));\n              }\n              if (bulletIndex === lastIndex) {\n                $bullet\n                    .next()\n                    .addClass(((params.bulletActiveClass) + \"-next\"))\n                    .next()\n                    .addClass(((params.bulletActiveClass) + \"-next-next\"));\n              }\n            }\n          });\n        } else {\n          var $bullet = bullets.eq(current);\n          var bulletIndex = $bullet.index();\n          $bullet.addClass(params.bulletActiveClass);\n          if (params.dynamicBullets) {\n            var $firstDisplayedBullet = bullets.eq(firstIndex);\n            var $lastDisplayedBullet = bullets.eq(lastIndex);\n            for (var i = firstIndex; i <= lastIndex; i += 1) {\n              bullets.eq(i).addClass(((params.bulletActiveClass) + \"-main\"));\n            }\n            if (swiper.params.loop) {\n              if (bulletIndex >= bullets.length - params.dynamicMainBullets) {\n                for (var i$1 = params.dynamicMainBullets; i$1 >= 0; i$1 -= 1) {\n                  bullets.eq(bullets.length - i$1).addClass(((params.bulletActiveClass) + \"-main\"));\n                }\n                bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(((params.bulletActiveClass) + \"-prev\"));\n              } else {\n                $firstDisplayedBullet\n                    .prev()\n                    .addClass(((params.bulletActiveClass) + \"-prev\"))\n                    .prev()\n                    .addClass(((params.bulletActiveClass) + \"-prev-prev\"));\n                $lastDisplayedBullet\n                    .next()\n                    .addClass(((params.bulletActiveClass) + \"-next\"))\n                    .next()\n                    .addClass(((params.bulletActiveClass) + \"-next-next\"));\n              }\n            } else {\n              $firstDisplayedBullet\n                  .prev()\n                  .addClass(((params.bulletActiveClass) + \"-prev\"))\n                  .prev()\n                  .addClass(((params.bulletActiveClass) + \"-prev-prev\"));\n              $lastDisplayedBullet\n                  .next()\n                  .addClass(((params.bulletActiveClass) + \"-next\"))\n                  .next()\n                  .addClass(((params.bulletActiveClass) + \"-next-next\"));\n            }\n          }\n        }\n        if (params.dynamicBullets) {\n          var dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n          var bulletsOffset = (((swiper.pagination.bulletSize * dynamicBulletsLength) - (swiper.pagination.bulletSize)) / 2) - (midIndex * swiper.pagination.bulletSize);\n          var offsetProp = rtl ? 'right' : 'left';\n          bullets.css(swiper.isHorizontal() ? offsetProp : 'top', (bulletsOffset + \"px\"));\n        }\n      }\n      if (params.type === 'fraction') {\n        $el.find((\".\" + (params.currentClass))).text(params.formatFractionCurrent(current + 1));\n        $el.find((\".\" + (params.totalClass))).text(params.formatFractionTotal(total));\n      }\n      if (params.type === 'progressbar') {\n        var progressbarDirection;\n        if (params.progressbarOpposite) {\n          progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n        } else {\n          progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n        }\n        var scale = (current + 1) / total;\n        var scaleX = 1;\n        var scaleY = 1;\n        if (progressbarDirection === 'horizontal') {\n          scaleX = scale;\n        } else {\n          scaleY = scale;\n        }\n        $el.find((\".\" + (params.progressbarFillClass))).transform((\"translate3d(0,0,0) scaleX(\" + scaleX + \") scaleY(\" + scaleY + \")\")).transition(swiper.params.speed);\n      }\n      if (params.type === 'custom' && params.renderCustom) {\n        $el.html(params.renderCustom(swiper, current + 1, total));\n        swiper.emit('paginationRender', swiper, $el[0]);\n      } else {\n        swiper.emit('paginationUpdate', swiper, $el[0]);\n      }\n      $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n    },\n    render: function render() {\n      // Render Container\n      var swiper = this;\n      var params = swiper.params.pagination;\n      if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }\n      var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n\n      var $el = swiper.pagination.$el;\n      var paginationHTML = '';\n      if (params.type === 'bullets') {\n        var numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n        for (var 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        $el.html(paginationHTML);\n        swiper.pagination.bullets = $el.find((\".\" + (params.bulletClass)));\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>\"\n              + ' / '\n              + \"<span class=\\\"\" + (params.totalClass) + \"\\\"></span>\";\n        }\n        $el.html(paginationHTML);\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        $el.html(paginationHTML);\n      }\n      if (params.type !== 'custom') {\n        swiper.emit('paginationRender', swiper.pagination.$el[0]);\n      }\n    },\n    init: function init() {\n      var swiper = this;\n      var params = swiper.params.pagination;\n      if (!params.el) { return; }\n\n      var $el = $(params.el);\n      if ($el.length === 0) { return; }\n\n      if (\n          swiper.params.uniqueNavElements\n          && typeof params.el === 'string'\n          && $el.length > 1\n          && swiper.$el.find(params.el).length === 1\n      ) {\n        $el = swiper.$el.find(params.el);\n      }\n\n      if (params.type === 'bullets' && params.clickable) {\n        $el.addClass(params.clickableClass);\n      }\n\n      $el.addClass(params.modifierClass + params.type);\n\n      if (params.type === 'bullets' && params.dynamicBullets) {\n        $el.addClass((\"\" + (params.modifierClass) + (params.type) + \"-dynamic\"));\n        swiper.pagination.dynamicBulletIndex = 0;\n        if (params.dynamicMainBullets < 1) {\n          params.dynamicMainBullets = 1;\n        }\n      }\n      if (params.type === 'progressbar' && params.progressbarOpposite) {\n        $el.addClass(params.progressbarOppositeClass);\n      }\n\n      if (params.clickable) {\n        $el.on('click', (\".\" + (params.bulletClass)), function onClick(e) {\n          e.preventDefault();\n          var index = $(this).index() * swiper.params.slidesPerGroup;\n          if (swiper.params.loop) { index += swiper.loopedSlides; }\n          swiper.slideTo(index);\n        });\n      }\n\n      Utils.extend(swiper.pagination, {\n        $el: $el,\n        el: $el[0],\n      });\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      var params = swiper.params.pagination;\n      if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }\n      var $el = swiper.pagination.$el;\n\n      $el.removeClass(params.hiddenClass);\n      $el.removeClass(params.modifierClass + params.type);\n      if (swiper.pagination.bullets) { swiper.pagination.bullets.removeClass(params.bulletActiveClass); }\n      if (params.clickable) {\n        $el.off('click', (\".\" + (params.bulletClass)));\n      }\n    },\n  };\n\n  var Pagination$1 = {\n    name: 'pagination',\n    params: {\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', // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n        dynamicBullets: false,\n        dynamicMainBullets: 1,\n        formatFractionCurrent: function (number) { return number; },\n        formatFractionTotal: function (number) { return number; },\n        bulletClass: 'swiper-pagination-bullet',\n        bulletActiveClass: 'swiper-pagination-bullet-active',\n        modifierClass: 'swiper-pagination-', // NEW\n        currentClass: 'swiper-pagination-current',\n        totalClass: 'swiper-pagination-total',\n        hiddenClass: 'swiper-pagination-hidden',\n        progressbarFillClass: 'swiper-pagination-progressbar-fill',\n        progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',\n        clickableClass: 'swiper-pagination-clickable', // NEW\n        lockClass: 'swiper-pagination-lock',\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        pagination: {\n          init: Pagination.init.bind(swiper),\n          render: Pagination.render.bind(swiper),\n          update: Pagination.update.bind(swiper),\n          destroy: Pagination.destroy.bind(swiper),\n          dynamicBulletIndex: 0,\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        swiper.pagination.init();\n        swiper.pagination.render();\n        swiper.pagination.update();\n      },\n      activeIndexChange: function activeIndexChange() {\n        var swiper = this;\n        if (swiper.params.loop) {\n          swiper.pagination.update();\n        } else if (typeof swiper.snapIndex === 'undefined') {\n          swiper.pagination.update();\n        }\n      },\n      snapIndexChange: function snapIndexChange() {\n        var swiper = this;\n        if (!swiper.params.loop) {\n          swiper.pagination.update();\n        }\n      },\n      slidesLengthChange: function slidesLengthChange() {\n        var swiper = this;\n        if (swiper.params.loop) {\n          swiper.pagination.render();\n          swiper.pagination.update();\n        }\n      },\n      snapGridLengthChange: function snapGridLengthChange() {\n        var swiper = this;\n        if (!swiper.params.loop) {\n          swiper.pagination.render();\n          swiper.pagination.update();\n        }\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        swiper.pagination.destroy();\n      },\n      click: function click(e) {\n        var swiper = this;\n        if (\n            swiper.params.pagination.el\n            && swiper.params.pagination.hideOnClick\n            && swiper.pagination.$el.length > 0\n            && !$(e.target).hasClass(swiper.params.pagination.bulletClass)\n        ) {\n          var isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);\n          if (isHidden === true) {\n            swiper.emit('paginationShow', swiper);\n          } else {\n            swiper.emit('paginationHide', swiper);\n          }\n          swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);\n        }\n      },\n    },\n  };\n\n  /* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\n\n  var Controller = {\n    LinearSpline: function LinearSpline(x, y) {\n      var binarySearch = (function search() {\n        var maxIndex;\n        var minIndex;\n        var guess;\n        return function (array, val) {\n          minIndex = -1;\n          maxIndex = array.length;\n          while (maxIndex - minIndex > 1) {\n            guess = maxIndex + minIndex >> 1;\n            if (array[guess] <= val) {\n              minIndex = guess;\n            } else {\n              maxIndex = guess;\n            }\n          }\n          return maxIndex;\n        };\n      }());\n      this.x = x;\n      this.y = y;\n      this.lastIndex = x.length - 1;\n      // 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      var i1;\n      var i3;\n\n      this.interpolate = function interpolate(x2) {\n        if (!x2) { return 0; }\n\n        // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n        i3 = binarySearch(this.x, x2);\n        i1 = i3 - 1;\n\n        // We have our indexes i1 & i3, so we can calculate already:\n        // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n        return (((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1])) + this.y[i1];\n      };\n      return this;\n    },\n    // xxx: for now i will just save one spline function to to\n    getInterpolateFunction: function getInterpolateFunction(c) {\n      var swiper = this;\n      if (!swiper.controller.spline) {\n        swiper.controller.spline = swiper.params.loop\n            ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid)\n            : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);\n      }\n    },\n    setTranslate: function setTranslate(setTranslate$1, byController) {\n      var swiper = this;\n      var controlled = swiper.controller.control;\n      var multiplier;\n      var controlledTranslate;\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        var translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n        if (swiper.params.controller.by === 'slide') {\n          swiper.controller.getInterpolateFunction(c);\n          // 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          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        c.updateProgress(controlledTranslate);\n        c.setTranslate(controlledTranslate, swiper);\n        c.updateActiveIndex();\n        c.updateSlidesClasses();\n      }\n      if (Array.isArray(controlled)) {\n        for (var 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    setTransition: function setTransition(duration, byController) {\n      var swiper = this;\n      var controlled = swiper.controller.control;\n      var i;\n      function setControlledTransition(c) {\n        c.setTransition(duration, swiper);\n        if (duration !== 0) {\n          c.transitionStart();\n          if (c.params.autoHeight) {\n            Utils.nextTick(function () {\n              c.updateAutoHeight();\n            });\n          }\n          c.$wrapperEl.transitionEnd(function () {\n            if (!controlled) { return; }\n            if (c.params.loop && swiper.params.controller.by === 'slide') {\n              c.loopFix();\n            }\n            c.transitionEnd();\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  var Controller$1 = {\n    name: 'controller',\n    params: {\n      controller: {\n        control: undefined,\n        inverse: false,\n        by: 'slide', // or 'container'\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        controller: {\n          control: swiper.params.controller.control,\n          getInterpolateFunction: Controller.getInterpolateFunction.bind(swiper),\n          setTranslate: Controller.setTranslate.bind(swiper),\n          setTransition: Controller.setTransition.bind(swiper),\n        },\n      });\n    },\n    on: {\n      update: function update() {\n        var swiper = this;\n        if (!swiper.controller.control) { return; }\n        if (swiper.controller.spline) {\n          swiper.controller.spline = undefined;\n          delete swiper.controller.spline;\n        }\n      },\n      resize: function resize() {\n        var swiper = this;\n        if (!swiper.controller.control) { return; }\n        if (swiper.controller.spline) {\n          swiper.controller.spline = undefined;\n          delete swiper.controller.spline;\n        }\n      },\n      observerUpdate: function observerUpdate() {\n        var swiper = this;\n        if (!swiper.controller.control) { return; }\n        if (swiper.controller.spline) {\n          swiper.controller.spline = undefined;\n          delete swiper.controller.spline;\n        }\n      },\n      setTranslate: function setTranslate(translate, byController) {\n        var swiper = this;\n        if (!swiper.controller.control) { return; }\n        swiper.controller.setTranslate(translate, byController);\n      },\n      setTransition: function setTransition(duration, byController) {\n        var swiper = this;\n        if (!swiper.controller.control) { return; }\n        swiper.controller.setTransition(duration, byController);\n      },\n    },\n  };\n\n  var a11y = {\n    makeElFocusable: function makeElFocusable($el) {\n      $el.attr('tabIndex', '0');\n      return $el;\n    },\n    addElRole: function addElRole($el, role) {\n      $el.attr('role', role);\n      return $el;\n    },\n    addElLabel: function addElLabel($el, label) {\n      $el.attr('aria-label', label);\n      return $el;\n    },\n    disableEl: function disableEl($el) {\n      $el.attr('aria-disabled', true);\n      return $el;\n    },\n    enableEl: function enableEl($el) {\n      $el.attr('aria-disabled', false);\n      return $el;\n    },\n    onEnterKey: function onEnterKey(e) {\n      var swiper = this;\n      var params = swiper.params.a11y;\n      if (e.keyCode !== 13) { return; }\n      var $targetEl = $(e.target);\n      if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n        if (!(swiper.isEnd && !swiper.params.loop)) {\n          swiper.slideNext();\n        }\n        if (swiper.isEnd) {\n          swiper.a11y.notify(params.lastSlideMessage);\n        } else {\n          swiper.a11y.notify(params.nextSlideMessage);\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        if (swiper.isBeginning) {\n          swiper.a11y.notify(params.firstSlideMessage);\n        } else {\n          swiper.a11y.notify(params.prevSlideMessage);\n        }\n      }\n      if (swiper.pagination && $targetEl.is((\".\" + (swiper.params.pagination.bulletClass)))) {\n        $targetEl[0].click();\n      }\n    },\n    notify: function notify(message) {\n      var swiper = this;\n      var notification = swiper.a11y.liveRegion;\n      if (notification.length === 0) { return; }\n      notification.html('');\n      notification.html(message);\n    },\n    updateNavigation: function updateNavigation() {\n      var swiper = this;\n\n      if (swiper.params.loop || !swiper.navigation) { return; }\n      var ref = swiper.navigation;\n      var $nextEl = ref.$nextEl;\n      var $prevEl = ref.$prevEl;\n\n      if ($prevEl && $prevEl.length > 0) {\n        if (swiper.isBeginning) {\n          swiper.a11y.disableEl($prevEl);\n        } else {\n          swiper.a11y.enableEl($prevEl);\n        }\n      }\n      if ($nextEl && $nextEl.length > 0) {\n        if (swiper.isEnd) {\n          swiper.a11y.disableEl($nextEl);\n        } else {\n          swiper.a11y.enableEl($nextEl);\n        }\n      }\n    },\n    updatePagination: function updatePagination() {\n      var swiper = this;\n      var params = swiper.params.a11y;\n      if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n        swiper.pagination.bullets.each(function (bulletIndex, bulletEl) {\n          var $bulletEl = $(bulletEl);\n          swiper.a11y.makeElFocusable($bulletEl);\n          swiper.a11y.addElRole($bulletEl, 'button');\n          swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/{{index}}/, $bulletEl.index() + 1));\n        });\n      }\n    },\n    init: function init() {\n      var swiper = this;\n\n      swiper.$el.append(swiper.a11y.liveRegion);\n\n      // Navigation\n      var params = swiper.params.a11y;\n      var $nextEl;\n      var $prevEl;\n      if (swiper.navigation && swiper.navigation.$nextEl) {\n        $nextEl = swiper.navigation.$nextEl;\n      }\n      if (swiper.navigation && swiper.navigation.$prevEl) {\n        $prevEl = swiper.navigation.$prevEl;\n      }\n      if ($nextEl) {\n        swiper.a11y.makeElFocusable($nextEl);\n        swiper.a11y.addElRole($nextEl, 'button');\n        swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);\n        $nextEl.on('keydown', swiper.a11y.onEnterKey);\n      }\n      if ($prevEl) {\n        swiper.a11y.makeElFocusable($prevEl);\n        swiper.a11y.addElRole($prevEl, 'button');\n        swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);\n        $prevEl.on('keydown', swiper.a11y.onEnterKey);\n      }\n\n      // Pagination\n      if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n        swiper.pagination.$el.on('keydown', (\".\" + (swiper.params.pagination.bulletClass)), swiper.a11y.onEnterKey);\n      }\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) { swiper.a11y.liveRegion.remove(); }\n\n      var $nextEl;\n      var $prevEl;\n      if (swiper.navigation && swiper.navigation.$nextEl) {\n        $nextEl = swiper.navigation.$nextEl;\n      }\n      if (swiper.navigation && swiper.navigation.$prevEl) {\n        $prevEl = swiper.navigation.$prevEl;\n      }\n      if ($nextEl) {\n        $nextEl.off('keydown', swiper.a11y.onEnterKey);\n      }\n      if ($prevEl) {\n        $prevEl.off('keydown', swiper.a11y.onEnterKey);\n      }\n\n      // Pagination\n      if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n        swiper.pagination.$el.off('keydown', (\".\" + (swiper.params.pagination.bulletClass)), swiper.a11y.onEnterKey);\n      }\n    },\n  };\n  var A11y = {\n    name: 'a11y',\n    params: {\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      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        a11y: {\n          liveRegion: $((\"<span class=\\\"\" + (swiper.params.a11y.notificationClass) + \"\\\" aria-live=\\\"assertive\\\" aria-atomic=\\\"true\\\"></span>\")),\n        },\n      });\n      Object.keys(a11y).forEach(function (methodName) {\n        swiper.a11y[methodName] = a11y[methodName].bind(swiper);\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        if (!swiper.params.a11y.enabled) { return; }\n        swiper.a11y.init();\n        swiper.a11y.updateNavigation();\n      },\n      toEdge: function toEdge() {\n        var swiper = this;\n        if (!swiper.params.a11y.enabled) { return; }\n        swiper.a11y.updateNavigation();\n      },\n      fromEdge: function fromEdge() {\n        var swiper = this;\n        if (!swiper.params.a11y.enabled) { return; }\n        swiper.a11y.updateNavigation();\n      },\n      paginationUpdate: function paginationUpdate() {\n        var swiper = this;\n        if (!swiper.params.a11y.enabled) { return; }\n        swiper.a11y.updatePagination();\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        if (!swiper.params.a11y.enabled) { return; }\n        swiper.a11y.destroy();\n      },\n    },\n  };\n\n  /* eslint no-underscore-dangle: \"off\" */\n\n  var Autoplay = {\n    run: function run() {\n      var swiper = this;\n      var $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n      var delay = swiper.params.autoplay.delay;\n      if ($activeSlideEl.attr('data-swiper-autoplay')) {\n        delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n      }\n      clearTimeout(swiper.autoplay.timeout);\n      swiper.autoplay.timeout = Utils.nextTick(function () {\n        if (swiper.params.autoplay.reverseDirection) {\n          if (swiper.params.loop) {\n            swiper.loopFix();\n            swiper.slidePrev(swiper.params.speed, true, true);\n            swiper.emit('autoplay');\n          } else if (!swiper.isBeginning) {\n            swiper.slidePrev(swiper.params.speed, true, true);\n            swiper.emit('autoplay');\n          } else if (!swiper.params.autoplay.stopOnLastSlide) {\n            swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n            swiper.emit('autoplay');\n          } else {\n            swiper.autoplay.stop();\n          }\n        } else if (swiper.params.loop) {\n          swiper.loopFix();\n          swiper.slideNext(swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else if (!swiper.isEnd) {\n          swiper.slideNext(swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else if (!swiper.params.autoplay.stopOnLastSlide) {\n          swiper.slideTo(0, swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else {\n          swiper.autoplay.stop();\n        }\n        if (swiper.params.cssMode && swiper.autoplay.running) { swiper.autoplay.run(); }\n      }, delay);\n    },\n    start: function start() {\n      var swiper = this;\n      if (typeof swiper.autoplay.timeout !== 'undefined') { return false; }\n      if (swiper.autoplay.running) { return false; }\n      swiper.autoplay.running = true;\n      swiper.emit('autoplayStart');\n      swiper.autoplay.run();\n      return true;\n    },\n    stop: function stop() {\n      var swiper = this;\n      if (!swiper.autoplay.running) { return false; }\n      if (typeof swiper.autoplay.timeout === 'undefined') { return false; }\n\n      if (swiper.autoplay.timeout) {\n        clearTimeout(swiper.autoplay.timeout);\n        swiper.autoplay.timeout = undefined;\n      }\n      swiper.autoplay.running = false;\n      swiper.emit('autoplayStop');\n      return true;\n    },\n    pause: function pause(speed) {\n      var swiper = this;\n      if (!swiper.autoplay.running) { return; }\n      if (swiper.autoplay.paused) { return; }\n      if (swiper.autoplay.timeout) { clearTimeout(swiper.autoplay.timeout); }\n      swiper.autoplay.paused = true;\n      if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n        swiper.autoplay.paused = false;\n        swiper.autoplay.run();\n      } else {\n        swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n        swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n      }\n    },\n  };\n\n  var Autoplay$1 = {\n    name: 'autoplay',\n    params: {\n      autoplay: {\n        enabled: false,\n        delay: 3000,\n        waitForTransition: true,\n        disableOnInteraction: true,\n        stopOnLastSlide: false,\n        reverseDirection: false,\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        autoplay: {\n          running: false,\n          paused: false,\n          run: Autoplay.run.bind(swiper),\n          start: Autoplay.start.bind(swiper),\n          stop: Autoplay.stop.bind(swiper),\n          pause: Autoplay.pause.bind(swiper),\n          onVisibilityChange: function onVisibilityChange() {\n            if (document.visibilityState === 'hidden' && swiper.autoplay.running) {\n              swiper.autoplay.pause();\n            }\n            if (document.visibilityState === 'visible' && swiper.autoplay.paused) {\n              swiper.autoplay.run();\n              swiper.autoplay.paused = false;\n            }\n          },\n          onTransitionEnd: function onTransitionEnd(e) {\n            if (!swiper || swiper.destroyed || !swiper.$wrapperEl) { return; }\n            if (e.target !== this) { return; }\n            swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n            swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n            swiper.autoplay.paused = false;\n            if (!swiper.autoplay.running) {\n              swiper.autoplay.stop();\n            } else {\n              swiper.autoplay.run();\n            }\n          },\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        if (swiper.params.autoplay.enabled) {\n          swiper.autoplay.start();\n          document.addEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);\n        }\n      },\n      beforeTransitionStart: function beforeTransitionStart(speed, internal) {\n        var swiper = this;\n        if (swiper.autoplay.running) {\n          if (internal || !swiper.params.autoplay.disableOnInteraction) {\n            swiper.autoplay.pause(speed);\n          } else {\n            swiper.autoplay.stop();\n          }\n        }\n      },\n      sliderFirstMove: function sliderFirstMove() {\n        var swiper = this;\n        if (swiper.autoplay.running) {\n          if (swiper.params.autoplay.disableOnInteraction) {\n            swiper.autoplay.stop();\n          } else {\n            swiper.autoplay.pause();\n          }\n        }\n      },\n      touchEnd: function touchEnd() {\n        var swiper = this;\n        if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {\n          swiper.autoplay.run();\n        }\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        if (swiper.autoplay.running) {\n          swiper.autoplay.stop();\n        }\n        document.removeEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);\n      },\n    },\n  };\n\n  // Swiper Class\n\n  var components = [\n    Device$1,\n    Support$1,\n    Browser$1,\n    Resize,\n    Observer$1,\n    Mousewheel$1,\n    Navigation$1,\n    Pagination$1,\n    Controller$1,\n    A11y,\n    Autoplay$1\n  ];\n\n  if (typeof Swiper.use === 'undefined') {\n    Swiper.use = Swiper.Class.use;\n    Swiper.installModule = Swiper.Class.installModule;\n  }\n\n  Swiper.use(components);\n\n  return Swiper;\n\n}));\n//# sourceMappingURL=swiper.js.map\n","// File#: _1_adaptive-navigation\n// Usage: codyhouse.co/license\nwindow.addEventListener(\"load\", function() {\n    'use strict';\n\n    var AdaptNav = function(element) {\n        this.element = element;\n        this.list = this.element.getElementsByClassName('js-adapt-nav__list')[0];\n        this.items = this.element.getElementsByClassName('js-adapt-nav__item');\n        this.moreBtn = this.element.getElementsByClassName('js-adapt-nav__item--more')[0];\n        this.dropdown = this.moreBtn.getElementsByTagName('ul')[0];\n        this.dropdownItems = this.dropdown.getElementsByTagName('a');\n        this.dropdownClass = 'adapt-nav__dropdown--is-visible';\n        this.resizing = false;\n        // check if items already outrun nav\n        this.outrunIndex = this.items.length;\n        initAdaptNav(this);\n    };\n\n    function initAdaptNav(nav) {\n        nav.resizing = true;\n        resetAdaptNav.bind(nav)();\n\n        // listen to resize\n        window.addEventListener('resize', function(event){\n            if(nav.resizing) return;\n            nav.resizing = true;\n            window.requestAnimationFrame(resetAdaptNav.bind(nav));\n        });\n\n        /* dropdown behaviour */\n        // init aria-labels\n        Util.setAttributes(nav.moreBtn, {'aria-expanded': 'false', 'aria-haspopup': 'true', 'aria-controls': nav.dropdown.getAttribute('id')});\n\n        // toggle dropdown on click\n        nav.moreBtn.addEventListener('click', function(event){\n            if( nav.dropdown.contains(event.target) ) return;\n            event.preventDefault();\n            toggleMoreDropdown(nav, !Util.hasClass(nav.dropdown, nav.dropdownClass), true);\n        });\n\n        // keyboard events\n        nav.dropdown.addEventListener('keydown', function(event) {\n            // use up/down arrow to navigate list of menu items\n            if( (event.keyCode && event.keyCode == 40) || (event.key && event.key.toLowerCase() == 'arrowdown') ) {\n                navigateItems(nav, event, 'next');\n            } else if( (event.keyCode && event.keyCode == 38) || (event.key && event.key.toLowerCase() == 'arrowup') ) {\n                navigateItems(nav, event, 'prev');\n            }\n        });\n\n        window.addEventListener('keyup', function(event){\n            if( event.keyCode && event.keyCode == 9 || event.key && event.key.toLowerCase() == 'tab' ) { //close dropdown if focus is outside dropdown element\n                if (!nav.moreBtn.contains(document.activeElement)) toggleMoreDropdown(nav, false, false);\n            } else if( event.keyCode && event.keyCode == 27 || event.key && event.key.toLowerCase() == 'escape' ) {// close menu on 'Esc'\n                toggleMoreDropdown(nav, false, false);\n            }\n        });\n\n        // close menu when clicking outside it\n        window.addEventListener('click', function(event){\n            if( !nav.moreBtn.contains(event.target)) toggleMoreDropdown(nav, false);\n        });\n    };\n\n    function resetAdaptNav() { // reset nav appearance\n        var totalWidth = getListWidth(this.list),\n            moreWidth = getFullWidth(this.moreBtn),\n            maxPosition = totalWidth - moreWidth,\n            cloneList = '',\n            hideAll = false;\n\n        cloneList = resetOutrun(this, cloneList);\n        // loop through items -> create clone (if required) and append to dropdown\n        for(var i = 0; i < this.outrunIndex; i++) {\n            if( Util.hasClass(this.items[i], 'is-hidden')) {\n                Util.addClass(this.items[i], 'adapt-nav__item--hidden');\n                Util.removeClass(this.items[i], 'is-hidden');\n            }\n            var right = this.items[i].offsetWidth + this.items[i].offsetLeft + parseFloat(window.getComputedStyle(this.items[i]).getPropertyValue(\"margin-right\"));\n            if(right >= maxPosition || hideAll) {\n                var clone = this.items[i].cloneNode(true);\n                Util.removeClass(clone, 'js-adapt-nav__item is-hidden adapt-nav__item--hidden');\n                cloneList = cloneList + clone.outerHTML;\n                Util.addClass(this.items[i], 'is-hidden');\n                hideAll = true;\n            } else {\n                Util.removeClass(this.items[i], 'is-hidden');\n            }\n            Util.removeClass(this.items[i], 'adapt-nav__item--hidden');\n        }\n\n        Util.toggleClass(this.moreBtn, 'adapt-nav__item--hidden', (cloneList == ''));\n        this.dropdown.innerHTML = cloneList;\n        Util.addClass(this.element, 'adapt-nav--is-visible');\n        this.outrunIndex = this.items.length;\n        this.resizing = false;\n    };\n\n    function resetOutrun(nav, cloneList) {\n        if(nav.items[0].offsetLeft < 0) {\n            nav.outrunIndex = nav.outrunIndex - 1;\n            var clone = nav.items[nav.outrunIndex].cloneNode(true);\n            Util.removeClass(clone, 'js-adapt-nav__item is-hidden adapt-nav__item--hidden');\n            Util.addClass(nav.items[nav.outrunIndex], 'is-hidden');\n            cloneList = clone.outerHTML + cloneList;\n            return resetOutrun(nav, cloneList);\n        } else {\n            return cloneList;\n        }\n    };\n\n    function getListWidth(list) { // get total width of container minus right padding\n        var style = window.getComputedStyle(list);\n        return parseFloat(style.getPropertyValue(\"width\")) - parseFloat(style.getPropertyValue(\"padding-right\"));\n    };\n\n    function getFullWidth(item) { // get width of 'More Links' button\n        return parseFloat(window.getComputedStyle(item).getPropertyValue(\"width\"));\n    };\n\n    function toggleMoreDropdown(nav, bool, moveFocus) { // toggle menu visibility\n        Util.toggleClass(nav.dropdown, nav.dropdownClass, bool);\n        if(bool) {\n            nav.moreBtn.setAttribute('aria-expanded', 'true');\n            Util.moveFocus(nav.dropdownItems[0]);\n            nav.dropdown.addEventListener(\"transitionend\", function(event) {Util.moveFocus(nav.dropdownItems[0]);}, {once: true});\n        } else {\n            nav.moreBtn.setAttribute('aria-expanded', 'false');\n            if(moveFocus) Util.moveFocus(nav.moreBtn.getElementsByTagName('button')[0]);\n        }\n    };\n\n    function navigateItems(nav, event, direction) { // navigate through dropdown items\n        event.preventDefault();\n        var index = Util.getIndexInArray(nav.dropdownItems, event.target),\n            nextIndex = direction == 'next' ? index + 1 : index - 1;\n        if(nextIndex < 0) nextIndex = nav.dropdownItems.length - 1;\n        if(nextIndex > nav.dropdownItems.length - 1) nextIndex = 0;\n        Util.moveFocus(nav.dropdownItems[nextIndex]);\n    };\n\n    //initialize the AdaptNav objects\n    var adaptNavs = document.getElementsByClassName('js-adapt-nav'),\n        flexSupported = Util.cssSupports('align-items', 'stretch');\n    if( adaptNavs.length > 0) {\n        for( var i = 0; i < adaptNavs.length; i++) {(function(i){\n            if(flexSupported) new AdaptNav(adaptNavs[i]);\n            else Util.addClass(adaptNavs[i], 'adapt-nav--is-visible');\n        })(i);}\n    }\n\n});\n","// File#: _1_anim-menu-btn\n// Usage: codyhouse.co/license\n(function() {\n    var menuBtns = document.getElementsByClassName('js-anim-menu-btn');\n    if( menuBtns.length > 0 ) {\n        for(var i = 0; i < menuBtns.length; i++) {(function(i){\n            initMenuBtn(menuBtns[i]);\n        })(i);}\n\n        function initMenuBtn(btn) {\n            btn.addEventListener('click', function(event){\n                event.preventDefault();\n                var status = !Util.hasClass(btn, 'anim-menu-btn--state-b');\n                Util.toggleClass(btn, 'anim-menu-btn--state-b', status);\n                // emit custom event\n                var event = new CustomEvent('anim-menu-btn-clicked', {detail: status});\n                btn.dispatchEvent(event);\n            });\n        };\n    }\n}());","// File#: _1_modal-window\n// Usage: codyhouse.co/license\n(function() {\n    var Modal = function(element) {\n        this.element = element;\n        this.triggers = document.querySelectorAll('[aria-controls=\"'+this.element.getAttribute('id')+'\"]');\n        this.firstFocusable = null;\n        this.lastFocusable = null;\n        this.moveFocusEl = null; // focus will be moved to this element when modal is open\n        this.modalFocus = this.element.getAttribute('data-modal-first-focus') ? this.element.querySelector(this.element.getAttribute('data-modal-first-focus')) : null;\n        this.selectedTrigger = null;\n        this.preventScrollEl = this.getPreventScrollEl();\n        this.showClass = \"modal--is-visible\";\n        this.initModal();\n    };\n\n    Modal.prototype.getPreventScrollEl = function() {\n        var scrollEl = false;\n        var querySelector = this.element.getAttribute('data-modal-prevent-scroll');\n        if(querySelector) scrollEl = document.querySelector(querySelector);\n        return scrollEl;\n    };\n\n    Modal.prototype.initModal = function() {\n        var self = this;\n        //open modal when clicking on trigger buttons\n        if ( this.triggers ) {\n            for(var i = 0; i < this.triggers.length; i++) {\n                this.triggers[i].addEventListener('click', function(event) {\n                    event.preventDefault();\n                    if(Util.hasClass(self.element, self.showClass)) {\n                        self.closeModal();\n                        return;\n                    }\n                    self.selectedTrigger = event.target;\n                    self.showModal();\n                    self.initModalEvents();\n                });\n            }\n        }\n\n        // listen to the openModal event -> open modal without a trigger button\n        this.element.addEventListener('openModal', function(event){\n            if(event.detail) self.selectedTrigger = event.detail;\n            self.showModal();\n            self.initModalEvents();\n        });\n\n        // listen to the closeModal event -> close modal without a trigger button\n        this.element.addEventListener('closeModal', function(event){\n            if(event.detail) self.selectedTrigger = event.detail;\n            self.closeModal();\n        });\n\n        // if modal is open by default -> initialise modal events\n        if(Util.hasClass(this.element, this.showClass)) this.initModalEvents();\n    };\n\n    Modal.prototype.showModal = function() {\n        var self = this;\n        Util.addClass(this.element, this.showClass);\n        this.getFocusableElements();\n        if(this.moveFocusEl) {\n            this.moveFocusEl.focus();\n            // wait for the end of transitions before moving focus\n            this.element.addEventListener(\"transitionend\", function cb(event) {\n                self.moveFocusEl.focus();\n                self.element.removeEventListener(\"transitionend\", cb);\n            });\n        }\n        this.emitModalEvents('modalIsOpen');\n        // change the overflow of the preventScrollEl\n        if(this.preventScrollEl) this.preventScrollEl.style.overflow = 'hidden';\n    };\n\n    Modal.prototype.closeModal = function() {\n        if(!Util.hasClass(this.element, this.showClass)) return;\n        Util.removeClass(this.element, this.showClass);\n        this.firstFocusable = null;\n        this.lastFocusable = null;\n        this.moveFocusEl = null;\n        if(this.selectedTrigger) this.selectedTrigger.focus();\n        //remove listeners\n        this.cancelModalEvents();\n        this.emitModalEvents('modalIsClose');\n        // change the overflow of the preventScrollEl\n        if(this.preventScrollEl) this.preventScrollEl.style.overflow = '';\n    };\n\n    Modal.prototype.initModalEvents = function() {\n        //add event listeners\n        this.element.addEventListener('keydown', this);\n        this.element.addEventListener('click', this);\n    };\n\n    Modal.prototype.cancelModalEvents = function() {\n        //remove event listeners\n        this.element.removeEventListener('keydown', this);\n        this.element.removeEventListener('click', this);\n    };\n\n    Modal.prototype.handleEvent = function (event) {\n        switch(event.type) {\n            case 'click': {\n                this.initClick(event);\n            }\n            case 'keydown': {\n                this.initKeyDown(event);\n            }\n        }\n    };\n\n    Modal.prototype.initKeyDown = function(event) {\n        if( event.keyCode && event.keyCode == 9 || event.key && event.key == 'Tab' ) {\n            //trap focus inside modal\n            this.trapFocus(event);\n        } else if( (event.keyCode && event.keyCode == 13 || event.key && event.key == 'Enter') && event.target.closest('.js-modal__close')) {\n            event.preventDefault();\n            this.closeModal(); // close modal when pressing Enter on close button\n        }\n    };\n\n    Modal.prototype.initClick = function(event) {\n        //close modal when clicking on close button or modal bg layer\n        if( !event.target.closest('.js-modal__close') && !Util.hasClass(event.target, 'js-modal') ) return;\n        event.preventDefault();\n        this.closeModal();\n    };\n\n    Modal.prototype.trapFocus = function(event) {\n        if( this.firstFocusable == document.activeElement && event.shiftKey) {\n            //on Shift+Tab -> focus last focusable element when focus moves out of modal\n            event.preventDefault();\n            this.lastFocusable.focus();\n        }\n        if( this.lastFocusable == document.activeElement && !event.shiftKey) {\n            //on Tab -> focus first focusable element when focus moves out of modal\n            event.preventDefault();\n            this.firstFocusable.focus();\n        }\n    }\n\n    Modal.prototype.getFocusableElements = function() {\n        //get all focusable elements inside the modal\n        var allFocusable = this.element.querySelectorAll(focusableElString);\n        this.getFirstVisible(allFocusable);\n        this.getLastVisible(allFocusable);\n        this.getFirstFocusable();\n    };\n\n    Modal.prototype.getFirstVisible = function(elements) {\n        //get first visible focusable element inside the modal\n        for(var i = 0; i < elements.length; i++) {\n            if( isVisible(elements[i]) ) {\n                this.firstFocusable = elements[i];\n                break;\n            }\n        }\n    };\n\n    Modal.prototype.getLastVisible = function(elements) {\n        //get last visible focusable element inside the modal\n        for(var i = elements.length - 1; i >= 0; i--) {\n            if( isVisible(elements[i]) ) {\n                this.lastFocusable = elements[i];\n                break;\n            }\n        }\n    };\n\n    Modal.prototype.getFirstFocusable = function() {\n        if(!this.modalFocus || !Element.prototype.matches) {\n            this.moveFocusEl = this.firstFocusable;\n            return;\n        }\n        var containerIsFocusable = this.modalFocus.matches(focusableElString);\n        if(containerIsFocusable) {\n            this.moveFocusEl = this.modalFocus;\n        } else {\n            this.moveFocusEl = false;\n            var elements = this.modalFocus.querySelectorAll(focusableElString);\n            for(var i = 0; i < elements.length; i++) {\n                if( isVisible(elements[i]) ) {\n                    this.moveFocusEl = elements[i];\n                    break;\n                }\n            }\n            if(!this.moveFocusEl) this.moveFocusEl = this.firstFocusable;\n        }\n    };\n\n    Modal.prototype.emitModalEvents = function(eventName) {\n        var event = new CustomEvent(eventName, {detail: this.selectedTrigger});\n        this.element.dispatchEvent(event);\n    };\n\n    function isVisible(element) {\n        return element.offsetWidth || element.offsetHeight || element.getClientRects().length;\n    };\n\n    //initialize the Modal objects\n    var modals = document.getElementsByClassName('js-modal');\n    // generic focusable elements string selector\n    var focusableElString = '[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex]:not([tabindex=\"-1\"]), [contenteditable], audio[controls], video[controls], summary';\n    if( modals.length > 0 ) {\n        var modalArrays = [];\n        for( var i = 0; i < modals.length; i++) {\n            (function(i){modalArrays.push(new Modal(modals[i]));})(i);\n        }\n\n        window.addEventListener('keydown', function(event){ //close modal window on esc\n            if(event.keyCode && event.keyCode == 27 || event.key && event.key.toLowerCase() == 'escape') {\n                for( var i = 0; i < modalArrays.length; i++) {\n                    (function(i){modalArrays[i].closeModal();})(i);\n                };\n            }\n        });\n    }\n}());","// File#: _2_flexi-header\n// Usage: codyhouse.co/license\n(function() {\n    var flexHeader = document.getElementsByClassName('js-f-header');\n    if(flexHeader.length > 0) {\n        var menuTrigger = flexHeader[0].getElementsByClassName('js-anim-menu-btn')[0],\n            firstFocusableElement = getMenuFirstFocusable();\n\n        // we'll use these to store the node that needs to receive focus when the mobile menu is closed\n        var focusMenu = false;\n\n        menuTrigger.addEventListener('anim-menu-btn-clicked', function(event){ // toggle menu visibility an small devices\n            Util.toggleClass(document.getElementsByClassName('f-header__nav')[0], 'f-header__nav--is-visible', event.detail);\n            menuTrigger.setAttribute('aria-expanded', event.detail);\n            if(event.detail) firstFocusableElement.focus(); // move focus to first focusable element\n            else if(focusMenu) {\n                focusMenu.focus();\n                focusMenu = false;\n            }\n        });\n\n        // listen for key events\n        window.addEventListener('keyup', function(event){\n            // listen for esc key\n            if( (event.keyCode && event.keyCode == 27) || (event.key && event.key.toLowerCase() == 'escape' )) {\n                // close navigation on mobile if open\n                if(menuTrigger.getAttribute('aria-expanded') == 'true' && isVisible(menuTrigger)) {\n                    focusMenu = menuTrigger; // move focus to menu trigger when menu is close\n                    menuTrigger.click();\n                }\n            }\n            // listen for tab key\n            if( (event.keyCode && event.keyCode == 9) || (event.key && event.key.toLowerCase() == 'tab' )) {\n                // close navigation on mobile if open when nav loses focus\n                if(menuTrigger.getAttribute('aria-expanded') == 'true' && isVisible(menuTrigger) && !document.activeElement.closest('.js-f-header')) menuTrigger.click();\n            }\n        });\n\n        function getMenuFirstFocusable() {\n            var focusableEle = flexHeader[0].getElementsByClassName('f-header__nav')[0].querySelectorAll('[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex]:not([tabindex=\"-1\"]), [contenteditable], audio[controls], video[controls], summary'),\n                firstFocusable = false;\n            for(var i = 0; i < focusableEle.length; i++) {\n                if( focusableEle[i].offsetWidth || focusableEle[i].offsetHeight || focusableEle[i].getClientRects().length ) {\n                    firstFocusable = focusableEle[i];\n                    break;\n                }\n            }\n\n            return firstFocusable;\n        };\n\n        function isVisible(element) {\n            return (element.offsetWidth || element.offsetHeight || element.getClientRects().length);\n        };\n    }\n}());","// File#: _2_hiding-nav\n// Usage: codyhouse.co/license\n(function() {\n    var hidingNav = document.getElementsByClassName('js-hide-nav');\n    if(hidingNav.length > 0 && window.requestAnimationFrame) {\n        var mainNav = Array.prototype.filter.call(hidingNav, function(element) {\n                return Util.hasClass(element, 'js-hide-nav--main');\n            }),\n            subNav = Array.prototype.filter.call(hidingNav, function(element) {\n                return Util.hasClass(element, 'js-hide-nav--sub');\n            });\n\n        var scrolling = false,\n            previousTop = window.scrollY,\n            currentTop = window.scrollY,\n            scrollDelta = 10,\n            scrollOffset = 150, // scrollY needs to be bigger than scrollOffset to hide navigation\n            headerHeight = 0;\n\n        var navIsFixed = false; // check if main navigation is fixed\n        if(mainNav.length > 0 && Util.hasClass(mainNav[0], 'hide-nav--fixed')) navIsFixed = true;\n\n        // store button that triggers navigation on mobile\n        var triggerMobile = getTriggerMobileMenu();\n\n        // init navigation and listen to window scroll event\n        initSecondaryNav();\n        resetHideNav();\n        window.addEventListener('scroll', function(event){\n            if(scrolling) return;\n            scrolling = true;\n            window.requestAnimationFrame(resetHideNav);\n        });\n\n        window.addEventListener('resize', function(event){\n            if(scrolling) return;\n            scrolling = true;\n            window.requestAnimationFrame(function(){\n                if(headerHeight > 0 && subNav.length > 0) {\n                    headerHeight = mainNav[0].offsetHeight;\n                    subNav[0].style.top = headerHeight+'px';\n                }\n                // reset both navigation\n                hideNavScrollUp();\n\n                scrolling = false;\n            });\n        });\n\n        function initSecondaryNav() { // if there's a secondary nav, set its top equal to the header height\n            if(subNav.length < 1 || mainNav.length < 1) return;\n            headerHeight = mainNav[0].offsetHeight;\n            subNav[0].style.top = headerHeight+'px';\n        };\n\n        function resetHideNav() { // check if navs need to be hidden/revealed\n            currentTop = window.scrollY;\n            if(currentTop - previousTop > scrollDelta && currentTop > scrollOffset) {\n                hideNavScrollDown();\n            } else if( previousTop - currentTop > scrollDelta || (previousTop - currentTop > 0 && currentTop < scrollOffset) ) {\n                hideNavScrollUp();\n            } else if( previousTop - currentTop > 0 && subNav.length > 0 && subNav[0].getBoundingClientRect().top > 0) {\n                setTranslate(subNav[0], '0%');\n            }\n            // if primary nav is fixed -> toggle bg class\n            if(navIsFixed) {\n                var scrollTop = window.scrollY || window.pageYOffset;\n                Util.toggleClass(mainNav[0], 'hide-nav--has-bg', (scrollTop > headerHeight));\n            }\n            previousTop = currentTop;\n            scrolling = false;\n        };\n\n        function hideNavScrollDown() {\n            // if there's a secondary nav -> it has to reach the top before hiding nav\n            if( subNav.length  > 0 && subNav[0].getBoundingClientRect().top > headerHeight) return;\n            // on mobile -> hide navigation only if dropdown is not open\n            if(triggerMobile && triggerMobile.getAttribute('aria-expanded') == \"true\") return;\n            if( mainNav.length > 0 ) {\n                setTranslate(mainNav[0], '-100%');\n                mainNav[0].addEventListener('transitionend', function cb(){\n                    mainNav[0].removeEventListener('transitionend', cb);\n                    Util.addClass(mainNav[0], 'hide-nav--off-canvas');\n                });\n            }\n            if( subNav.length  > 0 ) setTranslate(subNav[0], '-'+headerHeight+'px');\n        };\n\n        function hideNavScrollUp() {\n            if( mainNav.length > 0 ) {setTranslate(mainNav[0], '0%'); Util.removeClass(mainNav[0], 'hide-nav--off-canvas');}\n            if( subNav.length  > 0 ) setTranslate(subNav[0], '0%');\n        };\n\n        function setTranslate(element, val) {\n            element.style.transform = 'translateY('+val+')';\n        };\n\n        function getTriggerMobileMenu() {\n            // store trigger that toggle mobile navigation dropdown\n            var triggerMobileClass = hidingNav[0].getAttribute('data-mobile-trigger');\n            if(!triggerMobileClass) return false;\n            var trigger = hidingNav[0].getElementsByClassName(triggerMobileClass);\n            if(trigger.length > 0) return trigger[0];\n            return false;\n        };\n\n    } else {\n        // if window requestAnimationFrame is not supported -> add bg class to fixed header\n        var mainNav = document.getElementsByClassName('js-hide-nav--main');\n        if(mainNav.length < 1) return;\n        if(Util.hasClass(mainNav[0], 'hide-nav--fixed')) Util.addClass(mainNav[0], 'hide-nav--has-bg');\n    }\n}());","// File#: _2_modal-video\n// Usage: codyhouse.co/license\n(function() {\n    var ModalVideo = function(element) {\n        this.element = element;\n        this.modalContent = this.element.getElementsByClassName('js-modal-video__content')[0];\n        this.media = this.element.getElementsByClassName('js-modal-video__media')[0];\n        this.contentIsIframe = this.media.tagName.toLowerCase() == 'iframe';\n        this.modalIsOpen = false;\n        this.initModalVideo();\n    };\n\n    ModalVideo.prototype.initModalVideo = function() {\n        var self = this;\n        // reveal modal content when iframe is ready\n        this.addLoadListener();\n        // listen for the modal element to be open -> set new iframe src attribute\n        this.element.addEventListener('modalIsOpen', function(event){\n            self.modalIsOpen = true;\n            self.media.setAttribute('src', event.detail.closest('[aria-controls]').getAttribute('data-url'));\n        });\n        // listen for the modal element to be close -> reset iframe and hide modal content\n        this.element.addEventListener('modalIsClose', function(event){\n            self.modalIsOpen = false;\n            Util.addClass(self.element, 'modal--is-loading');\n            self.media.setAttribute('src', '');\n        });\n    };\n\n    ModalVideo.prototype.addLoadListener = function() {\n        var self = this;\n        if(this.contentIsIframe) {\n            this.media.onload = function () {\n                self.revealContent();\n            };\n        } else {\n            this.media.addEventListener('loadedmetadata', function(){\n                self.revealContent();\n            });\n        }\n\n    };\n\n    ModalVideo.prototype.revealContent = function() {\n        if( !this.modalIsOpen ) return;\n        Util.removeClass(this.element, 'modal--is-loading');\n        this.contentIsIframe ? this.media.contentWindow.focus() : this.media.focus();\n    };\n\n    //initialize the ModalVideo objects\n    var modalVideos = document.getElementsByClassName('js-modal-video__media');\n    if( modalVideos.length > 0 ) {\n        for( var i = 0; i < modalVideos.length; i++) {\n            (function(i){new ModalVideo(modalVideos[i].closest('.js-modal'));})(i);\n        }\n    }\n}());","/**\n * Accordion\n *\n * @requires libraries/util.js\n *\n * @see https://codyhouse.co/ds/components/app/accordion\n */\n\n(function (w, d) {\n    this.Accordion = function (element) {\n        this.element = element;\n        this.items = Util.getChildrenByClassName(this.element, 'js-accordion__item');\n        this.showClass = 'is-open';\n        this.animateHeight = (this.element.getAttribute('data-animation') === 'on');\n        this.multiItems = !(this.element.getAttribute('data-multi-items') === 'off');\n        this.initAccordion();\n    };\n\n    Accordion.prototype.initAccordion = function () {\n        //set initial aria attributes\n        for (var i = 0; i < this.items.length; i++) {\n            var button = this.items[i].getElementsByTagName('button')[0],\n                content = this.items[i].getElementsByClassName('js-accordion__panel')[0],\n                isOpen = Util.hasClass(this.items[i], this.showClass);\n            Util.setAttributes(button, {\n                'aria-expanded': isOpen,\n                'aria-controls': 'accordion-content-' + i,\n                'id': 'accordion-header-' + i\n            });\n            Util.addClass(button, 'js-accordion__trigger');\n            Util.setAttributes(content, {'aria-labelledby': 'accordion-header-' + i, 'id': 'accordion-content-' + i});\n        }\n\n        //listen for Accordion events\n        this.initAccordionEvents();\n    };\n\n    Accordion.prototype.initAccordionEvents = function () {\n        var self = this;\n\n        this.element.addEventListener('click', function (event) {\n            var trigger = event.target.closest('.js-accordion__trigger');\n            //check index to make sure the click didn't happen inside a children accordion\n            if (trigger && Util.getIndexInArray(self.items, trigger.parentElement) >= 0) self.triggerAccordion(trigger, event.target);\n        });\n    };\n\n    Accordion.prototype.triggerAccordion = function (trigger, target) {\n        var self = this;\n        var bool = (trigger.getAttribute('aria-expanded') === 'true');\n\n        this.animateAccordion(target, bool);\n    };\n\n    Accordion.prototype.animateAccordion = function (target, bool) {\n        var self = this;\n        var item = target.closest('.js-accordion__item'),\n            content = item.getElementsByClassName('js-accordion__panel')[0];\n\n        if (!bool) Util.addClass(item, this.showClass);\n        target.setAttribute('aria-expanded', !bool);\n\n        if (this.animateHeight) {\n            //store initial and final height - animate accordion content height\n            var initHeight = bool ? content.offsetHeight : 0,\n                finalHeight = bool ? 0 : content.offsetHeight;\n        }\n\n        if (w.requestAnimationFrame && this.animateHeight) {\n            Util.setHeight(initHeight, finalHeight, content, 200, function () {\n                self.resetContentVisibility(item, content, target, bool);\n            });\n        } else {\n            self.resetContentVisibility(item, content, target, bool);\n        }\n\n        if (!this.multiItems && !bool) this.closeSiblings(item);\n\n    };\n\n    Accordion.prototype.resetContentVisibility = function (item, content, target, bool) {\n        Util.toggleClass(item, this.showClass, !bool);\n        content.removeAttribute(\"style\");\n    };\n\n    Accordion.prototype.closeSiblings = function (item) {\n        //if only one accordion can be open -> search if there's another one open\n        var index = Util.getIndexInArray(this.items, item);\n        for (var i = 0; i < this.items.length; i++) {\n            if (Util.hasClass(this.items[i], this.showClass) && i !== index) {\n                this.animateAccordion(this.items[i].getElementsByClassName('js-accordion__trigger')[0], true);\n                return false;\n            }\n        }\n    };\n\n    //initialize the Accordion objects\n    var accordions = d.getElementsByClassName('js-accordion');\n    if (accordions.length > 0) {\n        for (var i = 0; i < accordions.length; i++) {\n            (function (i) {\n                new Accordion(accordions[i]);\n            })(i);\n        }\n    }\n}(window, document));","/**\n * Advanced Search\n *\n * @author Daniele De Nobili\n */\n\n(function (d) {\n    \"use strict\";\n\n    d.querySelectorAll('[name=\"s\"]').forEach(function (inputElement) {\n\n        autocomplete({\n            input: inputElement,\n            fetch: function (query, update) {\n                query = query.toLowerCase();\n\n                fetch(`/wp-json/advanced-search/v1/suggestions?search=${query}`)\n                    .then(function (response) {\n                        return response.json();\n                    })\n                    .then(function (data) {\n                        data = data.map(function (result) {\n                            return {\n                                label: result\n                            };\n                        });\n\n                        update(data);\n                    });\n            },\n            onSelect: function(item) {\n                inputElement.value = item.label;\n            }\n        });\n    });\n}(document));\n","/**\n * Back To Top\n *\n * @requires libraries/util.js\n *\n * @see https://codyhouse.co/ds/components/app/back-to-top\n */\n\n(function (w, d) {\n    var backTop = d.getElementsByClassName('js-backtotop')[0];\n\n    function checkBackToTop() {\n        var windowTop = w.scrollY || d.documentElement.scrollTop;\n        Util.toggleClass(backTop, 'is-visible', windowTop >= scrollOffset);\n        scrolling = false;\n    }\n\n    if (backTop) {\n        var scrollDuration = parseInt(backTop.getAttribute('data-duration')) || 300; // scroll to top duration\n        var scrollOffset = parseInt(backTop.getAttribute('data-offset')) || 0; // show backtotop if scrolling > scrollOffset\n        var scrolling = false;\n\n        // detect click on backtotop link\n        backTop.addEventListener('click', function (event) {\n            event.preventDefault();\n            (!w.requestAnimationFrame) ? w.scrollTo(0, 0) : Util.scrollTo(0, scrollDuration);\n            // move the focus to the #top-element - don't break keyboard navigation\n            var href = backTop.getAttribute('href');\n            if (href) {\n                Util.moveFocus(d.getElementById(href.replace('#', '')));\n            }\n        });\n\n        // listen to the window scroll and update backtotop visibility\n        checkBackToTop();\n        if (scrollOffset > 0) {\n            w.addEventListener(\"scroll\", function (event) {\n                if (!scrolling) {\n                    scrolling = true;\n                    (!w.requestAnimationFrame) ? setTimeout(function () {\n                        checkBackToTop();\n                    }, 250) : w.requestAnimationFrame(checkBackToTop);\n                }\n            });\n        }\n    }\n}(window, document));","/**\n * Search\n *\n * Clean URL e effetto Overlay Loney Planet\n *\n * @author Daniele De Nobili\n */\n\n(function (w, d) {\n    // Clean URL\n    function handleSearch(form) {\n        form.addEventListener('submit', function (event) {\n            event.preventDefault();\n\n            var url = form.action + 'search/' + encodeURI(form.s.value).replace(/%20/g, '+') + '/';\n            var qs = '';\n\n            form.querySelectorAll('input, select, textarea').forEach(function (field) {\n                if (field.name === 's' || !field.name) {\n                    return;\n                }\n\n                qs += field.name + '=' + encodeURI(form[field.name].value) + '&';\n            });\n\n            if (qs) {\n                qs = qs.substr(0, qs.length - 1);\n                url += '?' + qs;\n            }\n\n            w.location = url;\n        });\n    }\n\n    d.querySelectorAll('form[role=\"search\"]').forEach(handleSearch);\n}(window, document));\n","/**\n * Share Counter\n */\n(function(w, d) {\n    function humanizeNumber(num) {\n        if (num >= 1e6) {\n            return (num / 1e6).toFixed(1) + 'M';\n        }\n\n        if (num >= 1e3) {\n            return (num / 1e3).toFixed(1) + 'k';\n        }\n\n        return num;\n    }\n\n    var countButtons = d.querySelectorAll('.js-share-count');\n    var totalContainer = d.querySelector('.js-share-total');\n    var totalValue = 0;\n\n    if (countButtons.length) {\n        var shareUrl = null;\n        countButtons.forEach(function (button) {\n            if (button.dataset.url) {\n                shareUrl = button.dataset.url;\n            }\n        });\n\n        if (shareUrl && 'fetch' in w && 'templateUrl' in w) {\n            fetch(templateUrl + '/share-count/count-stats.php?url=' + encodeURIComponent(shareUrl))\n                .then(function (response) {\n                    return response.json();\n                })\n                .then(function (data) {\n                    if (data.message) {\n                        console.error(data.message);\n\n                        return;\n                    }\n\n                    countButtons.forEach(function (button) {\n                        var sharer = button.dataset.sharer;\n                        var rawCount = (data.share && sharer in data.share) ? data.share[sharer] : 0;\n                        var count = parseInt(rawCount, 10) || 0;\n\n                        var counter = d.createElement('span');\n                        Util.addClass(counter, 'c-share__count');\n                        counter.innerText = humanizeNumber(count);\n                        //button.parentElement.appendChild(counter);\n                        button.appendChild(counter);\n\n                        totalValue += count;\n                    });\n\n                    if (totalContainer) {\n                        totalContainer.innerText = humanizeNumber(totalValue);\n                    }\n                });\n        }\n    }\n})(window, document);","/**\n * Brand\n *\n * @requires plugins/swiper.js\n */\n(function (d) {\n\n    if (!d.querySelector('.js-testimonials')) {\n        return;\n    }\n\n    new Swiper('.js-testimonials', {\n        spaceBetween: 0,\n        slidesPerView: 1,\n        //mousewheel: true,\n        grabCursor: true,\n        setWrapperSize: false,\n        autoHeight: true,\n        autoplay: {\n            delay: 10000,\n            disableOnInteraction: false,\n        },\n        pagination: {\n            el: '.swiper-pagination',\n            dynamicBullets: true\n        },\n        navigation: {\n            nextEl: '.swiper-button-next',\n            prevEl: '.swiper-button-prev',\n        },\n    });\n\n}(document));","/**\n * Pinterest Pinit\n *\n * @see {@link root/gdpr-banner.js}\n */\n(function (w, d) {\n    if (typeof w.onCookiePolicyAccepted !== 'function') {\n        return;\n    }\n\n    w.onCookiePolicyAccepted(function () {\n        var t = 'script',\n            j = d.createElement(t),\n            s = d.getElementsByTagName(t)[0];\n\n        j.src = '//assets.pinterest.com/js/pinit.js';\n        j.async = 1;\n        j.defer = 1;\n        j.setAttribute('data-pin-hover', 'true');\n        j.setAttribute('data-pin-tall', 'true');\n        s.parentNode.insertBefore(j, s);\n    });\n}(window, document));","/**\n * YouTube Subscribe Button\n *\n * @see {@link root/gdpr-banner.js}\n */\n(function (w, d) {\n    if (typeof w.onCookiePolicyAccepted !== 'function') {\n        return;\n    }\n\n    w.onCookiePolicyAccepted(function () {\n        var t = 'script',\n            j = d.createElement(t),\n            s = d.getElementsByTagName(t)[0];\n\n        j.src = 'https://apis.google.com/js/platform.js';\n        j.async = 1;\n        j.defer = 1;\n        s.parentNode.insertBefore(j, s);\n    });\n}(window, document));"]}