{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///(webpack)/buildin/global.js","webpack:///./cartridges/app_storefront_naturesmenu/cartridge/client/default/js/components/focus.js","webpack:///./cartridges/app_storefront_naturesmenu/cartridge/client/default/js/product/base.js","webpack:///./cartridges/app_storefront_naturesmenu/cartridge/client/default/js/product/detail.js","webpack:///./cartridges/app_storefront_naturesmenu/cartridge/client/default/js/components/tabs.js","webpack:///./cartridges/app_storefront_naturesmenu/cartridge/client/default/js/components/subscription.js","webpack:///./cartridges/app_storefront_naturesmenu/cartridge/client/default/js/components/mainImage.js","webpack:///./cartridges/app_storefront_naturesmenu/cartridge/client/default/js/util.js","webpack:///./cartridges/app_storefront_naturesmenu/cartridge/client/default/js/productDetail.js","webpack:///./node_modules/simplelightbox/dist/simple-lightbox.modules.js","webpack:///./cartridges/app_storefront_naturesmenu/cartridge/client/default/js/components/jqzoom.js","webpack:///./node_modules/swiper/dist/js/swiper.js","webpack:///./cartridges/app_storefront_naturesmenu/cartridge/client/default/js/helpers/cookieHelpers.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","g","this","Function","e","window","_typeof","setTabNextFocus","focusParams","event","keyCode","firstFocusableEl","$","containerSelector","firstElementSelector","lastFocusableEl","lastElementSelector","is","nextToLastElementSelector","length","linkElements","shiftKey","focus","preventDefault","focusHelper","require","getPidValue","$el","hasClass","closest","find","data","text","attr","getQuantitySelector","getQuantitySelected","val","updateAvailability","response","$productContainer","availabilityValue","availabilityMessages","product","availability","messages","readyToOrder","forEach","message","resources","info_selectforstock","isPerpetual","removeAttr","stockLevel","hide","show","$input","parseInt","maxQty","html","stockLevelMessage","productName","isNaN","trigger","handleVariantResponse","isVaraint","isChoiceOfBonusProducts","parents","variationAttributes","attrs","msgs","attrsWithSwatches","indexOf","id","values","attrValue","$attrValue","$swatchButton","parent","selected","addClass","siblings","assistiveSelectedText","removeClass","empty","url","selectable","processSwatchValues","$attr","resetUrl","processNonSwatchValues","updateAttrs","productType","customBundleTemplate","customPDPBundleTemplate","normalPriceFormatted","price","SORprice","list","formatted","sales","salesPriceFormatted","primaryImageUrls","images","large","includes","splice","imgs","carousel","j","alt","index","appendTo","smallPDPCarousel","smallPDPCarouselSwiper","swiper","gallery","imageBlockThumbnails","imageBlockThumbnailsBackgroundColor","css","imageBlock","smallPDPCarouselPagination","removeAllSlides","isFullBleedImageClass","fullBleed","imageURL","fullBleedUrl","appendSlide","split","append","concat","first","slideTo","createCarousel","foodImage","replaceWith","renderedPriceQuantity","promotionsHtml","attributes","attributeGroup","ID","attribute","label","getAttributesHtml","quantityURL","attributeSelect","selectedValueUrl","container","ajax","method","success","optionsHtml","updateOptions","quantities","map","quantity","join","updateQuantities","discountPercentage","spinner","stop","error","parseHtml","$html","parseHTML","body","footer","children","chooseBonusProducts","bonusUrl","start","remove","bonusChoiceRuleBased","showProductsUrlRuleBased","showProductsUrlListBased","htmlString","maxBonusItems","uuid","pliUUID","addToCartUrl","pageSize","labels","selectprods","dataType","parsedHtml","renderedTemplate","enterDialogMessage","closeButtonText","modal","getOptions","options","$elOption","urlValue","selectedValueId","optionId","toArray","JSON","stringify","miniCartReportingUrl","methods","editBonusProducts","focusChooseBonusProductModal","on","onClosingChooseBonusProductModal","trapChooseBonusProductModalFocus","colorAttribute","document","selectAttribute","currentTarget","addToCart","pid","pidsObj","setPids","each","push","qty","childProducts","isSubscription","sf_isWizardSubSession","filter","form","messageType","newBonusDiscountLineItem","keys","flashMessage","setTimeout","location","reload","handlePostCartAdd","reportingURL","selectBonusProduct","$choiceOfBonusProduct","maxPids","image","submittedQty","weight","removeProductIcon","totalQty","optionID","valueId","warningImg","successImg","selectedBonusProductHtml","removeBonusProduct","$selected","count","enableBonusProductSelection","available","showMoreBonusProducts","addBonusProductsToCart","$readyToOrderBonusProducts","queryString","pidsObject","bonusProducts","qtyOption","option","productId","errorMessage","msgSuccess","updatePriceOnQuantity","$this","$addToCartButton","renderedHtml","quickView","err","console","log","customAttributeSelection","target","handleDualMode","applySORDiscount","quickViewSwiper","Swiper","zoom","slidesPerView","nextButton","prevButton","pagination","slidesPerColumn","slidesPerGroup","centeredSlides","paginationClickable","keyboardControl","mousewheelControl","mousewheelForceToAxis","grabCursor","base","tabs","subscription","mainImage","largeSwiper","smallSwiper","handleProductIngredients","fillModalElement","quickViewFullDetailMsg","productUrl","change","defaultIntervalOption","updatePDPFloatingCarousel","accordionChange","$scrollingDiv","$column","height","finishScroll","initiateScroll","offset","top","topDistance","scrollTop","swiperSliderManager","loop","onSlideChangeEnd","activeSlide","swiperSlideCount","isSwiperSlideCountOverThreshold","recommendationsSwiper","onInit","onAfterResize","updateSlidesSize","updateSlidesOffset","breakpoints","584","768","1024","viewSize","width","items","firstVisiblePos","lastVisiblePos","eq","ingredientsSliders","k","ingredientsSlider","autoplay","updateFeefoRatings","isSortChange","button","feefoWrapper","pageNumber","productID","sort","updateAddToCartEnableDisableOtherElements","enableOrDisable","updateAttributesAndDetails","attributesHtml","shortDescription","longDescription","showSpinner","updateAttribute","onClickGalleryThumbnail","update","updateAddToCart","enable","every","item","allAvailable","allReady","sizeChart","$prodSizeChart","type","content","toggleClass","$sizeChart","has","quantityButtonsDecrement","quantityButtonsIncrement","copyProductLink","$temp","select","execCommand","onSelectTab","stopPropagation","positionChange","left","animate","onToggleSubscription","toggle","slideIndex","pdpSwiper","setZoomImage","mobileZoom","toggleDescription","toggleFrozenInfo","toggleDeliveryAndReturn","toggleFeedingGuidelinesTable","toggleProductIngridients","toggleProductInformation","readyProductIngredients","ready","trim","replace","toLowerCase","changeProductFlavour","productInformationShowMore","$informationTab","$seeMoreButton","onClickFeedingSeeMore","box","showReadMoreButtonBasedOnWindowWidth","forceEnableFeefoStarsWidgetOverlay","showQuickview","applySORDiscountPDP","hideDialog","avoidLiveChatOverlap","avoidCookiesOverlap","pdpSubscription","pdpFloatingCarousel","pdpFeefoReviews","pdpGenericModule","headings","querySelectorAll","observer","IntersectionObserver","entries","entry","isIntersecting","classList","add","observe","pdpSizeSelector","setDefaultZoomImage","offsetY","zoomer","offsetX","touches","pageX","x","offsetWidth","y","offsetHeight","style","backgroundPosition","SimpleLightbox","overlayOpacity","closeText","swipeClose","docClose","fadeSpeed","jqzoom","zoomType","lens","preloadImages","alwaysOn","xOffset","yOffset","zoomWidth","innerWidth","zoomHeight","outerHeight","desktopGallery","href","galleryImage","open","include","processInclude","obj","iterator","constructor","_createForOfIteratorHelper","allowArrayLike","it","Array","isArray","_unsupportedIterableToArray","F","done","_e","f","TypeError","normalCompletion","didErr","step","next","_e2","_toConsumableArray","arr","_arrayLikeToArray","_arrayWithoutHoles","iter","from","_iterableToArray","_nonIterableSpread","minLen","toString","slice","test","len","arr2","_defineProperties","props","descriptor","configurable","writable","_defineProperty","elements","_this","instance","Constructor","_classCallCheck","sourceAttr","overlay","nav","navText","captions","captionDelay","captionSelector","captionType","captionsData","captionPosition","captionClass","captionHTML","close","showCounter","fileExt","animationSlide","animationSpeed","preloading","enableKeyboard","rel","swipeTolerance","className","widthRatio","heightRatio","scaleImageToRatio","disableRightClick","disableScroll","alertError","alertErrorMessage","additionalHtml","history","throttleInterval","doubleTapZoom","maxZoom","htmlClass","rtl","fixedClass","uniqueImages","scrollZoom","scrollZoomFactor","download","navigator","platform","swipeDiff","swipeYDiff","swipeStart","swipeEnd","swipeYStart","swipeYEnd","mousedown","imageLeft","zoomed","containerHeight","containerWidth","containerOffsetX","containerOffsetY","imgHeight","imgWidth","capture","initialOffsetX","initialOffsetY","initialPointerOffsetX","initialPointerOffsetY","initialPointerOffsetX2","initialPointerOffsetY2","initialScale","initialPinchDistance","pointerOffsetX","pointerOffsetY","pointerOffsetX2","pointerOffsetY2","targetOffsetX","targetOffsetY","targetScale","pinchOffsetX","pinchOffsetY","limitOffsetX","limitOffsetY","scaleDifference","targetPinchDistance","touchCount","doubleTapped","touchmoveCount","assign","defaultOptions","isPassiveEventsSupported","checkPassiveEventsSupport","initialSelector","relatedElements","transitionPrefix","calculateTransitionPrefix","transitionCapable","initialLocationHash","hash","getRelated","imgArr","element","src","getAttribute","createDomNodes","domNodes","wrapper","appendChild","closeButton","navigation","addEventListener","eventNamespace","isValidLink","isAnimating","initialImageIndex","openImage","isOpen","parentElement","contains","throttle","controlCoordinates","currentImage","setAttribute","loadImage","addEvents","protoProps","staticProps","supportsPassive","opts","removeEventListener","elem","startsWith","selector","trimStart","sibling","nextElementSibling","matches","_selector","querySelector","tagName","parentNode","str","classes","childIndex","previousElementSibling","generateQuerySelector","createElement","dataset","opacityTarget","innerHTML","counter","downloadLink","textContent","caption","_this$domNodes$captio","captionClasses","apply","func","limit","inThrottle","arguments","RegExp","documentElement","scrollbarWidth","scrollDiv","clientWidth","removeChild","fixedElements","fullWindowWidth","documentElementRect","getBoundingClientRect","right","Math","abs","isAppleDevice","paddingRight","getComputedStyle","getScrollbarWidth","originalPaddingRight","actualPadding","calculatedPadding","parseFloat","padding","_this2","isClosing","currentImageIndex","dispatchEvent","Event","historyHasChanges","hashReseted","resetHash","fadeOut","toggleScrollbar","minMax","substring","_this3","prev","nextImage","Image","prevImage","loadedImages","direction","_this4","slideDirection","newIndex","slide","adjustImage","preload","_this5","tmpImage","windowWidth","windowHeight","innerHeight","scale","translateX","translateY","zoomPanElement","display","dirIsDefined","alert","updateURL","captionContainer","captionText","imageWidth","imageHeight","ratio","globalScrollbarWidth","forceFocus","fadeIn","getCaptionElement","setCaption","min","max","_this6","hashchangeHandler","getElementsByTagName","match","getDimensions","offsetLeft","offsetTop","delta","wheelDelta","undefined","detail","scrollTopPos","pageY","opacity","setZoomData","clientX","clientY","sqrt","isTouchDevice","possibleDir","styles","borderTopWidth","borderBottomWidth","paddingTop","paddingBottom","borderLeftWidth","borderRightWidth","paddingLeft","newHash","newURL","pushStateSupport","title","urlChangedOnce","back","pushState","pathname","search","clearTimeout","historyUpdateTimeout","updateHash","allowHTML","_this7","_ref","speed","pos","_this8","targetURL","_this9","events","callback","wrap","_step","_iterator","namespaces","_step2","_iterator2","passive","_step3","_iterator3","_step4","_iterator4","duration","_step5","_this10","_iterator5","getPropertyValue","isFadeIn","fade","currentOpacity","_step6","_iterator6","_step7","_iterator7","requestAnimationFrame","_step8","_this11","_iterator8","_step10","_iterator10","_element2","_step9","_iterator9","_step11","_iterator11","initialDisplay","_step12","_iterator12","input","_step13","_iterator13","fullyNamespacedEvents","_step14","_iterator14","_step15","_iterator15","_step16","_iterator16","position","jQuery","off","destroy","_default","global","jqzoompluging_disabled","fn","nodeName","el","api","settings","extend","defaults","zoom_active","zoom_disabled","largeimageloading","largeimageloaded","timer","mousepos","mouseDown","img","imagetitle","zoomtitle","smallimage","Smallimage","Lens","stage","Stage","largeimage","Largeimage","loader","Loader","zoomtypes","$obj","node","findborder","bordertop","btop","borderleft","bleft","substr","eval","fetchdata","w","h","ow","outerWidth","oh","b","rightlimit","bottomlimit","onerror","onload","preloadText","visibility","setdimensions","borderWidth","setcenter","setposition","lensleft","lenstop","overleft","overright","overtop","overbottom","imageOpacity","getoffset","add_title","ieframe","leftpos","toppos","screen","zIndex","cursor","thickness","round","hideEffect","fadeoutSpeed","showEffect","fadeinSpeed","loadimage","border","inArray","zoomPad","load","init","mouseup","ondragstart","activate","deactivate","thumb_preload","thumblist","thumb_options","swapimage","link","complete","disable","disableAll","enableAll","div","ua","params","touchEventsTarget","initialSlide","autoplayDisableOnInteraction","autoplayStopOnLast","iOSEdgeSwipeDetection","iOSEdgeSwipeThreshold","freeMode","freeModeMomentum","freeModeMomentumRatio","freeModeMomentumBounce","freeModeMomentumBounceRatio","freeModeMomentumVelocityRatio","freeModeSticky","freeModeMinimumVelocity","autoHeight","setWrapperSize","virtualTranslate","effect","coverflow","rotate","stretch","depth","modifier","slideShadows","flip","limitRotation","cube","shadow","shadowOffset","shadowScale","crossFade","parallax","zoomMax","zoomMin","zoomToggle","scrollbar","scrollbarHide","scrollbarDraggable","scrollbarSnapOnRelease","mousewheelReleaseOnEdges","mousewheelInvert","mousewheelSensitivity","mousewheelEventsTarged","hashnav","hashnavWatchState","replaceState","spaceBetween","slidesPerColumnFill","slidesOffsetBefore","slidesOffsetAfter","roundLengths","touchRatio","touchAngle","simulateTouch","shortSwipes","longSwipes","longSwipesRatio","longSwipesMs","followFinger","onlyExternal","threshold","touchMoveStopPropagation","touchReleaseOnEdges","uniqueNavElements","paginationElement","paginationHide","paginationBulletRender","paginationProgressRender","paginationFractionRender","paginationCustomRender","paginationType","resistance","resistanceRatio","watchSlidesProgress","watchSlidesVisibility","preventClicks","preventClicksPropagation","slideToClickedSlide","lazyLoading","lazyLoadingInPrevNext","lazyLoadingInPrevNextAmount","lazyLoadingOnTransitionStart","updateOnImagesReady","loopAdditionalSlides","loopedSlides","control","controlInverse","controlBy","normalizeSlideIndex","allowSwipeToPrev","allowSwipeToNext","swipeHandler","noSwiping","noSwipingClass","passiveListeners","containerModifierClass","slideClass","slideActiveClass","slideDuplicateActiveClass","slideVisibleClass","slideDuplicateClass","slideNextClass","slideDuplicateNextClass","slidePrevClass","slideDuplicatePrevClass","wrapperClass","bulletClass","bulletActiveClass","buttonDisabledClass","paginationCurrentClass","paginationTotalClass","paginationHiddenClass","paginationProgressbarClass","paginationClickableClass","paginationModifierClass","lazyLoadingClass","lazyStatusLoadingClass","lazyStatusLoadedClass","lazyPreloaderClass","notificationClass","preloaderClass","zoomContainerClass","observeParents","a11y","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","runCallbacksOnInit","initialVirtualTranslate","originalParams","param","nodeType","Dom7","deepParam","def","deepDef","classNames","Zepto","currentBreakpoint","getActiveBreakpoint","point","breakpoint","points","a","setBreakpoint","breakPointsParams","needsReLoop","destroyLoop","reLoop","swipers","support","flexbox","transforms3d","touch","paginationContainer","isHorizontal","dir","wrongRTL","device","android","translate","progress","velocity","lockSwipeToNext","unsetGrabCursor","lockSwipeToPrev","lockSwipes","unlockSwipeToNext","setGrabCursor","unlockSwipeToPrev","unlockSwipes","moving","imagesToLoad","imagesLoaded","imgElement","srcset","sizes","checkForComplete","onReady","_onReady","emit","currentSrc","autoplayTimeoutId","autoplaying","autoplayPaused","startAutoplay","stopAutoplay","internal","pauseAutoplay","transitionEnd","minTranslate","snapGrid","maxTranslate","updateAutoHeight","activeSlides","newHeight","ceil","activeIndex","slides","updateContainerSize","clientHeight","size","slidesGrid","slidesSizesGrid","slidePosition","prevSlideSize","slidesNumberEvenToRows","slideSize","virtualSize","marginLeft","marginTop","marginRight","marginBottom","floor","newSlidesGrid","slidesPerRow","numFullColumns","newSlideOrderIndex","column","row","swiperSlideSize","swiperSlideOffset","currentSlidesPerView","spv","breakLoop","updateSlidesProgress","offsetCenter","slideProgress","slideBefore","slideAfter","updateProgress","translatesDiff","wasBeginning","isBeginning","wasEnd","isEnd","updateActiveIndex","newActiveIndex","snapIndex","previousIndex","updateClasses","updateRealIndex","realIndex","nextSlide","prevSlide","current","total","bullets","scaleX","scaleY","transform","transition","updatePagination","paginationHTML","numberOfBullets","initPagination","updateTranslate","newTranslate","set","controller","spline","forceSetTranslate","setWrapperTranslate","onResize","forceUpdatePagination","onBeforeResize","slideChangedBySlideTo","lazy","touchEventsDesktop","move","end","pointerEnabled","msPointerEnabled","touchEvents","initEvents","detach","actionDom","action","moveCapture","nested","browser","ie","onTouchStart","onTouchMove","onTouchEnd","passiveListener","ios","onClickNext","onEnterKey","onClickPrev","onClickIndex","attachEvents","detachEvents","allowClick","animating","stopImmediatePropagation","slideNext","slidePrev","updateClickedSlide","findElementInEvent","slideFound","clickedSlide","clickedIndex","slideToIndex","fixLoop","isTouched","isMoved","allowTouchCallbacks","touchStartTime","isScrolling","currentTranslate","startTranslate","allowThresholdMove","clickTimeout","allowMomentumBounce","isTouchEvent","startMoving","formElements","lastClickTime","Date","now","velocities","plugin","startX","startY","currentX","currentY","diff","originalEvent","which","targetTouches","swipeDirection","activeElement","blur","preventedByNestedSwiper","atan2","PI","getWrapperTranslate","setWrapperTransition","disableParentSwiper","pow","time","getTime","currentPos","touchEndTime","timeDiff","lastMoveEvent","pop","velocityEvent","distance","momentumDuration","momentumDistance","newPosition","afterBouncePosition","doBounce","bounceAmount","slideReset","onTransitionStart","onTransitionEnd","stopIndex","groupSize","_slideTo","runCallbacks","lteIE9","setHistory","setHash","clientLeft","_slideNext","_slidePrev","disableTouchControl","enableTouchControl","byController","effects","setTransition","setTranslate","getTranslate","axis","matrix","curTransform","curStyle","transformMatrix","WebKitCSSMatrix","webkitTransform","MozTransform","OTransform","MsTransform","msTransform","m41","m42","observers","initObservers","containerParents","initObserver","childList","disconnectObservers","disconnect","createLoop","prependSlides","appendSlides","cloneNode","prepend","updatePosition","oldIndex","prependSlide","removeSlide","slidesIndexes","indexToRemove","tx","ty","slideOpacity","eventTriggered","triggerEvents","rotateY","rotateX","shadowBefore","shadowAfter","cubeShadow","wrapperRotate","slideAngle","tz","shadowAngle","multiplier","sin","cos","scale1","scale2","zFactor","isSafari","isUiWebView","center","offsetMultiplier","translateZ","slideTransform","perspectiveOrigin","initialImageLoaded","loadImageInSlide","loadInDuplicate","_img","background","slideOriginalIndex","originalSlide","duplicatedSlide","amount","maxIndex","minIndex","setDragPosition","sb","track","dragSize","positionMin","moveDivider","positionMax","dragStart","dragTimeout","drag","dragMove","returnValue","dragEnd","draggableEvents","enableDraggable","disableDraggable","trackSize","divider","newPos","newSize","timeout","LinearSpline","guess","i1","i3","binarySearch","array","lastIndex","interpolate","x2","getInterpolateFunction","controlledTranslate","controlled","setControlledTranslate","setControlledTransition","onHashCange","initialized","paths","getPathValues","scrollToSlide","setHistoryPopState","pathArray","slugify","disableKeyboardControl","handleKeyboard","enableKeyboardControl","mousewheel","lastScrollTime","userAgent","isSupported","implementation","hasFeature","isEventSupported","disableMousewheelControl","handleMousewheel","enableMousewheelControl","setParallaxTransform","parallaxDuration","currentScale","isScaling","gesture","slideWidth","slideHeight","imageWrap","minX","minY","maxX","maxY","touchesStart","touchesCurrent","prevPositionX","prevPositionY","prevTime","getDistanceBetweenTouches","x1","y1","y2","onGestureStart","z","gestures","scaleStart","onGestureChange","scaleMove","onGestureEnd","changedTouches","os","scaledWidth","scaledHeight","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","toggleZoom","touchX","touchY","diffX","diffY","translateMinX","translateMinY","translateMaxX","translateMaxY","_plugins","plugins","callPlugins","eventName","emitterEventListeners","handler","normalizeEventName","once","_handler","makeFocusable","addRole","role","addLabel","notify","click","liveRegion","notification","bullet","hashnavReplaceState","cleanupStyles","deleteInstance","autoplayDelay","found","_el","MutationObserver","WebkitMutationObserver","mutations","mutation","characterData","kc","charCode","altKey","ctrlKey","metaKey","inView","windowScroll","pageXOffset","pageYOffset","swiperOffset","scrollLeft","swiperCoord","rtlFactor","sX","sY","pX","pY","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","normalizeWheel","toUpperCase","ieTouch","msMaxTouchPoints","maxTouchPoints","ipad","ipod","iphone","Modernizr","DocumentTouch","csstransforms3d","domLib","context","els","tempParent","toCreate","childNodes","getElementById","attrName","removeAttribute","dom7ElementDataStorage","dataKey","elStyle","webkitTransitionDuration","MsTransitionDuration","msTransitionDuration","MozTransitionDuration","OTransitionDuration","transitionDuration","targetSelector","listener","handleLiveEvent","dom7LiveListeners","liveListener","dom","proxy","eventData","evt","CustomEvent","bubbles","cancelable","createEvent","initEvent","fireCallBack","includeMargins","clientTop","prop","compareWith","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","child","previousSibling","returnIndex","newChild","tempDiv","firstChild","insertBefore","before","insertAfter","after","nextSibling","nextAll","nextEls","prevAll","prevEls","unique","foundElements","toAdd","swiperDomPlugins","addLibraryPlugin","lib","firstInstance","setCookie","cookieString","encodeURIComponent","path","domain","secure","sameSite","cookie","getCookie","_cookie$split2","_slicedToArray","decodeURIComponent","removeCookie","_objectSpread","expires"],"mappings":"aACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QAKfF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,GAIjBlC,EAAoBA,EAAoBmC,EAAI,K,yPClFrD,IAAIC,EAGJA,EAAK,WACJ,OAAOC,KADH,GAIL,IAECD,EAAIA,GAAK,IAAIE,SAAS,cAAb,GACR,MAAOC,GAEc,YAAL,oBAANC,OAAM,YAAAC,EAAND,WAAqBJ,EAAII,QAOrCrC,EAAOD,QAAUkC,G,kBCnBjBjC,EAAOD,QAAU,CACbwC,gBAAiB,SAAUC,GAIvB,GAF8C,QAA1BA,EAAYC,MAAMjB,KADpB,IACqCgB,EAAYC,MAAMC,QAEzE,CAIA,IAAIC,EAAmBC,EAAEJ,EAAYK,kBAAoB,IAAML,EAAYM,sBACvEC,EAAkBH,EAAEJ,EAAYK,kBAAoB,IAAML,EAAYQ,qBAE1E,GAAIJ,EAAEJ,EAAYK,kBAAoB,IAAML,EAAYQ,qBAAqBC,GAAG,eAC5EF,EAAkBH,EAAEJ,EAAYK,kBAAoB,IAAML,EAAYU,2BAClEN,EAAE,kCAAkCO,OAAS,GAAG,CAChD,IAAIC,EAAeR,EAAEJ,EAAYK,kBAAoB,0BACrDE,EAAkBK,EAAaA,EAAaD,OAAS,GAIzDX,EAAYC,MAAMY,SACdT,EAAE,UAAUK,GAAGN,KACfI,EAAgBO,QAChBd,EAAYC,MAAMc,kBAGlBX,EAAE,UAAUK,GAAGF,KACfJ,EAAiBW,QACjBd,EAAYC,MAAMc,sB,oBC5BlC,IAAIC,EAAcC,EAAQ,KACNA,EAAQ,GAO5B,SAASC,EAAYC,GAajB,OAVIf,EAAE,mBAAmBgB,SAAS,UAAYhB,EAAE,gBAAgBO,OACtDP,EAAEe,GAAKE,QAAQ,kBAAkBC,KAAK,sBAAsBC,KAAK,OAChEnB,EAAE,uBAAuBO,QAAUP,EAAE,gBAAgBO,OACtDP,EAAEe,GAAKE,QAAQ,mBAAmBC,KAAK,eAAeE,OACrDpB,EAAE,yCAAyCkB,KAAK,aACjDlB,EAAE,yCAAyCkB,KAAK,aAAaG,KAAK,mBAElErB,EAAE,uCAAuCmB,KAAK,OAW5D,SAASG,EAAoBP,GACzB,OAAOA,EAAIE,QAAQ,mBAAmBC,KAAK,gCAQ/C,SAASK,EAAoBR,GACzB,OAAOO,EAAoBP,GAAKS,MAuGpC,SAASC,EAAmBC,EAAUC,GAClC,IAAIC,EAAoB,GACpBC,EAAuBH,EAASI,QAAQC,aAAaC,SACpDN,EAASI,QAAQG,aAGlBJ,EAAqBK,SAAQ,SAAUC,GACnCP,GAAqB,YAAcO,EAAU,iBAHjDP,EAAoB,YAAcF,EAASU,UAAUC,oBAAsB,cAQ3EX,EAASI,QAAQC,aAAaO,YAC9BtC,EAAE,gCAAgCuC,WAAW,OAE7CvC,EAAE,gCAAgCqB,KAAK,MAAOK,EAASI,QAAQC,aAAaS,YAI3Ed,EAASI,QAAQG,aAGlBN,EAAkBT,KAAK,qBAAqBuB,OAF5Cd,EAAkBT,KAAK,qBAAqBwB,OAMhD,IAAIC,EAAS3C,EAAE,+BAA+BkB,KAAK,kBAC/CM,EAAMoB,SAASD,EAAOnB,MAAO,IAC7BqB,EAASD,SAASD,EAAOtB,KAAK,OAAQ,IAE1CrB,EAAE,iCAAiC8C,KAAKpB,EAASI,QAAQC,aAAagB,mBACtE/C,EAAE,sCAAsC8C,KAAKpB,EAASI,QAAQkB,aAC9DhD,EAAE,qBAAqByC,OACjBjB,GAAOqB,GAAUI,MAAMJ,IACzB7C,EAAE,qBAAqB0C,OAG3B1C,EAAE2B,GAAmBuB,QAAQ,6BAA8B,CACvDpB,QAASJ,EAASI,QAClBH,kBAAmBA,EACnBQ,QAASP,EACTQ,UAAWV,EAASU,YAoI5B,SAASe,EAAsBzB,EAAUC,GACrC,IAEIyB,EAFAC,EACA1B,EAAkB2B,QAAQ,gCAAgC/C,OAAS,EAcvE,GAZImB,EAASI,QAAQyB,uBArMzB,SAAqBC,EAAO7B,EAAmB8B,GAE3C,IAAIC,EAAoB,CAAC,SAEzBF,EAAMtB,SAAQ,SAAUb,GAChBqC,EAAkBC,QAAQtC,EAAKuC,KAAO,EAvElD,SAA6BvC,EAAMM,EAAmB8B,GAClDpC,EAAKwC,OAAO3B,SAAQ,SAAU4B,GAC1B,IAAIC,EAAapC,EAAkBT,KAAK,eAAiBG,EAAKuC,GAAK,wBAC/DE,EAAUxF,MAAQ,MAClB0F,EAAgBD,EAAWE,SAE3BH,EAAUI,UACVH,EAAWI,SAAS,YACpBJ,EAAWK,SAAS,4BAA4BhD,KAAKqC,EAAKY,yBAE1DN,EAAWO,YAAY,YACvBP,EAAWK,SAAS,4BAA4BG,SAGhDT,EAAUU,IACVR,EAAc3C,KAAK,WAAYyC,EAAUU,KAEzCR,EAAczB,WAAW,YAI7BwB,EAAWO,YAAY,2BAEvBP,EAAWI,SAASL,EAAUW,WAAa,aAAe,mBAiDtDC,CAAoBrD,EAAMM,EAAmB8B,GAhCzD,SAAgCpC,EAAMM,GAClC,IAAIgD,EAAQ,eAAiBtD,EAAKuC,GAAK,KAClBjC,EAAkBT,KAAKyD,EAAQ,YAActD,EAAKuC,GAAK,iBAC7DvC,KAAK,QAASA,EAAKuD,UAElCvD,EAAKwC,OAAO3B,SAAQ,SAAU4B,GAC1B,IAAIC,EAAapC,EACZT,KAAKyD,EAAQ,sBAAwBb,EAAUxF,MAAQ,MAC5DyF,EAAW1C,KAAK,WAAYyC,EAAUU,KACjCjC,WAAW,YAEXuB,EAAUW,YACXV,EAAW1C,KAAK,YAAY,MAsB5BwD,CAAuBxD,EAAMM,MA8LjCmD,CAAYpD,EAASI,QAAQyB,oBAAqB5B,EAAmBD,EAASU,WAC9EgB,EAA6C,YAAjC1B,EAASI,QAAQiD,YACzB1B,GAA2BD,IAC3BzB,EAAkBsC,OAAO,uBACpB9C,KAAK,MAAOO,EAASI,QAAQ8B,IAElCjC,EAAkBsC,OAAO,uBACpB9C,KAAK,iBAAkBO,EAASI,QAAQG,gBAIjDN,EAAkBX,SAAS,qBACvBU,EAASI,QAAQkD,sBACjBrD,EAAkBT,KAAK,wBAAwB4B,KAAKpB,EAASI,QAAQkD,0BAEtE,CACCtD,EAASI,QAAQmD,yBACjBtD,EAAkBT,KAAK,wBAAwB4B,KAAKpB,EAASI,QAAQmD,yBAGzE,IAAMC,EAAuBxD,EAASI,QAAQqD,MAAMC,SAAW1D,EAASI,QAAQqD,MAAME,KAAKC,UAAY5D,EAASI,QAAQqD,MAAMI,MAAMD,UAC9HE,EAAsB9D,EAASI,QAAQqD,MAAMC,SAAW1D,EAASI,QAAQqD,MAAMI,MAAMD,UAAY,GAEvGtF,EAAE,8CAA8CoB,KAAK8D,GACrDlF,EAAE,gDAAgDoB,KAAK8D,GACvDlF,EAAE,iDAAiDoB,KAAKoE,GAK5D,IADA,IAAIC,EAAmB/D,EAASI,QAAQ4D,OAAOC,MACtCtI,EAAI,EAAGA,EAAIoI,EAAiBlF,OAAQlD,IACrCoI,EAAiBpI,GAAGmH,IAAIoB,SAAS,gBACjCH,EAAiBI,OAAOxI,EAAG,IA3GvC,SAAwByI,EAAMnE,GAC1B,GAAKA,EAAkBX,SAAS,qBA4CzB,CACH,IAAI+E,EAAWpE,EAAkBT,KAAK,mBACtClB,EAAE+F,GAAUxB,QAEZ,IAAK,IAAIyB,EAAI,EAAGA,EAAIF,EAAKvF,OAAQyF,IACpB,GAAL3I,GACA2C,EAAE,eAAeqB,KAAK,MAAOyE,EAAKE,GAAGxB,KAEzCxE,EAAE,4CAA8C8F,EAAKE,GAAGxB,IAAM,0CAA4CsB,EAAKE,GAAGC,IAAM,iBAAmBrD,SAASkD,EAAKE,GAAGE,MAAO,IAAM,yDAAyDC,SAASnG,EAAE+F,QApD/L,CAClD,IAAIK,EAAmBzE,EAAkBT,KAAK,0BAC1CmF,EAAyBD,EAAiB,GAAGE,OAC7CC,EAAU5E,EAAkBT,KAAK,YACjCsF,EAAuB7E,EAAkBT,KAAK,4BAC9CuF,EAAsCD,EAAqBtF,KAAK,2BAA2BwF,IAAI,oBAC/FC,EAAahF,EAAkBT,KAAK,uBACpC0F,EAA6BjF,EAAkBT,KAAK,qCAExDmF,EAAuBQ,kBACvBN,EAAQhC,QACRiC,EAAqBjC,QACrBoC,EAAWpC,QAEX,IAAK,IAAIlH,EAAI,EAAGA,EAAIyI,EAAKvF,OAAQlD,IAAK,CAClC,IAAMyJ,EAAwBhB,EAAKzI,GAAG0J,UAAY,aAAe,GAC3DC,EAAWlB,EAAKzI,GAAG0J,UAAYjB,EAAKzI,GAAG4J,aAAenB,EAAKzI,GAAGmH,IAEpE6B,EAAuBa,YAAY,iCAAmCpB,EAAKzI,GAAGmH,IAAI2C,MAAM,KAAK,GAAK,oBAAsBH,EAAW,2CAA6CF,EAAwB,UAAYhB,EAAKzI,GAAG4I,IAAM,iBAAmBrD,SAASkD,EAAKzI,GAAG6I,MAAO,IAAM,8BACnRK,EAAQa,OAAO,YAADC,OAAavB,EAAKzI,GAAGmH,IAAI2C,MAAM,KAAK,GAAE,WACpDX,EAAqBY,OAAO,uDAADC,OACkB,GAALhK,EAAS,eAAiB,GAAE,KAAAgK,OAAIvB,EAAKzI,GAAG0J,UAAY,aAAe,GAAE,+BAAAM,OAA8BZ,GAAuC,GAAE,uCAAAY,OAC3J,GAALhK,EAAS,kBAAoB,GAAE,gGAAAgK,OACDvB,EAAKzI,GAAGmH,IAAG,oBAAA6C,OAAmBvB,EAAKzI,GAAGmH,IAAI2C,MAAM,KAAK,GAAE,wEAAAE,OAE5EvB,EAAKzI,GAAG0J,UAAYjB,EAAKzI,GAAG4J,aAAenB,EAAKzI,GAAGmH,IAAG,4BAAA6C,OAA2BvB,EAAKzI,GAAG4I,IAAG,kBAAAoB,OAAiBvB,EAAKzI,GAAG6I,MAAK,wFAK9I,GAAL7I,GACAsJ,EAAWS,OAAO,kCAADC,OACFvB,EAAKzI,GAAGmH,IAAI2C,MAAM,KAAK,GAAE,uCAAAE,OAAsCvB,EAAKzI,GAAG4I,IAAG,4EAAAoB,OACnCvB,EAAKzI,GAAGmH,IAAG,WAAA6C,OAAUvB,EAAKzI,GAAG4I,IAAG,qDAM9FG,EAAiBlF,KAAK,mBAAmBoG,QAAQnD,SAAS,qBAC1DiC,EAAiBnC,SAAS/C,KAAK,uBAAuBE,KAAK,GAC3DiF,EAAuBkB,QAAQ,GAC/BnB,EAAiBlF,KAAK,mBAAmBoD,YAAY,UACrDsC,EAA2B1F,KAAK,iBAAiBE,KAAK0E,EAAKvF,SAkE/DiH,CAAe/B,EAAkB9D,GAE7B3B,EAAE,mBAAmBO,OAAS,GAAKmB,EAASI,QAAQ2F,WACpDzH,EAAE,mBAAmB0G,IAAI,mBAAoB,OAAShF,EAASI,QAAQ2F,UAAUjD,IAAM,KAItFnB,KACoBrD,EAAE,iBAAkB2B,GAAmBpB,OACtDP,EAAE,iBAAkB2B,GACpB3B,EAAE,kBACO0H,YAAYhG,EAASI,QAAQ6F,wBAIhDhG,EAAkBT,KAAK,eAAeqD,QAAQzB,KAAKpB,EAASI,QAAQ8F,gBAEpEnG,EAAmBC,EAAUC,GAEzB0B,GACoB1B,EAAkBT,KAAK,yBAC7BgC,QAAQ,kCAAmC,CACrDpB,QAASJ,EAASI,QAASH,kBAAmBA,IAIlD3B,EAAE,oFAAoFkD,QAAQ,0BAA2B,CACrHpB,QAASJ,EAASI,QAASH,kBAAmBA,IAC/CuB,QAAQ,uBAAwBxB,EAASI,SAIhDH,EAAkBT,KAAK,oBAAoBqD,QACtCzB,KAnMT,SAA2B+E,GACvB,IAAKA,EACD,MAAO,GAGX,IAAI/E,EAAO,GAWX,OATA+E,EAAW3F,SAAQ,SAAU4F,GACC,mBAAtBA,EAAeC,IACfD,EAAeD,WAAW3F,SAAQ,SAAU8F,GACxClF,GAAQ,iCAAmCkF,EAAUC,MAAQ,KACvDD,EAAU1J,MAAQ,eAK7BwE,EAmLGoF,CAAkBxG,EAASI,QAAQ+F,aAGzCnG,EAASI,QAAQqG,aACjBnI,EAAE,gCAAgCqB,KAAK,cAAeK,EAASI,QAAQqG,aAG3EnI,EAAE,gBAAgBqB,KAAK,WAAYK,EAASI,QAAQ8B,IACpD5D,EAAE,mBAAmBqB,KAAK,WAAYK,EAASI,QAAQ8B,IAkC3D,SAASwE,EAAgBC,EAAkB1G,GACvC,GAAI0G,EAAkB,CAClBrI,EAAE,QAAQkD,QAAQ,gCACd,CAAEsB,IAAK6D,EAAkBC,UAAW3G,IAExC,IAAIyD,EAAWzD,EAAkBT,KAAK,2BAA2Bb,GAAG,YAE/DsB,EAAkBX,SAAS,uBAC5BoE,GAAW,GAGfpF,EAAEuI,KAAK,CACH/D,IAAK6D,EAAmB,aAAejD,EACvCoD,OAAQ,MACRC,QAAS,SAAUtH,GACfgC,EAAsBhC,EAAMQ,GAnN5C,SAAuB+G,EAAa/G,GAEhCA,EAAkBT,KAAK,oBAAoBqD,QAAQzB,KAAK4F,GAkN5CC,CAAcxH,EAAKW,QAAQ4G,YAAa/G,GAjCxD,SAA0BiH,EAAYjH,GAClC,GAAIA,EAAkBsC,OAAO,uBAAuB1D,QAAU,EAAG,CAC7D,IAAImI,EAAcE,EAAWC,KAAI,SAAUC,GACvC,IAAI5E,EAAW4E,EAAS5E,SAAW,aAAe,GAClD,MAAO,kBAAoB4E,EAASxK,MAAQ,gBAAkBwK,EAAStE,IAAM,IACzEN,EAAW,IAAM4E,EAASxK,MAAQ,eACvCyK,KAAK,IACRzH,EAAoBK,GAAmB4C,QAAQzB,KAAK4F,IA2B5CM,CAAiB7H,EAAKW,QAAQ8G,WAAYjH,GAC1C3B,EAAE,QAAQkD,QAAQ,+BACd,CAAE/B,KAAMA,EAAMmH,UAAW3G,IACzBR,EAAKW,QAAQmH,oBACbjJ,EAAE,mCAAmC8C,KAAK3B,EAAKW,QAAQmH,mBAAqB,KAGhFjJ,EAAEkJ,UAAUC,QAEhBC,MAAO,WACHpJ,EAAEkJ,UAAUC,WAqB5B,SAASE,EAAUvG,GACf,IAAIwG,EAAQtJ,EAAE,SAASoH,OAAOpH,EAAEuJ,UAAUzG,IAK1C,MAAO,CAAE0G,KAHEF,EAAMpI,KAAK,4BAGDuI,OAFRH,EAAMpI,KAAK,iBAAiBwI,YAU7C,SAASC,EAAoBxI,GAMzB,IAAIyI,EALJ5J,EAAE,eAAekJ,UAAUW,QAEkB,IAAzC7J,EAAE,4BAA4BO,QAC9BP,EAAE,4BAA4B8J,SAI9BF,EADAzI,EAAK4I,qBACM5I,EAAK6I,yBAEL7I,EAAK8I,yBAGpB,IAAIC,EAAa,0NAIU/I,EAAKgJ,cAJf,eAKKhJ,EAAKiJ,KALV,kBAMQjJ,EAAKkJ,QANb,uBAOalJ,EAAKmJ,aAPlB,qCASSnJ,EAAKoJ,SATd,kBAUQpJ,EAAK6I,yBAVb,+BAWqB7I,EAAK4I,qBAX1B,wGAea5I,EAAKqJ,OAAOC,YAfzB,2QA0BjBzK,EAAE,QAAQoH,OAAO8C,GACjBlK,EAAE,eAAekJ,UAAUW,QAE3B7J,EAAEuI,KAAK,CACH/D,IAAKoF,EACLpB,OAAQ,MACRkC,SAAU,OACVjC,QAAS,SAAU/G,GACf,IAAIiJ,EAAatB,EAAU3H,EAASkJ,kBACpC5K,EAAE,wCAAwCuE,QAC1CvE,EAAE,2CAA2CoB,KAAKM,EAASmJ,oBAC3D7K,EAAE,0DAA0DoB,KAAKM,EAASoJ,iBAC1E9K,EAAE,wCAAwC8C,KAAK6H,EAAWnB,MAC1DxJ,EAAE,0CAA0C8C,KAAK6H,EAAWlB,QAC5DzJ,EAAE,4BAA4B+K,MAAM,QACpC/K,EAAEkJ,UAAUC,QAEhBC,MAAO,WACHpJ,EAAEkJ,UAAUC,UAuExB,SAAS6B,EAAWrJ,GAChB,IAAIsJ,EAAUtJ,EACTT,KAAK,mBACL2H,KAAI,WACD,IAAIqC,EAAYlL,EAAEV,MAAM4B,KAAK,mBACzBiK,EAAWD,EAAU1J,MACrB4J,EAAkBF,EAAUhK,KAAK,iBAAmBiK,EAAW,MAC9DhK,KAAK,YACV,MAAO,CACHkK,SAAUrL,EAAEV,MAAM6B,KAAK,aACvBiK,gBAAiBA,MAEtBE,UAEP,OAAOC,KAAKC,UAAUP,GAQ1B,SAASQ,EAAqBjH,GACtBA,GACAxE,EAAEuI,KAAK,CACH/D,IAAKA,EACLgE,OAAQ,MACRC,QAAS,aAGTW,MAAO,eAmEnBhM,EAAOD,QAAU,CACbiL,gBAAiBA,EACjBsD,QAAS,CACLC,kBAAmB,SAAUxK,GACzBwI,EAAoBxI,KAI5ByK,6BAA8B,WAC1B5L,EAAE,QAAQ6L,GAAG,iBAAkB,4BAA4B,WACvD7L,EAAE,4BAA4BoE,WAAW/C,KAAK,cAAe,QAC7DrB,EAAE,mCAAmCU,YAI7CoL,iCAAkC,WAC9B9L,EAAE,QAAQ6L,GAAG,kBAAmB,4BAA4B,WACxD7L,EAAE,4BAA4BoE,WAAW/C,KAAK,cAAe,aAIrE0K,iCAAkC,WAC9B/L,EAAE,QAAQ6L,GAAG,UAAW,4BAA4B,SAAUrM,GAC1D,IAAII,EAAc,CACdC,MAAOL,EACPS,kBAAmB,2BACnBC,qBAAsB,SACtBE,oBAAqB,uBAEzBQ,EAAYjB,gBAAgBC,OAIpCoM,eAAgB,WACZhM,EAAEiM,UAAUJ,GAAG,QAAS,sBAAsB,SAAUrM,GAGpD,GAFAA,EAAEmB,kBAEEX,EAAEV,MAAM0B,SAAS,YAArB,CAGA,IAAIW,EAAoB3B,EAAEV,MAAM2B,QAAQ,aACnCU,EAAkBpB,SACnBoB,EAAoB3B,EAAEV,MAAM2B,QAAQ,oBAGxCmH,EAAgBpI,EAAEV,MAAM+B,KAAK,YAAaM,QAIlDuK,gBAAiB,WACblM,EAAEiM,UAAUJ,GAAG,SAAU,6CAA6C,SAAUrM,GAC5EA,EAAEmB,iBAEF,IAAIgB,EAAoB3B,EAAEV,MAAM2B,QAAQ,aACnCU,EAAkBpB,SACnBoB,EAAoB3B,EAAEV,MAAM2B,QAAQ,oBAExCmH,EAAgB5I,EAAE2M,cAAc7N,MAAOqD,OAI/CI,aAAc,WACV/B,EAAEiM,UAAUJ,GAAG,SAAU,oBAAoB,SAAUrM,GACnDA,EAAEmB,iBAEF,IAAIgB,EAAoB3B,EAAEV,MAAM2B,QAAQ,mBACnCU,EAAkBpB,SACnBoB,EAAoB3B,EAAEV,MAAM2B,QAAQ,kBAAkBC,KAAK,uBAGV,IAAjDlB,EAAE,gBAAiB2B,GAAmBpB,QACtC6H,EAAgBpI,EAAER,EAAE2M,eAAejL,KAAK,mBAAmBC,KAAK,OAC5DQ,OAKhByK,UAAW,WACPpM,EAAEiM,UAAUJ,GAAG,QAAS,iDAAiD,WACrE,IAAIvB,EACA+B,EACAC,EACAC,EAEJvM,EAAE,QAAQkD,QAAQ,0BAA2B5D,MAEzCU,EAAE,cAAcO,QAAUP,EAAEV,MAAM0B,SAAS,wBAC3CuL,EAAU,GAEVvM,EAAE,mBAAmBwM,MAAK,WACjBxM,EAAEV,MAAM0B,SAAS,uBAClBuL,EAAQE,KAAK,CACTJ,IAAKrM,EAAEV,MAAM4B,KAAK,eAAeE,OACjCsL,IAAK1M,EAAEV,MAAM4B,KAAK,oBAAoBM,MACtCyJ,QAASD,EAAWhL,EAAEV,YAIlCgN,EAAUf,KAAKC,UAAUe,IAG7BF,EAAMvL,EAAYd,EAAEV,OAEpB,IAAIqC,EAAoB3B,EAAEV,MAAM2B,QAAQ,mBACnCU,EAAkBpB,SACnBoB,EAAoB3B,EAAEV,MAAM2B,QAAQ,sBAAsBC,KAAK,oBAGnEoJ,EApWDtK,EAAE,oBAAoBwB,MAqWrB,IA/NJmL,EA+NQC,KAAkBnN,OAAOoN,uBAA0D,SAAjCpN,OAAOoN,wBAA2C7M,EAAE,gCAAgC8M,OAAO,YAAYtL,MAEzJuL,EAAO,CACPV,IAAKA,EACLC,QAASA,EACTK,eApORA,EAAgB,GACpB3M,EAAE,gBAAgBwM,MAAK,WACnBG,EAAcF,KAAK,CACfJ,IAAKrM,EAAEV,MAAM4B,KAAK,eAAeE,OACjC0H,SAAUlG,SAAS5C,EAAEV,MAAM4B,KAAK,kBAAkBC,KAAK,YAAa,SAIrEwL,EAAcpM,OAASgL,KAAKC,UAAUmB,GAAiB,IA6NlD7D,SAAUvH,EAAoBvB,EAAEV,OAChCsN,eAAgBA,GAGf5M,EAAE,gBAAgBO,SACnBwM,EAAK9B,QAAUD,EAAWrJ,IAG9B3B,EAAEV,MAAM4D,QAAQ,0BAA2B6J,GACvCzC,GACAtK,EAAEuI,KAAK,CACH/D,IAAK8F,EACL9B,OAAQ,OACRrH,KAAM4L,EACNtE,QAAS,SAAUtH,IAhSvC,SAA2BO,GACvB1B,EAAE,aAAakD,QAAQ,eAAgBxB,GACvC,IAAIsL,EAActL,EAAS0H,MAAQ,eAAiB,gBAEhD1H,EAASuL,0BACoD,IAA1DlP,OAAOmP,KAAKxL,EAASuL,0BAA0B1M,OAClDoJ,EAAoBjI,EAASuL,0BACtBvL,EAASyL,cAChBnN,EAAE,QAAQoH,OAAO1F,EAASyL,cAE1BC,YAAW,WACPpN,EAAE,mBAAmB8J,WACtB,OAEuC,IAAtC9J,EAAE,yBAAyBO,QAC3BP,EAAE,QAAQoH,OACN,4CAIRpH,EAAE,yBAAyBoH,OACvB,qBAAuB4F,EAAc,kDACnCtL,EAASS,QACT,UAGNiL,YAAW,WACPpN,EAAE,wBAAwB8J,WAC3B,MAG+B,aAAlC9J,EAAE,SAASqB,KAAK,gBAChB+L,YAAW,WACPC,SAASC,WACV,KA+PaC,CAAkBpM,GAClBnB,EAAE,QAAQkD,QAAQ,yBAA0B/B,GAC5CnB,EAAEkJ,UAAUC,OACZsC,EAAqBtK,EAAKqM,eAE9BpE,MAAO,WACHpJ,EAAEkJ,UAAUC,cAMhCsE,mBAAoB,WAChBzN,EAAEiM,UAAUJ,GAAG,QAAS,yBAAyB,WAC7C,IAAI6B,EAAwB1N,EAAEV,MAAMgE,QAAQ,4BACxC+I,EAAMrM,EAAEV,MAAM6B,KAAK,OACnBwM,EAAU3N,EAAE,gCAAgCmB,KAAK,aACjDyM,EAAQF,EAAsBxM,KAAK,qCAAqCG,KAAK,QAAUqM,EAAsBxM,KAAK,qCAAqCG,KAAK,YAC5JwM,EAAejL,SAAS8K,EAAsBxM,KAAK,kBAAkBM,MAAO,IAC5EsM,EAASJ,EAAsBxM,KAAK,2BAA2BE,OAC/D2M,EAAoBL,EAAsBpK,UAAUc,SAAS,iBAAiBlD,KAAK,4BAA4BG,KAAK,4BACpH2M,EAAW,EACfhO,EAAEwM,KAAKxM,EAAE,oEAAoE,WACzEgO,GAAYhO,EAAEV,MAAM6B,KAAK,UAE7B6M,GAAYH,EACZ,IAAII,EAAWP,EAAsBxM,KAAK,mBAAmBC,KAAK,aAC9D+M,EAAUR,EAAsBxM,KAAK,mCAAmCC,KAAK,WAC7EgN,EAAanO,EAAE,uBAAuBqB,KAAK,oBAC3C+M,EAAapO,EAAE,uBAAuBqB,KAAK,oBAC/C,GAAI2M,GAAYL,EAAS,CACrB3N,EAAE,iDAAiDsE,YAAY,UAC/D,IAAI+J,EAA2B,2CAEVhC,EAFU,cAGVwB,EAHU,oBAIJI,GAAY,IAJR,iCAKSC,GAAW,IALpB,iBAMPJ,EANO,+HAUgBF,EAAMzG,MAAM,KAAK,GAVjC,sIAezBuG,EAAsBxM,KAAK,SAAS4B,OAfX,qCAiBQ+K,EAAe,MAAQC,EAjB/B,gJAqBUC,EArBV,0BAwB/B/N,EAAE,qDAAqDoH,OAAOiH,GAC9DrO,EAAE,sBAAsB8C,KAAKkL,GAC7BhO,EAAE,iBAAiBsE,YAAY,gBAAgBH,SAAS,iBACxDnE,EAAE,0BAA0BuE,QAAQ6C,OAAO,0BAA4BgH,EAAa,oBAEpFpO,EAAE,iBAAiBmE,SAAS,gBAAgBG,YAAY,iBAEpDtE,EAAE,0BAA0BuE,SAC5BvE,EAAE,0BAA0BoH,OAAO,0BAA4B+G,EAAa,mBAK5FG,mBAAoB,WAChBtO,EAAEiM,UAAUJ,GAAG,QAAS,uCAAuC,WAC3D7L,EAAEV,MAAM2B,QAAQ,qBAAqB6I,SACrC,IAAIyE,EAAYvO,EAAE,mEACdwO,EAAQ,EACRD,EAAUhO,QACVgO,EAAU/B,MAAK,WACXgC,GAAS5L,SAAS5C,EAAEV,MAAM2B,QAAQ,qBAAqBE,KAAK,OAAQ,OAI5EnB,EAAE,sBAAsB8C,KAAK0L,GAC7BxO,EAAE,2CAA2CsE,YAAY,gBAE5C,GAATkK,GACAxO,EAAE,4BAA4BmE,SAAS,cAInDsK,4BAA6B,WACzBzO,EAAE,QAAQ6L,GAAG,mCAAmC,SAAUrM,EAAGkC,GACzD1B,EAAE,8BAA+B0B,EAASC,mBAAmBN,KAAK,YAC5DK,EAASI,QAAQG,eAAiBP,EAASI,QAAQ4M,WACzD,IAAIrC,EAAM3K,EAASI,QAAQ8B,GAC3B5D,EAAE,8BAA+B0B,EAASC,mBAAmBR,KAAK,MAAOkL,OAGjFsC,sBAAuB,WACnB3O,EAAEiM,UAAUJ,GAAG,QAAS,6BAA6B,WACjD,IAAIrH,EAAMxE,EAAEV,MAAM6B,KAAK,OACvBnB,EAAE,kBAAkBkJ,UAAUW,QAC9B7J,EAAEuI,KAAK,CACH/D,IAAKA,EACLgE,OAAQ,MACRC,QAAS,SAAU3F,GACf,IAAI6H,EAAatB,EAAUvG,GAC3B9C,EAAE,eAAeoH,OAAOuD,EAAWnB,MACnCxJ,EAAE,mCAAmC8J,SACrC9J,EAAE,kBAAkBkJ,UAAUC,QAElCC,MAAO,WACHpJ,EAAE,kBAAkBkJ,UAAUC,cAK9CyF,uBAAwB,WACpB5O,EAAEiM,UAAUJ,GAAG,QAAS,uBAAuB,WAC3C,IAAIgD,EAA6B7O,EAAE,8CAC/B8O,EAAc,SACdtK,EAAMxE,EAAE,gCAAgCmB,KAAK,gBAC7C4N,EAAa,CACbC,cAAe,IAGnBhP,EAAEwM,KAAKqC,GAA4B,WAC/B,IAAII,EACArM,SAAS5C,EAAEV,MACN6B,KAAK,OAAQ,IAElB+N,EAAS,KACTD,EAAY,IACRjP,EAAEV,MAAM6B,KAAK,aAAenB,EAAEV,MAAM6B,KAAK,4BACzC+N,EAAS,IACF7D,SAAWrL,EAAEV,MAAM6B,KAAK,YAC/B+N,EAAOC,UAAYnP,EAAEV,MAAM6B,KAAK,OAChC+N,EAAO9D,gBAAkBpL,EAAEV,MAAM6B,KAAK,0BAE1C4N,EAAWC,cAAcvC,KAAK,CAC1BJ,IAAKrM,EAAEV,MAAM6B,KAAK,OAClBuL,IAAKuC,EACLhE,QAAS,CAACiE,KAEdH,EAAWf,SAAWpL,SAAS5C,EAAE,sBAAsB8C,OAAQ,QAKvEgM,GADAA,GADAA,GAAevD,KAAKC,UAAUuD,IACF,SAAW/O,EAAE,gCAAgCmB,KAAK,SAClD,YAAcnB,EAAE,gCAAgCmB,KAAK,WACjFnB,EAAEkJ,UAAUW,QACZ7J,EAAEuI,KAAK,CACH/D,IAAKA,EAAMsK,EACXtG,OAAQ,OACRC,QAAS,SAAUtH,GACfnB,EAAEkJ,UAAUC,OACRhI,EAAKiI,OACLpJ,EAAE,4BAA4B+K,MAAM,QACM,IAAtC/K,EAAE,yBAAyBO,QAC3BP,EAAE,QAAQoH,OAAO,4CAErBpH,EAAE,yBAAyBoH,OACvB,gFAEEjG,EAAKiO,aAAe,UAE1BhC,YAAW,WACPpN,EAAE,wBAAwB8J,WAC3B,OAEH9J,EAAE,uCAAuC8C,KAAK3B,GAC9CnB,EAAE,yBAAyBsE,YAAY,kBACvCtE,EAAE,4BAA4B+K,MAAM,QAEM,IAAtC/K,EAAE,yBAAyBO,QAC3BP,EAAE,QAAQoH,OAAO,4CAErBpH,EAAE,sBAAsB8C,KAAK3B,EAAK6M,UAClChO,EAAE,yBAAyBoH,OACvB,iFAEEjG,EAAKkO,WAAa,UAExBjC,YAAW,WACPpN,EAAE,wBAAwB8J,SACtB9J,EAAE,cAAcO,QAChB8M,SAASC,WAEd,QAGXlE,MAAO,WACHpJ,EAAEkJ,UAAUC,cAK5BmG,sBAAuB,WACnBtP,EAAEiM,UAAUJ,GAAG,SAAU,gCAAgC,WACrD,IAAI0D,EAAQvP,EAAEV,MACVqC,EAAoB3B,EAAEV,MAAM2B,QAAQ,mBACnCU,EAAkBpB,SACnBoB,EAAoB3B,EAAEV,MAAM2B,QAAQ,kBAAkBC,KAAK,uBAG/D,IAAIsD,EAAMxE,EAAEV,MAAM+B,KAAK,eACnBG,EAAMxB,EAAEV,MAAMkC,MAClBgD,EAAMA,EAAM,aAAehD,EAAM,aAAexB,EAAEV,MAAM2B,QAAQ,uBAAuBmD,SAAS,uBAAuBlD,KAAK,2BAA2Bb,GAAG,YAC1J,IAAImP,EAAmBxP,EAAE,gBACzBA,EAAEkJ,UAAUW,QACZ7J,EAAEuI,KAAK,CACH/D,IAAKA,EACLgE,OAAQ,MACRC,QAAS,SAAUtH,GACf,IAAIsO,EAAezP,EAAEuJ,UAAUpI,EAAKW,QAAQ6F,uBAE5C4H,EAAMtO,QAAQ,qBAAqBmD,SAAS,uBAAuBlD,KAAK,8BAA8B4B,KAAK2M,GAEvGtO,EAAKW,QAAQmH,oBACbjJ,EAAE,mCAAmC8C,KAAK3B,EAAKW,QAAQmH,mBAAqB,KAGhFxH,EAAmBN,EAAMQ,GACzB3B,EAAE,oFAAoFkD,QAAQ,0BAA2B,CACrHpB,QAASX,EAAKW,QAASH,kBAAmBA,IAC3CuB,QAAQ,uBAAwB/B,EAAKW,SAExC0N,EAAiBrO,KAAK,gBAAiBK,GAEvC,IAAMkO,EAAY1P,EAAE,sBAChB0P,EAAUnP,OAAS,GAAKmP,EAAUrP,GAAG,YACjCc,EAAKW,QAAQkD,sBACbuK,EAAMtO,QAAQ,yBAAyBmD,SAAS,uBAAuBlD,KAAK,wBAAwB4B,KAAK3B,EAAKW,QAAQkD,sBAGtH7D,EAAKW,QAAQmD,yBACbsK,EAAMtO,QAAQ,yBAAyBmD,SAAS,uBAAuBlD,KAAK,wBAAwB4B,KAAK3B,EAAKW,QAAQmD,yBAI9HjF,EAAEkJ,UAAUC,QAEhBC,MAAO,SAAUuG,GACbC,QAAQC,IAAIF,GACZ3P,EAAEkJ,UAAUC,cAK5B2G,yBAA0B,WACtB9P,EAAEiM,UAAUJ,GAAG,QAAS,wBAAwB,SAAUrM,GACtD,IAAIQ,EAAER,EAAEuQ,QAAQ9O,QAAQ,eAAeD,SAAS,YAAhD,CAGA,IAAIW,EAAoB3B,EAAEV,MAAM2B,QAAQ,aACnCU,EAAkBpB,SACnBoB,EAAoB3B,EAAEV,MAAM2B,QAAQ,oBAGxC,IAAIuD,EAAMxE,EAAEV,MAAM4B,KAAK,aAAaG,KAAK,YACrCgL,EAAMrM,EAAEV,MAAM4B,KAAK,aAAaG,KAAK,mBACrCqL,EAAM1M,EAAE,aAAawB,MAErBgD,GAAO6H,GACPjE,EAAgB5D,EAAM,QAAU6H,EAAM,aAAeK,EAAK/K,QAKtEqO,eAAgB,WACRvQ,OAAOoN,uBAA0D,SAAjCpN,OAAOoN,wBACvC7M,EAAE,gDAAgDyC,OAClDzC,EAAE,qDAAqDyC,SAI/D3B,YAAaA,EACbS,oBAAqBA,EACrBkK,qBAAsBA,EACtBwE,iBAndJ,SAA0B9O,GACtB,IACIqD,EADA1C,GAAUX,EAAKW,QAGfA,IAEA0C,GADAA,EAAMrD,EAAKF,QAAQ,yBAAyBmD,SAAS,uBAAuBlD,KAAK,kBAAkBG,KAAK,gBAC5F,aAAeE,EAAoBJ,GAAQ,aAAeA,EAAKF,QAAQ,2BAA2BZ,GAAG,aAGjHc,IAASW,IAIb9B,EAAEkJ,UAAUW,QACZ7J,EAAEuI,KAAK,CACH/D,IAAKA,EACLgE,OAAQ,MACRC,QAAS,SAAU/G,GACf,IAAMgO,EAAY1P,EAAE,sBAChB0P,EAAUnP,OAAS,GAAKmP,EAAUrP,GAAG,YACjCqB,EAASI,QAAQkD,sBACjB7D,EAAKF,QAAQ,yBAAyBmD,SAAS,uBAAuBlD,KAAK,wBAAwB4B,KAAKpB,EAASI,QAAQkD,sBAGzHtD,EAASI,QAAQmD,yBACjB9D,EAAKF,QAAQ,yBAAyBmD,SAAS,uBAAuBlD,KAAK,wBAAwB4B,KAAKpB,EAASI,QAAQmD,yBAGjIjF,EAAEkJ,UAAUC,QAEhBC,MAAO,SAAUuG,GACbC,QAAQC,IAAIF,GACZ3P,EAAEkJ,UAAUC,YAobpB+G,gBA/aJ,WACI,IAAIC,EAAStP,EAAQ,GACrB,IAAIsP,EAAO,oBAAqB,CAC5BC,MAAM,EACNC,cAAe,EACfC,WAAY,sBACZC,WAAY,wBAEhB,IAAIJ,EAAO,oBAAqB,CAC5BC,MAAM,EACNI,WAAY,qBACZH,cAAe,EACfI,gBAAiB,EACjBC,eAAgB,EAChBC,gBAAgB,EAChBC,qBAAqB,EACrBC,iBAAiB,EACjBC,mBAAmB,EACnBC,uBAAuB,EACvBC,YAAY,O,oBCzsBpB,IAAIC,EAAOpQ,EAAQ,KACfqQ,EAAOrQ,EAAQ,KACfsQ,EAAetQ,EAAQ,KACvBuQ,EAAYvQ,EAAQ,KACpBwQ,EAAc,KACdC,EAAc,KA4BlB,SAASC,EAAyB3N,GAC9B5D,EAAE,iCAAiCkB,KAAK,2BAA2BsL,MAAK,WACpExM,EAAEV,MAAMoK,SAAS,OAAO8C,MAAK,WACrBxM,EAAEV,MAAMpB,IAAI,GAAG0F,IAAMA,EACrB5D,EAAEV,MAAMgF,YAAY,UAEpBtE,EAAEV,MAAM6E,SAAS,gBAgCjC,SAASqN,EAAiBnJ,GACtBrI,EAAE,eAAekJ,UAAUW,QAC3B7J,EAAEuI,KAAK,CACH/D,IAAK6D,EACLG,OAAQ,MACRkC,SAAU,OACVjC,QAAS,SAAUtH,GACf,IAgCO2B,EACXwG,EAEAE,EACAC,EApCQkB,GAgCG7H,EAhCoB3B,EAAKyJ,iBAiCpCtB,EAAQtJ,EAAE,SAASoH,OAAOpH,EAAEuJ,UAAUzG,IAEtC0G,EAAOF,EAAMpI,KAAK,sBAClBuI,EAASH,EAAMpI,KAAK,iBAAiBwI,WAElC,CAAEF,KAAMA,EAAMC,OAAQA,IApCrBzJ,EAAE,+BAA+BuE,QACjCvE,EAAE,+BAA+B8C,KAAK6H,EAAWnB,MACjDxJ,EAAE,iCAAiC8C,KAAK6H,EAAWlB,QACnDzJ,EAAE,kCAAkCoB,KAAKD,EAAKsQ,wBAC9CzR,EAAE,kCAAkCqB,KAAK,OAAQF,EAAKuQ,YACtD1R,EAAE,+BAA+BqB,KAAK,OAAQF,EAAKuQ,YACnD1R,EAAE,iDAAiDoB,KAAKD,EAAK2J,iBAC7D9K,EAAE,kCAAkCoB,KAAKD,EAAK0J,oBAC9C7K,EAAE,mBAAmB+K,MAAM,QAC3B/K,EAAE,QAAQkD,QAAQ,mBAClBlD,EAAE,mBAAmBkB,KAAK,mCAAmCyQ,SAE7D,IAAIC,EAAwB5R,EAAE,mBAAmBkB,KAAK,2BAA2BC,KAAK,2BACtFnB,EAAE,mBAAmBkB,KAAK,uCAAuCoD,YAAY,UAC7EtE,EAAE,mBAAmBkB,KAAK,mDAAqD0Q,EAAwB,MAAMzN,SAAS,UAEtHnE,EAAEkJ,UAAUC,QAEhBC,MAAO,WACHpJ,EAAEkJ,UAAUC,UAyBxB,SAAS0I,EAA0BC,GAC/B,IAAMC,EAAgB/R,EAAE,8BAClBgS,EAAUhS,EAAE,iBAClB4P,QAAQC,IAAImC,EAAQC,UACpB,IAAMC,EAAeF,EAAQC,SAAWF,EAAcE,SAChDE,EAAiBnS,EAAE,gBAAgBoS,SAASC,IAC5CC,EAActS,EAAEP,QAAQ8S,YAAcJ,EAExCnS,EAAEP,QAAQ8S,aAAeJ,GAAkBG,GAAeJ,EAC1DH,EAAcrL,IAAI,MAAO1G,EAAEP,QAAQ8S,YAAcJ,GAC1CL,GAAmBQ,EAAcJ,GACxCH,EAAcrL,IAAI,MAAOwL,GAQjC,SAASM,IACL,IAAIrC,EAAStP,EAAQ,GACrBwQ,EAAc,IAAIlB,EAAO,yBAA0B,CAC/CC,MAAM,EACNC,cAAe,EACfI,gBAAiB,EACjBC,eAAgB,EAChBC,gBAAgB,EAChBE,iBAAiB,EACjBC,mBAAmB,EACnBC,uBAAuB,EACvBC,YAAY,EACZyB,MAAM,EACNnC,WAAY,8BACZC,WAAY,8BACZmC,iBAAkB,WACd,IAAMC,EAAc3S,EAAE,0BAA0BkB,KAAK,wBACrDlB,EAAE,uBAAuBoB,KAAKwB,SAAS+P,EAAYtR,KAAK,2BAA4B,IAAM,GAC1FrB,EAAE,uBAAuBmB,KAAK,aAAcwR,EAAYzR,KAAK,mBAAmBG,KAAK,WAG7FiQ,EAAc,IAAInB,EAAO,yBAA0B,CAC/CC,MAAM,EACNC,cAAe,EACfI,gBAAiB,EACjBC,eAAgB,EAChBC,gBAAgB,EAChBE,iBAAiB,EACjBC,mBAAmB,EACnBC,uBAAuB,EACvBC,YAAY,EACZyB,MAAM,EACNnC,WAAY,8BACZC,WAAY,8BACZmC,iBAAkB,WACd1S,EAAE,uBAAuBoB,KAAKwB,SAAS5C,EAAE,0BAA0BkB,KAAK,wBAAwBG,KAAK,2BAA4B,IAAM,MAG/I,IACIuR,EAAmB5S,EAAE,wCAAwCO,OAC7DsS,EAAkCD,EAFjB,EAGjBvC,EAAgBwC,EAHC,EAGkDD,EAEnEE,EAAwB,IAAI3C,EAAO,8BAA+B,CAClEC,MAAM,EACNC,cAAeA,EACfM,gBAAgB,EAChBE,iBAAiB,EACjBG,YAAY,EACZV,WAAY,mCACZC,WAAY,mCACZkC,KAAMI,EACNE,OAAQ,WACCF,IACD7S,EAAE,oCAAoCyC,OACtCzC,EAAE,oCAAoCyC,SAG9CuQ,cAAe,WACXF,EAAsBG,mBACtBH,EAAsBI,sBAE1BC,YAAa,CACTC,IAAK,CACD/C,cAAe,EACfM,gBAAgB,GAEpB0C,IAAK,CACDhD,cAAeuC,EAAmB,EAAI,EAAIA,EAC1CjC,eAAgBkC,GAEpBS,KAAM,CACFjD,cAAeuC,EAAmB,EAAI,EAAIA,EAC1CjC,eAAgBkC,MAKxBU,EAAWvT,EAAEP,QAAQ+T,QACrBD,EAAW,IACXlD,EAAgB,EACRkD,GAAY,KAASA,EAAW,OAEpClD,EADAuC,EAAmB,EACH,EAEAA,GAKxB5S,EAAE,+BAA+BqB,KAAK,eAAgBgP,GAKtD,IAJA,IAAI/J,EAAStG,EAAE,+BACXyT,EAAQnN,EAAOpF,KAAK,iBACpBwS,EAAkBpN,EAAOpF,KAAK,wBAAwBgF,QACtDyN,EAAiBD,EAAkBrD,EAC9BhT,EAAI,EAAGA,EAAIoW,EAAMlT,OAAQlD,KAC1BA,EAAIqW,GAAmBrW,GAAKsW,IAC5BF,EAAMG,GAAGvW,GAAGgE,KAAK,sBAAsB,GAS/C,GALArB,EAAEP,QAAQoM,GAAG,UAAU,WACnBiH,EAAsBG,mBACtBH,EAAsBI,wBAGtBlT,EAAE,2BAA2BO,OAAS,EAAG,CACzCP,EAAE,yDAAyDmE,SAAS,gBAIpE,IAFA,IAAM0P,EAAqB7T,EAAE,2BAEpB8T,EAAI,EAAGA,EAAID,EAAmBtT,OAAQuT,IAAK,CAChD,IAAMC,EAAoB/T,EAAE6T,EAAmBC,IAChCC,EAAkB7S,KAAK,iBAE3BX,QAAU,GACjBwT,EAAkB7S,KAAK,mBAAmBoD,YAAY,6BAI9D,IAAI6L,EAAO,0BAA2B,CAClCC,MAAM,EACNC,cAAe,IACfoC,MAAM,EACN9B,gBAAgB,EAChBE,iBAAiB,EACjBG,YAAY,EACZmC,YAAa,CACTC,IAAK,CACD/C,cAAe,KAEnBgD,IAAK,CACDhD,cAAe,KAEnBiD,KAAM,CACFjD,cAAe,QAM3BrQ,EAAE,8BAA8BO,OAAS,GAAKP,EAAEiM,UAAUuH,QAAU,KACpE,IAAIrD,EAAO,6BAA8B,CACrCC,MAAM,EACNC,cAAe,EACfoC,MAAM,EACN9B,gBAAgB,EAChBE,iBAAiB,EACjBG,YAAY,EACZgD,SAAU,MAKtB,SAASC,EAAmBC,GACxB,IAAMC,EAASnU,EAAE,qCACXoU,EAAepU,EAAE,mCACnBqU,EAAaH,EAAe,EAAItR,SAASuR,EAAO9S,KAAK,oBAAqB,IAAM,EAEpFrB,EAAEkJ,UAAUW,QAEZ7J,EAAEuI,KAAK,CACH/D,IAAK2P,EAAO9S,KAAK,YACjBmH,OAAQ,MACRkC,SAAU,OACVvJ,KAAM,CACFkT,WAAYA,EACZC,UAAWH,EAAO9S,KAAK,mBACvBkT,KAAMvU,EAAE,2DAA2DwB,OAEvEiH,QAAS,SAAUtH,GACXA,GAAQA,EAAKyJ,kBAAoBzJ,EAAKyJ,iBAAiBrK,OAAS,IAC5D2T,GACAE,EAAa7P,QAGjB6P,EAAahN,OAAOjG,EAAKyJ,kBACzBuJ,EAAO9S,KAAK,mBAAoBF,EAAKkT,aAGzCrU,EAAEkJ,UAAUC,QAEhBC,MAAO,WACHpJ,EAAEkJ,UAAUC,UAKxB/L,EAAOD,QAAU,CACbuO,QAAS,CACL8I,0CAlUR,SAAmDC,GAC/CzU,EAAE,6BAA6BqB,KAAK,WAAYoT,KAoUhD1S,aAAckP,EAAKlP,aAEnBqK,UAAW6E,EAAK7E,UAEhBkD,sBAAuB2B,EAAK3B,sBAC5BQ,yBAA0BmB,EAAKnB,yBAE/B4E,2BAA4B,WACxB1U,EAAE,QAAQ6L,GAAG,wBAAwB,SAAUrM,EAAG2B,GAC9C,IAAIQ,EAAoB3B,EAAE,6BAA+BmB,EAAKyC,GAAK,MAEnEjC,EAAkBT,KAAK,+CAClBqD,QACAzB,KAAK3B,EAAKwT,gBAEXxT,EAAKyT,kBACLjT,EAAkBT,KAAK,wCAClBoD,YAAY,kBACjB3C,EAAkBT,KAAK,iDAClBqD,QACAzB,KAAK3B,EAAKyT,mBAEfjT,EAAkBT,KAAK,wCAClBiD,SAAS,kBAGdhD,EAAK0T,iBACLlT,EAAkBT,KAAK,oCAClBoD,YAAY,kBACjB3C,EAAkBT,KAAK,6CAClBqD,QACAzB,KAAK3B,EAAK0T,kBAEflT,EAAkBT,KAAK,oCAClBiD,SAAS,sBAK1B2Q,YAAa,WACT9U,EAAE,QAAQ6L,GAAG,yDAAyD,WAClE7L,EAAEkJ,UAAUW,YAGpBkL,gBAAiB,WACb/U,EAAE,QAAQ6L,GAAG,gCAAgC,SAAUrM,EAAGkC,GAClD1B,EAAE,iCAAiCO,QAAUP,EAAE,uBAAuB4T,GAAG,IACzElS,EAAS4G,UAAUnH,KAAK,MAAOO,EAASP,KAAKW,QAAQ8B,IACrDlC,EAAS4G,UAAUpH,KAAK,eAAeE,KAAKM,EAASP,KAAKW,QAAQ8B,MAElE5D,EAAE,eAAeoB,KAAKM,EAASP,KAAKW,QAAQ8B,IAC5C5D,EAAE,uCAAuCmB,KAAK,MAAOO,EAASP,KAAKW,QAAQ8B,KAG/ExG,EAAOD,QAAQ6X,0BACX1D,GACAA,EAAY2D,SAEhB7X,EAAOD,QAAQiT,WAGvB8E,gBAAiB,WACblV,EAAE,QAAQ6L,GAAG,2BAA2B,SAAUrM,EAAGkC,GAEjD1B,EAAE,qBAAsB0B,EAASC,mBAAmBN,KAAK,YACnDK,EAASI,QAAQG,eAAiBP,EAASI,QAAQ4M,WAEzD,IAAIyG,EAASnV,EAAE,yBAAyBsL,UAAU8J,OAAM,SAAUC,GAC9D,OAAOrV,EAAEqV,GAAMlU,KAAK,cAAgBnB,EAAEqV,GAAMlU,KAAK,qBAErD/D,EAAOD,QAAQuO,QAAQ8I,2CAA2CW,OAG1E1T,mBAAoB,WAChBzB,EAAE,QAAQ6L,GAAG,8BAA8B,SAAUrM,EAAGkC,GAQpD,GAPA1B,EAAE,mBAAoB0B,EAASC,mBAC1BR,KAAK,iBAAkBO,EAASI,QAAQG,cACxCd,KAAK,YAAaO,EAASI,QAAQ4M,WAExC1O,EAAE,oBAAqB0B,EAASC,mBAC3B4C,QAAQzB,KAAKpB,EAASS,SAEvBnC,EAAE,wBAAwBO,OAAQ,CAClC,IAAI+U,EAAetV,EAAE,yBAAyBsL,UACzC8J,OAAM,SAAUC,GAAQ,OAAOrV,EAAEqV,GAAMlU,KAAK,gBAE7CoU,EAAWvV,EAAE,yBAAyBsL,UACrC8J,OAAM,SAAUC,GAAQ,OAAOrV,EAAEqV,GAAMlU,KAAK,qBAEjDnB,EAAE,wBACGmB,KAAK,iBAAkBoU,GACvBpU,KAAK,YAAamU,GAEvBtV,EAAE,0CAA0CuE,QACvCzB,KAAKyS,EAAW7T,EAASS,QAAUT,EAASU,UAAUC,qBAI/D,IAAIM,EAAS3C,EAAE,+BAA+BkB,KAAK,kBAC/CM,EAAMoB,SAASD,EAAOnB,MAAO,IAC7BqB,EAASD,SAASD,EAAOtB,KAAK,OAAQ,IAE1CrB,EAAE,iCAAiC8C,KAAKpB,EAASI,QAAQC,aAAagB,mBACtE/C,EAAE,sCAAsC8C,KAAKpB,EAASI,QAAQkB,aAC9DhD,EAAE,qBAAqByC,OACjBjB,GAAOqB,GAAUI,MAAMJ,IACzB7C,EAAE,qBAAqB0C,WAInC8S,UAAW,WACPxV,EAAE,iBAAiB6L,GAAG,SAAS,SAAUrM,GACrCA,EAAEmB,iBACF,IAAI6D,EAAMxE,EAAEV,MAAM+B,KAAK,QACnBoU,EAAiBzV,EAAEV,MAAM2B,QAAQ,eAAeC,KAAK,2BACrDuU,EAAepV,GAAG,WAClBL,EAAEuI,KAAK,CACH/D,IAAKA,EACLkR,KAAM,MACNhL,SAAU,OACVjC,QAAS,SAAUtH,GACfsU,EAAerO,OAAOjG,EAAKwU,YAIvCF,EAAeG,YAAY,aAG/B,IAAIC,EAAa7V,EAAE,2BACnBA,EAAE,QAAQ6L,GAAG,oBAAoB,SAAUrM,GACnCQ,EAAE,eAAe8V,IAAItW,EAAEuQ,QAAQxP,QAAU,GACzCsV,EAAWvR,YAAY,cAInCyR,yBAA0B,WACtB/V,EAAE,QAAQ6L,GAAG,QAAS,6BAA6B,WAC/C,IAAIlJ,EAAS3C,EAAEV,MAAM8E,SAAS,+BAA+BlD,KAAK,kBAC9DsO,EAAmBxP,EAAE,gBACrBwB,EAAMoB,SAASD,EAAOnB,MAAO,IAE7BA,EAAM,IACNmB,EAAOnB,IAAIA,EAAM,GACjBmB,EAAOO,QAAQ,UACfsM,EAAiBrO,KAAK,gBAAiBwB,EAAOnB,OAC9CxB,EAAE,qBAAqByC,YAInCuT,yBAA0B,WACtBhW,EAAE,QAAQ6L,GAAG,QAAS,6BAA6B,WAC/C,IAAIlJ,EAAS3C,EAAEV,MAAM8E,SAAS,+BAA+BlD,KAAK,kBAC9DsO,EAAmBxP,EAAE,gBACrBwB,EAAMoB,SAASD,EAAOnB,MAAO,IAC7BqB,EAASD,SAASD,EAAOtB,KAAK,OAAQ,IAErCG,EAAM,GAAMqB,GAAUI,MAAMJ,IAC7BF,EAAOnB,IAAIA,EAAM,GACjBmB,EAAOO,QAAQ,UACfsM,EAAiBrO,KAAK,gBAAiBwB,EAAOnB,OAC9CxB,EAAE,qBAAqByC,QAEvBzC,EAAE,qBAAqB0C,WAInCuT,gBAAiB,WACbjW,EAAE,QAAQ6L,GAAG,QAAS,YAAY,WAC9BhM,MAAMc,iBACN,IAAIuV,EAAQlW,EAAE,WACdA,EAAE,QAAQoH,OAAO8O,GACjBA,EAAM1U,IAAIxB,EAAE,aAAawB,OAAO2U,SAChClK,SAASmK,YAAY,QACrBF,EAAMpM,SACN9J,EAAE,sBAAsBqB,KAAK,OAAQ,SACrCrB,EAAE,sBAAsBsE,YAAY,UACpC8I,YAAW,WACPpN,EAAE,sBAAsBmE,SAAS,YAClC,SAGXkS,YAAa,WACTrW,EAAEiM,UAAUJ,GAAG,QAAS,6BAA8BqF,EAAKiF,QAE3DnW,EAAE,8BACG6L,GAAG,cAAc,SAAUrM,GACxBA,EAAE8W,kBACF,IAAI/G,EAAQvP,EAAEV,MACd,IAAKiQ,EAAMvO,SAAS,cAAgBuO,EAAMvO,SAAS,YAAa,CAC5D,IAAIuV,EAAiB,GAEjBA,EADAhH,EAAMvO,SAAS,YACE,CACbwV,KAAM,QAGO,CACbA,KAAM,QAGdjH,EAAMtL,SAAS/C,KAAK,2BAA2BuV,QAAQF,EAAgB,SAG9E1K,GAAG,cAAc,SAAUrM,GACxBA,EAAE8W,kBACF,IAAI/G,EAAQvP,EAAEV,MACd,IAAKiQ,EAAMvO,SAAS,cAAgBuO,EAAMvO,SAAS,YAAa,CAI5DuO,EAAMtL,SAAS/C,KAAK,2BAA2BuV,QAH1B,CACjBD,KAAM,OAE6D,UAIvFE,qBAAsB,WAClB1W,EAAE,+CAA+C6L,GAAG,QAASsF,EAAawF,SAE9E3B,wBAAyB,WACrBhV,EAAE,oDAAoD6L,GAAG,SAAS,WAC9D,IAAMrH,EAAMxE,EAAEV,MAAM+B,KAAK,OACnBuV,EAAa5W,EAAEV,MAAM+B,KAAK,cAChCrB,EAAE,uBAAuBmB,KAAK,aAAcqD,GAC5C6M,EAAY9J,QAAQ3E,SAASgU,EAAY,SAGjDC,UAAW,WAEPrE,IAGAxS,EAAEP,QAAQoM,GAAG,qBAAqB,WAC9B2G,QAGRpC,KAAM,WACFpQ,EAAE,oBAAoB6L,GAAG,YAAauF,EAAUhB,MAChDpQ,EAAE,oBAAoB6L,GAAG,cAAc,WACnCuF,EAAU0F,aAAa,OAE3B1F,EAAU2F,cAEdC,kBAAmB,WACfhX,EAAE,QAAQ6L,GAAG,QAAS,wCAAwC,WAC1D7L,EAAE,4CAA4C2W,SAC9C3W,EAAE,yCAAyC0J,SAAS,OAAOkM,YAAY,QACnE5V,EAAEiM,UAAUuH,QAAU,KACtB3B,GAA0B,OAItCoF,iBAAkB,WACdjX,EAAE,QAAQ6L,GAAG,QAAS,wCAAwC,WAC1D7L,EAAE,4CAA4C2W,SAC9C3W,EAAE,yCAAyC0J,SAAS,OAAOkM,YAAY,QACnE5V,EAAEiM,UAAUuH,QAAU,KACtB3B,GAA0B,OAItCqF,wBAAyB,WACrBlX,EAAE,QAAQ6L,GAAG,QAAS,gDAAgD,WAClE7L,EAAE,oDAAoD2W,SACtD3W,EAAE,iDAAiD0J,SAAS,OAAOkM,YAAY,QAC3E5V,EAAEiM,UAAUuH,QAAU,KACtB3B,GAA0B,OAItCsF,6BAA8B,WAC1BnX,EAAE,QAAQ6L,GAAG,QAAS,qDAAqD,WACvE7L,EAAE,yDAAyD2W,SAC3D3W,EAAE,sDAAsD0J,SAAS,OAAOkM,YAAY,QAChF5V,EAAEiM,UAAUuH,QAAU,KACtB3B,GAA0B,OAItCuF,yBAA0B,WACtBpX,EAAE,QAAQ6L,GAAG,QAAS,6CAA6C,WAC/D7L,EAAE,iDAAiD2W,SACnD3W,EAAE,8CAA8C0J,SAAS,OAAOkM,YAAY,QACxE5V,EAAEiM,UAAUuH,QAAU,KACtB3B,GAA0B,OAItCwF,yBAA0B,WACtBrX,EAAE,QAAQ6L,GAAG,QAAS,gDAAgD,WAClE7L,EAAE,oDAAoD2W,SACtD3W,EAAE,iDAAiD0J,SAAS,OAAOkM,YAAY,QAC3E5V,EAAEiM,UAAUuH,QAAU,KACtB3B,GAA0B,OAItCyF,wBAAyB,WACrBtX,EAAEiM,UAAUsL,OAAM,WAGdhG,EADqB,OADPvR,EAAE,gDAAgDoB,OAC1BoW,OAAOC,QAAQ,OAAQ,KAAKC,mBAI1EC,qBAAsB,WAClB3X,EAAE,QAAQ6L,GAAG,QAAS,uCAAuC,WAGzD0F,EADqB,OADPvR,EAAEV,MAAM4B,KAAK,QAAQE,OACGoW,OAAOC,QAAQ,OAAQ,KAAKC,mBAI1EE,2BAA4B,WACxB,IAAIC,EAAkB7X,EAAE,6BACpB8X,EAAiB9X,EAAE,+BAEvBA,EAAE,QAAQ6L,GAAG,QAAS,+BAA+B,WACjDgM,EAAgBjC,YAAY,UAExBiC,EAAgB7W,SAAS,UACzBhB,EAAEV,MAAM8B,KAAK,YAEbpB,EAAEV,MAAM8B,KAAK,eAGjByW,EAAgBzW,OAAOb,OAAS,IAChCuX,EAAerV,OAGfqV,EAAepV,QAGvBqV,sBAAuB,WACnB/X,EAAE,QAAQ6L,GAAG,QAAS,iCAAiC,WA1oB/D,IACQmM,EAQA7D,GARA6D,EAAMhY,EAAE,uDACJgB,SAAS,YACbgX,EAAI1T,YAAY,YAEhB0T,EAAI7T,SAAS,YAKK,cADlBgQ,EAASnU,EAAE,qBACJoB,OACP+S,EAAO/S,KAAK,YAGZ+S,EAAO/S,KAAK,gBAioBhB6W,qCAAsC,WAClC,IAAID,EAAMhY,EAAE,sDACRO,EAASyX,EAAI5W,OAAOb,OACpBA,EAAS,KAAOP,EAAEP,QAAQ+T,QAAU,KAG/BjT,EAAS,KAAOP,EAAEP,QAAQ+T,QAAU,IAFzCxT,EAAE,iCAAiC0C,QAMnC1C,EAAE,iCAAiCyC,OACnCuV,EAAI7T,SAAS,cAGrB+T,mCAAoC,WAGhClY,EAAE,kCAAkCmE,SAAS,UAC7CnE,EAAE,8CAA8CmE,SAAS,WAE7DyH,6BAA8BqF,EAAKrF,+BACnCuM,cAAe,WACXnY,EAAE,QAAQ6L,GAAG,QAAS,cAAc,SAAUrM,GAC1CA,EAAEmB,iBACF,IAAI0H,EAAmBrI,EAAEV,MAAM2B,QAAQ,eAAeI,KAAK,QAC3DrB,EAAER,EAAEuQ,QAAQ7M,QAAQ,kBApoBQ,IAAhClD,EAAE,mBAAmBO,QACrBP,EAAE,mBAAmB8J,SAYzB9J,EAAE,QAAQoH,OAVO,gRAmoBToK,EAAiBnJ,OAGzB+P,oBAAqB,WACjBpY,EAAEiM,UAAUJ,GAAG,SAAU,6CAA6C,WAClEoF,EAAKhB,iBAAiBjQ,EAAEV,WAGhC+Y,WAAY,WACRrY,EAAE,QAAQ6L,GAAG,0BAA0B,WACnC7L,EAAE,mBAAmB+K,MAAM,YAGnCmF,gBAAiB,WACblQ,EAAE,QAAQ6L,GAAG,iBAAkB,mBAAmB,WAC9CoF,EAAKf,sBAGboI,qBAAsB,WAClBtY,EAAE,QAAQmE,SAAS,yBAEvBoU,oBAAqB,WACjBvY,EAAE,QAAQmE,SAAS,wBAGvBqU,gBAAiB,WACbxY,EAAEiM,UAAUJ,GAAG,QAAS,+BAA+B,SAAUrM,GAC7DQ,EAAE,yCAAyCsE,YAAY,YACvDtE,EAAER,EAAE2M,eAAelL,QAAQ,yCAAyCkD,SAAS,YAC7EnE,EAAE,2BAA2BkD,QAAQ,aAG7CuV,oBAAqB,WACbzY,EAAEiM,UAAUuH,QAAU,KACtBxT,EAAEP,QAAQoM,GAAG,UAAU,WACnBgG,GAA0B,OAItC6G,gBAAiB,WACb1Y,EAAE,yBAAyB6L,GAAG,SAAS,WACnC7L,EAAE,cAAcyW,QAAQ,CACpBlE,UAAWvS,EAAE,sCAAsCoS,SAASC,KAC7D,QAGPrS,EAAE,qCAAqC6L,GAAG,SAAS,WAC/CoI,GAAmB,MAGvBjU,EAAE,2CAA2C6L,GAAG,UAAU,WACtDoI,GAAmB,OAG3B0E,iBAAkB,WAed,IAdA,IAAMC,EAAW3M,SAAS4M,iBAAiB,6BAErCC,EAAW,IAAIC,sBAAqB,SAAAC,GACtCA,EAAQ9W,SAAQ,SAAA+W,GACZ,IAAMlJ,EAASkJ,EAAMlJ,OAEjBkJ,EAAMC,eACNnJ,EAAOoJ,UAAUC,IAAI,uBAGzBrJ,EAAOoJ,UAAUrP,OAAO,6BAIvBzM,EAAI,EAAGA,EAAIub,EAASrY,OAAQlD,IACjCyb,EAASO,QAAQT,EAASvb,KAGlCic,gBAAiB,WACbtZ,EAAE,qCAAqC6L,GAAG,SAAS,SAAUrM,GACzDQ,EAAE,qCAAqCsE,YAAY,YACnDtE,EAAER,EAAE2M,eAAehI,SAAS,kB,kBC9vBxC/G,EAAOD,QAAU,CACbgZ,OARJ,WACQnW,EAAEV,MAAM0B,SAAS,cAErBhB,EAAEV,MAAM8E,WAAWE,YAAY,YAC/BtE,EAAEV,MAAM6E,SAAS,YACjBnE,EAAEV,MAAM2E,SAAS/C,KAAK,aAAaqB,WAAW,a,kBCOlDnF,EAAOD,QAAU,CACbwZ,OAbJ,SAA4BnX,GACpBA,IACIQ,EAAE,sBAAsBgB,SAAS,WACjChB,EAAE,0CAA0CqB,KAAK,WAAW,GAC5DrB,EAAE,sBAAsBsE,YAAY,YAGpCtE,EAAE,0CAA0CqB,KAAK,WAAW,GAC5DrB,EAAE,sBAAsBmE,SAAS,e,kBCR7C,SAASoV,IACL,IAAM/U,EAAMxE,EAAE,uBAAuBmB,KAAK,cAAcgG,MAAM,KAAK,GACnEnH,EAAE,eAAe0G,IAAI,CAAC,mBAAoB,QAAWlC,EAAM,OAwD/DpH,EAAOD,QAAU,CACboc,oBAAqBA,EACrBzC,aAxDJ,SAAsBtS,GAClBxE,EAAE,eAAe0G,IAAI,CAAC,mBAAoB,QAAWlC,EAAM,QAwD3D4L,KAtDJ,SAAc5Q,GACV+Z,IACA,IAEIC,EAFAC,EAASja,EAAE2M,cACXuN,EAAUla,EAAEka,SAAWla,EAAEma,SAAWna,EAAEma,QAAQ,GAAGC,MAErDpa,EAAEga,QAAUA,EAAUha,EAAEga,QAAUE,EAAUla,EAAEma,SAAWna,EAAEma,QAAQ,GAAGC,MACtE,IAAIC,EAAIH,EAAQD,EAAOK,YAAY,IAC/BC,EAAIP,EAAQC,EAAOO,aAAa,IACpCP,EAAOQ,MAAMC,mBAAqBL,EAAI,KAAOE,EAAI,KA+CjDhD,WA5CJ,WACI,IAAItX,OAAO0a,eAAe,oBAAqB,CAC3CC,eAAgB,EAChBC,UAAW,IACXC,YAAY,EACZC,UAAU,EACVC,UAAW,MAGfxa,EAAE,WAAWya,OAAO,CAChBC,SAAU,WACVC,MAAK,EACLC,eAAe,EACfC,UAAS,EACTC,QAAS,EACTC,QAAS,EACTC,UAAWhb,EAAE,kBAAkBib,aAAe,GAC9CC,WAAYlb,EAAE,gBAAgBmb,gBAGlC,IAAIC,EAAiB,IAAI3b,OAAO0a,eAAe,aAAc,CACzDC,eAAgB,EAChBC,UAAW,IACXC,YAAY,EACZC,UAAU,EACVC,UAAW,MAGfxa,EAAE,WAAW6L,GAAG,SAAS,SAAArM,GACrBA,EAAEmB,iBACF,IAAM0a,EAAO7b,EAAE2M,cAAckP,KACvBC,EAAetb,EAAE,oBAAsBqb,EAAO,MACpDD,EAAeG,KAAKD,MAGxBtb,EAAE,6BAA6B6L,GAAG,cAAc,SAAArM,GAC5CQ,EAAE,uBAAuB4V,YAAY,aAAc5V,EAAER,EAAE2M,eAAelL,QAAQ,2BAA2BD,SAAS,qB,qPCtD1H5D,EAAOD,QAAU,SAAUqe,GACA,mBAAZA,EACPA,IAC0B,WAAnB9b,EAAO8b,IACdzd,OAAOmP,KAAKsO,GAAStZ,SAAQ,SAAUtD,GACP,mBAAjB4c,EAAQ5c,IACf4c,EAAQ5c,U,oBCNxB,IAAI6c,EAAiB5a,EAAQ,GAC7BA,EAAQ,KAERb,EAAEiM,UAAUsL,OAAM,WACdkE,EAAe5a,EAAQ,MACvB4a,EAAe5a,EAAQ,U,kCCL3B,YAYA,SAASnB,EAAQgc,GAAkC,OAAOhc,EAAU,mBAAqBtB,QAAU,iBAAmBA,OAAOud,SAAW,SAAUD,GAAO,cAAcA,GAAS,SAAUA,GAAO,OAAOA,GAAO,mBAAqBtd,QAAUsd,EAAIE,cAAgBxd,QAAUsd,IAAQtd,OAAOa,UAAY,gBAAkByc,IAAgBA,GACzU,SAASG,EAA2B/d,EAAGge,GAAkB,IAAIC,EAAuB,oBAAX3d,QAA0BN,EAAEM,OAAOud,WAAa7d,EAAE,cAAe,IAAKie,EAAI,CAAE,GAAIC,MAAMC,QAAQne,KAAOie,EAAKG,EAA4Bpe,KAAOge,GAAkBhe,GAAyB,iBAAbA,EAAEyC,OAAqB,CAAMwb,IAAIje,EAAIie,GAAI,IAAI1e,EAAI,EAAO8e,EAAI,aAAiB,MAAO,CAAE/c,EAAG+c,EAAGrd,EAAG,WAAe,OAAIzB,GAAKS,EAAEyC,OAAe,CAAE6b,MAAM,GAAe,CAAEA,MAAM,EAAO9d,MAAOR,EAAET,OAAWmC,EAAG,SAAW6c,GAAM,MAAMA,GAAOC,EAAGH,GAAO,MAAM,IAAII,UAAU,yIAA4I,IAA6C5M,EAAzC6M,GAAmB,EAAMC,GAAS,EAAY,MAAO,CAAErd,EAAG,WAAe2c,EAAKA,EAAGve,KAAKM,IAAOgB,EAAG,WAAe,IAAI4d,EAAOX,EAAGY,OAAsC,OAA9BH,EAAmBE,EAAKN,KAAaM,GAASld,EAAG,SAAWod,GAAOH,GAAS,EAAM9M,EAAMiN,GAAQN,EAAG,WAAe,IAAWE,GAAoC,MAAhBT,EAAW,QAAWA,EAAW,SAAM,QAAW,GAAIU,EAAQ,MAAM9M,KAC/9B,SAASkN,EAAmBC,GAAO,OAInC,SAA4BA,GAAO,GAAId,MAAMC,QAAQa,GAAM,OAAOC,EAAkBD,GAJ1CE,CAAmBF,IAG7D,SAA0BG,GAAQ,GAAsB,oBAAX7e,QAAmD,MAAzB6e,EAAK7e,OAAOud,WAA2C,MAAtBsB,EAAK,cAAuB,OAAOjB,MAAMkB,KAAKD,GAHjFE,CAAiBL,IAAQZ,EAA4BY,IAC1H,WAAgC,MAAM,IAAIP,UAAU,wIAD8Ea,GAElI,SAASlB,EAA4Bpe,EAAGuf,GAAU,GAAKvf,EAAL,CAAgB,GAAiB,iBAANA,EAAgB,OAAOif,EAAkBjf,EAAGuf,GAAS,IAAIve,EAAIf,OAAOkB,UAAUqe,SAAS9f,KAAKM,GAAGyf,MAAM,GAAI,GAAiE,MAAnD,WAANze,GAAkBhB,EAAE8d,cAAa9c,EAAIhB,EAAE8d,YAAYhe,MAAgB,QAANkB,GAAqB,QAANA,EAAoBkd,MAAMkB,KAAKpf,GAAc,cAANgB,GAAqB,2CAA2C0e,KAAK1e,GAAWie,EAAkBjf,EAAGuf,QAAzG,GAG7S,SAASN,EAAkBD,EAAKW,IAAkB,MAAPA,GAAeA,EAAMX,EAAIvc,UAAQkd,EAAMX,EAAIvc,QAAQ,IAAK,IAAIlD,EAAI,EAAGqgB,EAAO,IAAI1B,MAAMyB,GAAMpgB,EAAIogB,EAAKpgB,IAAOqgB,EAAKrgB,GAAKyf,EAAIzf,GAAM,OAAOqgB,EAEhL,SAASC,EAAkB5N,EAAQ6N,GAAS,IAAK,IAAIvgB,EAAI,EAAGA,EAAIugB,EAAMrd,OAAQlD,IAAK,CAAE,IAAIwgB,EAAaD,EAAMvgB,GAAIwgB,EAAW5f,WAAa4f,EAAW5f,aAAc,EAAO4f,EAAWC,cAAe,EAAU,UAAWD,IAAYA,EAAWE,UAAW,GAAMhgB,OAAOC,eAAe+R,EAAQ8N,EAAWjf,IAAKif,IAE7S,SAASG,EAAgBtC,EAAK9c,EAAKN,GAAiK,OAApJM,KAAO8c,EAAO3d,OAAOC,eAAe0d,EAAK9c,EAAK,CAAEN,MAAOA,EAAOL,YAAY,EAAM6f,cAAc,EAAMC,UAAU,IAAkBrC,EAAI9c,GAAON,EAAgBod;;;;;;;AAf3M3d,OAAOC,eAAeb,EAAS,aAAc,CAC3CmB,OAAO,IAETnB,EAAiB,aAAI,EAarB,IAAIgd,EAA8B,WAChC,SAASA,EAAe8D,EAAUhT,GAChC,IAAIiT,EAAQ5e,KAuIZ,GA7IJ,SAAyB6e,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAI7B,UAAU,qCAO5G8B,CAAgB/e,KAAM6a,GACtB6D,EAAgB1e,KAAM,iBAAkB,CACtCgf,WAAY,OACZC,SAAS,EACTnE,eAAgB,GAChBlR,SAAS,EACTsV,KAAK,EACLC,QAAS,CAAC,WAAY,YACtBC,UAAU,EACVC,aAAc,EACdC,gBAAiB,MACjBC,YAAa,OACbC,aAAc,QACdC,gBAAiB,SACjBC,aAAc,GACdC,aAAa,EACbC,OAAO,EACP7E,UAAW,UACXC,YAAY,EACZ6E,aAAa,EACbC,QAAS,6BACTC,gBAAgB,EAChBC,eAAgB,IAChBC,YAAY,EACZC,gBAAgB,EAChB/M,MAAM,EACNgN,KAAK,EACLlF,UAAU,EACVmF,eAAgB,GAChBC,UAAW,kBACXC,WAAY,GACZC,YAAa,GACbC,mBAAmB,EACnBC,mBAAmB,EACnBC,eAAe,EACfC,YAAY,EACZC,kBAAmB,6CACnBC,gBAAgB,EAChBC,SAAS,EACTC,iBAAkB,EAClBC,cAAe,EACfC,QAAS,GACTC,UAAW,eACXC,KAAK,EACLC,WAAY,WACZlG,UAAW,IACXmG,cAAc,EACdjgB,OAAO,EACPkgB,YAAY,EACZC,iBAAkB,GAClBC,UAAU,IAEZ9C,EAAgB1e,KAAM,wBAAoB,GAC1C0e,EAAgB1e,KAAM,gCAA4B,GAClD0e,EAAgB1e,KAAM,qBAAqB,GAC3C0e,EAAgB1e,KAAM,gBAAiB,iBAAkBG,QACzDue,EAAgB1e,KAAM,gBAAiB,0BAA0Bke,KAAKuD,UAAUC,WAChFhD,EAAgB1e,KAAM,2BAAuB,GAC7C0e,EAAgB1e,KAAM,mBAAoB,cAAe8gB,SACzDpC,EAAgB1e,KAAM,UAAU,GAChC0e,EAAgB1e,KAAM,eAAe,GACrC0e,EAAgB1e,KAAM,aAAa,GACnC0e,EAAgB1e,KAAM,YAAY,GAClC0e,EAAgB1e,KAAM,kBAAkB,GACxC0e,EAAgB1e,KAAM,eAAe,GACrC0e,EAAgB1e,KAAM,qBAAqB,GAC3C0e,EAAgB1e,KAAM,uBAAwB,MAC9C0e,EAAgB1e,KAAM,oBAAgB,GACtC0e,EAAgB1e,KAAM,iBAAkB,kBACxC0e,EAAgB1e,KAAM,WAAY,IAClC0e,EAAgB1e,KAAM,eAAgB,IACtC0e,EAAgB1e,KAAM,oBAAqB,GAC3C0e,EAAgB1e,KAAM,oBAAqB,GAC3C0e,EAAgB1e,KAAM,kBAAmB,MACzC0e,EAAgB1e,KAAM,uBAAwB,GAC9C0e,EAAgB1e,KAAM,qBAAsB,CAC1C2hB,UAAW,EACXC,WAAY,EACZC,WAAY,EACZC,SAAU,EACVC,YAAa,EACbC,UAAW,EACXC,WAAW,EACXC,UAAW,EACXC,QAAQ,EACRC,gBAAiB,EACjBC,eAAgB,EAChBC,iBAAkB,EAClBC,iBAAkB,EAClBC,UAAW,EACXC,SAAU,EACVC,SAAS,EACTC,eAAgB,EAChBC,eAAgB,EAChBC,sBAAuB,EACvBC,sBAAuB,EACvBC,uBAAwB,EACxBC,uBAAwB,EACxBC,aAAc,EACdC,qBAAsB,EACtBC,eAAgB,EAChBC,eAAgB,EAChBC,gBAAiB,EACjBC,gBAAiB,EACjBC,cAAe,EACfC,cAAe,EACfC,YAAa,EACbC,aAAc,EACdC,aAAc,EACdC,aAAc,EACdC,aAAc,EACdC,gBAAiB,EACjBC,oBAAqB,EACrBC,WAAY,EACZC,cAAc,EACdC,eAAgB,IAElBlkB,KAAK2L,QAAUlN,OAAO0lB,OAAOnkB,KAAKokB,eAAgBzY,GAClD3L,KAAKqkB,yBAA2BrkB,KAAKskB,4BACb,iBAAb3F,GACT3e,KAAKukB,gBAAkB5F,EACvB3e,KAAK2e,SAAWjC,MAAMkB,KAAKjR,SAAS4M,iBAAiBoF,KAErD3e,KAAK2e,cAAsC,IAApBA,EAAS1d,QAA0B0d,EAAS1d,OAAS,EAAIyb,MAAMkB,KAAKe,GAAY,CAACA,GAE1G3e,KAAKwkB,gBAAkB,GACvBxkB,KAAKykB,iBAAmBzkB,KAAK0kB,4BAC7B1kB,KAAK2kB,mBAA8C,IAA1B3kB,KAAKykB,iBAC9BzkB,KAAK4kB,oBAAsB5kB,KAAK6kB,KAG5B7kB,KAAK2L,QAAQwU,MACfngB,KAAK2e,SAAW3e,KAAK8kB,WAAW9kB,KAAK2L,QAAQwU,MAE3CngB,KAAK2L,QAAQ0V,aAAc,CAC7B,IAAI0D,EAAS,GACb/kB,KAAK2e,SAAWjC,MAAMkB,KAAK5d,KAAK2e,UAAUnR,QAAO,SAAUwX,GACzD,IAAIC,EAAMD,EAAQE,aAAatG,EAAMjT,QAAQqT,YAC7C,OAA6B,IAAzB+F,EAAO1gB,QAAQ4gB,KACjBF,EAAO5X,KAAK8X,IACL,MAKbjlB,KAAKmlB,iBACDnlB,KAAK2L,QAAQiU,OACf5f,KAAKolB,SAASC,QAAQC,YAAYtlB,KAAKolB,SAASG,aAE9CvlB,KAAK2L,QAAQuT,KACflf,KAAKolB,SAASC,QAAQC,YAAYtlB,KAAKolB,SAASI,YAE9CxlB,KAAK2L,QAAQ/B,SACf5J,KAAKolB,SAASC,QAAQC,YAAYtlB,KAAKolB,SAASxb,SAElD5J,KAAKylB,iBAAiBzlB,KAAK2e,SAAU,SAAW3e,KAAK0lB,gBAAgB,SAAUnlB,GAC7E,GAAIqe,EAAM+G,YAAYplB,EAAMsM,eAAgB,CAE1C,GADAtM,EAAMc,iBACFud,EAAMgH,YACR,OAAO,EAEThH,EAAMiH,kBAAoBjH,EAAMD,SAASta,QAAQ9D,EAAMsM,eACvD+R,EAAMkH,UAAUvlB,EAAMsM,mBAKtB7M,KAAK2L,QAAQsP,UACfjb,KAAKylB,iBAAiBzlB,KAAKolB,SAASC,QAAS,CAAC,SAAWrlB,KAAK0lB,eAAgB,cAAgB1lB,KAAK0lB,iBAAiB,SAAUnlB,GACxHqe,EAAMmH,QAAUxlB,EAAMkQ,SAAWlQ,EAAMsM,eACzC+R,EAAMgB,WAMR5f,KAAK2L,QAAQ8U,mBACfzgB,KAAKylB,iBAAiB9Y,SAASzC,KAAM,eAAiBlK,KAAK0lB,gBAAgB,SAAUnlB,GAC/EA,EAAMkQ,OAAOuV,cAAcnM,UAAUoM,SAAS,aAChD1lB,EAAMc,oBAMRrB,KAAK2L,QAAQuU,gBACflgB,KAAKylB,iBAAiB9Y,SAASzC,KAAM,SAAWlK,KAAK0lB,eAAgB1lB,KAAKkmB,UAAS,SAAU3lB,GAI3F,GAHAqe,EAAMuH,mBAAmBxE,UAAY,EAGjC/C,EAAMgH,aAA6B,WAAdrlB,EAAMjB,IAI7B,OAHAsf,EAAMwH,aAAaC,aAAa,MAAO,IACvCzH,EAAMgH,aAAc,OACpBhH,EAAMgB,QAGJhB,EAAMmH,SACRxlB,EAAMc,iBACY,WAAdd,EAAMjB,KACRsf,EAAMgB,SAEHhB,EAAMgH,aAAe,CAAC,YAAa,cAAcvhB,QAAQ9D,EAAMjB,MAAQ,GAC1Esf,EAAM0H,UAAwB,eAAd/lB,EAAMjB,IAAuB,GAAK,MAGrDU,KAAK2L,QAAQoV,mBAElB/gB,KAAKumB,YApNT,IAAsBzH,EAAa0H,EAAYC,EAuhD7C,OAvhDoB3H,EAsNPjE,GAtNoB2L,EAsNJ,CAAC,CAC5BlnB,IAAK,4BACLN,MAAO,WAGL,IAAI0nB,GAAkB,EACtB,IACE,IAAIC,EAAOloB,OAAOC,eAAe,GAAI,UAAW,CAC9CE,IAAK,WACH8nB,GAAkB,KAGtBvmB,OAAOslB,iBAAiB,cAAe,KAAMkB,GAC7CxmB,OAAOymB,oBAAoB,cAAe,KAAMD,GAChD,MAAOzmB,IACT,OAAOwmB,IAER,CACDpnB,IAAK,oBACLN,MAAO,SAA2B6nB,GAEhC,GAAI7mB,KAAK2L,QAAQ2T,gBAAgBwH,WAAW,KAAM,CAChD,IAAIC,EAAW/mB,KAAK2L,QAAQ2T,gBAAgBnH,QAAQ,MAAO,IAAI6O,YAC3DC,EAAUJ,EAAKK,mBACnB,SAAID,IAAWA,EAAQE,QAAQJ,KACtBE,EAGJ,GAAIjnB,KAAK2L,QAAQ2T,gBAAgBwH,WAAW,KAAM,CACvD,IAAIM,EAAYpnB,KAAK2L,QAAQ2T,gBAAgBnH,QAAQ,KAAM,IAAI6O,YAC/D,OAAOH,EAAKQ,cAAcD,GAE1B,OAAOP,EAAKQ,cAAcrnB,KAAK2L,QAAQ2T,mBAG1C,CACDhgB,IAAK,wBACLN,MAAO,SAA+B6nB,GACpC,IAAIS,EAAUT,EAAKS,QACjBhjB,EAAKuiB,EAAKviB,GACV+b,EAAYwG,EAAKxG,UACjBkH,EAAaV,EAAKU,WACpB,GAAgB,SAAZD,EAAoB,MAAO,OAC/B,IAAIE,EAAMF,EAEV,GADAE,GAAc,KAAPljB,EAAY,IAAIyD,OAAOzD,GAAM,GAChC+b,EAEF,IADA,IAAIoH,EAAUpH,EAAUnI,OAAOrQ,MAAM,MAC5B9J,EAAI,EAAGA,EAAI0pB,EAAQxmB,OAAQlD,IAClCypB,GAAO,IAAIzf,OAAO0f,EAAQ1pB,IAI9B,IADA,IAAI2pB,EAAa,EACRxnB,EAAI2mB,EAAM3mB,EAAEynB,uBAAwBznB,EAAIA,EAAEynB,uBACjDD,GAAc,EAGhB,OADAF,GAAO,cAAczf,OAAO2f,EAAY,KACjC,GAAG3f,OAAO/H,KAAK4nB,sBAAsBL,GAAa,OAAOxf,OAAOyf,KAExE,CACDloB,IAAK,iBACLN,MAAO,WAwBL,GAvBAgB,KAAKolB,SAASnG,QAAUtS,SAASkb,cAAc,OAC/C7nB,KAAKolB,SAASnG,QAAQpF,UAAUC,IAAI,cACpC9Z,KAAKolB,SAASnG,QAAQ6I,QAAQC,cAAgB/nB,KAAK2L,QAAQmP,eAC3D9a,KAAKolB,SAASG,YAAc5Y,SAASkb,cAAc,UACnD7nB,KAAKolB,SAASG,YAAY1L,UAAUC,IAAI,YACxC9Z,KAAKolB,SAASG,YAAYyC,UAAYhoB,KAAK2L,QAAQoP,UACnD/a,KAAKolB,SAASxb,QAAU+C,SAASkb,cAAc,OAC/C7nB,KAAKolB,SAASxb,QAAQiQ,UAAUC,IAAI,cACpC9Z,KAAKolB,SAASxb,QAAQoe,UAAY,cAClChoB,KAAKolB,SAASI,WAAa7Y,SAASkb,cAAc,OAClD7nB,KAAKolB,SAASI,WAAW3L,UAAUC,IAAI,iBACvC9Z,KAAKolB,SAASI,WAAWwC,UAAY,2BAA6BjgB,OAAO/H,KAAK2L,QAAQwT,QAAQ,GAAI,qCAAuCpX,OAAO/H,KAAK2L,QAAQwT,QAAQ,GAAI,aACzKnf,KAAKolB,SAAS6C,QAAUtb,SAASkb,cAAc,OAC/C7nB,KAAKolB,SAAS6C,QAAQpO,UAAUC,IAAI,cACpC9Z,KAAKolB,SAAS6C,QAAQD,UAAY,kEAClChoB,KAAKolB,SAAS5D,SAAW7U,SAASkb,cAAc,OAChD7nB,KAAKolB,SAAS5D,SAAS3H,UAAUC,IAAI,eACrC9Z,KAAKolB,SAAS8C,aAAevb,SAASkb,cAAc,KACpD7nB,KAAKolB,SAAS8C,aAAa7B,aAAa,WAAY,IACpDrmB,KAAKolB,SAAS8C,aAAaC,YAAcnoB,KAAK2L,QAAQ6V,SACtDxhB,KAAKolB,SAAS5D,SAAS8D,YAAYtlB,KAAKolB,SAAS8C,cACjDloB,KAAKolB,SAASgD,QAAUzb,SAASkb,cAAc,OAC/C7nB,KAAKolB,SAASgD,QAAQvO,UAAUC,IAAI,aAAc,OAAS9Z,KAAK2L,QAAQ8T,iBACpEzf,KAAK2L,QAAQ+T,aAAc,CAC7B,IAAI2I,EACAC,EAAiBtoB,KAAK2L,QAAQ+T,aAAa7X,MAAM,WACpDwgB,EAAwBroB,KAAKolB,SAASgD,QAAQvO,WAAWC,IAAIyO,MAAMF,EAAuB9K,EAAmB+K,IAEhHtoB,KAAKolB,SAAS9W,MAAQ3B,SAASkb,cAAc,OAC7C7nB,KAAKolB,SAAS9W,MAAMuL,UAAUC,IAAI,YAClC9Z,KAAKolB,SAASC,QAAU1Y,SAASkb,cAAc,OAC/C7nB,KAAKolB,SAASC,QAAQxL,UAAUC,IAAI,cACpC9Z,KAAKolB,SAASC,QAAQgB,aAAa,YAAa,GAChDrmB,KAAKolB,SAASC,QAAQgB,aAAa,OAAQ,UAC3CrmB,KAAKolB,SAASC,QAAQgB,aAAa,eAAe,GAC9CrmB,KAAK2L,QAAQ0U,WACfrgB,KAAKolB,SAASC,QAAQxL,UAAUC,IAAI9Z,KAAK2L,QAAQ0U,WAE/CrgB,KAAK2L,QAAQwV,KACfnhB,KAAKolB,SAASC,QAAQxL,UAAUC,IAAI,gBAGvC,CACDxa,IAAK,WACLN,MAAO,SAAkBwpB,EAAMC,GAC7B,IAAIC,EACJ,OAAO,WACAA,IACHF,EAAKD,MAAMvoB,KAAM2oB,WACjBD,GAAa,EACb5a,YAAW,WACT,OAAO4a,GAAa,IACnBD,OAIR,CACDnpB,IAAK,cACLN,MAAO,SAAqBgmB,GAC1B,OAAQhlB,KAAK2L,QAAQmU,SAAWkF,EAAQE,aAAallB,KAAK2L,QAAQqT,aAAe,IAAI4J,OAAO,IAAM5oB,KAAK2L,QAAQmU,QAAU,cAAe,KAAK5B,KAAK8G,EAAQE,aAAallB,KAAK2L,QAAQqT,eAErL,CACD1f,IAAK,4BACLN,MAAO,WACL,IAAIc,GAAK6M,SAASzC,MAAQyC,SAASkc,iBAAiBlO,MACpD,MAAO,eAAgB7a,EAAI,GAAK,qBAAsBA,EAAI,WAAa,kBAAmBA,EAAI,QAAU,gBAAiBA,GAAI,OAE9H,CACDR,IAAK,oBACLN,MAAO,WACL,IAAI8pB,EACAC,EAAYpc,SAASkb,cAAc,OAKvC,OAJAkB,EAAUlP,UAAUC,IAAI,wBACxBnN,SAASzC,KAAKob,YAAYyD,GAC1BD,EAAiBC,EAAUvO,YAAcuO,EAAUC,YACnDrc,SAASzC,KAAK+e,YAAYF,GACnBD,IAER,CACDxpB,IAAK,kBACLN,MAAO,SAAyBoX,GAC9B,IAAI0S,EAAiB,EACjBI,EAAgB,GAAGjL,MAAM/f,KAAKyO,SAAS4M,iBAAiB,IAAMvZ,KAAK2L,QAAQyV,aAC/E,GAAa,SAAThL,EAAiB,CACnB,IAAI+S,EAAkBhpB,OAAOwb,WAC7B,IAAKwN,EAAiB,CACpB,IAAIC,EAAsBzc,SAASkc,gBAAgBQ,wBACnDF,EAAkBC,EAAoBE,MAAQC,KAAKC,IAAIJ,EAAoBlS,MAE7E,GAAIvK,SAASzC,KAAK8e,YAAcG,GAAmBnpB,KAAKypB,cAAe,CACrE,IAAIC,EAAepmB,SAASnD,OAAOwpB,iBAAiBhd,SAASzC,MAAMwf,cAAgB,EAAG,IACtFZ,EAAiB9oB,KAAK4pB,oBACtBjd,SAASzC,KAAK4d,QAAQ+B,qBAAuBH,GACzCZ,EAAiB,GAAuB,GAAlBA,GAAuB9oB,KAAKypB,iBACpD9c,SAASzC,KAAK2P,UAAUC,IAAI,iBAC5BnN,SAASzC,KAAKyQ,MAAM+O,aAAeA,EAAeZ,EAAiB,KACnEI,EAActmB,SAAQ,SAAUoiB,GAC9B,IAAI8E,EAAgB9E,EAAQrK,MAAM+O,aAC9BK,EAAoB5pB,OAAOwpB,iBAAiB3E,GAAS,iBACzDA,EAAQ8C,QAAQ+B,qBAAuBC,EACvC9E,EAAQrK,MAAM+O,aAAe,GAAG3hB,OAAOiiB,WAAWD,GAAqBjB,EAAgB,gBAK7Fnc,SAASzC,KAAK2P,UAAUrP,OAAO,iBAC/BmC,SAASzC,KAAKyQ,MAAM+O,aAAe/c,SAASzC,KAAK4d,QAAQ+B,qBAAuB,KAChFX,EAActmB,SAAQ,SAAUoiB,GAC9B,IAAIiF,EAAUjF,EAAQ8C,QAAQ+B,0BACP,IAAZI,IACTjF,EAAQrK,MAAM+O,aAAeO,MAInC,OAAOnB,IAER,CACDxpB,IAAK,QACLN,MAAO,WACL,IAAIkrB,EAASlqB,KACb,IAAKA,KAAK+lB,QAAU/lB,KAAK4lB,aAAe5lB,KAAKmqB,UAC3C,OAAO,EAETnqB,KAAKmqB,WAAY,EACjB,IAAInF,EAAUhlB,KAAKwkB,gBAAgBxkB,KAAKoqB,mBA+BxC,IAAK,IAAI9qB,KA9BT0lB,EAAQqF,cAAc,IAAIC,MAAM,yBAC5BtqB,KAAK2L,QAAQmV,UACf9gB,KAAKuqB,mBAAoB,EACpBvqB,KAAKwqB,aACRxqB,KAAKyqB,aAGTzqB,KAAK4mB,oBAAoBja,SAAU,WAAa3M,KAAK0lB,gBACrD1lB,KAAK0qB,QAAQ1qB,KAAKolB,SAASnG,QAASjf,KAAK2L,QAAQuP,WACjDlb,KAAK0qB,QAAQ/d,SAAS4M,iBAAiB,iFAAkFvZ,KAAK2L,QAAQuP,WAAW,WAC3IgP,EAAOve,QAAQ+U,eACjBwJ,EAAOS,gBAAgB,QAErBT,EAAOve,QAAQuV,WAA0C,KAA7BgJ,EAAOve,QAAQuV,WAC7CvU,SAAS0a,cAAc,QAAQxN,UAAUrP,OAAO0f,EAAOve,QAAQuV,WAEjEvU,SAASzC,KAAK+e,YAAYiB,EAAO9E,SAASC,SACtC6E,EAAOve,QAAQsT,SACjBtS,SAASzC,KAAK+e,YAAYiB,EAAO9E,SAASnG,SAE5CiL,EAAO9E,SAASvE,eAAiB,KACjCqJ,EAAO9E,SAAS5D,SAAW,KAC3BwD,EAAQqF,cAAc,IAAIC,MAAM,0BAChCJ,EAAOC,WAAY,KAErBnqB,KAAKomB,aAAe,KACpBpmB,KAAK+lB,QAAS,EACd/lB,KAAK4lB,aAAc,EAGH5lB,KAAKmmB,mBACnBnmB,KAAKmmB,mBAAmB7mB,GAAO,EAEjCU,KAAKmmB,mBAAmBlE,WAAY,EACpCjiB,KAAKmmB,mBAAmBhE,QAAS,EACjCniB,KAAKmmB,mBAAmBzD,SAAU,EAClC1iB,KAAKmmB,mBAAmBlD,aAAejjB,KAAK4qB,OAAO,EAAG,EAAG5qB,KAAK2L,QAAQsV,SACtEjhB,KAAKmmB,mBAAmBlC,cAAe,IAExC,CACD3kB,IAAK,OACLV,IAAK,WACH,OAAOuB,OAAO4N,SAAS8W,KAAKgG,UAAU,KAEvC,CACDvrB,IAAK,UACLN,MAAO,WACL,IAAI8rB,EAAS9qB,KACT4G,EAAQ5G,KAAKoqB,kBACfnpB,EAASjB,KAAKwkB,gBAAgBvjB,OAC9Boc,EAAOzW,EAAQ,EAAI,EAAI3F,EAAS,EAAI2F,EAAQ,GAAK3F,EAAS,EAAI,EAAI2F,EAAQ,EAC1EmkB,EAAOnkB,EAAQ,EAAI,EAAI3F,EAAS,EAAI2F,EAAQ,GAAK3F,EAAS,EAAI,EAAI2F,EAAQ,EAC1EokB,EAAY,IAAIC,MAChBC,EAAY,IAAID,MAClBD,EAAUvF,iBAAiB,QAAQ,SAAUllB,GAC3C,IAAI0kB,EAAM1kB,EAAMkQ,OAAOyU,aAAa,QACM,IAAtC4F,EAAOK,aAAa9mB,QAAQ4gB,IAE9B6F,EAAOK,aAAahe,KAAK8X,GAE3B6F,EAAOtG,gBAAgB5d,GAAOyjB,cAAc,IAAIC,MAAM,mBAAqBQ,EAAOpF,oBAEpFsF,EAAU3E,aAAa,MAAOrmB,KAAKwkB,gBAAgBnH,GAAM6H,aAAallB,KAAK2L,QAAQqT,aACnFkM,EAAUzF,iBAAiB,QAAQ,SAAUllB,GAC3C,IAAI0kB,EAAM1kB,EAAMkQ,OAAOyU,aAAa,QACM,IAAtC4F,EAAOK,aAAa9mB,QAAQ4gB,IAC9B6F,EAAOK,aAAahe,KAAK8X,GAE3B6F,EAAOtG,gBAAgB5d,GAAOyjB,cAAc,IAAIC,MAAM,mBAAqBQ,EAAOpF,oBAEpFwF,EAAU7E,aAAa,MAAOrmB,KAAKwkB,gBAAgBuG,GAAM7F,aAAallB,KAAK2L,QAAQqT,eAEpF,CACD1f,IAAK,YACLN,MAAO,SAAmBosB,GACxB,IAAIC,EAASrrB,KACTsrB,EAAiBF,EACjBprB,KAAK2L,QAAQwV,MACfiK,GAAaA,GAEfprB,KAAKwkB,gBAAgBxkB,KAAKoqB,mBAAmBC,cAAc,IAAIC,MAAM,UAAYtqB,KAAK0lB,iBACtF1lB,KAAKwkB,gBAAgBxkB,KAAKoqB,mBAAmBC,cAAc,IAAIC,OAAqB,IAAdc,EAAkB,OAAS,QAAU,IAAMprB,KAAK0lB,iBACtH,IAAI6F,EAAWvrB,KAAKoqB,kBAAoBgB,EACxC,GAAIprB,KAAK4lB,cAAgB2F,EAAW,GAAKA,GAAYvrB,KAAKwkB,gBAAgBvjB,UAAiC,IAAtBjB,KAAK2L,QAAQwH,KAChG,OAAO,EAETnT,KAAKoqB,kBAAoBmB,EAAW,EAAIvrB,KAAKwkB,gBAAgBvjB,OAAS,EAAIsqB,EAAWvrB,KAAKwkB,gBAAgBvjB,OAAS,EAAI,EAAIsqB,EAC3HvrB,KAAKolB,SAAS6C,QAAQZ,cAAc,eAAeW,UAAYhoB,KAAKoqB,kBAAoB,EACpFpqB,KAAK2L,QAAQoU,gBACf/f,KAAKwrB,MAAMxrB,KAAK2L,QAAQqU,eAAiB,KAAO,IAAMsL,EAAiBtrB,KAAKmmB,mBAAmBxE,UAAY,MAE7G3hB,KAAK0qB,QAAQ1qB,KAAKolB,SAAS9W,MAAOtO,KAAK2L,QAAQuP,WAAW,WACxDmQ,EAAOzF,aAAc,EAChByF,EAAOlB,UAeVkB,EAAOzF,aAAc,EAdrB9X,YAAW,WACT,IAAIkX,EAAUqG,EAAO7G,gBAAgB6G,EAAOjB,mBACvCiB,EAAOjF,eACZiF,EAAOjF,aAAaC,aAAa,MAAOrB,EAAQE,aAAamG,EAAO1f,QAAQqT,cACU,IAAlFqM,EAAOF,aAAa9mB,QAAQ2gB,EAAQE,aAAamG,EAAO1f,QAAQqT,cAClEqM,EAAOjoB,KAAKioB,EAAOjG,SAASxb,SAE1ByhB,EAAOjG,SAAS9W,MAAM2X,SAASoF,EAAOjG,SAASgD,UACjDiD,EAAOjG,SAAS9W,MAAM2a,YAAYoC,EAAOjG,SAASgD,SAEpDiD,EAAOI,YAAYH,GACfD,EAAO1f,QAAQsU,YAAYoL,EAAOK,aACrC,UAMR,CACDpsB,IAAK,cACLN,MAAO,SAAqBosB,GAC1B,IAAIO,EAAS3rB,KACb,IAAKA,KAAKomB,aACR,OAAO,EAET,IAAIwF,EAAW,IAAIX,MACjBY,EAAc1rB,OAAOwb,WAAa3b,KAAK2L,QAAQ2U,WAC/CwL,EAAe3rB,OAAO4rB,YAAc/rB,KAAK2L,QAAQ4U,YACnDqL,EAASvF,aAAa,MAAOrmB,KAAKomB,aAAalB,aAAa,QAC5DllB,KAAKomB,aAAa0B,QAAQkE,MAAQ,EAClChsB,KAAKomB,aAAa0B,QAAQmE,WAAa,EACvCjsB,KAAKomB,aAAa0B,QAAQoE,WAAa,EACvClsB,KAAKmsB,eAAe,EAAG,EAAG,GAC1BP,EAASnG,iBAAiB,SAAS,SAAUllB,GAC3CorB,EAAOnH,gBAAgBmH,EAAOvB,mBAAmBC,cAAc,IAAIC,MAAM,SAAWqB,EAAOjG,iBAC3FiG,EAAO/F,aAAc,EACrB+F,EAAO5F,QAAS,EAChB4F,EAAOvG,SAASxb,QAAQ+Q,MAAMyR,QAAU,OACxC,IAAIC,EAA6B,IAAdjB,IAAkC,IAAfA,EACtC,GAAIO,EAAO9F,oBAAsB8F,EAAOvB,mBAAqBiC,EAC3D,OAAOV,EAAO/L,QAEZ+L,EAAOhgB,QAAQgV,YACjB2L,MAAMX,EAAOhgB,QAAQiV,mBAEvB+K,EAAOrF,UAAU+F,EAAejB,EAAY,MAE9CQ,EAASnG,iBAAiB,QAAQ,SAAUllB,QACjB,IAAd6qB,IACTO,EAAOnH,gBAAgBmH,EAAOvB,mBAAmBC,cAAc,IAAIC,MAAM,WAAaqB,EAAOjG,iBAC7FiG,EAAOnH,gBAAgBmH,EAAOvB,mBAAmBC,cAAc,IAAIC,OAAqB,IAAdc,EAAkB,WAAa,YAAc,IAAMO,EAAOjG,kBAIlIiG,EAAOhgB,QAAQmV,SACjB6K,EAAOY,aAEqE,IAA1EZ,EAAOR,aAAa9mB,QAAQsnB,EAAOvF,aAAalB,aAAa,SAC/DyG,EAAOR,aAAahe,KAAKwe,EAAOvF,aAAalB,aAAa,QAE5D,IAqBIsH,EAAkBC,EArBlBC,EAAansB,EAAMkQ,OAAOyD,MAC5ByY,EAAcpsB,EAAMkQ,OAAOkC,OAC7B,GAAIgZ,EAAOhgB,QAAQ6U,mBAAqBkM,EAAab,GAAec,EAAcb,EAAc,CAC9F,IAAIc,EAAQF,EAAaC,EAAcd,EAAcC,EAAeY,EAAab,EAAcc,EAAcb,EAC7GY,GAAcE,EACdD,GAAeC,EAEjBjB,EAAOvG,SAAS9W,MAAMqM,MAAM5H,KAAO5S,OAAO4rB,YAAcY,GAAe,EAAI,KAC3EhB,EAAOvG,SAAS9W,MAAMqM,MAAMzD,MAAQ/W,OAAOwb,WAAa+Q,EAAaf,EAAOkB,sBAAwB,EAAI,KACxGlB,EAAOvG,SAAS9W,MAAMqM,MAAMzG,MAAQwY,EAAa,KACjDf,EAAOvG,SAAS9W,MAAMqM,MAAMhI,OAASga,EAAc,KACnDhB,EAAOvG,SAASxb,QAAQ+Q,MAAMyR,QAAU,OACpCT,EAAOhgB,QAAQvK,OACjBuqB,EAAOmB,aAETnB,EAAOoB,OAAOpB,EAAOvF,aAAcuF,EAAOhgB,QAAQuP,WAAW,WACvDyQ,EAAOhgB,QAAQvK,OACjBuqB,EAAOvG,SAASC,QAAQjkB,WAG5BuqB,EAAO5F,QAAS,EAE8B,iBAAnC4F,EAAOhgB,QAAQ2T,gBACxBkN,EAAsD,SAAnCb,EAAOhgB,QAAQ2T,gBAA6BqM,EAAOnH,gBAAgBmH,EAAOvB,mBAAqBuB,EAAOqB,kBAAkBrB,EAAOnH,gBAAgBmH,EAAOvB,oBACtH,mBAAnCuB,EAAOhgB,QAAQ2T,kBAC/BkN,EAAmBb,EAAOhgB,QAAQ2T,gBAAgBqM,EAAOnH,gBAAgBmH,EAAOvB,qBAE9EuB,EAAOhgB,QAAQyT,UAAYoN,IAE3BC,EADiC,SAA/Bd,EAAOhgB,QAAQ4T,YACHiN,EAAiB1E,QAAQ6D,EAAOhgB,QAAQ6T,cACd,SAA/BmM,EAAOhgB,QAAQ4T,YACViN,EAAiBxE,UAEjBwE,EAAiBtH,aAAayG,EAAOhgB,QAAQ6T,eAG1DmM,EAAOhgB,QAAQwH,KAcoB,IAAlCwY,EAAOnH,gBAAgBvjB,OACzB0qB,EAAOxoB,KAAKwoB,EAAOvG,SAASI,WAAWjM,iBAAiB,uBAExDoS,EAAOvoB,KAAKuoB,EAAOvG,SAASI,WAAWjM,iBAAiB,wBAhBzB,IAA7BoS,EAAOvB,mBACTuB,EAAOxoB,KAAKwoB,EAAOvG,SAASI,WAAW6B,cAAc,aAEnDsE,EAAOvB,mBAAqBuB,EAAOnH,gBAAgBvjB,OAAS,GAC9D0qB,EAAOxoB,KAAKwoB,EAAOvG,SAASI,WAAW6B,cAAc,aAEnDsE,EAAOvB,kBAAoB,GAC7BuB,EAAOvoB,KAAKuoB,EAAOvG,SAASI,WAAW6B,cAAc,aAEnDsE,EAAOvB,kBAAoBuB,EAAOnH,gBAAgBvjB,OAAS,GAC7D0qB,EAAOvoB,KAAKuoB,EAAOvG,SAASI,WAAW6B,cAAc,cASvC,IAAd+D,IAAkC,IAAfA,GACjBO,EAAOhgB,QAAQoU,iBACjB4L,EAAOH,MAAM,EAAG,IAAMJ,EAAY,MAClCtd,YAAW,WACT6d,EAAOH,MAAMG,EAAOhgB,QAAQqU,eAAiB,IAAM,SAClD,KAEL2L,EAAOoB,OAAOpB,EAAOvG,SAAS9W,MAAOqd,EAAOhgB,QAAQuP,WAAW,WAC7DyQ,EAAO/F,aAAc,EACrB+F,EAAOsB,WAAWR,EAAaC,QAGjCf,EAAO/F,aAAc,EACrB+F,EAAOsB,WAAWR,EAAaC,IAE7Bf,EAAOhgB,QAAQkV,iBAAmB8K,EAAOvG,SAASvE,iBACpD8K,EAAOvG,SAASvE,eAAiBlU,SAASkb,cAAc,OACxD8D,EAAOvG,SAASvE,eAAehH,UAAUC,IAAI,sBAC7C6R,EAAOvG,SAASvE,eAAemH,UAAY2D,EAAOhgB,QAAQkV,eAC1D8K,EAAOvG,SAAS9W,MAAMgX,YAAYqG,EAAOvG,SAASvE,iBAEhD8K,EAAOhgB,QAAQ6V,UACjBmK,EAAOvG,SAAS8C,aAAa7B,aAAa,OAAQsF,EAAOvF,aAAalB,aAAa,aAIxF,CACD5lB,IAAK,iBACLN,MAAO,SAAwBukB,EAAeC,EAAeC,GAC3DzjB,KAAKomB,aAAazL,MAAM3a,KAAKykB,iBAAmB,aAAe,aAAelB,EAAgB,IAAMC,EAAgB,WAAaC,EAAc,MAEhJ,CACDnkB,IAAK,SACLN,MAAO,SAAgBA,EAAOkuB,EAAKC,GACjC,OAAOnuB,EAAQkuB,EAAMA,EAAMluB,EAAQmuB,EAAMA,EAAMnuB,IAEhD,CACDM,IAAK,cACLN,MAAO,SAAqBikB,EAAcM,EAAeC,GACvDxjB,KAAKomB,aAAa0B,QAAQkE,MAAQ/I,EAClCjjB,KAAKomB,aAAa0B,QAAQmE,WAAa1I,EACvCvjB,KAAKomB,aAAa0B,QAAQoE,WAAa1I,IAExC,CACDlkB,IAAK,oBACLN,MAAO,WACDgB,KAAK+lB,QAAU/lB,KAAK6kB,OAAS7kB,KAAK4kB,sBACpC5kB,KAAKwqB,aAAc,EACnBxqB,KAAK4f,WAGR,CACDtgB,IAAK,YACLN,MAAO,WACL,IAAIouB,EAASptB,KA0Bb,GAxBAA,KAAKylB,iBAAiBtlB,OAAQ,UAAYH,KAAK0lB,gBAAgB,SAAUnlB,GAEnE6sB,EAAOrH,QACTqH,EAAO3B,iBAGXzrB,KAAKylB,iBAAiBzlB,KAAKolB,SAASG,YAAa,CAAC,SAAWvlB,KAAK0lB,eAAgB,cAAgB1lB,KAAK0lB,gBAAiB1lB,KAAK4f,MAAMrgB,KAAKS,OACpIA,KAAK2L,QAAQmV,SACfhT,YAAW,WACTsf,EAAO3H,iBAAiBtlB,OAAQ,cAAgBitB,EAAO1H,gBAAgB,SAAUnlB,GAC3E6sB,EAAOrH,QACTqH,EAAOC,yBAGV,IAELrtB,KAAKylB,iBAAiBzlB,KAAKolB,SAASI,WAAW8H,qBAAqB,UAAW,SAAWttB,KAAK0lB,gBAAgB,SAAUnlB,GACvH,IAAKA,EAAMsM,cAAcya,QAAQiG,MAAM,WACrC,OAAO,EAEThtB,EAAMc,iBACN+rB,EAAOjH,mBAAmBxE,UAAY,EACtCyL,EAAO9G,UAAU/lB,EAAMsM,cAAcgN,UAAUoM,SAAS,WAAa,GAAK,MAExEjmB,KAAK2L,QAAQ2V,WAAY,CAC3B,IAAI0K,EAAQ,EACZhsB,KAAKylB,iBAAiBzlB,KAAKolB,SAAS9W,MAAO,CAAC,aAAc,mBAAmB,SAAU/N,GACrF,GAAI6sB,EAAOjH,mBAAmBlE,WAAamL,EAAOxH,aAAewH,EAAOjD,YAAciD,EAAOrH,OAC3F,OAAO,EAEwC,GAA7CqH,EAAOjH,mBAAmB/D,kBAC5BgL,EAAOjH,mBAAmB/D,gBAAkBgL,EAAOI,cAAcJ,EAAOhI,SAAS9W,OAAOqE,OACxFya,EAAOjH,mBAAmB9D,eAAiB+K,EAAOI,cAAcJ,EAAOhI,SAAS9W,OAAO4F,MACvFkZ,EAAOjH,mBAAmB3D,UAAY4K,EAAOI,cAAcJ,EAAOhH,cAAczT,OAChFya,EAAOjH,mBAAmB1D,SAAW2K,EAAOI,cAAcJ,EAAOhH,cAAclS,MAC/EkZ,EAAOjH,mBAAmB7D,iBAAmB8K,EAAOhI,SAAS9W,MAAMmf,WACnEL,EAAOjH,mBAAmB5D,iBAAmB6K,EAAOhI,SAAS9W,MAAMof,UACnEN,EAAOjH,mBAAmBxD,eAAiBqH,WAAWoD,EAAOhH,aAAa0B,QAAQmE,YAClFmB,EAAOjH,mBAAmBvD,eAAiBoH,WAAWoD,EAAOhH,aAAa0B,QAAQoE,aAIpF,IAAIyB,EAAQptB,EAAMotB,OAASptB,EAAMqtB,gBACnBC,IAAVF,IAEFA,EAAQptB,EAAMutB,QAEhBH,EAAQpE,KAAK4D,KAAK,EAAG5D,KAAK2D,IAAI,EAAGS,IAGjC3B,GAAS2B,EAAQP,EAAOzhB,QAAQ4V,iBAAmByK,EACnDA,EAAQzC,KAAK4D,IAAI,EAAG5D,KAAK2D,IAAIE,EAAOzhB,QAAQsV,QAAS+K,IACrDoB,EAAOjH,mBAAmB1C,YAAcuI,EACxC,IAAI+B,EAAephB,SAASkc,gBAAgB5V,WAAatG,SAASzC,KAAK+I,UACvEma,EAAOjH,mBAAmBzC,aAAenjB,EAAM+Z,MAC/C8S,EAAOjH,mBAAmBxC,aAAepjB,EAAMytB,MAAQD,GAAgB,EAEvEX,EAAOjH,mBAAmBvC,cAAgBwJ,EAAOjH,mBAAmB1D,SAAW2K,EAAOjH,mBAAmB1C,YAAc2J,EAAOjH,mBAAmB9D,gBAAkB,EACnK+K,EAAOjH,mBAAmBtC,cAAgBuJ,EAAOjH,mBAAmB3D,UAAY4K,EAAOjH,mBAAmB1C,YAAc2J,EAAOjH,mBAAmB/D,iBAAmB,EACrKgL,EAAOjH,mBAAmBrC,gBAAkBsJ,EAAOjH,mBAAmB1C,YAAc2J,EAAOjH,mBAAmBlD,aAC9GmK,EAAOjH,mBAAmB5C,cAAgB6J,EAAOjH,mBAAmB1D,SAAW2K,EAAOjH,mBAAmB1C,aAAe2J,EAAOjH,mBAAmB9D,eAAiB,EAAI+K,EAAOxC,OAAOwC,EAAOjH,mBAAmBxD,gBAAkByK,EAAOjH,mBAAmBzC,aAAe0J,EAAOjH,mBAAmB7D,iBAAmB8K,EAAOjH,mBAAmB9D,eAAiB,EAAI+K,EAAOjH,mBAAmBxD,iBAAmByK,EAAOjH,mBAAmB1C,YAAc2J,EAAOjH,mBAAmBrC,iBAAmBsJ,EAAOjH,mBAAmBrC,iBAA2D,EAA1CsJ,EAAOjH,mBAAmBvC,aAAmBwJ,EAAOjH,mBAAmBvC,cAC1lBwJ,EAAOjH,mBAAmB3C,cAAgB4J,EAAOjH,mBAAmB3D,UAAY4K,EAAOjH,mBAAmB1C,aAAe2J,EAAOjH,mBAAmB/D,gBAAkB,EAAIgL,EAAOxC,OAAOwC,EAAOjH,mBAAmBvD,gBAAkBwK,EAAOjH,mBAAmBxC,aAAeyJ,EAAOjH,mBAAmB5D,iBAAmB6K,EAAOjH,mBAAmB/D,gBAAkB,EAAIgL,EAAOjH,mBAAmBvD,iBAAmBwK,EAAOjH,mBAAmB1C,YAAc2J,EAAOjH,mBAAmBrC,iBAAmBsJ,EAAOjH,mBAAmBrC,iBAA2D,EAA1CsJ,EAAOjH,mBAAmBtC,aAAmBuJ,EAAOjH,mBAAmBtC,cAC7lBuJ,EAAOjB,eAAeiB,EAAOjH,mBAAmB5C,cAAgB,KAAM6J,EAAOjH,mBAAmB3C,cAAgB,KAAM4J,EAAOjH,mBAAmB1C,aAC5I2J,EAAOjH,mBAAmB1C,YAAc,GAC1C2J,EAAOjH,mBAAmBhE,QAAS,IAC7BiL,EAAOhI,SAASgD,QAAQzN,MAAMsT,SAAWb,EAAOhI,SAASgD,QAAQzN,MAAMsT,QAAU,IAAgD,SAA1Cb,EAAOhI,SAASgD,QAAQzN,MAAMyR,SACzHgB,EAAO1C,QAAQ0C,EAAOhI,SAASgD,QAASgF,EAAOzhB,QAAQuP,aAGV,IAA3CkS,EAAOjH,mBAAmBlD,eAC5BmK,EAAOjH,mBAAmBhE,QAAS,EACW,SAA1CiL,EAAOhI,SAASgD,QAAQzN,MAAMyR,SAChCgB,EAAOL,OAAOK,EAAOhI,SAASgD,QAASgF,EAAOzhB,QAAQuP,YAG1DkS,EAAOjH,mBAAmBjD,qBAAuB,KACjDkK,EAAOjH,mBAAmBzD,SAAU,GAEtC0K,EAAOjH,mBAAmBjD,qBAAuBkK,EAAOjH,mBAAmBpC,oBAC3EqJ,EAAOjH,mBAAmBlD,aAAemK,EAAOjH,mBAAmB1C,YACnE2J,EAAOjH,mBAAmBxD,eAAiByK,EAAOjH,mBAAmB5C,cACrE6J,EAAOjH,mBAAmBvD,eAAiBwK,EAAOjH,mBAAmB3C,cACrE4J,EAAOc,YAAYd,EAAOjH,mBAAmB1C,YAAa2J,EAAOjH,mBAAmB5C,cAAe6J,EAAOjH,mBAAmB3C,eAC7H4J,EAAOjB,eAAeiB,EAAOjH,mBAAmB5C,cAAgB,KAAM6J,EAAOjH,mBAAmB3C,cAAgB,KAAM4J,EAAOjH,mBAAmB1C,gBAGpJzjB,KAAKylB,iBAAiBzlB,KAAKolB,SAAS9W,MAAO,CAAC,cAAgBtO,KAAK0lB,eAAgB,aAAe1lB,KAAK0lB,iBAAiB,SAAUnlB,GAC9H,GAA6B,MAAzBA,EAAMkQ,OAAO6W,SAAkC,eAAf/mB,EAAM6V,KACxC,OAAO,EAET,GAAmB,cAAf7V,EAAM6V,KACR7V,EAAMc,iBACN+rB,EAAOjH,mBAAmBtD,sBAAwBtiB,EAAM4tB,QACxDf,EAAOjH,mBAAmBrD,sBAAwBviB,EAAM6tB,QACxDhB,EAAOjH,mBAAmB/D,gBAAkBgL,EAAOI,cAAcJ,EAAOhI,SAAS9W,OAAOqE,OACxFya,EAAOjH,mBAAmB9D,eAAiB+K,EAAOI,cAAcJ,EAAOhI,SAAS9W,OAAO4F,MACvFkZ,EAAOjH,mBAAmB3D,UAAY4K,EAAOI,cAAcJ,EAAOhH,cAAczT,OAChFya,EAAOjH,mBAAmB1D,SAAW2K,EAAOI,cAAcJ,EAAOhH,cAAclS,MAC/EkZ,EAAOjH,mBAAmB7D,iBAAmB8K,EAAOhI,SAAS9W,MAAMmf,WACnEL,EAAOjH,mBAAmB5D,iBAAmB6K,EAAOhI,SAAS9W,MAAMof,UACnEN,EAAOjH,mBAAmBxD,eAAiBqH,WAAWoD,EAAOhH,aAAa0B,QAAQmE,YAClFmB,EAAOjH,mBAAmBvD,eAAiBoH,WAAWoD,EAAOhH,aAAa0B,QAAQoE,YAClFkB,EAAOjH,mBAAmBzD,SAAU,MAC/B,CAUL,GATA0K,EAAOjH,mBAAmBnC,WAAazjB,EAAM8Z,QAAQpZ,OACrDmsB,EAAOjH,mBAAmBtD,sBAAwBtiB,EAAM8Z,QAAQ,GAAG8T,QACnEf,EAAOjH,mBAAmBrD,sBAAwBviB,EAAM8Z,QAAQ,GAAG+T,QACnEhB,EAAOjH,mBAAmB/D,gBAAkBgL,EAAOI,cAAcJ,EAAOhI,SAAS9W,OAAOqE,OACxFya,EAAOjH,mBAAmB9D,eAAiB+K,EAAOI,cAAcJ,EAAOhI,SAAS9W,OAAO4F,MACvFkZ,EAAOjH,mBAAmB3D,UAAY4K,EAAOI,cAAcJ,EAAOhH,cAAczT,OAChFya,EAAOjH,mBAAmB1D,SAAW2K,EAAOI,cAAcJ,EAAOhH,cAAclS,MAC/EkZ,EAAOjH,mBAAmB7D,iBAAmB8K,EAAOhI,SAAS9W,MAAMmf,WACnEL,EAAOjH,mBAAmB5D,iBAAmB6K,EAAOhI,SAAS9W,MAAMof,UACtB,IAAzCN,EAAOjH,mBAAmBnC,WAAoC,CAC9D,GAAKoJ,EAAOjH,mBAAmBlC,aA0B7B,OApBAmJ,EAAOhH,aAAavM,UAAUC,IAAI,iBAC7BsT,EAAOjH,mBAAmBhE,QAS7BiL,EAAOjH,mBAAmBlD,aAAe,EACzCmK,EAAOc,YAAYd,EAAOjH,mBAAmBlD,aAAc,EAAG,GAC9DmK,EAAOjB,eAAe,MAAU,MAAUiB,EAAOjH,mBAAmBlD,cACpEmK,EAAOjH,mBAAmBhE,QAAS,IAXnCiL,EAAOjH,mBAAmBlD,aAAemK,EAAOzhB,QAAQqV,cACxDoM,EAAOc,YAAYd,EAAOjH,mBAAmBlD,aAAc,EAAG,GAC9DmK,EAAOjB,eAAe,MAAU,MAAUiB,EAAOjH,mBAAmBlD,gBAC9DmK,EAAOhI,SAASgD,QAAQzN,MAAMsT,SAAWb,EAAOhI,SAASgD,QAAQzN,MAAMsT,QAAU,IAAgD,SAA1Cb,EAAOhI,SAASgD,QAAQzN,MAAMyR,SACzHgB,EAAO1C,QAAQ0C,EAAOhI,SAASgD,QAASgF,EAAOzhB,QAAQuP,WAEzDkS,EAAOjH,mBAAmBhE,QAAS,GAOrCrU,YAAW,WACLsf,EAAOhH,cACTgH,EAAOhH,aAAavM,UAAUrP,OAAO,mBAEtC,MACI,EAzBP4iB,EAAOjH,mBAAmBlC,cAAe,EACzCnW,YAAW,WACTsf,EAAOjH,mBAAmBlC,cAAe,IACxC,KAwBLmJ,EAAOjH,mBAAmBxD,eAAiBqH,WAAWoD,EAAOhH,aAAa0B,QAAQmE,YAClFmB,EAAOjH,mBAAmBvD,eAAiBoH,WAAWoD,EAAOhH,aAAa0B,QAAQoE,iBAChC,IAAzCkB,EAAOjH,mBAAmBnC,aACnCoJ,EAAOjH,mBAAmBpD,uBAAyBxiB,EAAM8Z,QAAQ,GAAG8T,QACpEf,EAAOjH,mBAAmBnD,uBAAyBziB,EAAM8Z,QAAQ,GAAG+T,QACpEhB,EAAOjH,mBAAmBxD,eAAiBqH,WAAWoD,EAAOhH,aAAa0B,QAAQmE,YAClFmB,EAAOjH,mBAAmBvD,eAAiBoH,WAAWoD,EAAOhH,aAAa0B,QAAQoE,YAClFkB,EAAOjH,mBAAmBzC,cAAgB0J,EAAOjH,mBAAmBtD,sBAAwBuK,EAAOjH,mBAAmBpD,wBAA0B,EAChJqK,EAAOjH,mBAAmBxC,cAAgByJ,EAAOjH,mBAAmBrD,sBAAwBsK,EAAOjH,mBAAmBnD,wBAA0B,EAChJoK,EAAOjH,mBAAmBjD,qBAAuBqG,KAAK8E,MAAMjB,EAAOjH,mBAAmBtD,sBAAwBuK,EAAOjH,mBAAmBpD,yBAA2BqK,EAAOjH,mBAAmBtD,sBAAwBuK,EAAOjH,mBAAmBpD,yBAA2BqK,EAAOjH,mBAAmBrD,sBAAwBsK,EAAOjH,mBAAmBnD,yBAA2BoK,EAAOjH,mBAAmBrD,sBAAwBsK,EAAOjH,mBAAmBnD,0BAEjcoK,EAAOjH,mBAAmBzD,SAAU,EAEtC,QAAI0K,EAAOjH,mBAAmBlE,YAC1BmL,EAAOzI,oBACTyI,EAAOjH,mBAAmBjE,UAAY5e,SAAS8pB,EAAOhI,SAAS9W,MAAMqM,MAAMzD,KAAM,KAEnFkW,EAAOjH,mBAAmBlE,WAAY,EACtCmL,EAAOjH,mBAAmBxE,UAAY,EACtCyL,EAAOjH,mBAAmBvE,WAAa,EACvCwL,EAAOjH,mBAAmBtE,WAAathB,EAAM+Z,OAAS/Z,EAAM8Z,QAAQ,GAAGC,MACvE8S,EAAOjH,mBAAmBpE,YAAcxhB,EAAMytB,OAASztB,EAAM8Z,QAAQ,GAAG2T,OACjE,MAEThuB,KAAKylB,iBAAiBzlB,KAAKolB,SAAS9W,MAAO,CAAC,aAAetO,KAAK0lB,eAAgB,aAAe1lB,KAAK0lB,eAAgB,kBAAkB,SAAUnlB,GAC9I,IAAK6sB,EAAOjH,mBAAmBlE,UAC7B,OAAO,EAET,GAAmB,cAAf1hB,EAAM6V,KAAsB,CAC9B,IAA0C,IAAtCgX,EAAOjH,mBAAmBzD,QAC5B,OAAO,EAET0K,EAAOjH,mBAAmBhD,eAAiB5iB,EAAM8Z,QAAQ,GAAG8T,QAC5Df,EAAOjH,mBAAmB/C,eAAiB7iB,EAAM8Z,QAAQ,GAAG+T,QAC5DhB,EAAOjH,mBAAmBnC,WAAazjB,EAAM8Z,QAAQpZ,OACrDmsB,EAAOjH,mBAAmBjC,iBACtBkJ,EAAOjH,mBAAmBnC,WAAa,GACvCoJ,EAAOjH,mBAAmB9C,gBAAkB9iB,EAAM8Z,QAAQ,GAAG8T,QAC7Df,EAAOjH,mBAAmB7C,gBAAkB/iB,EAAM8Z,QAAQ,GAAG+T,QAC7DhB,EAAOjH,mBAAmBpC,oBAAsBwF,KAAK8E,MAAMjB,EAAOjH,mBAAmBhD,eAAiBiK,EAAOjH,mBAAmB9C,kBAAoB+J,EAAOjH,mBAAmBhD,eAAiBiK,EAAOjH,mBAAmB9C,kBAAoB+J,EAAOjH,mBAAmB/C,eAAiBgK,EAAOjH,mBAAmB7C,kBAAoB8J,EAAOjH,mBAAmB/C,eAAiBgK,EAAOjH,mBAAmB7C,kBACpV,OAAnD8J,EAAOjH,mBAAmBjD,uBAC5BkK,EAAOjH,mBAAmBjD,qBAAuBkK,EAAOjH,mBAAmBpC,qBAEzEwF,KAAKC,IAAI4D,EAAOjH,mBAAmBjD,qBAAuBkK,EAAOjH,mBAAmBpC,sBAAwB,IAE9GqJ,EAAOjH,mBAAmB1C,YAAc2J,EAAOxC,OAAOwC,EAAOjH,mBAAmBpC,oBAAsBqJ,EAAOjH,mBAAmBjD,qBAAuBkK,EAAOjH,mBAAmBlD,aAAc,EAAGmK,EAAOzhB,QAAQsV,SACjNmM,EAAOjH,mBAAmBvC,cAAgBwJ,EAAOjH,mBAAmB1D,SAAW2K,EAAOjH,mBAAmB1C,YAAc2J,EAAOjH,mBAAmB9D,gBAAkB,EACnK+K,EAAOjH,mBAAmBtC,cAAgBuJ,EAAOjH,mBAAmB3D,UAAY4K,EAAOjH,mBAAmB1C,YAAc2J,EAAOjH,mBAAmB/D,iBAAmB,EACrKgL,EAAOjH,mBAAmBrC,gBAAkBsJ,EAAOjH,mBAAmB1C,YAAc2J,EAAOjH,mBAAmBlD,aAC9GmK,EAAOjH,mBAAmB5C,cAAgB6J,EAAOjH,mBAAmB1D,SAAW2K,EAAOjH,mBAAmB1C,aAAe2J,EAAOjH,mBAAmB9D,eAAiB,EAAI+K,EAAOxC,OAAOwC,EAAOjH,mBAAmBxD,gBAAkByK,EAAOjH,mBAAmBzC,aAAe0J,EAAOjH,mBAAmB7D,iBAAmB8K,EAAOjH,mBAAmB9D,eAAiB,EAAI+K,EAAOjH,mBAAmBxD,iBAAmByK,EAAOjH,mBAAmB1C,YAAc2J,EAAOjH,mBAAmBrC,iBAAmBsJ,EAAOjH,mBAAmBrC,iBAA2D,EAA1CsJ,EAAOjH,mBAAmBvC,aAAmBwJ,EAAOjH,mBAAmBvC,cAC1lBwJ,EAAOjH,mBAAmB3C,cAAgB4J,EAAOjH,mBAAmB3D,UAAY4K,EAAOjH,mBAAmB1C,aAAe2J,EAAOjH,mBAAmB/D,gBAAkB,EAAIgL,EAAOxC,OAAOwC,EAAOjH,mBAAmBvD,gBAAkBwK,EAAOjH,mBAAmBxC,aAAeyJ,EAAOjH,mBAAmB5D,iBAAmB6K,EAAOjH,mBAAmB/D,gBAAkB,EAAIgL,EAAOjH,mBAAmBvD,iBAAmBwK,EAAOjH,mBAAmB1C,YAAc2J,EAAOjH,mBAAmBrC,iBAAmBsJ,EAAOjH,mBAAmBrC,iBAA2D,EAA1CsJ,EAAOjH,mBAAmBtC,aAAmBuJ,EAAOjH,mBAAmBtC,cAC7lBuJ,EAAOjB,eAAeiB,EAAOjH,mBAAmB5C,cAAgB,KAAM6J,EAAOjH,mBAAmB3C,cAAgB,KAAM4J,EAAOjH,mBAAmB1C,aAC5I2J,EAAOjH,mBAAmB1C,YAAc,IAC1C2J,EAAOjH,mBAAmBhE,QAAS,IAC7BiL,EAAOhI,SAASgD,QAAQzN,MAAMsT,SAAWb,EAAOhI,SAASgD,QAAQzN,MAAMsT,QAAU,IAAgD,SAA1Cb,EAAOhI,SAASgD,QAAQzN,MAAMyR,SACzHgB,EAAO1C,QAAQ0C,EAAOhI,SAASgD,QAASgF,EAAOzhB,QAAQuP,YAG3DkS,EAAOjH,mBAAmBjD,qBAAuBkK,EAAOjH,mBAAmBpC,oBAC3EqJ,EAAOjH,mBAAmBlD,aAAemK,EAAOjH,mBAAmB1C,YACnE2J,EAAOjH,mBAAmBxD,eAAiByK,EAAOjH,mBAAmB5C,cACrE6J,EAAOjH,mBAAmBvD,eAAiBwK,EAAOjH,mBAAmB3C,iBAGzE4J,EAAOjH,mBAAmB1C,YAAc2J,EAAOjH,mBAAmBlD,aAClEmK,EAAOjH,mBAAmBvC,cAAgBwJ,EAAOjH,mBAAmB1D,SAAW2K,EAAOjH,mBAAmB1C,YAAc2J,EAAOjH,mBAAmB9D,gBAAkB,EACnK+K,EAAOjH,mBAAmBtC,cAAgBuJ,EAAOjH,mBAAmB3D,UAAY4K,EAAOjH,mBAAmB1C,YAAc2J,EAAOjH,mBAAmB/D,iBAAmB,EACrKgL,EAAOjH,mBAAmB5C,cAAgB6J,EAAOjH,mBAAmB1D,SAAW2K,EAAOjH,mBAAmB1C,aAAe2J,EAAOjH,mBAAmB9D,eAAiB,EAAI+K,EAAOxC,OAAOwC,EAAOjH,mBAAmBhD,gBAAkBiK,EAAOjH,mBAAmBtD,sBAAwBuK,EAAOjH,mBAAmBxD,iBAA2D,EAA1CyK,EAAOjH,mBAAmBvC,aAAmBwJ,EAAOjH,mBAAmBvC,cACrYwJ,EAAOjH,mBAAmB3C,cAAgB4J,EAAOjH,mBAAmB3D,UAAY4K,EAAOjH,mBAAmB1C,aAAe2J,EAAOjH,mBAAmB/D,gBAAkB,EAAIgL,EAAOxC,OAAOwC,EAAOjH,mBAAmB/C,gBAAkBgK,EAAOjH,mBAAmBrD,sBAAwBsK,EAAOjH,mBAAmBvD,iBAA2D,EAA1CwK,EAAOjH,mBAAmBtC,aAAmBuJ,EAAOjH,mBAAmBtC,cACnY0F,KAAKC,IAAI4D,EAAOjH,mBAAmB5C,iBAAmBgG,KAAKC,IAAI4D,EAAOjH,mBAAmBvC,gBAC3FwJ,EAAOjH,mBAAmBxD,eAAiByK,EAAOjH,mBAAmB5C,cACrE6J,EAAOjH,mBAAmBtD,sBAAwBuK,EAAOjH,mBAAmBhD,gBAE1EoG,KAAKC,IAAI4D,EAAOjH,mBAAmB3C,iBAAmB+F,KAAKC,IAAI4D,EAAOjH,mBAAmBtC,gBAC3FuJ,EAAOjH,mBAAmBvD,eAAiBwK,EAAOjH,mBAAmB3C,cACrE4J,EAAOjH,mBAAmBrD,sBAAwBsK,EAAOjH,mBAAmB/C,gBAE9EgK,EAAOc,YAAYd,EAAOjH,mBAAmBlD,aAAcmK,EAAOjH,mBAAmB5C,cAAe6J,EAAOjH,mBAAmB3C,eAC9H4J,EAAOjB,eAAeiB,EAAOjH,mBAAmB5C,cAAgB,KAAM6J,EAAOjH,mBAAmB3C,cAAgB,KAAM4J,EAAOjH,mBAAmB1C,cAKpJ,GAAmB,cAAfljB,EAAM6V,MAAwBgX,EAAOjH,mBAAmBlE,UAAW,CACrE,GAAkB,aAAd1hB,EAAM6V,KAAqB,OAAO,EAEtC,GADA7V,EAAMc,kBACoC,IAAtC+rB,EAAOjH,mBAAmBzD,QAAmB,OAAO,EACxD0K,EAAOjH,mBAAmBhD,eAAiB5iB,EAAM4tB,QACjDf,EAAOjH,mBAAmB/C,eAAiB7iB,EAAM6tB,QACjDhB,EAAOjH,mBAAmB1C,YAAc2J,EAAOjH,mBAAmBlD,aAClEmK,EAAOjH,mBAAmBvC,cAAgBwJ,EAAOjH,mBAAmB1D,SAAW2K,EAAOjH,mBAAmB1C,YAAc2J,EAAOjH,mBAAmB9D,gBAAkB,EACnK+K,EAAOjH,mBAAmBtC,cAAgBuJ,EAAOjH,mBAAmB3D,UAAY4K,EAAOjH,mBAAmB1C,YAAc2J,EAAOjH,mBAAmB/D,iBAAmB,EACrKgL,EAAOjH,mBAAmB5C,cAAgB6J,EAAOjH,mBAAmB1D,SAAW2K,EAAOjH,mBAAmB1C,aAAe2J,EAAOjH,mBAAmB9D,eAAiB,EAAI+K,EAAOxC,OAAOwC,EAAOjH,mBAAmBhD,gBAAkBiK,EAAOjH,mBAAmBtD,sBAAwBuK,EAAOjH,mBAAmBxD,iBAA2D,EAA1CyK,EAAOjH,mBAAmBvC,aAAmBwJ,EAAOjH,mBAAmBvC,cACrYwJ,EAAOjH,mBAAmB3C,cAAgB4J,EAAOjH,mBAAmB3D,UAAY4K,EAAOjH,mBAAmB1C,aAAe2J,EAAOjH,mBAAmB/D,gBAAkB,EAAIgL,EAAOxC,OAAOwC,EAAOjH,mBAAmB/C,gBAAkBgK,EAAOjH,mBAAmBrD,sBAAwBsK,EAAOjH,mBAAmBvD,iBAA2D,EAA1CwK,EAAOjH,mBAAmBtC,aAAmBuJ,EAAOjH,mBAAmBtC,cACnY0F,KAAKC,IAAI4D,EAAOjH,mBAAmB5C,iBAAmBgG,KAAKC,IAAI4D,EAAOjH,mBAAmBvC,gBAC3FwJ,EAAOjH,mBAAmBxD,eAAiByK,EAAOjH,mBAAmB5C,cACrE6J,EAAOjH,mBAAmBtD,sBAAwBuK,EAAOjH,mBAAmBhD,gBAE1EoG,KAAKC,IAAI4D,EAAOjH,mBAAmB3C,iBAAmB+F,KAAKC,IAAI4D,EAAOjH,mBAAmBtC,gBAC3FuJ,EAAOjH,mBAAmBvD,eAAiBwK,EAAOjH,mBAAmB3C,cACrE4J,EAAOjH,mBAAmBrD,sBAAwBsK,EAAOjH,mBAAmB/C,gBAE9EgK,EAAOc,YAAYd,EAAOjH,mBAAmBlD,aAAcmK,EAAOjH,mBAAmB5C,cAAe6J,EAAOjH,mBAAmB3C,eAC9H4J,EAAOjB,eAAeiB,EAAOjH,mBAAmB5C,cAAgB,KAAM6J,EAAOjH,mBAAmB3C,cAAgB,KAAM4J,EAAOjH,mBAAmB1C,aAE7I2J,EAAOjH,mBAAmBhE,SAC7BiL,EAAOjH,mBAAmBrE,SAAWvhB,EAAM+Z,OAAS/Z,EAAM8Z,QAAQ,GAAGC,MACrE8S,EAAOjH,mBAAmBnE,UAAYzhB,EAAMytB,OAASztB,EAAM8Z,QAAQ,GAAG2T,MACtEZ,EAAOjH,mBAAmBxE,UAAYyL,EAAOjH,mBAAmBtE,WAAauL,EAAOjH,mBAAmBrE,SACvGsL,EAAOjH,mBAAmBvE,WAAawL,EAAOjH,mBAAmBpE,YAAcqL,EAAOjH,mBAAmBnE,UACrGoL,EAAOzhB,QAAQoU,gBACjBqN,EAAO5B,MAAM,GAAI4B,EAAOjH,mBAAmBxE,UAAY,UAI7D3hB,KAAKylB,iBAAiBzlB,KAAKolB,SAAS9W,MAAO,CAAC,YAActO,KAAK0lB,eAAgB,WAAa1lB,KAAK0lB,eAAgB,eAAiB1lB,KAAK0lB,eAAgB,cAAgB1lB,KAAK0lB,eAAgB,YAAa,gBAAiB,cAAe,oBAAoB,SAAUnlB,GAuBrQ,GAtBI6sB,EAAOkB,eAAgC,aAAf/tB,EAAM6V,OAChCgX,EAAOjH,mBAAmBnC,WAAazjB,EAAM8Z,QAAQpZ,OACR,IAAzCmsB,EAAOjH,mBAAmBnC,YAEtBoJ,EAAOhH,cACTgH,EAAOc,YAAYd,EAAOjH,mBAAmBlD,aAAcmK,EAAOjH,mBAAmB5C,cAAe6J,EAAOjH,mBAAmB3C,eAEjF,IAA3C4J,EAAOjH,mBAAmBlD,eAC5BmK,EAAOjH,mBAAmBhE,QAAS,EACW,SAA1CiL,EAAOhI,SAASgD,QAAQzN,MAAMyR,SAChCgB,EAAOL,OAAOK,EAAOhI,SAASgD,QAASgF,EAAOzhB,QAAQuP,YAG1DkS,EAAOjH,mBAAmBjD,qBAAuB,KACjDkK,EAAOjH,mBAAmBzD,SAAU,GACc,IAAzC0K,EAAOjH,mBAAmBnC,YACnCoJ,EAAOjH,mBAAmBtD,sBAAwBtiB,EAAM8Z,QAAQ,GAAG8T,QACnEf,EAAOjH,mBAAmBrD,sBAAwBviB,EAAM8Z,QAAQ,GAAG+T,SAC1DhB,EAAOjH,mBAAmBnC,WAAa,IAChDoJ,EAAOjH,mBAAmBjD,qBAAuB,OAGnDkK,EAAOjH,mBAAmBlE,UAAW,CACvCmL,EAAOjH,mBAAmBlE,WAAY,EACtC,IAAIsM,GAAc,EACbnB,EAAOzhB,QAAQwH,OACe,IAA7Bia,EAAOhD,mBAA2BgD,EAAOjH,mBAAmBxE,UAAY,IAC1E4M,GAAc,GAEZnB,EAAOhD,mBAAqBgD,EAAO5I,gBAAgBvjB,OAAS,GAAKmsB,EAAOjH,mBAAmBxE,UAAY,IACzG4M,GAAc,IAGdhF,KAAKC,IAAI4D,EAAOjH,mBAAmBxE,WAAayL,EAAOzhB,QAAQyU,gBAAkBmO,EACnFnB,EAAO9G,UAAU8G,EAAOjH,mBAAmBxE,UAAY,EAAI,GAAK,GACvDyL,EAAOzhB,QAAQoU,gBACxBqN,EAAO5B,MAAM4B,EAAOzhB,QAAQqU,eAAiB,IAAM,OAEjDoN,EAAOzhB,QAAQqP,YAAcuO,KAAKC,IAAI4D,EAAOjH,mBAAmBvE,YAAc,IAAM2H,KAAKC,IAAI4D,EAAOjH,mBAAmBxE,WAAayL,EAAOzhB,QAAQyU,gBACrJgN,EAAOxN,YAIb5f,KAAKylB,iBAAiBzlB,KAAKolB,SAAS9W,MAAO,CAAC,aAAa,SAAU/N,GACjE,IAAI6sB,EAAOkB,cAkCX,OAjCAlB,EAAOjH,mBAAmBtD,sBAAwBtiB,EAAM4tB,QACxDf,EAAOjH,mBAAmBrD,sBAAwBviB,EAAM6tB,QACxDhB,EAAOjH,mBAAmB/D,gBAAkBgL,EAAOI,cAAcJ,EAAOhI,SAAS9W,OAAOqE,OACxFya,EAAOjH,mBAAmB9D,eAAiB+K,EAAOI,cAAcJ,EAAOhI,SAAS9W,OAAO4F,MACvFkZ,EAAOjH,mBAAmB3D,UAAY4K,EAAOI,cAAcJ,EAAOhH,cAAczT,OAChFya,EAAOjH,mBAAmB1D,SAAW2K,EAAOI,cAAcJ,EAAOhH,cAAclS,MAC/EkZ,EAAOjH,mBAAmB7D,iBAAmB8K,EAAOhI,SAAS9W,MAAMmf,WACnEL,EAAOjH,mBAAmB5D,iBAAmB6K,EAAOhI,SAAS9W,MAAMof,UACnEN,EAAOhH,aAAavM,UAAUC,IAAI,iBAC7BsT,EAAOjH,mBAAmBhE,QAS7BiL,EAAOjH,mBAAmBlD,aAAe,EACzCmK,EAAOc,YAAYd,EAAOjH,mBAAmBlD,aAAc,EAAG,GAC9DmK,EAAOjB,eAAe,MAAU,MAAUiB,EAAOjH,mBAAmBlD,cACpEmK,EAAOjH,mBAAmBhE,QAAS,EACW,SAA1CiL,EAAOhI,SAASgD,QAAQzN,MAAMyR,SAChCgB,EAAOL,OAAOK,EAAOhI,SAASgD,QAASgF,EAAOzhB,QAAQuP,aAbxDkS,EAAOjH,mBAAmBlD,aAAemK,EAAOzhB,QAAQqV,cACxDoM,EAAOc,YAAYd,EAAOjH,mBAAmBlD,aAAc,EAAG,GAC9DmK,EAAOjB,eAAe,MAAU,MAAUiB,EAAOjH,mBAAmBlD,gBAC9DmK,EAAOhI,SAASgD,QAAQzN,MAAMsT,SAAWb,EAAOhI,SAASgD,QAAQzN,MAAMsT,QAAU,IAAgD,SAA1Cb,EAAOhI,SAASgD,QAAQzN,MAAMyR,SACzHgB,EAAO1C,QAAQ0C,EAAOhI,SAASgD,QAASgF,EAAOzhB,QAAQuP,WAEzDkS,EAAOjH,mBAAmBhE,QAAS,GAUrCrU,YAAW,WACLsf,EAAOhH,eACTgH,EAAOhH,aAAavM,UAAUrP,OAAO,iBACrC4iB,EAAOhH,aAAazL,MAAMyS,EAAO3I,iBAAmB,oBAAsB,QAE3E,KACH2I,EAAOjH,mBAAmBzD,SAAU,GAC7B,OAGV,CACDpjB,IAAK,gBACLN,MAAO,SAAuBgmB,GAC5B,IAAIwJ,EAASruB,OAAOwpB,iBAAiB3E,GACnCrS,EAASqS,EAAQtK,aACjBxG,EAAQ8Q,EAAQxK,YAChBiU,EAAiBzE,WAAWwE,EAAOC,gBAQrC,MAAO,CACL9b,OAAQA,EARYqX,WAAWwE,EAAOE,mBAQDD,EAPxBzE,WAAWwE,EAAOG,YACf3E,WAAWwE,EAAOI,eAOlC1a,MAAOA,EANW8V,WAAWwE,EAAOK,iBACjB7E,WAAWwE,EAAOM,kBACvB9E,WAAWwE,EAAOO,aACjB/E,WAAWwE,EAAO9E,iBAMpC,CACDpqB,IAAK,aACLN,MAAO,WACL,IAAIgwB,EAAU,QAAUhvB,KAAKoqB,kBAAoB,GAC/C6E,EAAS9uB,OAAO4N,SAASgO,KAAKlU,MAAM,KAAK,GAAK,IAAMmnB,EACtDhvB,KAAKwqB,aAAc,EACfxqB,KAAKkvB,iBACP/uB,OAAO2gB,QAAQ9gB,KAAKuqB,kBAAoB,eAAiB,aAAa,GAAI5d,SAASwiB,MAAOF,GAGtFjvB,KAAKuqB,kBACPpqB,OAAO4N,SAASoK,QAAQ8W,GAExB9uB,OAAO4N,SAAS8W,KAAOmK,EAGtBhvB,KAAKuqB,oBACRvqB,KAAKovB,gBAAiB,GAExBpvB,KAAKuqB,mBAAoB,IAE1B,CACDjrB,IAAK,YACLN,MAAO,WACLgB,KAAKwqB,aAAc,EACfxqB,KAAKovB,eACPtO,QAAQuO,OAEJrvB,KAAKkvB,iBACPpO,QAAQwO,UAAU,GAAI3iB,SAASwiB,MAAOhvB,OAAO4N,SAASwhB,SAAWpvB,OAAO4N,SAASyhB,QAEjFrvB,OAAO4N,SAAS8W,KAAO,GAK3B4K,aAAazvB,KAAK0vB,wBAEnB,CACDpwB,IAAK,YACLN,MAAO,WACLywB,aAAazvB,KAAK0vB,sBACb1vB,KAAKuqB,kBAGRvqB,KAAK0vB,qBAAuB5hB,WAAW9N,KAAK2vB,WAAWpwB,KAAKS,MAAO,KAFnEA,KAAK2vB,eAKR,CACDrwB,IAAK,aACLN,MAAO,SAAoBytB,EAAaC,EAAYkD,GAClD,IAAIC,EAAS7vB,KACb,GAAIA,KAAK2L,QAAQyT,UAAYqN,GAA+B,KAAhBA,QAA6C,IAAhBA,EAA6B,CACpG,IAAIqD,EACApwB,EAA2G,QAA9FowB,EAAOF,QAA6CA,EAAY5vB,KAAK2L,QAAQgU,mBAAkC,IAATmQ,GAAkBA,EAAe,YAAc,YACtK9vB,KAAKmD,KAAKnD,KAAKolB,SAASgD,SACxBpoB,KAAKolB,SAASgD,QAAQzN,MAAMzG,MAAQwY,EAAa,KACjD1sB,KAAKolB,SAASgD,QAAQ1oB,GAAY+sB,EAClCzsB,KAAKolB,SAAS9W,MAAMgX,YAAYtlB,KAAKolB,SAASgD,SAC9Cta,YAAW,WACT+hB,EAAO9C,OAAO8C,EAAOzK,SAASgD,QAASyH,EAAOlkB,QAAQuP,aACrDlb,KAAK2L,QAAQ0T,iBAGnB,CACD/f,IAAK,QACLN,MAAO,SAAe+wB,EAAOC,GAC3B,IAAKhwB,KAAK2kB,kBACR,OAAO3kB,KAAKolB,SAAS9W,MAAMqM,MAAMzD,KAAO8Y,EAE1ChwB,KAAKolB,SAAS9W,MAAMqM,MAAM3a,KAAKykB,iBAAmB,aAAe,cAAgBuL,EAAM,IACvFhwB,KAAKolB,SAAS9W,MAAMqM,MAAM3a,KAAKykB,iBAAmB,cAAgBzkB,KAAKykB,iBAAmB,aAAesL,EAAQ,aAElH,CACDzwB,IAAK,aACLN,MAAO,SAAoBmhB,GASzB,OAPIA,IAAe,IAARA,GAAyB,aAARA,EAClBzD,MAAMkB,KAAK5d,KAAK2e,UAAUnR,QAAO,SAAUwX,GACjD,OAAOA,EAAQE,aAAa,SAAW/E,KAGjCngB,KAAK2e,WAIhB,CACDrf,IAAK,YACLN,MAAO,SAAmBgmB,GACxB,IAAIiL,EAASjwB,KACbglB,EAAQqF,cAAc,IAAIC,MAAM,QAAUtqB,KAAK0lB,iBAC/C1lB,KAAK6sB,qBAAuB7sB,KAAK4pB,oBAC7B5pB,KAAK2L,QAAQ+U,gBACf1gB,KAAK2qB,gBAAgB,QACrB3qB,KAAK6sB,qBAAuB,GAE1B7sB,KAAK2L,QAAQuV,WAAwC,KAA3BlhB,KAAK2L,QAAQuV,WACzCvU,SAAS0a,cAAc,QAAQxN,UAAUC,IAAI9Z,KAAK2L,QAAQuV,WAE5DvU,SAASzC,KAAKob,YAAYtlB,KAAKolB,SAASC,SACxCrlB,KAAKolB,SAASC,QAAQC,YAAYtlB,KAAKolB,SAAS9W,OAC5CtO,KAAK2L,QAAQsT,SACftS,SAASzC,KAAKob,YAAYtlB,KAAKolB,SAASnG,SAE1Cjf,KAAKwkB,gBAAkBxkB,KAAK8kB,WAAWE,EAAQ7E,KAC3CngB,KAAK2L,QAAQkU,cACoB,GAA/B7f,KAAKwkB,gBAAgBvjB,QAAejB,KAAKolB,SAASC,QAAQY,SAASjmB,KAAKolB,SAAS6C,SACnFjoB,KAAKolB,SAASC,QAAQ4D,YAAYjpB,KAAKolB,SAAS6C,SACvCjoB,KAAKwkB,gBAAgBvjB,OAAS,IAAMjB,KAAKolB,SAASC,QAAQY,SAASjmB,KAAKolB,SAAS6C,UAC1FjoB,KAAKolB,SAASC,QAAQC,YAAYtlB,KAAKolB,SAAS6C,UAGhDjoB,KAAK2L,QAAQ6V,UAAYxhB,KAAKolB,SAAS5D,UACzCxhB,KAAKolB,SAASC,QAAQC,YAAYtlB,KAAKolB,SAAS5D,UAElDxhB,KAAK4lB,aAAc,EACnB5lB,KAAKoqB,kBAAoBpqB,KAAKwkB,gBAAgBngB,QAAQ2gB,GACtD,IAAIkL,EAAYlL,EAAQE,aAAallB,KAAK2L,QAAQqT,YAClDhf,KAAKomB,aAAezZ,SAASkb,cAAc,OAC3C7nB,KAAKomB,aAAazL,MAAMyR,QAAU,OAClCpsB,KAAKomB,aAAaC,aAAa,MAAO6J,GACtClwB,KAAKomB,aAAa0B,QAAQkE,MAAQ,EAClChsB,KAAKomB,aAAa0B,QAAQmE,WAAa,EACvCjsB,KAAKomB,aAAa0B,QAAQoE,WAAa,GACO,IAA1ClsB,KAAKmrB,aAAa9mB,QAAQ6rB,IAC5BlwB,KAAKmrB,aAAahe,KAAK+iB,GAEzBlwB,KAAKolB,SAAS9W,MAAM0Z,UAAY,GAChChoB,KAAKolB,SAAS9W,MAAM+X,aAAa,QAAS,IAC1CrmB,KAAKolB,SAAS9W,MAAMgX,YAAYtlB,KAAKomB,cACrCpmB,KAAK+sB,OAAO/sB,KAAKolB,SAASnG,QAASjf,KAAK2L,QAAQuP,WAChDlb,KAAK+sB,OAAO,CAAC/sB,KAAKolB,SAAS6C,QAASjoB,KAAKolB,SAASI,WAAYxlB,KAAKolB,SAASG,YAAavlB,KAAKolB,SAAS5D,UAAWxhB,KAAK2L,QAAQuP,WAC/Hlb,KAAKoD,KAAKpD,KAAKolB,SAASxb,SACxB5J,KAAKolB,SAAS6C,QAAQZ,cAAc,eAAeW,UAAYhoB,KAAKoqB,kBAAoB,EACxFpqB,KAAKolB,SAAS6C,QAAQZ,cAAc,aAAaW,UAAYhoB,KAAKwkB,gBAAgBvjB,OAClFjB,KAAKyrB,cACDzrB,KAAK2L,QAAQsU,YACfjgB,KAAK0rB,UAEP5d,YAAW,WACTkX,EAAQqF,cAAc,IAAIC,MAAM,SAAW2F,EAAOvK,mBACjD1lB,KAAK2L,QAAQqU,kBAEjB,CACD1gB,IAAK,aACLN,MAAO,WACL,IAAImxB,EAASnwB,KACbA,KAAK4mB,oBAAoBja,SAAU,WAAa3M,KAAK0lB,gBACrD1lB,KAAKylB,iBAAiB9Y,SAAU,WAAa3M,KAAK0lB,gBAAgB,SAAUnlB,GACtEoM,WAAapM,EAAMkQ,QAAU0f,EAAO/K,SAASC,UAAY9kB,EAAMkQ,QAAW0f,EAAO/K,SAASC,QAAQY,SAAS1lB,EAAMkQ,SACnH0f,EAAO/K,SAASC,QAAQjkB,aAM7B,CACD9B,IAAK,mBACLN,MAAO,SAA0B2f,EAAUyR,EAAQC,EAAU1J,GAC3DhI,EAAW3e,KAAKswB,KAAK3R,GACrByR,EAASpwB,KAAKswB,KAAKF,GACnB,IACEG,EADEC,EAAYjU,EAA2BoC,GAE3C,IACE,IAAK6R,EAAU1wB,MAAOywB,EAAQC,EAAUhxB,KAAKsd,MAAO,CAClD,IAAIkI,EAAUuL,EAAMvxB,MACfgmB,EAAQyL,aACXzL,EAAQyL,WAAa,IAEvB,IACEC,EADEC,EAAapU,EAA2B6T,GAE5C,IACE,IAAKO,EAAW7wB,MAAO4wB,EAASC,EAAWnxB,KAAKsd,MAAO,CACrD,IAAIvc,EAAQmwB,EAAO1xB,MACf2M,EAAUgb,IAAQ,EACA,CAAC,aAAc,YAAa,aAAc,kBAAkBtiB,QAAQ9D,EAAMsH,MAAM,KAAK,KAAO,GAC3F7H,KAAKqkB,2BACD,WAArBjkB,EAAQuL,GACVA,EAAQilB,SAAU,EAElBjlB,EAAU,CACRilB,SAAS,IAIf5L,EAAQyL,WAAWlwB,GAAS8vB,EAC5BrL,EAAQS,iBAAiBllB,EAAMsH,MAAM,KAAK,GAAIwoB,EAAU1kB,IAE1D,MAAO0E,GACPsgB,EAAWzwB,EAAEmQ,GACd,QACCsgB,EAAW3T,MAGf,MAAO3M,GACPmgB,EAAUtwB,EAAEmQ,GACb,QACCmgB,EAAUxT,OAGb,CACD1d,IAAK,sBACLN,MAAO,SAA6B2f,EAAUyR,GAC5CzR,EAAW3e,KAAKswB,KAAK3R,GACrByR,EAASpwB,KAAKswB,KAAKF,GACnB,IACES,EADEC,EAAavU,EAA2BoC,GAE5C,IACE,IAAKmS,EAAWhxB,MAAO+wB,EAASC,EAAWtxB,KAAKsd,MAAO,CACrD,IAEEiU,EAFE/L,EAAU6L,EAAO7xB,MACjBgyB,EAAazU,EAA2B6T,GAE5C,IACE,IAAKY,EAAWlxB,MAAOixB,EAASC,EAAWxxB,KAAKsd,MAAO,CACrD,IAAIvc,EAAQwwB,EAAO/xB,MACfgmB,EAAQyL,YAAczL,EAAQyL,WAAWlwB,KAC3CykB,EAAQ4B,oBAAoBrmB,EAAMsH,MAAM,KAAK,GAAImd,EAAQyL,WAAWlwB,WAC7DykB,EAAQyL,WAAWlwB,KAG9B,MAAO8P,GACP2gB,EAAW9wB,EAAEmQ,GACd,QACC2gB,EAAWhU,MAGf,MAAO3M,GACPygB,EAAW5wB,EAAEmQ,GACd,QACCygB,EAAW9T,OAGd,CACD1d,IAAK,UACLN,MAAO,SAAiB2f,EAAUsS,EAAUZ,GAC1C,IAGEa,EAHEC,EAAUnxB,KAEVoxB,EAAa7U,EADjBoC,EAAW3e,KAAKswB,KAAK3R,IAGrB,IACE,IAAKyS,EAAWtxB,MAAOoxB,EAASE,EAAW5xB,KAAKsd,MAAO,CACrD,IAAIkI,EAAUkM,EAAOlyB,MACrBgmB,EAAQrK,MAAMsT,QAAUjE,WAAWhF,IAAY7kB,OAAOwpB,iBAAiB3E,GAASqM,iBAAiB,YAEnG,MAAOhhB,GACP+gB,EAAWlxB,EAAEmQ,GACd,QACC+gB,EAAWpU,IAEbhd,KAAKsxB,UAAW,EAChB,IAAIlU,EAAO,UAAY6T,GAAYjxB,KAAK2L,QAAQuP,YACvC,SAASqW,IACd,IAAIC,EAAiBxH,WAAWrL,EAAS,GAAGhE,MAAMsT,SAClD,IAAKuD,GAAkBpU,GAAQ,EAAG,CAChC,IACEqU,EADEC,EAAanV,EAA2BoC,GAE5C,IACE,IAAK+S,EAAW5xB,MAAO2xB,EAASC,EAAWlyB,KAAKsd,MAAO,CACrD,IAAIkI,EAAUyM,EAAOzyB,MACrBgmB,EAAQrK,MAAMyR,QAAU,OAExBpH,EAAQrK,MAAMsT,QAAU,GAE1B,MAAO5d,GACPqhB,EAAWxxB,EAAEmQ,GACd,QACCqhB,EAAW1U,IAEbqT,GAAYA,EAASnyB,KAAKizB,EAASxS,OAC9B,CACL,IACEgT,EADEC,EAAarV,EAA2BoC,GAE5C,IACE,IAAKiT,EAAW9xB,MAAO6xB,EAASC,EAAWpyB,KAAKsd,MAC/B6U,EAAO3yB,MACb2b,MAAMsT,QAAUuD,EAE3B,MAAOnhB,GACPuhB,EAAW1xB,EAAEmQ,GACd,QACCuhB,EAAW5U,IAEb6U,sBAAsBN,IAG5BA,KAED,CACDjyB,IAAK,SACLN,MAAO,SAAgB2f,EAAUsS,EAAUZ,EAAUjE,GACnD,IAGE0F,EAHEC,EAAU/xB,KAEVgyB,EAAazV,EADjBoC,EAAW3e,KAAKswB,KAAK3R,IAGrB,IACE,IAAKqT,EAAWlyB,MAAOgyB,EAASE,EAAWxyB,KAAKsd,MAAO,CACrD,IAAIkI,EAAU8M,EAAO9yB,MACjBgmB,IACFA,EAAQrK,MAAMsT,QAAU,EACxBjJ,EAAQrK,MAAMyR,QAAUA,GAAW,UAGvC,MAAO/b,GACP2hB,EAAW9xB,EAAEmQ,GACd,QACC2hB,EAAWhV,IAEbhd,KAAKsxB,UAAW,EAChB,IAAIvJ,EAAgBiC,WAAWrL,EAAS,GAAGmJ,QAAQC,eAAiB,GAClE3K,EAAO,SAAW2K,GAAiBkJ,GAAYjxB,KAAK2L,QAAQuP,YACrD,SAASqW,IACd,IAAIC,EAAiBxH,WAAWrL,EAAS,GAAGhE,MAAMsT,SAClD,IAAOuD,GAAkBpU,GAAQ2K,EAiB1B,CACL,IACEkK,EADEC,EAAc3V,EAA2BoC,GAE7C,IACE,IAAKuT,EAAYpyB,MAAOmyB,EAAUC,EAAY1yB,KAAKsd,MAAO,CACxD,IAAIqV,EAAYF,EAAQjzB,MACpBmzB,IACFA,EAAUxX,MAAMsT,QAAUlG,IAG9B,MAAO1X,GACP6hB,EAAYhyB,EAAEmQ,GACf,QACC6hB,EAAYlV,IAEdqT,GAAYA,EAASnyB,KAAK6zB,EAASpT,OAhCY,CAC/C,IACEyT,EADEC,EAAa9V,EAA2BoC,GAE5C,IACE,IAAK0T,EAAWvyB,MAAOsyB,EAASC,EAAW7yB,KAAKsd,MAAO,CACrD,IAAIkI,EAAUoN,EAAOpzB,MACjBgmB,IACFA,EAAQrK,MAAMsT,QAAUuD,IAG5B,MAAOnhB,GACPgiB,EAAWnyB,EAAEmQ,GACd,QACCgiB,EAAWrV,IAEb,IAAK+U,EAAQT,SAAU,OACvBO,sBAAsBN,IAmB5BA,KAED,CACDjyB,IAAK,OACLN,MAAO,SAAc2f,GAEnB,IACE2T,EADEC,EAAchW,EADlBoC,EAAW3e,KAAKswB,KAAK3R,IAGrB,IACE,IAAK4T,EAAYzyB,MAAOwyB,EAAUC,EAAY/yB,KAAKsd,MAAO,CACxD,IAAIkI,EAAUsN,EAAQtzB,MACO,QAAzBgmB,EAAQrK,MAAMyR,UAChBpH,EAAQ8C,QAAQ0K,eAAiBxN,EAAQrK,MAAMyR,SAEjDpH,EAAQrK,MAAMyR,QAAU,QAE1B,MAAO/b,GACPkiB,EAAYryB,EAAEmQ,GACf,QACCkiB,EAAYvV,OAGf,CACD1d,IAAK,OACLN,MAAO,SAAc2f,EAAUyN,GAE7B,IACEqG,EADEC,EAAcnW,EADlBoC,EAAW3e,KAAKswB,KAAK3R,IAGrB,IACE,IAAK+T,EAAY5yB,MAAO2yB,EAAUC,EAAYlzB,KAAKsd,MAAO,CACxD,IAAIkI,EAAUyN,EAAQzzB,MACtBgmB,EAAQrK,MAAMyR,QAAUpH,EAAQ8C,QAAQ0K,gBAAkBpG,GAAW,SAEvE,MAAO/b,GACPqiB,EAAYxyB,EAAEmQ,GACf,QACCqiB,EAAY1V,OAGf,CACD1d,IAAK,OACLN,MAAO,SAAc2zB,GACnB,MAAyC,mBAA3BA,EAAM7zB,OAAOud,WAA6C,iBAAVsW,EAAqBA,EAAQ,CAACA,KAE7F,CACDrzB,IAAK,KACLN,MAAO,SAAYoxB,EAAQC,GACzBD,EAASpwB,KAAKswB,KAAKF,GACnB,IACEwC,EADEC,EAActW,EAA2Bvc,KAAK2e,UAElD,IACE,IAAKkU,EAAY/yB,MAAO8yB,EAAUC,EAAYrzB,KAAKsd,MAAO,CACxD,IAAIkI,EAAU4N,EAAQ5zB,MACjBgmB,EAAQ8N,wBACX9N,EAAQ8N,sBAAwB,IAElC,IACEC,EADEC,EAAczW,EAA2B6T,GAE7C,IACE,IAAK4C,EAAYlzB,MAAOizB,EAAUC,EAAYxzB,KAAKsd,MAAO,CACxD,IAAIvc,EAAQwyB,EAAQ/zB,MACpBgmB,EAAQ8N,sBAAsBvyB,GAAS8vB,EACvCrL,EAAQS,iBAAiBllB,EAAO8vB,IAElC,MAAOhgB,GACP2iB,EAAY9yB,EAAEmQ,GACf,QACC2iB,EAAYhW,MAGhB,MAAO3M,GACPwiB,EAAY3yB,EAAEmQ,GACf,QACCwiB,EAAY7V,IAEd,OAAOhd,OAER,CACDV,IAAK,MACLN,MAAO,SAAaoxB,GAClBA,EAASpwB,KAAKswB,KAAKF,GACnB,IACE6C,EADEC,EAAc3W,EAA2Bvc,KAAK2e,UAElD,IACE,IAAKuU,EAAYpzB,MAAOmzB,EAAUC,EAAY1zB,KAAKsd,MAAO,CACxD,IAEEqW,EAFEnO,EAAUiO,EAAQj0B,MAClBo0B,EAAc7W,EAA2B6T,GAE7C,IACE,IAAKgD,EAAYtzB,MAAOqzB,EAAUC,EAAY5zB,KAAKsd,MAAO,CACxD,IAAIvc,EAAQ4yB,EAAQn0B,WACyB,IAAlCgmB,EAAQ8N,uBAAyCvyB,KAASykB,EAAQ8N,uBAC3E9N,EAAQ4B,oBAAoBrmB,EAAOykB,EAAQ8N,sBAAsBvyB,KAGrE,MAAO8P,GACP+iB,EAAYlzB,EAAEmQ,GACf,QACC+iB,EAAYpW,MAGhB,MAAO3M,GACP6iB,EAAYhzB,EAAEmQ,GACf,QACC6iB,EAAYlW,IAEd,OAAOhd,OAIR,CACDV,IAAK,OACLN,MAAO,SAAc6nB,GACnB,IAAIwM,EAAW1K,UAAU1nB,OAAS,QAAsB4sB,IAAjBlF,UAAU,GAAmBA,UAAU,GAAK,EACnF9B,EAAOA,GAAQ7mB,KAAK2e,SAAS,GACP,oBAAX2U,QAA0BzM,aAAgByM,SACnDzM,EAAOA,EAAKjoB,IAAI,IAEdy0B,EAAW,IACbxM,EAAO7mB,KAAK2e,SAAS0U,IAEvBrzB,KAAK6lB,kBAAoB7lB,KAAK2e,SAASta,QAAQwiB,GAC3C7mB,KAAK6lB,mBAAqB,GAC5B7lB,KAAK8lB,UAAUe,KAGlB,CACDvnB,IAAK,eACLN,MAAO,SAAsBq0B,GAC3B,IAAIxM,EAAO7mB,KAAK2e,SAAS0U,GACzBrzB,KAAKic,KAAK4K,EAAMwM,KAEjB,CACD/zB,IAAK,OACLN,MAAO,WACLgB,KAAKsmB,UAAU,KAEhB,CACDhnB,IAAK,OACLN,MAAO,WACLgB,KAAKsmB,WAAW,KAIjB,CACDhnB,IAAK,iBACLN,MAAO,WACL,MAAO,CACLorB,kBAAmBpqB,KAAKoqB,kBACxBhE,aAAcpmB,KAAKomB,aACnByG,qBAAsB7sB,KAAK6sB,wBAK9B,CACDvtB,IAAK,UACLN,MAAO,WAELgB,KAAKuzB,IAAI,CAAC,SAAWvzB,KAAK0lB,eAAgB,UAAY1lB,KAAK0lB,eAAgB,mBAAqB1lB,KAAK0lB,eAAgB,mBAAqB1lB,KAAK0lB,eAAgB,UAAY1lB,KAAK0lB,eAAgB,YAAc1lB,KAAK0lB,eAAgB,YAAc1lB,KAAK0lB,eAAgB,SAAW1lB,KAAK0lB,eAAgB,WAAa1lB,KAAK0lB,eAAgB,QAAU1lB,KAAK0lB,eAAgB,QAAU1lB,KAAK0lB,eAAgB,QAAU1lB,KAAK0lB,eAAgB,SAAW1lB,KAAK0lB,iBACrb1lB,KAAK4mB,oBAAoB5mB,KAAK2e,SAAU,SAAW3e,KAAK0lB,gBACxD1lB,KAAK4mB,oBAAoBja,SAAU,WAAa3M,KAAK0lB,gBACrD1lB,KAAK4mB,oBAAoBja,SAASzC,KAAM,eAAiBlK,KAAK0lB,gBAC9D1lB,KAAK4mB,oBAAoBja,SAASzC,KAAM,SAAWlK,KAAK0lB,gBACxD1lB,KAAK4mB,oBAAoB5mB,KAAKolB,SAASI,WAAW8H,qBAAqB,UAAW,SAAWttB,KAAK0lB,gBAClG1lB,KAAK4mB,oBAAoB5mB,KAAKolB,SAASG,YAAa,SAAWvlB,KAAK0lB,gBACpE1lB,KAAK4mB,oBAAoBzmB,OAAQ,UAAYH,KAAK0lB,gBAClD1lB,KAAK4mB,oBAAoBzmB,OAAQ,cAAgBH,KAAK0lB,gBACtD1lB,KAAK4f,QACD5f,KAAK+lB,SACPpZ,SAASzC,KAAK+e,YAAYjpB,KAAKolB,SAASC,SACxC1Y,SAASzC,KAAK+e,YAAYjpB,KAAKolB,SAASnG,UAE1Cjf,KAAK2e,SAAW,OAEjB,CACDrf,IAAK,UACLN,MAAO,WACL,IAAKgB,KAAKukB,gBACR,KAAM,8DAER,IAAI5Y,EAAU3L,KAAK2L,QACjBob,EAAW/mB,KAAKukB,gBAGlB,OAFAvkB,KAAKwzB,UACLxzB,KAAKsc,YAAYyK,EAAUpb,GACpB3L,UAphDiEqe,EAAkBS,EAAYnf,UAAW6mB,GAAiBC,GAAapI,EAAkBS,EAAa2H,GAAchoB,OAAOC,eAAeogB,EAAa,YAAa,CAAEL,UAAU,IAuhDrP5D,EArhDyB,GAuhD9B4Y,EAAW5Y,EACfhd,EAAiB,QAAI41B,EACrBC,EAAO7Y,eAAiBA,I;;;;;;;;;;;;;;;;;;;;;CC1hDxB,SAAWna,GAEP,IAAIwJ,KAAOxJ,EAAEiM,SAASzC,MAClB/J,OAASO,EAAEP,QACXwzB,wBAAyB,EAC7BjzB,EAAEkzB,GAAGzY,OAAS,SAAUxP,GACpB,OAAO3L,KAAKkN,MAAK,WAED,KADDlN,KAAK6zB,SAASzb,eAErB,IAAI+C,OAAOnb,KAAM2L,OAI7BwP,OAAS,SAAAA,OAAU2Y,GAAInoB,SACnB,IAAIooB,IAAM,KAEV,GADAA,IAAMrzB,EAAEozB,IAAIjyB,KAAK,UACbkyB,IAAK,OAAOA,IAChB,IAAI3X,IAAMpc,KACNg0B,SAAWtzB,EAAEuzB,OAAO,GAAIvzB,EAAEya,OAAO+Y,SAAUvoB,SAAW,IAC1DyQ,IAAI0X,GAAKA,GACTA,GAAG3T,IAAMzf,EAAEozB,IAAI/xB,KAAK,OAEpB+xB,GAAGK,aAAc,EACjBL,GAAGM,eAAgB,EACnBN,GAAGO,mBAAoB,EACvBP,GAAGQ,kBAAmB,EACtBR,GAAG9H,MAAQ,GACX8H,GAAGS,MAAQ,KACXT,GAAGU,SAAW,GACdV,GAAGW,WAAY,EACf/zB,EAAEozB,IAAI1sB,IAAI,CACN,gBAAiB,OACjB,kBAAmB,SAGvB,IAAIstB,IAAMh0B,EAAE,YAAaozB,IACzBA,GAAG3E,MAAQzuB,EAAEozB,IAAI/xB,KAAK,SACtB+xB,GAAGa,WAAaD,IAAI3yB,KAAK,SACzB,IAAI6yB,UAAal0B,EAAEwX,KAAK4b,GAAG3E,OAAOluB,OAAS,EAAK6yB,GAAG3E,MAAQ2E,GAAGa,WAC1DE,WAAa,IAAIC,WAAWJ,KAC5BrZ,KAAO,IAAI0Z,KACXC,MAAQ,IAAIC,MACZC,WAAa,IAAIC,WACjBC,OAAS,IAAIC,OAEjB30B,EAAEozB,IAAIv0B,KAAK,SAAS,SAAUW,GAE1B,OADAA,EAAEmB,kBACK,KAGX,IAAIi0B,UAAY,CAAC,WAAY,OAAQ,YAAa,WA8LlD,SAASR,WAAWxmB,OAChB,IAAIinB,KAAOv1B,KAuDX,OAtDAA,KAAKw1B,KAAOlnB,MAAM,GAClBtO,KAAKy1B,WAAa,WACd,IAAIC,UAAY,EAChBA,UAAYpnB,MAAMlH,IAAI,oBACtBuuB,KAAO,GACP,IAAIC,WAAa,EAGjB,GAFAA,WAAatnB,MAAMlH,IAAI,qBACvByuB,MAAQ,GACJH,UACA,IAAK33B,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACpB,IAAIwc,EAAI,GAER,GADAA,EAAImb,UAAUI,OAAO/3B,EAAG,GACR,GAAZ4F,MAAM4W,GAGN,MAFAob,KAAOA,KAAO,GAAKD,UAAUI,OAAO/3B,EAAG,GAMnD,GAAI63B,WACA,IAAK73B,EAAI,EAAGA,EAAI,IACP4F,MAAMiyB,WAAWE,OAAO/3B,EAAG,IADjBA,IAEX83B,OAAgBD,WAAWE,OAAO/3B,EAAG,GAMjDw3B,KAAKI,KAAQA,KAAK10B,OAAS,EAAK80B,KAAKJ,MAAQ,EAC7CJ,KAAKM,MAASA,MAAM50B,OAAS,EAAK80B,KAAKF,OAAS,GAEpD71B,KAAKg2B,UAAY,WACbT,KAAKE,aACLF,KAAKU,EAAI3nB,MAAM4F,QACfqhB,KAAKW,EAAI5nB,MAAMqE,SACf4iB,KAAKY,GAAK7nB,MAAM8nB,aAChBb,KAAKc,GAAK/nB,MAAMuN,cAChB0Z,KAAKvF,IAAM1hB,MAAMwE,SACjByiB,KAAKvF,IAAIhyB,EAAIsQ,MAAMwE,SAASoE,KAAOqe,KAAKM,MACxCN,KAAKvF,IAAI/wB,EAAIqP,MAAMwE,SAASC,IAAMwiB,KAAKI,KACvCJ,KAAKvF,IAAInxB,EAAI02B,KAAKU,EAAIV,KAAKvF,IAAIhyB,EAC/Bu3B,KAAKvF,IAAIsG,EAAIf,KAAKW,EAAIX,KAAKvF,IAAI/wB,EAC/Bs2B,KAAKgB,WAAajoB,MAAMwE,SAASoE,KAAOqe,KAAKY,GAC7CZ,KAAKiB,YAAcloB,MAAMwE,SAASC,IAAMwiB,KAAKc,IAGjDr2B,KAAKw1B,KAAKiB,QAAU,WAEhB,MADAnK,MAAM,iCACA,iCAEVtsB,KAAKw1B,KAAKkB,OAAS,WACfnB,KAAKS,YAC2B,GAA5Bt1B,EAAE,WAAYozB,IAAI7yB,QAAamb,IAAI/c,UAEpCk2B,KAQX,SAASF,SAoBL,OAlBAr1B,KAAK8H,OAAS,WACV9H,KAAKw1B,KAAO90B,EAAE,UAAUmE,SAAS,eAAeuC,IAAI,aAAc,UAAU5D,KAAKwwB,SAAS2C,aAC1Fj2B,EAAE,WAAYozB,IAAIhsB,OAAO9H,KAAKw1B,OAElCx1B,KAAKoD,KAAO,WACRpD,KAAKw1B,KAAKziB,KAAO8hB,WAAWwB,GAAKr2B,KAAKw1B,KAAK7iB,UAAY,EACvD3S,KAAKw1B,KAAKte,MAAQ2d,WAAWsB,GAAKn2B,KAAKw1B,KAAKthB,SAAW,EAEvDlU,KAAKw1B,KAAKpuB,IAAI,CACV2L,IAAK/S,KAAKw1B,KAAKziB,IACfmE,KAAMlX,KAAKw1B,KAAKte,KAChBmc,SAAU,WACVuD,WAAY,aAGpB52B,KAAKmD,KAAO,WACRnD,KAAKw1B,KAAKpuB,IAAI,aAAc,WAEzBpH,KAQX,SAAS+0B,OACL,IAAIQ,EAAOv1B,KA6IX,OA5IAA,KAAKw1B,KAAO90B,EAAE,UAAUmE,SAAS,WAEjC7E,KAAK8H,OAAS,WACVpH,EAAE,WAAYozB,IAAIhsB,OAAOpH,EAAEV,KAAKw1B,MAAMryB,QACb,WAArB6wB,SAAS5Y,WACTpb,KAAKsO,MAAQ,IAAI2c,MACjBjrB,KAAKsO,MAAM2W,IAAM4P,WAAWW,KAAKvQ,IACjCvkB,EAAEV,KAAKw1B,MAAMvwB,QAAQ6C,OAAO9H,KAAKsO,SAGzCtO,KAAK62B,cAAgB,WACjB72B,KAAKw1B,KAAKS,EAAK3yB,SAAU0wB,SAAStY,UAAaoY,GAAG9H,MAAMzR,GAAKsa,WAAWoB,EAAKpB,WAAWoB,EAAK3yB,SAAS0wB,SAAStY,UAAYoY,GAAG9H,MAAMzR,GACpIva,KAAKw1B,KAAKU,EAAK5yB,SAAU0wB,SAASpY,WAAckY,GAAG9H,MAAMvR,GAAKoa,WAAWqB,EAAKrB,WAAWqB,EAAK5yB,SAAS0wB,SAASpY,WAAakY,GAAG9H,MAAMvR,GACtIza,KAAKw1B,KAAKziB,KAAO8hB,WAAWwB,GAAKr2B,KAAKw1B,KAAKU,EAAI,GAAK,EACpDl2B,KAAKw1B,KAAKte,MAAQ2d,WAAWsB,GAAKn2B,KAAKw1B,KAAKS,EAAI,GAAK,EAErDj2B,KAAKw1B,KAAKpuB,IAAI,CACV2L,IAAK,EACLmE,KAAM,EACNhD,MAAOlU,KAAKw1B,KAAKS,EAAI,KACrBtjB,OAAQ3S,KAAKw1B,KAAKU,EAAI,KACtB7C,SAAU,WACVjH,QAAS,OACT0K,YAAa,QAKQ,WAArB9C,SAAS5Y,WACTpb,KAAKsO,MAAM2W,IAAM4P,WAAWW,KAAKvQ,IACjCvkB,EAAEV,KAAKw1B,MAAMpuB,IAAI,CACb,QAAW,IAGf1G,EAAEV,KAAKsO,OAAOlH,IAAI,CACdisB,SAAU,WACVjH,QAAS,QACTlV,OAAQlX,KAAKw1B,KAAKte,KAAO,EAAI2d,WAAWgB,OAAS,KACjD9iB,MAAO/S,KAAKw1B,KAAKziB,IAAM,EAAI8hB,WAAWc,MAAQ,SAK1D31B,KAAK+2B,UAAY,WAEb/2B,KAAKw1B,KAAKziB,KAAO8hB,WAAWwB,GAAKr2B,KAAKw1B,KAAKU,EAAI,GAAK,EACpDl2B,KAAKw1B,KAAKte,MAAQ2d,WAAWsB,GAAKn2B,KAAKw1B,KAAKS,EAAI,GAAK,EAErDj2B,KAAKw1B,KAAKpuB,IAAI,CACV2L,IAAK/S,KAAKw1B,KAAKziB,IACfmE,KAAMlX,KAAKw1B,KAAKte,OAEK,WAArB8c,SAAS5Y,UACT1a,EAAEV,KAAKsO,OAAOlH,IAAI,CACdisB,SAAU,WACVjH,QAAS,QACTlV,OAAQlX,KAAKw1B,KAAKte,KAAO,EAAI2d,WAAWgB,OAAS,KACjD9iB,MAAO/S,KAAKw1B,KAAKziB,IAAM,EAAI8hB,WAAWc,MAAQ,OAKtDT,WAAW8B,eAEfh3B,KAAKg3B,YAAc,SAAU92B,GACzB4zB,GAAGU,SAASja,EAAIra,EAAEoa,MAClBwZ,GAAGU,SAAS/Z,EAAIva,EAAE8tB,MAClB,IAAIiJ,EAAW,EACXC,EAAU,EAkBdD,EAAWnD,GAAGU,SAASja,EAAIsa,WAAWgB,MAAQhB,WAAW7E,IAAIhyB,GAAKgC,KAAKw1B,KAAKS,EAAI,GAAK,EACrFiB,EAAUpD,GAAGU,SAAS/Z,EAAIoa,WAAWc,KAAOd,WAAW7E,IAAI/wB,GAAKe,KAAKw1B,KAAKU,EAAI,GAAK,GAjBnF,SAAkB7a,GACd,OAAOyY,GAAGU,SAASja,EAAKc,EAAK4a,EAAK,EAAIpB,WAAW7E,IAAIhyB,EAiBrDm5B,CAASn3B,KAAKw1B,MAdlB,SAAmBna,GACf,OAAOyY,GAAGU,SAASja,EAAKc,EAAK4a,EAAK,EAAIpB,WAAW7E,IAAInxB,EAe9Cu4B,CAAUp3B,KAAKw1B,QACtByB,EAAWpC,WAAWoB,EAAIpB,WAAWgB,MAAQ71B,KAAKw1B,KAAKS,EAAI,GAF3DgB,EAAWpC,WAAWgB,MAAQ,GAXlC,SAAiBxa,GACb,OAAOyY,GAAGU,SAAS/Z,EAAKY,EAAK6a,EAAK,EAAIrB,WAAW7E,IAAI/wB,EAcrDo4B,CAAQr3B,KAAKw1B,MAXjB,SAAoBna,GAChB,OAAOyY,GAAGU,SAAS/Z,EAAKY,EAAK6a,EAAK,EAAIrB,WAAW7E,IAAIsG,EAY9CgB,CAAWt3B,KAAKw1B,QACvB0B,EAAUrC,WAAWqB,EAAIrB,WAAWc,KAAO31B,KAAKw1B,KAAKU,EAAI,GAFzDgB,EAAUrC,WAAWc,KAAO,EAKhC31B,KAAKw1B,KAAKte,KAAO+f,EACjBj3B,KAAKw1B,KAAKziB,IAAMmkB,EAChBl3B,KAAKw1B,KAAKpuB,IAAI,CACV,KAAQ6vB,EAAW,KACnB,IAAOC,EAAU,OAEI,WAArBlD,SAAS5Y,UACT1a,EAAEV,KAAKsO,OAAOlH,IAAI,CACdisB,SAAU,WACVjH,QAAS,QACTlV,OAAQlX,KAAKw1B,KAAKte,KAAO,EAAI2d,WAAWgB,OAAS,KACjD9iB,MAAO/S,KAAKw1B,KAAKziB,IAAM,EAAI8hB,WAAWc,MAAQ,OAItDT,WAAW8B,eAEfh3B,KAAKmD,KAAO,WACRuxB,IAAIttB,IAAI,CACJ,QAAW,IAEfpH,KAAKw1B,KAAKryB,QAEdnD,KAAKoD,KAAO,WAEiB,aAArB4wB,SAAS5Y,WAA4B4Y,SAAS3Y,MAA6B,QAArB2Y,SAAS5Y,UAC/Dpb,KAAKw1B,KAAKpyB,OAGW,WAArB4wB,SAAS5Y,UACTsZ,IAAIttB,IAAI,CACJ,QAAW4sB,SAASuD,gBAIhCv3B,KAAKw3B,UAAY,WACb,IAAIh5B,EAAI,GAGR,OAFAA,EAAE0Y,KAAOqe,EAAKC,KAAKte,KACnB1Y,EAAEuU,IAAMwiB,EAAKC,KAAKziB,IACXvU,GAEJwB,KAQX,SAASi1B,QACL,IAAIM,EAAOv1B,KACPy3B,GAA+B,IAAnBzD,SAAS7E,MAAiB,uCAAyC,GACnFnvB,KAAKw1B,KAAO90B,EAAE,oDAAqD+2B,EAAW,oDAC9Ez3B,KAAK03B,QAAUh3B,EAAE,+IACjBV,KAAKg3B,YAAc,WAGf,GAFAh3B,KAAKw1B,KAAKmC,QAAU,EACpB33B,KAAKw1B,KAAKoC,OAAS,EACM,aAArB5D,SAAS5Y,SAET,OAAQ4Y,SAASX,UACb,IAAK,OACDrzB,KAAKw1B,KAAKmC,QAAW9C,WAAW7E,IAAIhyB,EAAI62B,WAAWgB,MAAQtM,KAAKC,IAAIwK,SAASxY,SAAWwY,SAAStY,UAAY,EAAM,EAAIsY,SAAStY,UAAY6N,KAAKC,IAAIwK,SAASxY,SAAaqZ,WAAWsB,GAAK5M,KAAKC,IAAIwK,SAASxY,SAC7Mxb,KAAKw1B,KAAKoC,OAASrO,KAAKC,IAAIwK,SAASvY,SACrC,MACJ,IAAK,MACDzb,KAAKw1B,KAAKmC,QAAUpO,KAAKC,IAAIwK,SAASxY,SACtCxb,KAAKw1B,KAAKoC,OAAU/C,WAAW7E,IAAI/wB,EAAI41B,WAAWc,KAAOpM,KAAKC,IAAIwK,SAASvY,SAAWuY,SAASpY,WAAa,EAAM,EAAIoY,SAASpY,WAAa2N,KAAKC,IAAIwK,SAASvY,SAAaoZ,WAAWwB,GAAK9M,KAAKC,IAAIwK,SAASvY,SAC7M,MACJ,IAAK,SACDzb,KAAKw1B,KAAKmC,QAAUpO,KAAKC,IAAIwK,SAASxY,SACtCxb,KAAKw1B,KAAKoC,OAAU/C,WAAW7E,IAAI/wB,EAAI41B,WAAWc,KAAOd,WAAWwB,GAAK9M,KAAKC,IAAIwK,SAASvY,SAAWuY,SAASpY,WAAaic,OAAOllB,OAAWkiB,WAAWwB,GAAK9M,KAAKC,IAAIwK,SAASvY,SAAa,EAAIuY,SAASpY,WAAa2N,KAAKC,IAAIwK,SAASvY,SACzO,MACJ,QACIzb,KAAKw1B,KAAKmC,QAAW9C,WAAW0B,WAAahN,KAAKC,IAAIwK,SAASxY,SAAWwY,SAAStY,UAAYmc,OAAO3jB,MAAU2gB,WAAWsB,GAAKnC,SAASxY,QAAY,EAAIwY,SAAStY,UAAYsY,SAASxY,QACvLxb,KAAKw1B,KAAKoC,OAAS5D,SAASvY,QAQxC,OAJAzb,KAAKw1B,KAAKpuB,IAAI,CACV,KAAQ,uBAA0B1G,EAAE,gBAAgB01B,aAAe11B,EAAE,WAAW01B,cAAgB,EAAK,MACrG,IAAOp2B,KAAKw1B,KAAKoC,OAAS,OAEvB53B,MAEXA,KAAK8H,OAAS,WAOV,GANApH,EAAE,WAAYozB,IAAIhsB,OAAO9H,KAAKw1B,MAC9Bx1B,KAAKw1B,KAAKpuB,IAAI,CACVisB,SAAU,WACVjH,QAAS,OACT0L,OAAQ,OAEa,aAArB9D,SAAS5Y,SAAyB,CAClCpb,KAAKw1B,KAAKpuB,IAAI,CACV2wB,OAAQ,YAEZ,IAAIC,EAAiC,GAApBnD,WAAWgB,MAAc,EAAIhB,WAAWgB,MACzDn1B,EAAE,eAAgBV,KAAKw1B,MAAMpuB,IAAI,CAC7B0vB,YAAakB,EAAY,OAIjCt3B,EAAE,eAAgBV,KAAKw1B,MAAMpuB,IAAI,CAC7B8M,MAAOqV,KAAK0O,MAAMjE,SAAStY,WAAa,KACxCob,YAAakB,EAAY,OAE7Bt3B,EAAE,oBAAqBV,KAAKw1B,MAAMpuB,IAAI,CAClC8M,MAAO,OACPvB,OAAQ4W,KAAK0O,MAAMjE,SAASpY,YAAc,QAGvB,IAAnBoY,SAAS7E,OACTzuB,EAAE,oBAAqBV,KAAKw1B,MAAMpuB,IAAI,CAClC8M,MAAO,OACPmf,SAAU,cAIK,IAAnBW,SAAS7E,OAAgBzuB,EAAE,oBAAqBV,KAAKw1B,MAAMryB,OAC3D6wB,SAAS7E,OAASyF,UAAU3zB,OAAS,GACrCP,EAAE,oBAAqBV,KAAKw1B,MAAMhyB,KAAKoxB,WAAWxxB,OAEtDmyB,EAAKyB,eAETh3B,KAAKmD,KAAO,WACR,OAAQ6wB,SAASkE,YACb,IAAK,UACDl4B,KAAKw1B,KAAK9K,QAAQsJ,SAASmE,cAAc,eACzC,MACJ,QACIn4B,KAAKw1B,KAAKryB,OAGlBnD,KAAK03B,QAAQv0B,QAEjBnD,KAAKoD,KAAO,WACR,OAAQ4wB,SAASoE,YACb,IAAK,SACDp4B,KAAKw1B,KAAKzI,SACV/sB,KAAKw1B,KAAKzI,OAAOiH,SAASqE,aAAa,eACvC,MACJ,QACIr4B,KAAKw1B,KAAKpyB,OAGO,aAArB4wB,SAAS5Y,WACTpb,KAAK03B,QAAQxjB,MAAQlU,KAAKw1B,KAAKthB,QAC/BlU,KAAK03B,QAAQ/kB,OAAS3S,KAAKw1B,KAAK7iB,SAChC3S,KAAK03B,QAAQxgB,KAAOlX,KAAKw1B,KAAKmC,QAC9B33B,KAAK03B,QAAQ3kB,IAAM/S,KAAKw1B,KAAKoC,OAC7B53B,KAAK03B,QAAQtwB,IAAI,CACbglB,QAAS,QACTiH,SAAU,WACVnc,KAAMlX,KAAK03B,QAAQxgB,KACnBnE,IAAK/S,KAAK03B,QAAQ3kB,IAClB+kB,OAAQ,GACR5jB,MAAOlU,KAAK03B,QAAQxjB,MAAQ,KAC5BvB,OAAQ3S,KAAK03B,QAAQ/kB,OAAS,OAElCjS,EAAE,WAAYozB,IAAIhsB,OAAO9H,KAAK03B,SAC9B13B,KAAK03B,QAAQt0B,SAUzB,SAAS+xB,aACL,IAAII,EAAOv1B,KAyDX,OAxDAA,KAAKw1B,KAAO,IAAIvK,MAChBjrB,KAAKs4B,UAAY,SAAUpzB,GAEvBkwB,OAAOhyB,OACPpD,KAAKkF,IAAMA,EACXlF,KAAKw1B,KAAK7a,MAAM0Y,SAAW,WAC3BrzB,KAAKw1B,KAAK7a,MAAM4d,OAAS,MACzBv4B,KAAKw1B,KAAK7a,MAAMyR,QAAU,OAC1BpsB,KAAKw1B,KAAK7a,MAAMzD,KAAO,UACvBlX,KAAKw1B,KAAK7a,MAAM5H,IAAM,MACtBpG,SAASzC,KAAKob,YAAYtlB,KAAKw1B,MAC/Bx1B,KAAKw1B,KAAKvQ,IAAM/f,GAEpBlF,KAAKg2B,UAAY,WACb,IAAI1nB,EAAQ5N,EAAEV,KAAKw1B,MACfxJ,EAAQ,GACZhsB,KAAKw1B,KAAK7a,MAAMyR,QAAU,QAC1BmJ,EAAKU,EAAI3nB,EAAM4F,QACfqhB,EAAKW,EAAI5nB,EAAMqE,SACf4iB,EAAKvF,IAAM1hB,EAAMwE,SACjByiB,EAAKvF,IAAIhyB,EAAIsQ,EAAMwE,SAASoE,KAC5Bqe,EAAKvF,IAAI/wB,EAAIqP,EAAMwE,SAASC,IAC5BwiB,EAAKvF,IAAInxB,EAAI02B,EAAKU,EAAIV,EAAKvF,IAAIhyB,EAC/Bu3B,EAAKvF,IAAIsG,EAAIf,EAAKW,EAAIX,EAAKvF,IAAI/wB,EAC/B+sB,EAAMzR,EAAKgb,EAAKU,EAAIpB,WAAWoB,EAC/BjK,EAAMvR,EAAK8a,EAAKW,EAAIrB,WAAWqB,EAC/BpC,GAAG9H,MAAQA,EACXrf,SAASzC,KAAK+e,YAAYjpB,KAAKw1B,MAC/B90B,EAAE,oBAAqBozB,IAAI7uB,QAAQ6C,OAAO9H,KAAKw1B,MAE/Cna,KAAKwb,iBAET72B,KAAKw1B,KAAKiB,QAAU,WAEhB,MADAnK,MAAM,yCACA,yCAEVtsB,KAAKw1B,KAAKkB,OAAS,WAEfnB,EAAKS,YACLZ,OAAOjyB,OACP2wB,GAAGO,mBAAoB,EACvBP,GAAGQ,kBAAmB,GACG,QAArBN,SAAS5Y,UAAsB4Y,SAASzY,YACxCF,KAAKjY,OACL4xB,MAAM5xB,OACNiY,KAAK0b,cAGb/2B,KAAKg3B,YAAc,WACf,IAAI9f,GAAQ4c,GAAG9H,MAAMzR,GAAKc,KAAKmc,YAAYtgB,KAAO2d,WAAWgB,MAAQ,GACjE9iB,GAAO+gB,GAAG9H,MAAMvR,GAAKY,KAAKmc,YAAYzkB,IAAM8hB,WAAWc,KAAO,GAClEj1B,EAAEV,KAAKw1B,MAAMpuB,IAAI,CACb,KAAQ8P,EAAO,KACf,IAAOnE,EAAM,QAGd/S,KAjmBPU,EAAE83B,QAAQ93B,EAAEwX,KAAK8b,SAAS5Y,UAAWka,WAAa,IAClDtB,SAAS5Y,SAAW,YAExB1a,EAAEuzB,OAAO7X,IAAK,CACV/c,OAAQ,WAE4B,GAA5BqB,EAAE,WAAYozB,IAAI7yB,SAClB6yB,GAAG2E,QAAU/3B,EAAE,UAAUmE,SAAS,WAClC6vB,IAAIpE,KAAKwD,GAAG2E,UAES,aAArBzE,SAAS5Y,WACT4Y,SAAStY,UAAYmZ,WAAWoB,EAChCjC,SAASpY,WAAaiZ,WAAWqB,GAGL,GAA5Bx1B,EAAE,WAAYozB,IAAI7yB,QAClBoa,KAAKvT,SAG0B,GAA/BpH,EAAE,cAAeozB,IAAI7yB,QACrB+zB,MAAMltB,SAG0B,GAAhCpH,EAAE,eAAgBozB,IAAI7yB,QACtBm0B,OAAOttB,UAGPksB,SAAS1Y,eAAsC,QAArB0Y,SAAS5Y,UAAsB4Y,SAASzY,WAClEa,IAAIsc,OAERtc,IAAIuc,QAERA,KAAM,SAAAA,OAEuB,QAArB3E,SAAS5Y,WACT1a,EAAE,WAAYozB,IAAI7R,WAAU,WACxB6R,GAAGW,WAAY,KAEnB/zB,EAAE,WAAYozB,IAAI8E,SAAQ,WACtB9E,GAAGW,WAAY,KAEnB9nB,SAASzC,KAAK2uB,YAAc,WACxB,OAAO,GAEXn4B,EAAE,WAAYozB,IAAI1sB,IAAI,CAClB2wB,OAAQ,YAEZr3B,EAAE,WAAYozB,IAAI1sB,IAAI,CAClB2wB,OAAQ,UAGS,aAArB/D,SAAS5Y,UACT1a,EAAE,eAAgBozB,IAAI1sB,IAAI,CACtB2wB,OAAQ,cAGhBr3B,EAAE,WAAYozB,IAAIvnB,GAAG,cAAc,SAAUhM,GACzCm0B,IAAI3yB,KAAK,QAAS,IAClBrB,EAAEozB,IAAI/xB,KAAK,QAAS,IACpB+xB,GAAGK,aAAc,EAEjBU,WAAWmB,YACPlC,GAAGQ,iBACHlY,IAAI0c,SAASv4B,GAEb6b,IAAIsc,UAGZh4B,EAAE,WAAYozB,IAAIvnB,GAAG,cAAc,SAAUhM,GACzC6b,IAAI2c,gBAERr4B,EAAE,WAAYozB,IAAIvnB,GAAG,aAAa,SAAUrM,GAGxC,GAAIA,EAAEoa,MAAQua,WAAW7E,IAAInxB,GAAKqB,EAAEoa,MAAQua,WAAW7E,IAAIhyB,GAAKkC,EAAE8tB,MAAQ6G,WAAW7E,IAAI/wB,GAAKiB,EAAE8tB,MAAQ6G,WAAW7E,IAAIsG,EAEnH,OADAjb,KAAK0b,aACE,EAEXjD,GAAGK,aAAc,EACbL,GAAGQ,mBAAqB5zB,EAAE,cAAeozB,IAAI/yB,GAAG,aAChDqb,IAAI0c,SAAS54B,GAEb4zB,GAAGQ,mBAA0C,QAArBN,SAAS5Y,UAA4C,QAArB4Y,SAAS5Y,UAAsB0Y,GAAGW,YAC1FpZ,KAAK2b,YAAY92B,MAGzB,IAAI84B,cAAgB,IAAItc,MACpB3e,EAAI,EAEJk7B,UAAY,IAAIvc,MAOpB,GANAuc,UAAYv4B,EAAE,IAAKA,EAAE,sBAAsB8M,QAAO,WAE9C,GADU9M,EAAEV,MAAM+B,KAAK,OACfuE,SAASwtB,GAAG3T,KAChB,OAAOngB,QAGXi5B,UAAUh4B,OAAS,EAAG,CAEtB,IAAI+G,MAAQixB,UAAU1yB,OAAO,EAAG,GAChC0yB,UAAU9rB,KAAKnF,OAEnBixB,UAAU/rB,MAAK,WAEX,GAAI8mB,SAAS1Y,cAAe,CACxB,IAAI4d,cAAgBx4B,EAAEuzB,OAAO,GAAI8B,KAAK,IAAMr1B,EAAEwX,KAAKxX,EAAEV,MAAM+B,KAAK,QAAU,MAC1Ei3B,cAAcj7B,GAAK,IAAIktB,MACvB+N,cAAcj7B,GAAGknB,IAAMiU,cAAchE,WACrCn3B,IAEJ2C,EAAEV,MAAMuM,GAAG,mBAAmB,SAAUrM,GACpC,OAAIQ,EAAEV,MAAM0B,SAAS,qBAGrBu3B,UAAU/rB,MAAK,WACXxM,EAAEV,MAAMgF,YAAY,mBACpBtE,EAAEV,MAAM2B,QAAQ,2BAA2BqD,YAAY,mBAE3D9E,EAAEmB,iBACF+a,IAAI+c,UAAUn5B,QAPH,SAYvB04B,KAAM,WACF,GAA2B,GAAvB5E,GAAGQ,kBAAqD,GAAxBR,GAAGO,kBAA4B,CAC/D,IAAInvB,EAAMxE,EAAEozB,IAAI/xB,KAAK,QACrB+xB,GAAGO,mBAAoB,EACvBa,WAAWoD,UAAUpzB,KAG7B4zB,SAAU,SAAU54B,GAChBuvB,aAAaqE,GAAGS,OAEhBlZ,KAAKjY,OACL4xB,MAAMgC,cACNhC,MAAM5xB,QAEV21B,WAAY,SAAU74B,GAClB,OAAQ8zB,SAAS5Y,UACb,IAAK,OAED,MACJ,QACIsZ,IAAI3yB,KAAK,QAAS+xB,GAAGa,YACrBj0B,EAAEozB,IAAI/xB,KAAK,QAAS+xB,GAAG3E,OACnB6E,SAASzY,SACTF,KAAK0b,aAEL/B,MAAM7xB,OACNkY,KAAKlY,QAIjB2wB,GAAGK,aAAc,GAErBgF,UAAW,SAAAA,UAAUC,MACjBtF,GAAGO,mBAAoB,EACvBP,GAAGQ,kBAAmB,EACtB,IAAI3oB,QAAU,IAAIlN,OAElB,GADAkN,QAAUjL,EAAEuzB,OAAO,GAAI8B,KAAK,IAAMr1B,EAAEwX,KAAKxX,EAAE04B,MAAMr3B,KAAK,QAAU,OAC5D4J,QAAQkpB,aAAclpB,QAAQupB,WAY9B,MADA5I,MAAM,4DACA,2DAXN,IAAIuI,WAAalpB,QAAQkpB,WACrBK,WAAavpB,QAAQupB,WAY7B,OAXIx0B,EAAE04B,MAAMv0B,SAAS,mBACjBnE,EAAE04B,MAAMz3B,QAAQ,2BAA2BkD,SAAS,gBACpDnE,EAAEozB,IAAI/xB,KAAK,OAAQmzB,YACnBR,IAAI3yB,KAAK,MAAO8yB,YAChBxZ,KAAKlY,OACL6xB,MAAM7xB,OACNiZ,IAAIsc,QAKD,KAIXhE,IAAI,GAAG2E,WAEPxE,WAAWmB,YACqB,GAA5Bt1B,EAAE,WAAYozB,IAAI7yB,QAAamb,IAAI/c,UA8a3CqB,EAAEozB,IAAIjyB,KAAK,SAAUua,MAGzB1b,EAAEya,OAAS,CACP+Y,SAAU,CACN9Y,SAAU,WAEVM,UAAW,IAEXE,WAAY,IAEZJ,QAAS,GAETC,QAAS,EAET4X,SAAU,QAEV/X,eAAe,EAEfqb,YAAa,eAEbxH,OAAO,EACP9T,MAAM,EACNkc,aAAc,GACdhc,UAAU,EACV6c,WAAY,OAEZF,WAAY,OAEZG,YAAa,OAEbF,aAAc,QAElBmB,QAAS,SAAUxF,GAGf,OAFUpzB,EAAEozB,GAAIjyB,KAAK,UACjBy3B,WACG,GAEXzjB,OAAQ,SAAUie,GAGd,OAFUpzB,EAAEozB,GAAIjyB,KAAK,UACjBgU,UACG,GAEX0jB,WAAY,SAAUzF,GAClBH,wBAAyB,GAE7B6F,UAAW,SAAU1F,GACjBH,wBAAyB,IArsBrC,CAwsBGL,S,wPCjtBH,WACI,aACA,IAAI5yB,EA+4IY+4B,EAfJC,EA33IR7oB,EAAS,SAATA,EAAmB7H,EAAW2wB,GAC9B,KAAM35B,gBAAgB6Q,GAAS,OAAO,IAAIA,EAAO7H,EAAW2wB,GAG5D,IAAIzF,EAAW,CACX9I,UAAW,aACXwO,kBAAmB,YACnBC,aAAc,EACd9J,MAAO,IAEPrb,UAAU,EACVolB,8BAA8B,EAC9BC,oBAAoB,EAEpBC,uBAAuB,EACvBC,sBAAuB,GAEvBC,UAAU,EACVC,kBAAkB,EAClBC,sBAAuB,EACvBC,wBAAwB,EACxBC,4BAA6B,EAC7BC,8BAA+B,EAC/BC,gBAAgB,EAChBC,wBAAyB,IAEzBC,YAAY,EAEZC,gBAAgB,EAEhBC,kBAAkB,EAElBC,OAAQ,QACRC,UAAW,CACPC,OAAQ,GACRC,QAAS,EACTC,MAAO,IACPC,SAAU,EACVC,cAAe,GAEnBC,KAAM,CACFD,cAAe,EACfE,eAAe,GAEnBC,KAAM,CACFH,cAAc,EACdI,QAAQ,EACRC,aAAc,GACdC,YAAa,KAEjBlK,KAAM,CACFmK,WAAW,GAGfC,UAAU,EAEV7qB,MAAM,EACN8qB,QAAS,EACTC,QAAS,EACTC,YAAY,EAEZC,UAAW,KACXC,eAAe,EACfC,oBAAoB,EACpBC,wBAAwB,EAExB3qB,iBAAiB,EACjBC,mBAAmB,EACnB2qB,0BAA0B,EAC1BC,kBAAkB,EAClB3qB,uBAAuB,EACvB4qB,sBAAuB,EACvBC,uBAAwB,YAExBC,SAAS,EACTC,mBAAmB,EAEnB1b,SAAS,EAET2b,cAAc,EAEd5oB,iBAAaga,EAEb6O,aAAc,EACd3rB,cAAe,EACfI,gBAAiB,EACjBwrB,oBAAqB,SACrBvrB,eAAgB,EAChBC,gBAAgB,EAChBurB,mBAAoB,EACpBC,kBAAmB,EAEnBC,cAAc,EAEdC,WAAY,EACZC,WAAY,GACZC,eAAe,EACfC,aAAa,EACbC,YAAY,EACZC,gBAAiB,GACjBC,aAAc,IACdC,cAAc,EACdC,cAAc,EACdC,UAAW,EACXC,0BAA0B,EAC1BC,qBAAqB,EAErBC,mBAAmB,EAEnBzsB,WAAY,KACZ0sB,kBAAmB,OACnBtsB,qBAAqB,EACrBusB,gBAAgB,EAChBC,uBAAwB,KACxBC,yBAA0B,KAC1BC,yBAA0B,KAC1BC,uBAAwB,KACxBC,eAAgB,UAEhBC,YAAY,EACZC,gBAAiB,IAEjBptB,WAAY,KACZC,WAAY,KAEZotB,qBAAqB,EACrBC,uBAAuB,EAEvB5sB,YAAY,EAEZ6sB,eAAe,EACfC,0BAA0B,EAC1BC,qBAAqB,EAErBC,aAAa,EACbC,uBAAuB,EACvBC,4BAA6B,EAC7BC,8BAA8B,EAE9BvjB,eAAe,EACfwjB,qBAAqB,EAErB3rB,MAAM,EACN4rB,qBAAsB,EACtBC,aAAc,KAEdC,aAASpR,EACTqR,gBAAgB,EAChBC,UAAW,QACXC,qBAAqB,EAErBC,kBAAkB,EAClBC,kBAAkB,EAClBC,aAAc,KACdC,WAAW,EACXC,eAAgB,oBAEhBC,kBAAkB,EAElBC,uBAAwB,oBACxBC,WAAY,eACZC,iBAAkB,sBAClBC,0BAA2B,gCAC3BC,kBAAmB,uBACnBC,oBAAqB,yBACrBC,eAAgB,oBAChBC,wBAAyB,8BACzBC,eAAgB,oBAChBC,wBAAyB,8BACzBC,aAAc,iBACdC,YAAa,2BACbC,kBAAmB,kCACnBC,oBAAqB,yBACrBC,uBAAwB,4BACxBC,qBAAsB,0BACtBC,sBAAuB,2BACvBC,2BAA4B,gCAC5BC,yBAA0B,8BAC1BC,wBAAyB,qBACzBC,iBAAkB,cAClBC,uBAAwB,sBACxBC,sBAAuB,qBACvBC,mBAAoB,wBACpBC,kBAAmB,sBACnBC,eAAgB,YAChBC,mBAAoB,wBAGpB7nB,UAAU,EACV8nB,gBAAgB,EAEhBC,MAAM,EACNC,iBAAkB,iBAClBC,iBAAkB,aAClBC,kBAAmB,0BACnBC,iBAAkB,yBAClBC,wBAAyB,wBAEzBC,oBAAoB,GAiCpBC,EAA0BnI,GAAUA,EAAOiB,iBAE/CjB,EAASA,GAAU,GACnB,IAAIoI,EAAiB,GACrB,IAAK,IAAIC,KAASrI,EACd,GAA6B,WAAzBv5B,EAAOu5B,EAAOqI,KAAyC,OAAlBrI,EAAOqI,KAAqBrI,EAAOqI,GAAOC,UAAYtI,EAAOqI,KAAW7hC,QAAUw5B,EAAOqI,KAAWr1B,eAA6B,IAATu1B,GAAwBvI,EAAOqI,aAAkBE,GAA4B,oBAAX5O,QAA0BqG,EAAOqI,aAAkB1O,QAOlRyO,EAAeC,GAASrI,EAAOqI,QAL/B,IAAK,IAAIG,KADTJ,EAAeC,GAAS,GACFrI,EAAOqI,GACzBD,EAAeC,GAAOG,GAAaxI,EAAOqI,GAAOG,GAO7D,IAAK,IAAIC,KAAOlO,EACZ,QAA2B,IAAhByF,EAAOyI,GACdzI,EAAOyI,GAAOlO,EAASkO,QAEtB,GAA2B,WAAvBhiC,EAAOu5B,EAAOyI,IACnB,IAAK,IAAIC,KAAWnO,EAASkO,QACW,IAAzBzI,EAAOyI,GAAKC,KACnB1I,EAAOyI,GAAKC,GAAWnO,EAASkO,GAAKC,IAOrD,IAAIviC,EAAIE,KAcR,GAXAF,EAAE65B,OAASA,EACX75B,EAAEiiC,eAAiBA,EAGnBjiC,EAAEwiC,WAAa,QAIE,IAAN5hC,QAAqC,IAATwhC,IACnCxhC,EAAIwhC,SAES,IAANxhC,IAEHA,OADgB,IAATwhC,EACH/hC,OAAO+hC,MAAQ/hC,OAAOoiC,OAASpiC,OAAOmzB,OAGtC4O,MAKZpiC,EAAEY,EAAIA,EAKNZ,EAAE0iC,uBAAoB3U,EACtB/tB,EAAE2iC,oBAAsB,WAEpB,IAAK3iC,EAAE65B,OAAO9lB,YAAa,OAAO,EAClC,IACiB6uB,EADbC,GAAa,EACbC,EAAS,GACb,IAAMF,KAAS5iC,EAAE65B,OAAO9lB,YAChB/T,EAAE65B,OAAO9lB,YAAYjU,eAAe8iC,IACpCE,EAAOz1B,KAAKu1B,GAGpBE,EAAO3tB,MAAK,SAAU4tB,EAAGvM,GACrB,OAAOhzB,SAASu/B,EAAG,IAAMv/B,SAASgzB,EAAG,OAEzC,IAAK,IAAIv4B,EAAI,EAAGA,EAAI6kC,EAAO3hC,OAAQlD,KAC/B2kC,EAAQE,EAAO7kC,KACFoC,OAAOwb,aAAegnB,IAC/BA,EAAaD,GAGrB,OAAOC,GAAc,OAEzB7iC,EAAEgjC,cAAgB,WAEd,IAAIH,EAAa7iC,EAAE2iC,sBACnB,GAAIE,GAAc7iC,EAAE0iC,oBAAsBG,EAAY,CAClD,IAAII,EAAoBJ,KAAc7iC,EAAE65B,OAAO9lB,YAAc/T,EAAE65B,OAAO9lB,YAAY8uB,GAAc7iC,EAAEiiC,eAC9FiB,EAAcljC,EAAE65B,OAAOxmB,MAAS4vB,EAAkBhyB,gBAAkBjR,EAAE65B,OAAO5oB,cACjF,IAAM,IAAIixB,KAASe,EACfjjC,EAAE65B,OAAOqI,GAASe,EAAkBf,GAExCliC,EAAE0iC,kBAAoBG,EACnBK,GAAeljC,EAAEmjC,aAChBnjC,EAAEojC,QAAO,KAKjBpjC,EAAE65B,OAAO9lB,aACT/T,EAAEgjC,gBAMNhjC,EAAEkJ,UAAYtI,EAAEsI,GACW,IAAvBlJ,EAAEkJ,UAAU/H,QAAhB,CACA,GAAInB,EAAEkJ,UAAU/H,OAAS,EAAG,CACxB,IAAIkiC,EAAU,GAKd,OAJArjC,EAAEkJ,UAAUkE,MAAK,WAEbi2B,EAAQh2B,KAAK,IAAI0D,EAAO7Q,KAAM25B,OAE3BwJ,EAIXrjC,EAAEkJ,UAAU,GAAGhC,OAASlH,EACxBA,EAAEkJ,UAAUnH,KAAK,SAAU/B,GAE3BA,EAAEwiC,WAAWn1B,KAAKrN,EAAE65B,OAAOgG,uBAAyB7/B,EAAE65B,OAAOvO,WAEzDtrB,EAAE65B,OAAOO,UACTp6B,EAAEwiC,WAAWn1B,KAAKrN,EAAE65B,OAAOgG,uBAAyB,aAEnD7/B,EAAEsjC,QAAQC,UACXvjC,EAAEwiC,WAAWn1B,KAAKrN,EAAE65B,OAAOgG,uBAAyB,cACpD7/B,EAAE65B,OAAOxoB,gBAAkB,GAE3BrR,EAAE65B,OAAOe,YACT56B,EAAEwiC,WAAWn1B,KAAKrN,EAAE65B,OAAOgG,uBAAyB,eAGpD7/B,EAAE65B,OAAOgC,UAAY77B,EAAE65B,OAAO2E,yBAC9Bx+B,EAAE65B,OAAO0E,qBAAsB,GAG/Bv+B,EAAE65B,OAAO+D,sBACT59B,EAAE65B,OAAOyE,gBAAkB,GAG3B,CAAC,OAAQ,YAAa,QAAQ/5B,QAAQvE,EAAE65B,OAAOkB,SAAW,IACtD/6B,EAAEsjC,QAAQE,cACVxjC,EAAE65B,OAAO0E,qBAAsB,EAC/Bv+B,EAAEwiC,WAAWn1B,KAAKrN,EAAE65B,OAAOgG,uBAAyB,OAGpD7/B,EAAE65B,OAAOkB,OAAS,SAGF,UAApB/6B,EAAE65B,OAAOkB,QACT/6B,EAAEwiC,WAAWn1B,KAAKrN,EAAE65B,OAAOgG,uBAAyB7/B,EAAE65B,OAAOkB,QAEzC,SAApB/6B,EAAE65B,OAAOkB,SACT/6B,EAAE65B,OAAOyE,gBAAkB,EAC3Bt+B,EAAE65B,OAAO5oB,cAAgB,EACzBjR,EAAE65B,OAAOxoB,gBAAkB,EAC3BrR,EAAE65B,OAAOvoB,eAAiB,EAC1BtR,EAAE65B,OAAOtoB,gBAAiB,EAC1BvR,EAAE65B,OAAO+C,aAAe,EACxB58B,EAAE65B,OAAOiB,kBAAmB,GAER,SAApB96B,EAAE65B,OAAOkB,QAAyC,SAApB/6B,EAAE65B,OAAOkB,SACvC/6B,EAAE65B,OAAO5oB,cAAgB,EACzBjR,EAAE65B,OAAOxoB,gBAAkB,EAC3BrR,EAAE65B,OAAOvoB,eAAiB,EAC1BtR,EAAE65B,OAAO0E,qBAAsB,EAC/Bv+B,EAAE65B,OAAO+C,aAAe,OACe,IAA5BoF,IACPhiC,EAAE65B,OAAOiB,kBAAmB,IAKhC96B,EAAE65B,OAAOjoB,YAAc5R,EAAEsjC,QAAQG,QACjCzjC,EAAE65B,OAAOjoB,YAAa,GAI1B5R,EAAEulB,QAAUvlB,EAAEkJ,UAAUoB,SAAS,IAAMtK,EAAE65B,OAAO0G,cAG5CvgC,EAAE65B,OAAOzoB,aACTpR,EAAE0jC,oBAAsB9iC,EAAEZ,EAAE65B,OAAOzoB,YAC/BpR,EAAE65B,OAAOgE,mBAAoD,iBAAxB79B,EAAE65B,OAAOzoB,YAA2BpR,EAAE0jC,oBAAoBviC,OAAS,GAAsD,IAAjDnB,EAAEkJ,UAAUpH,KAAK9B,EAAE65B,OAAOzoB,YAAYjQ,SACnJnB,EAAE0jC,oBAAsB1jC,EAAEkJ,UAAUpH,KAAK9B,EAAE65B,OAAOzoB,aAGtB,YAA5BpR,EAAE65B,OAAOuE,gBAAgCp+B,EAAE65B,OAAOroB,oBAClDxR,EAAE0jC,oBAAoB3+B,SAAS/E,EAAE65B,OAAOmH,wBAA0B,aAGlEhhC,EAAE65B,OAAOroB,qBAAsB,EAEnCxR,EAAE0jC,oBAAoB3+B,SAAS/E,EAAE65B,OAAOmH,wBAA0BhhC,EAAE65B,OAAOuE,kBAG3Ep+B,EAAE65B,OAAO3oB,YAAclR,EAAE65B,OAAO1oB,cAC5BnR,EAAE65B,OAAO3oB,aACTlR,EAAEkR,WAAatQ,EAAEZ,EAAE65B,OAAO3oB,YACtBlR,EAAE65B,OAAOgE,mBAAoD,iBAAxB79B,EAAE65B,OAAO3oB,YAA2BlR,EAAEkR,WAAW/P,OAAS,GAAsD,IAAjDnB,EAAEkJ,UAAUpH,KAAK9B,EAAE65B,OAAO3oB,YAAY/P,SAC1InB,EAAEkR,WAAalR,EAAEkJ,UAAUpH,KAAK9B,EAAE65B,OAAO3oB,cAG7ClR,EAAE65B,OAAO1oB,aACTnR,EAAEmR,WAAavQ,EAAEZ,EAAE65B,OAAO1oB,YACtBnR,EAAE65B,OAAOgE,mBAAoD,iBAAxB79B,EAAE65B,OAAO1oB,YAA2BnR,EAAEmR,WAAWhQ,OAAS,GAAsD,IAAjDnB,EAAEkJ,UAAUpH,KAAK9B,EAAE65B,OAAO1oB,YAAYhQ,SAC1InB,EAAEmR,WAAanR,EAAEkJ,UAAUpH,KAAK9B,EAAE65B,OAAO1oB,eAMrDnR,EAAE2jC,aAAe,WACb,MAA8B,eAAvB3jC,EAAE65B,OAAOvO,WAKpBtrB,EAAEqhB,IAAMrhB,EAAE2jC,iBAAwD,QAArC3jC,EAAEkJ,UAAU,GAAG06B,IAAItrB,eAA4D,QAAjCtY,EAAEkJ,UAAU5B,IAAI,cACvFtH,EAAEqhB,KACFrhB,EAAEwiC,WAAWn1B,KAAKrN,EAAE65B,OAAOgG,uBAAyB,OAIpD7/B,EAAEqhB,MACFrhB,EAAE6jC,SAAwC,gBAA7B7jC,EAAEulB,QAAQje,IAAI,YAI3BtH,EAAE65B,OAAOxoB,gBAAkB,GAC3BrR,EAAEwiC,WAAWn1B,KAAKrN,EAAE65B,OAAOgG,uBAAyB,YAIpD7/B,EAAE8jC,OAAOC,SACT/jC,EAAEwiC,WAAWn1B,KAAKrN,EAAE65B,OAAOgG,uBAAyB,WAIxD7/B,EAAEkJ,UAAUnE,SAAS/E,EAAEwiC,WAAW74B,KAAK,MAGvC3J,EAAEgkC,UAAY,EAGdhkC,EAAEikC,SAAW,EAGbjkC,EAAEkkC,SAAW,EAKblkC,EAAEmkC,gBAAkB,WAChBnkC,EAAE65B,OAAO2F,kBAAmB,GACM,IAA9Bx/B,EAAE65B,OAAO0F,kBAA8Bv/B,EAAE65B,OAAOjoB,YAChD5R,EAAEokC,mBAGVpkC,EAAEqkC,gBAAkB,WAChBrkC,EAAE65B,OAAO0F,kBAAmB,GACM,IAA9Bv/B,EAAE65B,OAAO2F,kBAA8Bx/B,EAAE65B,OAAOjoB,YAChD5R,EAAEokC,mBAGVpkC,EAAEskC,WAAa,WACXtkC,EAAE65B,OAAO2F,iBAAmBx/B,EAAE65B,OAAO0F,kBAAmB,EACpDv/B,EAAE65B,OAAOjoB,YAAY5R,EAAEokC,mBAE/BpkC,EAAEukC,kBAAoB,WAClBvkC,EAAE65B,OAAO2F,kBAAmB,GACM,IAA9Bx/B,EAAE65B,OAAO0F,kBAA6Bv/B,EAAE65B,OAAOjoB,YAC/C5R,EAAEwkC,iBAGVxkC,EAAEykC,kBAAoB,WAClBzkC,EAAE65B,OAAO0F,kBAAmB,GACM,IAA9Bv/B,EAAE65B,OAAO2F,kBAA6Bx/B,EAAE65B,OAAOjoB,YAC/C5R,EAAEwkC,iBAGVxkC,EAAE0kC,aAAe,WACb1kC,EAAE65B,OAAO2F,iBAAmBx/B,EAAE65B,OAAO0F,kBAAmB,EACpDv/B,EAAE65B,OAAOjoB,YAAY5R,EAAEwkC,iBAY/BxkC,EAAEwkC,cAAgB,SAASG,GACvB3kC,EAAEkJ,UAAU,GAAG2R,MAAMod,OAAS,OAC9Bj4B,EAAEkJ,UAAU,GAAG2R,MAAMod,OAAS0M,EAAS,mBAAqB,eAC5D3kC,EAAEkJ,UAAU,GAAG2R,MAAMod,OAAS0M,EAAS,eAAiB,YACxD3kC,EAAEkJ,UAAU,GAAG2R,MAAMod,OAAS0M,EAAS,WAAY,QAEvD3kC,EAAEokC,gBAAkB,WAChBpkC,EAAEkJ,UAAU,GAAG2R,MAAMod,OAAS,IAE9Bj4B,EAAE65B,OAAOjoB,YACT5R,EAAEwkC,gBAKNxkC,EAAE4kC,aAAe,GACjB5kC,EAAE6kC,aAAe,EAEjB7kC,EAAEwmB,UAAY,SAAUse,EAAY3f,EAAK4f,EAAQC,EAAOC,EAAkB1U,GACtE,IAAI/hB,EACJ,SAAS02B,IACD3U,GAAUA,IAEbuU,EAAWvL,UAAa0L,EAmBzBC,IAlBI/f,IACA3W,EAAQ,IAAInO,OAAO8qB,OACbyL,OAASsO,EACf12B,EAAMmoB,QAAUuO,EACZF,IACAx2B,EAAMw2B,MAAQA,GAEdD,IACAv2B,EAAMu2B,OAASA,GAEf5f,IACA3W,EAAM2W,IAAMA,IAGhB+f,KAOZllC,EAAEwb,cAAgB,WAEd,SAAS2pB,IACD,MAAOnlC,GAAoCA,SACxB+tB,IAAnB/tB,EAAE6kC,cAA4B7kC,EAAE6kC,eAChC7kC,EAAE6kC,eAAiB7kC,EAAE4kC,aAAazjC,SAC9BnB,EAAE65B,OAAOmF,qBAAqBh/B,EAAE6V,SACpC7V,EAAEolC,KAAK,gBAAiBplC,KANhCA,EAAE4kC,aAAe5kC,EAAEkJ,UAAUpH,KAAK,OASlC,IAAK,IAAI7D,EAAI,EAAGA,EAAI+B,EAAE4kC,aAAazjC,OAAQlD,IACvC+B,EAAEwmB,UAAUxmB,EAAE4kC,aAAa3mC,GAAK+B,EAAE4kC,aAAa3mC,GAAGonC,YAAcrlC,EAAE4kC,aAAa3mC,GAAGmnB,aAAa,OAAUplB,EAAE4kC,aAAa3mC,GAAG8mC,QAAU/kC,EAAE4kC,aAAa3mC,GAAGmnB,aAAa,UAAYplB,EAAE4kC,aAAa3mC,GAAG+mC,OAAShlC,EAAE4kC,aAAa3mC,GAAGmnB,aAAa,UAAU,EAAM+f,IAOlQnlC,EAAEslC,uBAAoBvX,EACtB/tB,EAAEulC,aAAc,EAChBvlC,EAAEwlC,gBAAiB,EA8BnBxlC,EAAEylC,cAAgB,WACd,YAAmC,IAAxBzlC,EAAEslC,sBACRtlC,EAAE65B,OAAOjlB,YACV5U,EAAEulC,cACNvlC,EAAEulC,aAAc,EAChBvlC,EAAEolC,KAAK,kBAAmBplC,QAC1B4U,QAEJ5U,EAAE0lC,aAAe,SAAUC,GAClB3lC,EAAEslC,oBACHtlC,EAAEslC,mBAAmB3V,aAAa3vB,EAAEslC,mBACxCtlC,EAAEulC,aAAc,EAChBvlC,EAAEslC,uBAAoBvX,EACtB/tB,EAAEolC,KAAK,iBAAkBplC,KAE7BA,EAAE4lC,cAAgB,SAAU3V,GACpBjwB,EAAEwlC,iBACFxlC,EAAEslC,mBAAmB3V,aAAa3vB,EAAEslC,mBACxCtlC,EAAEwlC,gBAAiB,EACL,IAAVvV,GACAjwB,EAAEwlC,gBAAiB,EACnB5wB,KAGA5U,EAAEulB,QAAQsgB,eAAc,WACf7lC,IACLA,EAAEwlC,gBAAiB,EACdxlC,EAAEulC,YAIH3wB,IAHA5U,EAAE0lC,qBAWlB1lC,EAAE8lC,aAAe,WACb,OAAS9lC,EAAE+lC,SAAS,IAExB/lC,EAAEgmC,aAAe,WACb,OAAShmC,EAAE+lC,SAAS/lC,EAAE+lC,SAAS5kC,OAAS,IAK5CnB,EAAEimC,iBAAmB,WACjB,IAEIhoC,EAFAioC,EAAe,GACfC,EAAY,EAIhB,GAA8B,SAA3BnmC,EAAE65B,OAAO5oB,eAA4BjR,EAAE65B,OAAO5oB,cAAgB,EAC7D,IAAKhT,EAAI,EAAGA,EAAIwrB,KAAK2c,KAAKpmC,EAAE65B,OAAO5oB,eAAgBhT,IAAK,CACpD,IAAI6I,EAAQ9G,EAAEqmC,YAAcpoC,EAC5B,GAAG6I,EAAQ9G,EAAEsmC,OAAOnlC,OAAQ,MAC5B+kC,EAAa74B,KAAKrN,EAAEsmC,OAAO9xB,GAAG1N,GAAO,SAGzCo/B,EAAa74B,KAAKrN,EAAEsmC,OAAO9xB,GAAGxU,EAAEqmC,aAAa,IAIjD,IAAKpoC,EAAI,EAAGA,EAAIioC,EAAa/kC,OAAQlD,IACjC,QAA+B,IAApBioC,EAAajoC,GAAoB,CACxC,IAAI4U,EAASqzB,EAAajoC,GAAG2c,aAC7BurB,EAAYtzB,EAASszB,EAAYtzB,EAASszB,EAK9CA,GAAWnmC,EAAEulB,QAAQje,IAAI,SAAU6+B,EAAY,OAEvDnmC,EAAEumC,oBAAsB,WACpB,IAAInyB,EAAOvB,EAEPuB,OAD0B,IAAnBpU,EAAE65B,OAAOzlB,MACRpU,EAAE65B,OAAOzlB,MAGTpU,EAAEkJ,UAAU,GAAGggB,YAGvBrW,OAD2B,IAApB7S,EAAE65B,OAAOhnB,OACP7S,EAAE65B,OAAOhnB,OAGT7S,EAAEkJ,UAAU,GAAGs9B,aAEd,IAAVpyB,GAAepU,EAAE2jC,gBAA6B,IAAX9wB,IAAiB7S,EAAE2jC,iBAK1DvvB,EAAQA,EAAQ5Q,SAASxD,EAAEkJ,UAAU5B,IAAI,gBAAiB,IAAM9D,SAASxD,EAAEkJ,UAAU5B,IAAI,iBAAkB,IAC3GuL,EAASA,EAASrP,SAASxD,EAAEkJ,UAAU5B,IAAI,eAAgB,IAAM9D,SAASxD,EAAEkJ,UAAU5B,IAAI,kBAAmB,IAG7GtH,EAAEoU,MAAQA,EACVpU,EAAE6S,OAASA,EACX7S,EAAEymC,KAAOzmC,EAAE2jC,eAAiB3jC,EAAEoU,MAAQpU,EAAE6S,SAG5C7S,EAAE6T,iBAAmB,WACjB7T,EAAEsmC,OAAStmC,EAAEulB,QAAQjb,SAAS,IAAMtK,EAAE65B,OAAOiG,YAC7C9/B,EAAE+lC,SAAW,GACb/lC,EAAE0mC,WAAa,GACf1mC,EAAE2mC,gBAAkB,GAEpB,IAEI1oC,EAFA2+B,EAAe58B,EAAE65B,OAAO+C,aACxBgK,GAAiB5mC,EAAE65B,OAAOiD,mBAE1B+J,EAAgB,EAChB//B,EAAQ,EACZ,QAAsB,IAAX9G,EAAEymC,KAAb,CAUA,IAAIK,EAcAC,EAvBwB,iBAAjBnK,GAA6BA,EAAar4B,QAAQ,MAAQ,IACjEq4B,EAAe1S,WAAW0S,EAAavkB,QAAQ,IAAK,KAAO,IAAMrY,EAAEymC,MAGvEzmC,EAAEgnC,aAAepK,EAEb58B,EAAEqhB,IAAKrhB,EAAEsmC,OAAOh/B,IAAI,CAAC2/B,WAAY,GAAIC,UAAW,KAC/ClnC,EAAEsmC,OAAOh/B,IAAI,CAAC6/B,YAAa,GAAIC,aAAc,KAG9CpnC,EAAE65B,OAAOxoB,gBAAkB,IAEvBy1B,EADArd,KAAK4d,MAAMrnC,EAAEsmC,OAAOnlC,OAASnB,EAAE65B,OAAOxoB,mBAAqBrR,EAAEsmC,OAAOnlC,OAASnB,EAAE65B,OAAOxoB,gBAC7DrR,EAAEsmC,OAAOnlC,OAGTsoB,KAAK2c,KAAKpmC,EAAEsmC,OAAOnlC,OAASnB,EAAE65B,OAAOxoB,iBAAmBrR,EAAE65B,OAAOxoB,gBAE/D,SAA3BrR,EAAE65B,OAAO5oB,eAA6D,QAAjCjR,EAAE65B,OAAOgD,sBAC9CiK,EAAyBrd,KAAK4D,IAAIyZ,EAAwB9mC,EAAE65B,OAAO5oB,cAAgBjR,EAAE65B,OAAOxoB,mBAMpG,IAmFIi2B,EAnFAj2B,EAAkBrR,EAAE65B,OAAOxoB,gBAC3Bk2B,EAAeT,EAAyBz1B,EACxCm2B,EAAiBD,GAAgBvnC,EAAE65B,OAAOxoB,gBAAkBk2B,EAAevnC,EAAEsmC,OAAOnlC,QACxF,IAAKlD,EAAI,EAAGA,EAAI+B,EAAEsmC,OAAOnlC,OAAQlD,IAAK,CAClC8oC,EAAY,EACZ,IAGQU,EACAC,EAAQC,EAJZjc,EAAQ1rB,EAAEsmC,OAAO9xB,GAAGvW,GACxB,GAAI+B,EAAE65B,OAAOxoB,gBAAkB,EAIU,WAAjCrR,EAAE65B,OAAOgD,qBAET8K,EAAM1pC,GADNypC,EAASje,KAAK4d,MAAMppC,EAAIoT,IACLA,GACfq2B,EAASF,GAAmBE,IAAWF,GAAkBG,IAAQt2B,EAAgB,MAC3Es2B,GAAOt2B,IACTs2B,EAAM,EACND,KAGRD,EAAqBC,EAASC,EAAMb,EAAyBz1B,EAC7Dqa,EACKpkB,IAAI,CACD,4BAA6BmgC,EAC7B,yBAA0BA,EAC1B,iBAAkBA,EAClB,gBAAiBA,EACjB,MAASA,KAKjBC,EAASzpC,GADT0pC,EAAMle,KAAK4d,MAAMppC,EAAIspC,IACFA,EAEvB7b,EACKpkB,IACG,WAAatH,EAAE2jC,eAAiB,MAAQ,QAC/B,IAARgE,GAAa3nC,EAAE65B,OAAO+C,cAAkB58B,EAAE65B,OAAO+C,aAAe,MAEpE36B,KAAK,qBAAsBylC,GAC3BzlC,KAAK,kBAAmB0lC,GAGJ,SAAzBjc,EAAMpkB,IAAI,aACiB,SAA3BtH,EAAE65B,OAAO5oB,eACT81B,EAAY/mC,EAAE2jC,eAAiBjY,EAAM4K,YAAW,GAAQ5K,EAAM3P,aAAY,GACtE/b,EAAE65B,OAAOmD,eAAc+J,EAAY5O,EAAM4O,MAG7CA,GAAa/mC,EAAEymC,MAAQzmC,EAAE65B,OAAO5oB,cAAgB,GAAK2rB,GAAgB58B,EAAE65B,OAAO5oB,cAC1EjR,EAAE65B,OAAOmD,eAAc+J,EAAY5O,EAAM4O,IAEzC/mC,EAAE2jC,eACF3jC,EAAEsmC,OAAOroC,GAAG4c,MAAMzG,MAAQ2yB,EAAY,KAGtC/mC,EAAEsmC,OAAOroC,GAAG4c,MAAMhI,OAASk0B,EAAY,MAG/C/mC,EAAEsmC,OAAOroC,GAAG2pC,gBAAkBb,EAC9B/mC,EAAE2mC,gBAAgBt5B,KAAK05B,GAGnB/mC,EAAE65B,OAAOtoB,gBACTq1B,EAAgBA,EAAgBG,EAAY,EAAIF,EAAgB,EAAIjK,EAC/C,IAAlBiK,GAA6B,IAAN5oC,IAAS2oC,EAAgBA,EAAgB5mC,EAAEymC,KAAO,EAAI7J,GACtE,IAAN3+B,IAAS2oC,EAAgBA,EAAgB5mC,EAAEymC,KAAO,EAAI7J,GACtDnT,KAAKC,IAAIkd,GAAiB,OAAUA,EAAgB,GACnD9/B,EAAS9G,EAAE65B,OAAOvoB,gBAAmB,GAAGtR,EAAE+lC,SAAS14B,KAAKu5B,GAC7D5mC,EAAE0mC,WAAWr5B,KAAKu5B,KAGb9/B,EAAS9G,EAAE65B,OAAOvoB,gBAAmB,GAAGtR,EAAE+lC,SAAS14B,KAAKu5B,GAC7D5mC,EAAE0mC,WAAWr5B,KAAKu5B,GAClBA,EAAgBA,EAAgBG,EAAYnK,GAGhD58B,EAAEgnC,aAAeD,EAAYnK,EAE7BiK,EAAgBE,EAEhBjgC,KAcJ,GAZA9G,EAAEgnC,YAAcvd,KAAK4D,IAAIrtB,EAAEgnC,YAAahnC,EAAEymC,MAAQzmC,EAAE65B,OAAOkD,kBAIvD/8B,EAAEqhB,KAAOrhB,EAAE6jC,WAAiC,UAApB7jC,EAAE65B,OAAOkB,QAA0C,cAApB/6B,EAAE65B,OAAOkB,SAChE/6B,EAAEulB,QAAQje,IAAI,CAAC8M,MAAOpU,EAAEgnC,YAAchnC,EAAE65B,OAAO+C,aAAe,OAE7D58B,EAAEsjC,QAAQC,UAAWvjC,EAAE65B,OAAOgB,iBAC3B76B,EAAE2jC,eAAgB3jC,EAAEulB,QAAQje,IAAI,CAAC8M,MAAOpU,EAAEgnC,YAAchnC,EAAE65B,OAAO+C,aAAe,OAC/E58B,EAAEulB,QAAQje,IAAI,CAACuL,OAAQ7S,EAAEgnC,YAAchnC,EAAE65B,OAAO+C,aAAe,QAGpE58B,EAAE65B,OAAOxoB,gBAAkB,IAC3BrR,EAAEgnC,aAAeD,EAAY/mC,EAAE65B,OAAO+C,cAAgBkK,EACtD9mC,EAAEgnC,YAAcvd,KAAK2c,KAAKpmC,EAAEgnC,YAAchnC,EAAE65B,OAAOxoB,iBAAmBrR,EAAE65B,OAAO+C,aAC3E58B,EAAE2jC,eAAgB3jC,EAAEulB,QAAQje,IAAI,CAAC8M,MAAOpU,EAAEgnC,YAAchnC,EAAE65B,OAAO+C,aAAe,OAC/E58B,EAAEulB,QAAQje,IAAI,CAACuL,OAAQ7S,EAAEgnC,YAAchnC,EAAE65B,OAAO+C,aAAe,OAChE58B,EAAE65B,OAAOtoB,gBAAgB,CAEzB,IADA+1B,EAAgB,GACXrpC,EAAI,EAAGA,EAAI+B,EAAE+lC,SAAS5kC,OAAQlD,IAC3B+B,EAAE+lC,SAAS9nC,GAAK+B,EAAEgnC,YAAchnC,EAAE+lC,SAAS,IAAIuB,EAAcj6B,KAAKrN,EAAE+lC,SAAS9nC,IAErF+B,EAAE+lC,SAAWuB,EAKrB,IAAKtnC,EAAE65B,OAAOtoB,eAAgB,CAE1B,IADA+1B,EAAgB,GACXrpC,EAAI,EAAGA,EAAI+B,EAAE+lC,SAAS5kC,OAAQlD,IAC3B+B,EAAE+lC,SAAS9nC,IAAM+B,EAAEgnC,YAAchnC,EAAEymC,MACnCa,EAAcj6B,KAAKrN,EAAE+lC,SAAS9nC,IAGtC+B,EAAE+lC,SAAWuB,EACT7d,KAAK4d,MAAMrnC,EAAEgnC,YAAchnC,EAAEymC,MAAQhd,KAAK4d,MAAMrnC,EAAE+lC,SAAS/lC,EAAE+lC,SAAS5kC,OAAS,IAAM,GACrFnB,EAAE+lC,SAAS14B,KAAKrN,EAAEgnC,YAAchnC,EAAEymC,MAGhB,IAAtBzmC,EAAE+lC,SAAS5kC,SAAcnB,EAAE+lC,SAAW,CAAC,IAEb,IAA1B/lC,EAAE65B,OAAO+C,eACL58B,EAAE2jC,eACE3jC,EAAEqhB,IAAKrhB,EAAEsmC,OAAOh/B,IAAI,CAAC2/B,WAAYrK,EAAe,OAC/C58B,EAAEsmC,OAAOh/B,IAAI,CAAC6/B,YAAavK,EAAe,OAE9C58B,EAAEsmC,OAAOh/B,IAAI,CAAC8/B,aAAcxK,EAAe,QAEhD58B,EAAE65B,OAAO0E,qBACTv+B,EAAE8T,uBAGV9T,EAAE8T,mBAAqB,WACnB,IAAK,IAAI7V,EAAI,EAAGA,EAAI+B,EAAEsmC,OAAOnlC,OAAQlD,IACjC+B,EAAEsmC,OAAOroC,GAAG4pC,kBAAoB7nC,EAAE2jC,eAAiB3jC,EAAEsmC,OAAOroC,GAAG0vB,WAAa3tB,EAAEsmC,OAAOroC,GAAG2vB,WAOhG5tB,EAAE8nC,qBAAuB,WACrB,IAAa7pC,EAAG2I,EAAZmhC,EAAM,EACV,GAAI/nC,EAAE65B,OAAOtoB,eAAgB,CACzB,IACIy2B,EADAvB,EAAOzmC,EAAEsmC,OAAOtmC,EAAEqmC,aAAauB,gBAEnC,IAAK3pC,EAAI+B,EAAEqmC,YAAc,EAAGpoC,EAAI+B,EAAEsmC,OAAOnlC,OAAQlD,IACzC+B,EAAEsmC,OAAOroC,KAAO+pC,IAEhBD,KADAtB,GAAQzmC,EAAEsmC,OAAOroC,GAAG2pC,iBAET5nC,EAAEymC,OAAMuB,GAAY,IAGvC,IAAKphC,EAAI5G,EAAEqmC,YAAc,EAAGz/B,GAAK,EAAGA,IAC5B5G,EAAEsmC,OAAO1/B,KAAOohC,IAEhBD,KADAtB,GAAQzmC,EAAEsmC,OAAO1/B,GAAGghC,iBAET5nC,EAAEymC,OAAMuB,GAAY,SAKvC,IAAK/pC,EAAI+B,EAAEqmC,YAAc,EAAGpoC,EAAI+B,EAAEsmC,OAAOnlC,OAAQlD,IACzC+B,EAAE0mC,WAAWzoC,GAAK+B,EAAE0mC,WAAW1mC,EAAEqmC,aAAermC,EAAEymC,MAClDsB,IAIZ,OAAOA,GAKX/nC,EAAEioC,qBAAuB,SAAUjE,GAI/B,QAHyB,IAAdA,IACPA,EAAYhkC,EAAEgkC,WAAa,GAEP,IAApBhkC,EAAEsmC,OAAOnlC,OAAb,MAC6C,IAAlCnB,EAAEsmC,OAAO,GAAGuB,mBAAmC7nC,EAAE8T,qBAE5D,IAAIo0B,GAAgBlE,EAChBhkC,EAAEqhB,MAAK6mB,EAAelE,GAG1BhkC,EAAEsmC,OAAOphC,YAAYlF,EAAE65B,OAAOoG,mBAC9B,IAAK,IAAIhiC,EAAI,EAAGA,EAAI+B,EAAEsmC,OAAOnlC,OAAQlD,IAAK,CACtC,IAAIytB,EAAQ1rB,EAAEsmC,OAAOroC,GACjBkqC,GAAiBD,GAAgBloC,EAAE65B,OAAOtoB,eAAiBvR,EAAE8lC,eAAiB,GAAKpa,EAAMmc,oBAAsBnc,EAAMkc,gBAAkB5nC,EAAE65B,OAAO+C,cACpJ,GAAI58B,EAAE65B,OAAO2E,sBAAuB,CAChC,IAAI4J,IAAgBF,EAAexc,EAAMmc,mBACrCQ,EAAaD,EAAcpoC,EAAE2mC,gBAAgB1oC,IAE5CmqC,GAAe,GAAKA,EAAcpoC,EAAEymC,MACpC4B,EAAa,GAAKA,GAAcroC,EAAEymC,MAClC2B,GAAe,GAAKC,GAAcroC,EAAEymC,OAErCzmC,EAAEsmC,OAAO9xB,GAAGvW,GAAG8G,SAAS/E,EAAE65B,OAAOoG,mBAGzCvU,EAAMuY,SAAWjkC,EAAEqhB,KAAO8mB,EAAgBA,KAGlDnoC,EAAEsoC,eAAiB,SAAUtE,QACA,IAAdA,IACPA,EAAYhkC,EAAEgkC,WAAa,GAE/B,IAAIuE,EAAiBvoC,EAAEgmC,eAAiBhmC,EAAE8lC,eACtC0C,EAAexoC,EAAEyoC,YACjBC,EAAS1oC,EAAE2oC,MACQ,IAAnBJ,GACAvoC,EAAEikC,SAAW,EACbjkC,EAAEyoC,YAAczoC,EAAE2oC,OAAQ,IAG1B3oC,EAAEikC,UAAYD,EAAYhkC,EAAE8lC,gBAAmByC,EAC/CvoC,EAAEyoC,YAAczoC,EAAEikC,UAAY,EAC9BjkC,EAAE2oC,MAAQ3oC,EAAEikC,UAAY,GAExBjkC,EAAEyoC,cAAgBD,GAAcxoC,EAAEolC,KAAK,mBAAoBplC,GAC3DA,EAAE2oC,QAAUD,GAAQ1oC,EAAEolC,KAAK,aAAcplC,GAEzCA,EAAE65B,OAAO0E,qBAAqBv+B,EAAEioC,qBAAqBjE,GACzDhkC,EAAEolC,KAAK,aAAcplC,EAAGA,EAAEikC,WAE9BjkC,EAAE4oC,kBAAoB,WAClB,IACIC,EAAgB5qC,EAAG6qC,EADnB9E,EAAYhkC,EAAEqhB,IAAMrhB,EAAEgkC,WAAahkC,EAAEgkC,UAEzC,IAAK/lC,EAAI,EAAGA,EAAI+B,EAAE0mC,WAAWvlC,OAAQlD,SACE,IAAxB+B,EAAE0mC,WAAWzoC,EAAI,GACpB+lC,GAAahkC,EAAE0mC,WAAWzoC,IAAM+lC,EAAYhkC,EAAE0mC,WAAWzoC,EAAI,IAAM+B,EAAE0mC,WAAWzoC,EAAI,GAAK+B,EAAE0mC,WAAWzoC,IAAM,EAC5G4qC,EAAiB5qC,EAEZ+lC,GAAahkC,EAAE0mC,WAAWzoC,IAAM+lC,EAAYhkC,EAAE0mC,WAAWzoC,EAAI,KAClE4qC,EAAiB5qC,EAAI,GAIrB+lC,GAAahkC,EAAE0mC,WAAWzoC,KAC1B4qC,EAAiB5qC,GAK1B+B,EAAE65B,OAAOyF,sBACJuJ,EAAiB,QAA+B,IAAnBA,KAAgCA,EAAiB,IAOtFC,EAAYrf,KAAK4d,MAAMwB,EAAiB7oC,EAAE65B,OAAOvoB,kBAChCtR,EAAE+lC,SAAS5kC,SAAQ2nC,EAAY9oC,EAAE+lC,SAAS5kC,OAAS,GAEhE0nC,IAAmB7oC,EAAEqmC,cAGzBrmC,EAAE8oC,UAAYA,EACd9oC,EAAE+oC,cAAgB/oC,EAAEqmC,YACpBrmC,EAAEqmC,YAAcwC,EAChB7oC,EAAEgpC,gBACFhpC,EAAEipC,oBAENjpC,EAAEipC,gBAAkB,WAChBjpC,EAAEkpC,UAAY1lC,SAASxD,EAAEsmC,OAAO9xB,GAAGxU,EAAEqmC,aAAapkC,KAAK,4BAA8BjC,EAAEqmC,YAAa,KAMxGrmC,EAAEgpC,cAAgB,WACdhpC,EAAEsmC,OAAOphC,YAAYlF,EAAE65B,OAAOkG,iBAAmB,IAAM//B,EAAE65B,OAAOsG,eAAiB,IAAMngC,EAAE65B,OAAOwG,eAAiB,IAAMrgC,EAAE65B,OAAOmG,0BAA4B,IAAMhgC,EAAE65B,OAAOuG,wBAA0B,IAAMpgC,EAAE65B,OAAOyG,yBACpN,IAAI/sB,EAAcvT,EAAEsmC,OAAO9xB,GAAGxU,EAAEqmC,aAEhC9yB,EAAYxO,SAAS/E,EAAE65B,OAAOkG,kBAC1BlG,EAAOxmB,OAEHE,EAAY3R,SAAS5B,EAAE65B,OAAOqG,qBAC9BlgC,EAAEulB,QAAQjb,SAAS,IAAMtK,EAAE65B,OAAOiG,WAAa,SAAW9/B,EAAE65B,OAAOqG,oBAAsB,8BAAgClgC,EAAEkpC,UAAY,MAAMnkC,SAAS/E,EAAE65B,OAAOmG,2BAG/JhgC,EAAEulB,QAAQjb,SAAS,IAAMtK,EAAE65B,OAAOiG,WAAa,IAAM9/B,EAAE65B,OAAOqG,oBAAsB,6BAA+BlgC,EAAEkpC,UAAY,MAAMnkC,SAAS/E,EAAE65B,OAAOmG,4BAIjK,IAAImJ,EAAY51B,EAAYgK,KAAK,IAAMvd,EAAE65B,OAAOiG,YAAY/6B,SAAS/E,EAAE65B,OAAOsG,gBAC1EngC,EAAE65B,OAAOxmB,MAA6B,IAArB81B,EAAUhoC,SAC3BgoC,EAAYnpC,EAAEsmC,OAAO9xB,GAAG,IACdzP,SAAS/E,EAAE65B,OAAOsG,gBAGhC,IAAIiJ,EAAY71B,EAAY0X,KAAK,IAAMjrB,EAAE65B,OAAOiG,YAAY/6B,SAAS/E,EAAE65B,OAAOwG,gBAsB9E,GArBIrgC,EAAE65B,OAAOxmB,MAA6B,IAArB+1B,EAAUjoC,SAC3BioC,EAAYppC,EAAEsmC,OAAO9xB,IAAI,IACfzP,SAAS/E,EAAE65B,OAAOwG,gBAE5BxG,EAAOxmB,OAEH81B,EAAUvnC,SAAS5B,EAAE65B,OAAOqG,qBAC5BlgC,EAAEulB,QAAQjb,SAAS,IAAMtK,EAAE65B,OAAOiG,WAAa,SAAW9/B,EAAE65B,OAAOqG,oBAAsB,8BAAgCiJ,EAAUlnC,KAAK,2BAA6B,MAAM8C,SAAS/E,EAAE65B,OAAOuG,yBAG7LpgC,EAAEulB,QAAQjb,SAAS,IAAMtK,EAAE65B,OAAOiG,WAAa,IAAM9/B,EAAE65B,OAAOqG,oBAAsB,6BAA+BiJ,EAAUlnC,KAAK,2BAA6B,MAAM8C,SAAS/E,EAAE65B,OAAOuG,yBAEvLgJ,EAAUxnC,SAAS5B,EAAE65B,OAAOqG,qBAC5BlgC,EAAEulB,QAAQjb,SAAS,IAAMtK,EAAE65B,OAAOiG,WAAa,SAAW9/B,EAAE65B,OAAOqG,oBAAsB,8BAAgCkJ,EAAUnnC,KAAK,2BAA6B,MAAM8C,SAAS/E,EAAE65B,OAAOyG,yBAG7LtgC,EAAEulB,QAAQjb,SAAS,IAAMtK,EAAE65B,OAAOiG,WAAa,IAAM9/B,EAAE65B,OAAOqG,oBAAsB,6BAA+BkJ,EAAUnnC,KAAK,2BAA6B,MAAM8C,SAAS/E,EAAE65B,OAAOyG,0BAK3LtgC,EAAE0jC,qBAAuB1jC,EAAE0jC,oBAAoBviC,OAAS,EAAG,CAE3D,IAAIkoC,EACAC,EAAQtpC,EAAE65B,OAAOxmB,KAAOoW,KAAK2c,MAAMpmC,EAAEsmC,OAAOnlC,OAA0B,EAAjBnB,EAAEk/B,cAAoBl/B,EAAE65B,OAAOvoB,gBAAkBtR,EAAE+lC,SAAS5kC,OAiCrH,GAhCInB,EAAE65B,OAAOxmB,OACTg2B,EAAU5f,KAAK2c,MAAMpmC,EAAEqmC,YAAcrmC,EAAEk/B,cAAcl/B,EAAE65B,OAAOvoB,iBAChDtR,EAAEsmC,OAAOnlC,OAAS,EAAqB,EAAjBnB,EAAEk/B,eAClCmK,GAAqBrpC,EAAEsmC,OAAOnlC,OAA0B,EAAjBnB,EAAEk/B,cAEzCmK,EAAUC,EAAQ,IAAGD,GAAoBC,GACzCD,EAAU,GAAiC,YAA5BrpC,EAAE65B,OAAOuE,iBAA8BiL,EAAUC,EAAQD,IAIxEA,OADuB,IAAhBrpC,EAAE8oC,UACC9oC,EAAE8oC,UAGF9oC,EAAEqmC,aAAe,EAIH,YAA5BrmC,EAAE65B,OAAOuE,gBAAgCp+B,EAAEupC,SAAWvpC,EAAEupC,QAAQpoC,OAAS,IACzEnB,EAAEupC,QAAQrkC,YAAYlF,EAAE65B,OAAO4G,mBAC3BzgC,EAAE0jC,oBAAoBviC,OAAS,EAC/BnB,EAAEupC,QAAQn8B,MAAK,WACPxM,EAAEV,MAAM4G,UAAYuiC,GAASzoC,EAAEV,MAAM6E,SAAS/E,EAAE65B,OAAO4G,sBAI/DzgC,EAAEupC,QAAQ/0B,GAAG60B,GAAStkC,SAAS/E,EAAE65B,OAAO4G,oBAGhB,aAA5BzgC,EAAE65B,OAAOuE,iBACTp+B,EAAE0jC,oBAAoB5hC,KAAK,IAAM9B,EAAE65B,OAAO8G,wBAAwB3+B,KAAKqnC,EAAU,GACjFrpC,EAAE0jC,oBAAoB5hC,KAAK,IAAM9B,EAAE65B,OAAO+G,sBAAsB5+B,KAAKsnC,IAEzC,aAA5BtpC,EAAE65B,OAAOuE,eAA+B,CACxC,IAAIlS,GAASmd,EAAU,GAAKC,EACxBE,EAAStd,EACTud,EAAS,EACRzpC,EAAE2jC,iBACH8F,EAASvd,EACTsd,EAAS,GAEbxpC,EAAE0jC,oBAAoB5hC,KAAK,IAAM9B,EAAE65B,OAAOiH,4BAA4B4I,UAAU,6BAA+BF,EAAS,YAAcC,EAAS,KAAKE,WAAW3pC,EAAE65B,OAAO5J,OAE5I,WAA5BjwB,EAAE65B,OAAOuE,gBAA+Bp+B,EAAE65B,OAAOsE,yBACjDn+B,EAAE0jC,oBAAoBhgC,KAAK1D,EAAE65B,OAAOsE,uBAAuBn+B,EAAGqpC,EAAU,EAAGC,IAC3EtpC,EAAEolC,KAAK,uBAAwBplC,EAAGA,EAAE0jC,oBAAoB,KAK3D1jC,EAAE65B,OAAOxmB,OACNrT,EAAE65B,OAAO1oB,YAAcnR,EAAEmR,YAAcnR,EAAEmR,WAAWhQ,OAAS,IACzDnB,EAAEyoC,aACFzoC,EAAEmR,WAAWpM,SAAS/E,EAAE65B,OAAO6G,qBAC3B1gC,EAAE65B,OAAO4H,MAAQzhC,EAAEyhC,MAAMzhC,EAAEyhC,KAAKjI,QAAQx5B,EAAEmR,cAG9CnR,EAAEmR,WAAWjM,YAAYlF,EAAE65B,OAAO6G,qBAC9B1gC,EAAE65B,OAAO4H,MAAQzhC,EAAEyhC,MAAMzhC,EAAEyhC,KAAK1rB,OAAO/V,EAAEmR,cAGjDnR,EAAE65B,OAAO3oB,YAAclR,EAAEkR,YAAclR,EAAEkR,WAAW/P,OAAS,IACzDnB,EAAE2oC,OACF3oC,EAAEkR,WAAWnM,SAAS/E,EAAE65B,OAAO6G,qBAC3B1gC,EAAE65B,OAAO4H,MAAQzhC,EAAEyhC,MAAMzhC,EAAEyhC,KAAKjI,QAAQx5B,EAAEkR,cAG9ClR,EAAEkR,WAAWhM,YAAYlF,EAAE65B,OAAO6G,qBAC9B1gC,EAAE65B,OAAO4H,MAAQzhC,EAAEyhC,MAAMzhC,EAAEyhC,KAAK1rB,OAAO/V,EAAEkR,gBAS7DlR,EAAE4pC,iBAAmB,WACjB,GAAK5pC,EAAE65B,OAAOzoB,YACVpR,EAAE0jC,qBAAuB1jC,EAAE0jC,oBAAoBviC,OAAS,EAAG,CAC3D,IAAI0oC,EAAiB,GACrB,GAAgC,YAA5B7pC,EAAE65B,OAAOuE,eAA8B,CAEvC,IADA,IAAI0L,EAAkB9pC,EAAE65B,OAAOxmB,KAAOoW,KAAK2c,MAAMpmC,EAAEsmC,OAAOnlC,OAA0B,EAAjBnB,EAAEk/B,cAAoBl/B,EAAE65B,OAAOvoB,gBAAkBtR,EAAE+lC,SAAS5kC,OACtHlD,EAAI,EAAGA,EAAI6rC,EAAiB7rC,IAC7B+B,EAAE65B,OAAOmE,uBACT6L,GAAkB7pC,EAAE65B,OAAOmE,uBAAuBh+B,EAAG/B,EAAG+B,EAAE65B,OAAO2G,aAGjEqJ,GAAkB,IAAM7pC,EAAE65B,OAAOiE,kBAAkB,WAAa99B,EAAE65B,OAAO2G,YAAc,OAASxgC,EAAE65B,OAAOiE,kBAAoB,IAGrI99B,EAAE0jC,oBAAoBhgC,KAAKmmC,GAC3B7pC,EAAEupC,QAAUvpC,EAAE0jC,oBAAoB5hC,KAAK,IAAM9B,EAAE65B,OAAO2G,aAClDxgC,EAAE65B,OAAOroB,qBAAuBxR,EAAE65B,OAAO4H,MAAQzhC,EAAEyhC,MACnDzhC,EAAEyhC,KAAKsI,iBAGiB,aAA5B/pC,EAAE65B,OAAOuE,iBAELyL,EADA7pC,EAAE65B,OAAOqE,yBACQl+B,EAAE65B,OAAOqE,yBAAyBl+B,EAAGA,EAAE65B,OAAO8G,uBAAwB3gC,EAAE65B,OAAO+G,sBAI5F,gBAAkB5gC,EAAE65B,OAAO8G,uBAA3B,4BAEkB3gC,EAAE65B,OAAO+G,qBAAqB,YAExD5gC,EAAE0jC,oBAAoBhgC,KAAKmmC,IAEC,aAA5B7pC,EAAE65B,OAAOuE,iBAELyL,EADA7pC,EAAE65B,OAAOoE,yBACQj+B,EAAE65B,OAAOoE,yBAAyBj+B,EAAGA,EAAE65B,OAAOiH,4BAG9C,gBAAkB9gC,EAAE65B,OAAOiH,2BAA6B,YAE7E9gC,EAAE0jC,oBAAoBhgC,KAAKmmC,IAEC,WAA5B7pC,EAAE65B,OAAOuE,gBACTp+B,EAAEolC,KAAK,uBAAwBplC,EAAGA,EAAE0jC,oBAAoB,MAOpE1jC,EAAE6V,OAAS,SAAUm0B,GAUjB,IAAIC,EATCjqC,IACLA,EAAEumC,sBACFvmC,EAAE6T,mBACF7T,EAAEsoC,iBACFtoC,EAAE4pC,mBACF5pC,EAAEgpC,gBACEhpC,EAAE65B,OAAOoC,WAAaj8B,EAAEi8B,WACxBj8B,EAAEi8B,UAAUiO,MAUZF,GAEIhqC,EAAEmqC,YAAcnqC,EAAEmqC,WAAWC,SAC7BpqC,EAAEmqC,WAAWC,YAASrc,GAEtB/tB,EAAE65B,OAAOO,UACTiQ,IACIrqC,EAAE65B,OAAOe,YACT56B,EAAEimC,sBAI0B,SAA3BjmC,EAAE65B,OAAO5oB,eAA4BjR,EAAE65B,OAAO5oB,cAAgB,IAAMjR,EAAE2oC,QAAU3oC,EAAE65B,OAAOtoB,eAC7EvR,EAAEmI,QAAQnI,EAAEsmC,OAAOnlC,OAAS,EAAG,GAAG,GAAO,GAGzCnB,EAAEmI,QAAQnI,EAAEqmC,YAAa,GAAG,GAAO,KAGhDgE,KAIHrqC,EAAE65B,OAAOe,YACd56B,EAAEimC,oBA/BN,SAASoE,IACWrqC,EAAEqhB,IAAOrhB,EAAEgkC,UAC3BiG,EAAexgB,KAAK2D,IAAI3D,KAAK4D,IAAIrtB,EAAEgkC,UAAWhkC,EAAEgmC,gBAAiBhmC,EAAE8lC,gBACnE9lC,EAAEsqC,oBAAoBL,GACtBjqC,EAAE4oC,oBACF5oC,EAAEgpC,kBAiCVhpC,EAAEuqC,SAAW,SAAUC,GACfxqC,EAAE65B,OAAO4Q,gBAAgBzqC,EAAE65B,OAAO4Q,eAAezqC,GAEjDA,EAAE65B,OAAO9lB,aACT/T,EAAEgjC,gBAIN,IAAIzD,EAAmBv/B,EAAE65B,OAAO0F,iBAC5BC,EAAmBx/B,EAAE65B,OAAO2F,iBAChCx/B,EAAE65B,OAAO0F,iBAAmBv/B,EAAE65B,OAAO2F,kBAAmB,EAExDx/B,EAAEumC,sBACFvmC,EAAE6T,oBAC6B,SAA3B7T,EAAE65B,OAAO5oB,eAA4BjR,EAAE65B,OAAOO,UAAYoQ,IAAuBxqC,EAAE4pC,mBACnF5pC,EAAE65B,OAAOoC,WAAaj8B,EAAEi8B,WACxBj8B,EAAEi8B,UAAUiO,MAEZlqC,EAAEmqC,YAAcnqC,EAAEmqC,WAAWC,SAC7BpqC,EAAEmqC,WAAWC,YAASrc,GAE1B,IAAI2c,GAAwB,EAC5B,GAAI1qC,EAAE65B,OAAOO,SAAU,CACnB,IAAI6P,EAAexgB,KAAK2D,IAAI3D,KAAK4D,IAAIrtB,EAAEgkC,UAAWhkC,EAAEgmC,gBAAiBhmC,EAAE8lC,gBACvE9lC,EAAEsqC,oBAAoBL,GACtBjqC,EAAE4oC,oBACF5oC,EAAEgpC,gBAEEhpC,EAAE65B,OAAOe,YACT56B,EAAEimC,wBAINjmC,EAAEgpC,gBAEE0B,GAD4B,SAA3B1qC,EAAE65B,OAAO5oB,eAA4BjR,EAAE65B,OAAO5oB,cAAgB,IAAMjR,EAAE2oC,QAAU3oC,EAAE65B,OAAOtoB,eAClEvR,EAAEmI,QAAQnI,EAAEsmC,OAAOnlC,OAAS,EAAG,GAAG,GAAO,GAGzCnB,EAAEmI,QAAQnI,EAAEqmC,YAAa,GAAG,GAAO,GAG/DrmC,EAAE65B,OAAO+E,cAAgB8L,GAAyB1qC,EAAE2qC,MACpD3qC,EAAE2qC,KAAK/R,OAGX54B,EAAE65B,OAAO0F,iBAAmBA,EAC5Bv/B,EAAE65B,OAAO2F,iBAAmBA,EACxBx/B,EAAE65B,OAAOjmB,eAAe5T,EAAE65B,OAAOjmB,cAAc5T,IAQvDA,EAAE4qC,mBAAqB,CAACngC,MAAO,YAAaogC,KAAM,YAAaC,IAAK,WAChEzqC,OAAOshB,UAAUopB,eAAgB/qC,EAAE4qC,mBAAqB,CAACngC,MAAO,cAAeogC,KAAM,cAAeC,IAAK,aACpGzqC,OAAOshB,UAAUqpB,mBAAkBhrC,EAAE4qC,mBAAqB,CAACngC,MAAO,gBAAiBogC,KAAM,gBAAiBC,IAAK,gBACxH9qC,EAAEirC,YAAc,CACZxgC,MAAQzK,EAAEsjC,QAAQG,QAAUzjC,EAAE65B,OAAOsD,cAAiB,aAAen9B,EAAE4qC,mBAAmBngC,MAC1FogC,KAAO7qC,EAAEsjC,QAAQG,QAAUzjC,EAAE65B,OAAOsD,cAAgB,YAAcn9B,EAAE4qC,mBAAmBC,KACvFC,IAAM9qC,EAAEsjC,QAAQG,QAAUzjC,EAAE65B,OAAOsD,cAAgB,WAAan9B,EAAE4qC,mBAAmBE,MAKrFzqC,OAAOshB,UAAUopB,gBAAkB1qC,OAAOshB,UAAUqpB,oBACpB,cAA/BhrC,EAAE65B,OAAOC,kBAAoC95B,EAAEkJ,UAAYlJ,EAAEulB,SAASxgB,SAAS,cAAgB/E,EAAE65B,OAAOvO,WAI7GtrB,EAAEkrC,WAAa,SAAUC,GACrB,IAAIC,EAAYD,EAAS,MAAQ,KAC7BE,EAASF,EAAS,sBAAwB,mBAC1CrR,EAAmD,cAA/B95B,EAAE65B,OAAOC,kBAAoC95B,EAAEkJ,UAAU,GAAKlJ,EAAEulB,QAAQ,GAC5F5U,EAAS3Q,EAAEsjC,QAAQG,MAAQ3J,EAAoBjtB,SAE/Cy+B,IAActrC,EAAE65B,OAAO0R,OAG3B,GAAIvrC,EAAEwrC,QAAQC,GACV3R,EAAkBuR,GAAQrrC,EAAEirC,YAAYxgC,MAAOzK,EAAE0rC,cAAc,GAC/D/6B,EAAO06B,GAAQrrC,EAAEirC,YAAYJ,KAAM7qC,EAAE2rC,YAAaL,GAClD36B,EAAO06B,GAAQrrC,EAAEirC,YAAYH,IAAK9qC,EAAE4rC,YAAY,OAE/C,CACD,GAAI5rC,EAAEsjC,QAAQG,MAAO,CACjB,IAAIoI,IAA0C,eAAxB7rC,EAAEirC,YAAYxgC,QAA0BzK,EAAEsjC,QAAQuI,kBAAmB7rC,EAAE65B,OAAO+F,mBAAmB,CAAC9O,SAAS,EAAMlO,SAAS,GAChJkX,EAAkBuR,GAAQrrC,EAAEirC,YAAYxgC,MAAOzK,EAAE0rC,aAAcG,GAC/D/R,EAAkBuR,GAAQrrC,EAAEirC,YAAYJ,KAAM7qC,EAAE2rC,YAAaL,GAC7DxR,EAAkBuR,GAAQrrC,EAAEirC,YAAYH,IAAK9qC,EAAE4rC,WAAYC,IAE1DhS,EAAOsD,gBAAkBn9B,EAAE8jC,OAAOgI,MAAQ9rC,EAAE8jC,OAAOC,SAAalK,EAAOsD,gBAAkBn9B,EAAEsjC,QAAQG,OAASzjC,EAAE8jC,OAAOgI,OACtHhS,EAAkBuR,GAAQ,YAAarrC,EAAE0rC,cAAc,GACvD7+B,SAASw+B,GAAQ,YAAarrC,EAAE2rC,YAAaL,GAC7Cz+B,SAASw+B,GAAQ,UAAWrrC,EAAE4rC,YAAY,IAGlDvrC,OAAOgrC,GAAQ,SAAUrrC,EAAEuqC,UAGvBvqC,EAAE65B,OAAO3oB,YAAclR,EAAEkR,YAAclR,EAAEkR,WAAW/P,OAAS,IAC7DnB,EAAEkR,WAAWk6B,GAAW,QAASprC,EAAE+rC,aAC/B/rC,EAAE65B,OAAO4H,MAAQzhC,EAAEyhC,MAAMzhC,EAAEkR,WAAWk6B,GAAW,UAAWprC,EAAEyhC,KAAKuK,aAEvEhsC,EAAE65B,OAAO1oB,YAAcnR,EAAEmR,YAAcnR,EAAEmR,WAAWhQ,OAAS,IAC7DnB,EAAEmR,WAAWi6B,GAAW,QAASprC,EAAEisC,aAC/BjsC,EAAE65B,OAAO4H,MAAQzhC,EAAEyhC,MAAMzhC,EAAEmR,WAAWi6B,GAAW,UAAWprC,EAAEyhC,KAAKuK,aAEvEhsC,EAAE65B,OAAOzoB,YAAcpR,EAAE65B,OAAOroB,sBAChCxR,EAAE0jC,oBAAoB0H,GAAW,QAAS,IAAMprC,EAAE65B,OAAO2G,YAAaxgC,EAAEksC,cACpElsC,EAAE65B,OAAO4H,MAAQzhC,EAAEyhC,MAAMzhC,EAAE0jC,oBAAoB0H,GAAW,UAAW,IAAMprC,EAAE65B,OAAO2G,YAAaxgC,EAAEyhC,KAAKuK,cAI5GhsC,EAAE65B,OAAO4E,eAAiBz+B,EAAE65B,OAAO6E,2BAA0B5E,EAAkBuR,GAAQ,QAASrrC,EAAEy+B,eAAe,IAEzHz+B,EAAEmsC,aAAe,WACbnsC,EAAEkrC,cAENlrC,EAAEosC,aAAe,WACbpsC,EAAEkrC,YAAW,IAOjBlrC,EAAEqsC,YAAa,EACfrsC,EAAEy+B,cAAgB,SAAUr+B,GACnBJ,EAAEqsC,aACCrsC,EAAE65B,OAAO4E,eAAer+B,EAAEmB,iBAC1BvB,EAAE65B,OAAO6E,0BAA4B1+B,EAAEssC,YACvClsC,EAAE8W,kBACF9W,EAAEmsC,8BAKdvsC,EAAE+rC,YAAc,SAAU3rC,GACtBA,EAAEmB,iBACEvB,EAAE2oC,QAAU3oC,EAAE65B,OAAOxmB,MACzBrT,EAAEwsC,aAENxsC,EAAEisC,YAAc,SAAU7rC,GACtBA,EAAEmB,iBACEvB,EAAEyoC,cAAgBzoC,EAAE65B,OAAOxmB,MAC/BrT,EAAEysC,aAENzsC,EAAEksC,aAAe,SAAU9rC,GACvBA,EAAEmB,iBACF,IAAIuF,EAAQlG,EAAEV,MAAM4G,QAAU9G,EAAE65B,OAAOvoB,eACnCtR,EAAE65B,OAAOxmB,OAAMvM,GAAgB9G,EAAEk/B,cACrCl/B,EAAEmI,QAAQrB,IA0Bd9G,EAAE0sC,mBAAqB,SAAUtsC,GAC7B,IAAIsrB,EAAQihB,EAAmBvsC,EAAG,IAAMJ,EAAE65B,OAAOiG,YAC7C8M,GAAa,EACjB,GAAIlhB,EACA,IAAK,IAAIztB,EAAI,EAAGA,EAAI+B,EAAEsmC,OAAOnlC,OAAQlD,IAC7B+B,EAAEsmC,OAAOroC,KAAOytB,IAAOkhB,GAAa,GAIhD,IAAIlhB,IAASkhB,EAOT,OAFA5sC,EAAE6sC,kBAAe9e,OACjB/tB,EAAE8sC,kBAAe/e,GAGrB,GARI/tB,EAAE6sC,aAAenhB,EACjB1rB,EAAE8sC,aAAelsC,EAAE8qB,GAAO5kB,QAO1B9G,EAAE65B,OAAO8E,0BAA0C5Q,IAAnB/tB,EAAE8sC,cAA8B9sC,EAAE8sC,eAAiB9sC,EAAEqmC,YAAa,CAClG,IACI6C,EADA6D,EAAe/sC,EAAE8sC,aAGjB77B,EAA2C,SAA3BjR,EAAE65B,OAAO5oB,cAA2BjR,EAAE8nC,uBAAyB9nC,EAAE65B,OAAO5oB,cAC5F,GAAIjR,EAAE65B,OAAOxmB,KAAM,CACf,GAAIrT,EAAEssC,UAAW,OACjBpD,EAAY1lC,SAAS5C,EAAEZ,EAAE6sC,cAAc5qC,KAAK,2BAA4B,IACpEjC,EAAE65B,OAAOtoB,eACJw7B,EAAe/sC,EAAEk/B,aAAejuB,EAAc,GAAO87B,EAAe/sC,EAAEsmC,OAAOnlC,OAASnB,EAAEk/B,aAAejuB,EAAc,GACtHjR,EAAEgtC,UACFD,EAAe/sC,EAAEulB,QAAQjb,SAAS,IAAMtK,EAAE65B,OAAOiG,WAAa,6BAA+BoJ,EAAY,WAAalpC,EAAE65B,OAAOqG,oBAAsB,KAAK1rB,GAAG,GAAG1N,QAChKkH,YAAW,WACPhO,EAAEmI,QAAQ4kC,KACX,IAGH/sC,EAAEmI,QAAQ4kC,GAIVA,EAAe/sC,EAAEsmC,OAAOnlC,OAAS8P,GACjCjR,EAAEgtC,UACFD,EAAe/sC,EAAEulB,QAAQjb,SAAS,IAAMtK,EAAE65B,OAAOiG,WAAa,6BAA+BoJ,EAAY,WAAalpC,EAAE65B,OAAOqG,oBAAsB,KAAK1rB,GAAG,GAAG1N,QAChKkH,YAAW,WACPhO,EAAEmI,QAAQ4kC,KACX,IAGH/sC,EAAEmI,QAAQ4kC,QAKlB/sC,EAAEmI,QAAQ4kC,KAKtB,IAAIE,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAI4BC,EAG5BC,EAeAC,EAAcC,EApBdC,EAAe,yCAEfC,EAAgBC,KAAKC,MAErBC,EAAa,GA+kFjB,IAAK,IAAIC,KA3kFTluC,EAAEssC,WAAY,EAGdtsC,EAAEua,QAAU,CACR4zB,OAAQ,EACRC,OAAQ,EACRC,SAAU,EACVC,SAAU,EACVC,KAAM,GAKVvuC,EAAE0rC,aAAe,SAAUtrC,GAGvB,GAFIA,EAAEouC,gBAAepuC,EAAIA,EAAEouC,gBAC3Bb,EAA0B,eAAXvtC,EAAEkW,SACI,UAAWlW,IAAiB,IAAZA,EAAEquC,MACvC,GAAIzuC,EAAE65B,OAAO6F,WAAaiN,EAAmBvsC,EAAG,IAAMJ,EAAE65B,OAAO8F,gBAC3D3/B,EAAEqsC,YAAa,OAGnB,IAAIrsC,EAAE65B,OAAO4F,cACJkN,EAAmBvsC,EAAGJ,EAAE65B,OAAO4F,cADxC,CAIA,IAAI0O,EAASnuC,EAAEua,QAAQ8zB,SAAsB,eAAXjuC,EAAEkW,KAAwBlW,EAAEsuC,cAAc,GAAGl0B,MAAQpa,EAAEoa,MACrF4zB,EAASpuC,EAAEua,QAAQ+zB,SAAsB,eAAXluC,EAAEkW,KAAwBlW,EAAEsuC,cAAc,GAAGxgB,MAAQ9tB,EAAE8tB,MAGzF,KAAGluB,EAAE8jC,OAAOgI,KAAO9rC,EAAE65B,OAAOK,uBAAyBiU,GAAUnuC,EAAE65B,OAAOM,uBAAxE,CAgBA,GAZA8S,GAAY,EACZC,GAAU,EACVC,GAAsB,EACtBE,OAActf,EACd6f,OAAc7f,EACd/tB,EAAEua,QAAQ4zB,OAASA,EACnBnuC,EAAEua,QAAQ6zB,OAASA,EACnBhB,EAAiBW,KAAKC,MACtBhuC,EAAEqsC,YAAa,EACfrsC,EAAEumC,sBACFvmC,EAAE2uC,oBAAiB5gB,EACf/tB,EAAE65B,OAAO6D,UAAY,IAAG8P,GAAqB,GAClC,eAAXptC,EAAEkW,KAAuB,CACzB,IAAI/U,GAAiB,EACjBX,EAAER,EAAEuQ,QAAQ1P,GAAG4sC,KAAetsC,GAAiB,GAC/CsL,SAAS+hC,eAAiBhuC,EAAEiM,SAAS+hC,eAAe3tC,GAAG4sC,IACvDhhC,SAAS+hC,cAAcC,OAEvBttC,GACAnB,EAAEmB,iBAGVvB,EAAEolC,KAAK,eAAgBplC,EAAGI,MAG9BJ,EAAE2rC,YAAc,SAAUvrC,GAEtB,GADIA,EAAEouC,gBAAepuC,EAAIA,EAAEouC,gBACvBb,GAA2B,cAAXvtC,EAAEkW,KAAtB,CACA,GAAIlW,EAAE0uC,wBAGF,OAFA9uC,EAAEua,QAAQ4zB,OAAoB,cAAX/tC,EAAEkW,KAAuBlW,EAAEsuC,cAAc,GAAGl0B,MAAQpa,EAAEoa,WACzExa,EAAEua,QAAQ6zB,OAAoB,cAAXhuC,EAAEkW,KAAuBlW,EAAEsuC,cAAc,GAAGxgB,MAAQ9tB,EAAE8tB,OAG7E,GAAIluB,EAAE65B,OAAO4D,aAQT,OANAz9B,EAAEqsC,YAAa,OACXY,IACAjtC,EAAEua,QAAQ4zB,OAASnuC,EAAEua,QAAQ8zB,SAAsB,cAAXjuC,EAAEkW,KAAuBlW,EAAEsuC,cAAc,GAAGl0B,MAAQpa,EAAEoa,MAC9Fxa,EAAEua,QAAQ6zB,OAASpuC,EAAEua,QAAQ+zB,SAAsB,cAAXluC,EAAEkW,KAAuBlW,EAAEsuC,cAAc,GAAGxgB,MAAQ9tB,EAAE8tB,MAC9Fkf,EAAiBW,KAAKC,QAI9B,GAAIL,GAAgB3tC,EAAE65B,OAAO+D,sBAAwB59B,EAAE65B,OAAOxmB,KAC1D,GAAKrT,EAAE2jC,gBAUH,GACK3jC,EAAEua,QAAQ8zB,SAAWruC,EAAEua,QAAQ4zB,QAAUnuC,EAAEgkC,WAAahkC,EAAEgmC,gBAC1DhmC,EAAEua,QAAQ8zB,SAAWruC,EAAEua,QAAQ4zB,QAAUnuC,EAAEgkC,WAAahkC,EAAE8lC,eAE3D,YAZJ,GACK9lC,EAAEua,QAAQ+zB,SAAWtuC,EAAEua,QAAQ6zB,QAAUpuC,EAAEgkC,WAAahkC,EAAEgmC,gBAC1DhmC,EAAEua,QAAQ+zB,SAAWtuC,EAAEua,QAAQ6zB,QAAUpuC,EAAEgkC,WAAahkC,EAAE8lC,eAE3D,OAYZ,GAAI6H,GAAgB9gC,SAAS+hC,eACrBxuC,EAAEuQ,SAAW9D,SAAS+hC,eAAiBhuC,EAAER,EAAEuQ,QAAQ1P,GAAG4sC,GAGtD,OAFAX,GAAU,OACVltC,EAAEqsC,YAAa,GAOvB,GAHIc,GACAntC,EAAEolC,KAAK,cAAeplC,EAAGI,KAEzBA,EAAEsuC,eAAiBtuC,EAAEsuC,cAAcvtC,OAAS,GAAhD,CAMI,IAAI+7B,EADR,GAHAl9B,EAAEua,QAAQ8zB,SAAsB,cAAXjuC,EAAEkW,KAAuBlW,EAAEsuC,cAAc,GAAGl0B,MAAQpa,EAAEoa,MAC3Exa,EAAEua,QAAQ+zB,SAAsB,cAAXluC,EAAEkW,KAAuBlW,EAAEsuC,cAAc,GAAGxgB,MAAQ9tB,EAAE8tB,WAEhD,IAAhBmf,EAEHrtC,EAAE2jC,gBAAkB3jC,EAAEua,QAAQ+zB,WAAatuC,EAAEua,QAAQ6zB,SAAWpuC,EAAE2jC,gBAAkB3jC,EAAEua,QAAQ8zB,WAAaruC,EAAEua,QAAQ4zB,OACrHd,GAAc,GAGdnQ,EAA4H,IAA/GzT,KAAKslB,MAAMtlB,KAAKC,IAAI1pB,EAAEua,QAAQ+zB,SAAWtuC,EAAEua,QAAQ6zB,QAAS3kB,KAAKC,IAAI1pB,EAAEua,QAAQ8zB,SAAWruC,EAAEua,QAAQ4zB,SAAiB1kB,KAAKulB,GACvI3B,EAAcrtC,EAAE2jC,eAAiBzG,EAAal9B,EAAE65B,OAAOqD,WAAc,GAAKA,EAAal9B,EAAE65B,OAAOqD,YAWxG,GARImQ,GACArtC,EAAEolC,KAAK,sBAAuBplC,EAAGI,QAEV,IAAhBwtC,IACH5tC,EAAEua,QAAQ8zB,WAAaruC,EAAEua,QAAQ4zB,QAAUnuC,EAAEua,QAAQ+zB,WAAatuC,EAAEua,QAAQ6zB,SAC5ER,GAAc,IAGjBX,EACL,GAAII,EACAJ,GAAY,OAGhB,GAAKW,EAAL,CAGA5tC,EAAEqsC,YAAa,EACfrsC,EAAEolC,KAAK,eAAgBplC,EAAGI,GAC1BA,EAAEmB,iBACEvB,EAAE65B,OAAO8D,2BAA6B39B,EAAE65B,OAAO0R,QAC/CnrC,EAAE8W,kBAGDg2B,IACGrT,EAAOxmB,MACPrT,EAAEgtC,UAENO,EAAiBvtC,EAAEivC,sBACnBjvC,EAAEkvC,qBAAqB,GACnBlvC,EAAEssC,WACFtsC,EAAEulB,QAAQzhB,QAAQ,oFAElB9D,EAAE65B,OAAOjlB,UAAY5U,EAAEulC,cACnBvlC,EAAE65B,OAAOG,6BACTh6B,EAAE0lC,eAGF1lC,EAAE4lC,iBAGV8H,GAAsB,GAElB1tC,EAAE65B,OAAOjoB,aAA6C,IAA9B5R,EAAE65B,OAAO2F,mBAA2D,IAA9Bx/B,EAAE65B,OAAO0F,kBACvEv/B,EAAEwkC,eAAc,IAGxB0I,GAAU,EAEV,IAAIqB,EAAOvuC,EAAEua,QAAQg0B,KAAOvuC,EAAE2jC,eAAiB3jC,EAAEua,QAAQ8zB,SAAWruC,EAAEua,QAAQ4zB,OAASnuC,EAAEua,QAAQ+zB,SAAWtuC,EAAEua,QAAQ6zB,OAEtHG,GAAcvuC,EAAE65B,OAAOoD,WACnBj9B,EAAEqhB,MAAKktB,GAAQA,GAEnBvuC,EAAE2uC,eAAiBJ,EAAO,EAAI,OAAS,OACvCjB,EAAmBiB,EAAOhB,EAE1B,IAAI4B,GAAsB,EAwB1B,GAvBKZ,EAAO,GAAKjB,EAAmBttC,EAAE8lC,gBAClCqJ,GAAsB,EAClBnvC,EAAE65B,OAAOwE,aAAYiP,EAAmBttC,EAAE8lC,eAAiB,EAAIrc,KAAK2lB,KAAKpvC,EAAE8lC,eAAiByH,EAAiBgB,EAAMvuC,EAAE65B,OAAOyE,mBAE3HiQ,EAAO,GAAKjB,EAAmBttC,EAAEgmC,iBACtCmJ,GAAsB,EAClBnvC,EAAE65B,OAAOwE,aAAYiP,EAAmBttC,EAAEgmC,eAAiB,EAAIvc,KAAK2lB,IAAIpvC,EAAEgmC,eAAiBuH,EAAiBgB,EAAMvuC,EAAE65B,OAAOyE,mBAG/H6Q,IACA/uC,EAAE0uC,yBAA0B,IAI3B9uC,EAAE65B,OAAO2F,kBAAyC,SAArBx/B,EAAE2uC,gBAA6BrB,EAAmBC,IAChFD,EAAmBC,IAElBvtC,EAAE65B,OAAO0F,kBAAyC,SAArBv/B,EAAE2uC,gBAA6BrB,EAAmBC,IAChFD,EAAmBC,GAKnBvtC,EAAE65B,OAAO6D,UAAY,EAAG,CACxB,KAAIjU,KAAKC,IAAI6kB,GAAQvuC,EAAE65B,OAAO6D,WAAa8P,GAYvC,YADAF,EAAmBC,GAVnB,IAAKC,EAMD,OALAA,GAAqB,EACrBxtC,EAAEua,QAAQ4zB,OAASnuC,EAAEua,QAAQ8zB,SAC7BruC,EAAEua,QAAQ6zB,OAASpuC,EAAEua,QAAQ+zB,SAC7BhB,EAAmBC,OACnBvtC,EAAEua,QAAQg0B,KAAOvuC,EAAE2jC,eAAiB3jC,EAAEua,QAAQ8zB,SAAWruC,EAAEua,QAAQ4zB,OAASnuC,EAAEua,QAAQ+zB,SAAWtuC,EAAEua,QAAQ6zB,QAUlHpuC,EAAE65B,OAAO2D,gBAGVx9B,EAAE65B,OAAOO,UAAYp6B,EAAE65B,OAAO0E,sBAC9Bv+B,EAAE4oC,oBAEF5oC,EAAE65B,OAAOO,WAEiB,IAAtB6T,EAAW9sC,QACX8sC,EAAW5gC,KAAK,CACZkmB,SAAUvzB,EAAEua,QAAQva,EAAE2jC,eAAiB,SAAW,UAClD0L,KAAMjC,IAGda,EAAW5gC,KAAK,CACZkmB,SAAUvzB,EAAEua,QAAQva,EAAE2jC,eAAiB,WAAa,YACpD0L,MAAO,IAAIhvC,OAAO0tC,MAAQuB,aAIlCtvC,EAAEsoC,eAAegF,GAEjBttC,EAAEsqC,oBAAoBgD,QAE1BttC,EAAE4rC,WAAa,SAAUxrC,GAMrB,GALIA,EAAEouC,gBAAepuC,EAAIA,EAAEouC,eACvBrB,GACAntC,EAAEolC,KAAK,aAAcplC,EAAGI,GAE5B+sC,GAAsB,EACjBF,EAAL,CAEIjtC,EAAE65B,OAAOjoB,YAAcs7B,GAAWD,KAA6C,IAA9BjtC,EAAE65B,OAAO2F,mBAA2D,IAA9Bx/B,EAAE65B,OAAO0F,mBAChGv/B,EAAEwkC,eAAc,GAIpB,IAmCI+K,EAnCAC,EAAezB,KAAKC,MACpByB,EAAWD,EAAepC,EA4B9B,GAzBIptC,EAAEqsC,aACFrsC,EAAE0sC,mBAAmBtsC,GACrBJ,EAAEolC,KAAK,QAASplC,EAAGI,GACfqvC,EAAW,KAAQD,EAAe1B,EAAiB,MAC/CL,GAAc9d,aAAa8d,GAC/BA,EAAez/B,YAAW,WACjBhO,IACDA,EAAE65B,OAAOkE,gBAAkB/9B,EAAE0jC,oBAAoBviC,OAAS,IAAMP,EAAER,EAAEuQ,QAAQ/O,SAAS5B,EAAE65B,OAAO2G,cAC9FxgC,EAAE0jC,oBAAoBltB,YAAYxW,EAAE65B,OAAOgH,uBAE/C7gC,EAAEolC,KAAK,UAAWplC,EAAGI,MACtB,MAGHqvC,EAAW,KAAQD,EAAe1B,EAAiB,MAC/CL,GAAc9d,aAAa8d,GAC/BztC,EAAEolC,KAAK,cAAeplC,EAAGI,KAIjC0tC,EAAgBC,KAAKC,MACrBhgC,YAAW,WACHhO,IAAGA,EAAEqsC,YAAa,KACvB,GAEEY,GAAcC,GAAYltC,EAAE2uC,gBAAqC,IAAnB3uC,EAAEua,QAAQg0B,MAAcjB,IAAqBC,EAahG,GATAN,EAAYC,GAAU,EAIlBqC,EADAvvC,EAAE65B,OAAO2D,aACIx9B,EAAEqhB,IAAMrhB,EAAEgkC,WAAahkC,EAAEgkC,WAGxBsJ,EAEdttC,EAAE65B,OAAOO,SAAb,CACI,GAAImV,GAAcvvC,EAAE8lC,eAEhB,YADA9lC,EAAEmI,QAAQnI,EAAEqmC,aAGX,GAAIkJ,GAAcvvC,EAAEgmC,eAOrB,YANIhmC,EAAEsmC,OAAOnlC,OAASnB,EAAE+lC,SAAS5kC,OAC7BnB,EAAEmI,QAAQnI,EAAE+lC,SAAS5kC,OAAS,GAG9BnB,EAAEmI,QAAQnI,EAAEsmC,OAAOnlC,OAAS,IAKpC,GAAInB,EAAE65B,OAAOQ,iBAAkB,CAC3B,GAAI4T,EAAW9sC,OAAS,EAAG,CACvB,IAAIuuC,EAAgBzB,EAAW0B,MAAOC,EAAgB3B,EAAW0B,MAE7DE,EAAWH,EAAcnc,SAAWqc,EAAcrc,SAClD8b,EAAOK,EAAcL,KAAOO,EAAcP,KAC9CrvC,EAAEkkC,SAAW2L,EAAWR,EACxBrvC,EAAEkkC,SAAWlkC,EAAEkkC,SAAW,EACtBza,KAAKC,IAAI1pB,EAAEkkC,UAAYlkC,EAAE65B,OAAOc,0BAChC36B,EAAEkkC,SAAW,IAIbmL,EAAO,MAAQ,IAAIhvC,OAAO0tC,MAAOuB,UAAYI,EAAcL,KAAQ,OACnErvC,EAAEkkC,SAAW,QAGjBlkC,EAAEkkC,SAAW,EAEjBlkC,EAAEkkC,SAAWlkC,EAAEkkC,SAAWlkC,EAAE65B,OAAOY,8BAEnCwT,EAAW9sC,OAAS,EACpB,IAAI2uC,EAAmB,IAAO9vC,EAAE65B,OAAOS,sBACnCyV,EAAmB/vC,EAAEkkC,SAAW4L,EAEhCE,EAAchwC,EAAEgkC,UAAY+L,EAC5B/vC,EAAEqhB,MAAK2uB,GAAgBA,GAC3B,IACIC,EADAC,GAAW,EAEXC,EAAsC,GAAvB1mB,KAAKC,IAAI1pB,EAAEkkC,UAAiBlkC,EAAE65B,OAAOW,4BACxD,GAAIwV,EAAchwC,EAAEgmC,eACZhmC,EAAE65B,OAAOU,wBACLyV,EAAchwC,EAAEgmC,gBAAkBmK,IAClCH,EAAchwC,EAAEgmC,eAAiBmK,GAErCF,EAAsBjwC,EAAEgmC,eACxBkK,GAAW,EACXxC,GAAsB,GAGtBsC,EAAchwC,EAAEgmC,oBAGnB,GAAIgK,EAAchwC,EAAE8lC,eACjB9lC,EAAE65B,OAAOU,wBACLyV,EAAchwC,EAAE8lC,eAAiBqK,IACjCH,EAAchwC,EAAE8lC,eAAiBqK,GAErCF,EAAsBjwC,EAAE8lC,eACxBoK,GAAW,EACXxC,GAAsB,GAGtBsC,EAAchwC,EAAE8lC,oBAGnB,GAAI9lC,EAAE65B,OAAOa,eAAgB,CAC9B,IACIyO,EADAviC,EAAI,EAER,IAAKA,EAAI,EAAGA,EAAI5G,EAAE+lC,SAAS5kC,OAAQyF,GAAK,EACpC,GAAI5G,EAAE+lC,SAASn/B,IAAMopC,EAAa,CAC9B7G,EAAYviC,EACZ,MAKJopC,EADAvmB,KAAKC,IAAI1pB,EAAE+lC,SAASoD,GAAa6G,GAAevmB,KAAKC,IAAI1pB,EAAE+lC,SAASoD,EAAY,GAAK6G,IAAqC,SAArBhwC,EAAE2uC,eACzF3uC,EAAE+lC,SAASoD,GAEXnpC,EAAE+lC,SAASoD,EAAY,GAEpCnpC,EAAEqhB,MAAK2uB,GAAgBA,GAGhC,GAAmB,IAAfhwC,EAAEkkC,SAEE4L,EADA9vC,EAAEqhB,IACiBoI,KAAKC,MAAMsmB,EAAchwC,EAAEgkC,WAAahkC,EAAEkkC,UAG1Cza,KAAKC,KAAKsmB,EAAchwC,EAAEgkC,WAAahkC,EAAEkkC,eAG/D,GAAIlkC,EAAE65B,OAAOa,eAEd,YADA16B,EAAEowC,aAIFpwC,EAAE65B,OAAOU,wBAA0B2V,GACnClwC,EAAEsoC,eAAe2H,GACjBjwC,EAAEkvC,qBAAqBY,GACvB9vC,EAAEsqC,oBAAoB0F,GACtBhwC,EAAEqwC,oBACFrwC,EAAEssC,WAAY,EACdtsC,EAAEulB,QAAQsgB,eAAc,WACf7lC,GAAM0tC,IACX1tC,EAAEolC,KAAK,mBAAoBplC,GAE3BA,EAAEkvC,qBAAqBlvC,EAAE65B,OAAO5J,OAChCjwB,EAAEsqC,oBAAoB2F,GACtBjwC,EAAEulB,QAAQsgB,eAAc,WACf7lC,GACLA,EAAEswC,0BAGHtwC,EAAEkkC,UACTlkC,EAAEsoC,eAAe0H,GACjBhwC,EAAEkvC,qBAAqBY,GACvB9vC,EAAEsqC,oBAAoB0F,GACtBhwC,EAAEqwC,oBACGrwC,EAAEssC,YACHtsC,EAAEssC,WAAY,EACdtsC,EAAEulB,QAAQsgB,eAAc,WACf7lC,GACLA,EAAEswC,uBAKVtwC,EAAEsoC,eAAe0H,GAGrBhwC,EAAE4oC,sBAED5oC,EAAE65B,OAAOQ,kBAAoBoV,GAAYzvC,EAAE65B,OAAO0D,gBACnDv9B,EAAEsoC,iBACFtoC,EAAE4oC,yBA5IV,CAkJA,IAAI3qC,EAAGsyC,EAAY,EAAGC,EAAYxwC,EAAE2mC,gBAAgB,GACpD,IAAK1oC,EAAI,EAAGA,EAAI+B,EAAE0mC,WAAWvlC,OAAQlD,GAAK+B,EAAE65B,OAAOvoB,oBACU,IAA9CtR,EAAE0mC,WAAWzoC,EAAI+B,EAAE65B,OAAOvoB,gBAC7Bi+B,GAAcvvC,EAAE0mC,WAAWzoC,IAAMsxC,EAAavvC,EAAE0mC,WAAWzoC,EAAI+B,EAAE65B,OAAOvoB,kBACxEi/B,EAAYtyC,EACZuyC,EAAYxwC,EAAE0mC,WAAWzoC,EAAI+B,EAAE65B,OAAOvoB,gBAAkBtR,EAAE0mC,WAAWzoC,IAIrEsxC,GAAcvvC,EAAE0mC,WAAWzoC,KAC3BsyC,EAAYtyC,EACZuyC,EAAYxwC,EAAE0mC,WAAW1mC,EAAE0mC,WAAWvlC,OAAS,GAAKnB,EAAE0mC,WAAW1mC,EAAE0mC,WAAWvlC,OAAS,IAMnG,IAAI2rB,GAASyiB,EAAavvC,EAAE0mC,WAAW6J,IAAcC,EAErD,GAAIf,EAAWzvC,EAAE65B,OAAO0D,aAAc,CAElC,IAAKv9B,EAAE65B,OAAOwD,WAEV,YADAr9B,EAAEmI,QAAQnI,EAAEqmC,aAGS,SAArBrmC,EAAE2uC,iBACE7hB,GAAS9sB,EAAE65B,OAAOyD,gBAAiBt9B,EAAEmI,QAAQooC,EAAYvwC,EAAE65B,OAAOvoB,gBACjEtR,EAAEmI,QAAQooC,IAGM,SAArBvwC,EAAE2uC,iBACE7hB,EAAS,EAAI9sB,EAAE65B,OAAOyD,gBAAkBt9B,EAAEmI,QAAQooC,EAAYvwC,EAAE65B,OAAOvoB,gBACtEtR,EAAEmI,QAAQooC,QAGlB,CAED,IAAKvwC,EAAE65B,OAAOuD,YAEV,YADAp9B,EAAEmI,QAAQnI,EAAEqmC,aAGS,SAArBrmC,EAAE2uC,gBACF3uC,EAAEmI,QAAQooC,EAAYvwC,EAAE65B,OAAOvoB,gBAGV,SAArBtR,EAAE2uC,gBACF3uC,EAAEmI,QAAQooC,SA5MdtD,EAAYC,GAAU,IAmN9BltC,EAAEywC,SAAW,SAAUj5B,EAAYyY,GAC/B,OAAOjwB,EAAEmI,QAAQqP,EAAYyY,GAAO,GAAM,IAE9CjwB,EAAEmI,QAAU,SAAUqP,EAAYyY,EAAOygB,EAAc/K,QACvB,IAAjB+K,IAA8BA,GAAe,QAC9B,IAAfl5B,IAA4BA,EAAa,GAChDA,EAAa,IAAGA,EAAa,GACjCxX,EAAE8oC,UAAYrf,KAAK4d,MAAM7vB,EAAaxX,EAAE65B,OAAOvoB,gBAC3CtR,EAAE8oC,WAAa9oC,EAAE+lC,SAAS5kC,SAAQnB,EAAE8oC,UAAY9oC,EAAE+lC,SAAS5kC,OAAS,GAExE,IAAI6iC,GAAchkC,EAAE+lC,SAAS/lC,EAAE8oC,WAc/B,GAZI9oC,EAAE65B,OAAOjlB,UAAY5U,EAAEulC,cACnBI,IAAa3lC,EAAE65B,OAAOG,6BACtBh6B,EAAE4lC,cAAc3V,GAGhBjwB,EAAE0lC,gBAIV1lC,EAAEsoC,eAAetE,GAGdhkC,EAAE65B,OAAOyF,oBACR,IAAK,IAAIrhC,EAAI,EAAGA,EAAI+B,EAAE0mC,WAAWvlC,OAAQlD,KAC/BwrB,KAAK4d,MAAkB,IAAZrD,IAAoBva,KAAK4d,MAAwB,IAAlBrnC,EAAE0mC,WAAWzoC,MACzDuZ,EAAavZ,GAMzB,SAAK+B,EAAE65B,OAAO2F,kBAAoBwE,EAAYhkC,EAAEgkC,WAAaA,EAAYhkC,EAAE8lC,qBAGtE9lC,EAAE65B,OAAO0F,kBAAoByE,EAAYhkC,EAAEgkC,WAAaA,EAAYhkC,EAAEgmC,iBAClEhmC,EAAEqmC,aAAe,KAAO7uB,UAIZ,IAAVyY,IAAuBA,EAAQjwB,EAAE65B,OAAO5J,OACnDjwB,EAAE+oC,cAAgB/oC,EAAEqmC,aAAe,EACnCrmC,EAAEqmC,YAAc7uB,EAChBxX,EAAEipC,kBACGjpC,EAAEqhB,MAAQ2iB,IAAchkC,EAAEgkC,YAAgBhkC,EAAEqhB,KAAO2iB,IAAchkC,EAAEgkC,WAEhEhkC,EAAE65B,OAAOe,YACT56B,EAAEimC,mBAENjmC,EAAEgpC,gBACsB,UAApBhpC,EAAE65B,OAAOkB,QACT/6B,EAAEsqC,oBAAoBtG,IAEnB,IAEXhkC,EAAEgpC,gBACFhpC,EAAEqwC,kBAAkBK,GAEN,IAAVzgB,GAAejwB,EAAEwrC,QAAQmF,QACzB3wC,EAAEsqC,oBAAoBtG,GACtBhkC,EAAEkvC,qBAAqB,GACvBlvC,EAAEswC,gBAAgBI,KAGlB1wC,EAAEsqC,oBAAoBtG,GACtBhkC,EAAEkvC,qBAAqBjf,GAClBjwB,EAAEssC,YACHtsC,EAAEssC,WAAY,EACdtsC,EAAEulB,QAAQsgB,eAAc,WACf7lC,GACLA,EAAEswC,gBAAgBI,SAMvB,MAGX1wC,EAAEqwC,kBAAoB,SAAUK,QACA,IAAjBA,IAA8BA,GAAe,GACpD1wC,EAAE65B,OAAOe,YACT56B,EAAEimC,mBAEFjmC,EAAE2qC,MAAM3qC,EAAE2qC,KAAK0F,oBACfK,IACA1wC,EAAEolC,KAAK,oBAAqBplC,GACxBA,EAAEqmC,cAAgBrmC,EAAE+oC,gBACpB/oC,EAAEolC,KAAK,qBAAsBplC,GACzBA,EAAEqmC,YAAcrmC,EAAE+oC,cAClB/oC,EAAEolC,KAAK,mBAAoBplC,GAG3BA,EAAEolC,KAAK,mBAAoBplC,MAM3CA,EAAEswC,gBAAkB,SAAUI,GAC1B1wC,EAAEssC,WAAY,EACdtsC,EAAEkvC,qBAAqB,QACK,IAAjBwB,IAA8BA,GAAe,GACpD1wC,EAAE2qC,MAAM3qC,EAAE2qC,KAAK2F,kBACfI,IACA1wC,EAAEolC,KAAK,kBAAmBplC,GACtBA,EAAEqmC,cAAgBrmC,EAAE+oC,gBACpB/oC,EAAEolC,KAAK,mBAAoBplC,GACvBA,EAAEqmC,YAAcrmC,EAAE+oC,cAClB/oC,EAAEolC,KAAK,iBAAkBplC,GAGzBA,EAAEolC,KAAK,iBAAkBplC,KAIjCA,EAAE65B,OAAO7Y,SAAWhhB,EAAEghB,SACtBhhB,EAAEghB,QAAQ4vB,WAAW5wC,EAAE65B,OAAO7Y,QAAShhB,EAAEqmC,aAEzCrmC,EAAE65B,OAAO4C,SAAWz8B,EAAEy8B,SACtBz8B,EAAEy8B,QAAQoU,WAIlB7wC,EAAEwsC,UAAY,SAAUkE,EAAczgB,EAAO0V,GACzC,GAAI3lC,EAAE65B,OAAOxmB,KAAM,CACf,GAAIrT,EAAEssC,UAAW,OAAO,EACxBtsC,EAAEgtC,UACehtC,EAAEkJ,UAAU,GAAG4nC,WAChC,OAAO9wC,EAAEmI,QAAQnI,EAAEqmC,YAAcrmC,EAAE65B,OAAOvoB,eAAgB2e,EAAOygB,EAAc/K,GAE9E,OAAO3lC,EAAEmI,QAAQnI,EAAEqmC,YAAcrmC,EAAE65B,OAAOvoB,eAAgB2e,EAAOygB,EAAc/K,IAExF3lC,EAAE+wC,WAAa,SAAU9gB,GACrB,OAAOjwB,EAAEwsC,WAAU,EAAMvc,GAAO,IAEpCjwB,EAAEysC,UAAY,SAAUiE,EAAczgB,EAAO0V,GACzC,GAAI3lC,EAAE65B,OAAOxmB,KAAM,CACf,GAAIrT,EAAEssC,UAAW,OAAO,EACxBtsC,EAAEgtC,UACehtC,EAAEkJ,UAAU,GAAG4nC,WAChC,OAAO9wC,EAAEmI,QAAQnI,EAAEqmC,YAAc,EAAGpW,EAAOygB,EAAc/K,GAExD,OAAO3lC,EAAEmI,QAAQnI,EAAEqmC,YAAc,EAAGpW,EAAOygB,EAAc/K,IAElE3lC,EAAEgxC,WAAa,SAAU/gB,GACrB,OAAOjwB,EAAEysC,WAAU,EAAMxc,GAAO,IAEpCjwB,EAAEowC,WAAa,SAAUM,EAAczgB,EAAO0V,GAC1C,OAAO3lC,EAAEmI,QAAQnI,EAAEqmC,YAAapW,EAAOygB,IAG3C1wC,EAAEixC,oBAAsB,WAEpB,OADAjxC,EAAE65B,OAAO4D,cAAe,GACjB,GAEXz9B,EAAEkxC,mBAAqB,WAEnB,OADAlxC,EAAE65B,OAAO4D,cAAe,GACjB,GAMXz9B,EAAEkvC,qBAAuB,SAAU/d,EAAUggB,GACzCnxC,EAAEulB,QAAQokB,WAAWxY,GACG,UAApBnxB,EAAE65B,OAAOkB,QAAsB/6B,EAAEoxC,QAAQpxC,EAAE65B,OAAOkB,SAClD/6B,EAAEoxC,QAAQpxC,EAAE65B,OAAOkB,QAAQsW,cAAclgB,GAEzCnxB,EAAE65B,OAAOgC,UAAY77B,EAAE67B,UACvB77B,EAAE67B,SAASwV,cAAclgB,GAEzBnxB,EAAE65B,OAAOoC,WAAaj8B,EAAEi8B,WACxBj8B,EAAEi8B,UAAUoV,cAAclgB,GAE1BnxB,EAAE65B,OAAOsF,SAAWn/B,EAAEmqC,YACtBnqC,EAAEmqC,WAAWkH,cAAclgB,EAAUggB,GAEzCnxC,EAAEolC,KAAK,kBAAmBplC,EAAGmxB,IAEjCnxB,EAAEsqC,oBAAsB,SAAUtG,EAAW4E,EAAmBuI,GAC5D,IAAI12B,EAAI,EAAGE,EAAI,EACX3a,EAAE2jC,eACFlpB,EAAIza,EAAEqhB,KAAO2iB,EAAYA,EAGzBrpB,EAAIqpB,EAGJhkC,EAAE65B,OAAOmD,eACTviB,EAAI0d,EAAM1d,GACVE,EAAIwd,EAAMxd,IAGT3a,EAAE65B,OAAOiB,mBACN96B,EAAEsjC,QAAQE,aAAcxjC,EAAEulB,QAAQmkB,UAAU,eAAiBjvB,EAAI,OAASE,EAA9B,YAC3C3a,EAAEulB,QAAQmkB,UAAU,aAAejvB,EAAI,OAASE,EAAI,QAG7D3a,EAAEgkC,UAAYhkC,EAAE2jC,eAAiBlpB,EAAIE,EAIrC,IAAI4tB,EAAiBvoC,EAAEgmC,eAAiBhmC,EAAE8lC,gBACnB,IAAnByC,EACW,GAGCvE,EAAYhkC,EAAE8lC,gBAAmByC,KAEhCvoC,EAAEikC,UACfjkC,EAAEsoC,eAAetE,GAGjB4E,GAAmB5oC,EAAE4oC,oBACD,UAApB5oC,EAAE65B,OAAOkB,QAAsB/6B,EAAEoxC,QAAQpxC,EAAE65B,OAAOkB,SAClD/6B,EAAEoxC,QAAQpxC,EAAE65B,OAAOkB,QAAQuW,aAAatxC,EAAEgkC,WAE1ChkC,EAAE65B,OAAOgC,UAAY77B,EAAE67B,UACvB77B,EAAE67B,SAASyV,aAAatxC,EAAEgkC,WAE1BhkC,EAAE65B,OAAOoC,WAAaj8B,EAAEi8B,WACxBj8B,EAAEi8B,UAAUqV,aAAatxC,EAAEgkC,WAE3BhkC,EAAE65B,OAAOsF,SAAWn/B,EAAEmqC,YACtBnqC,EAAEmqC,WAAWmH,aAAatxC,EAAEgkC,UAAWmN,GAE3CnxC,EAAEolC,KAAK,iBAAkBplC,EAAGA,EAAEgkC,YAGlChkC,EAAEuxC,aAAe,SAAUvd,EAAIwd,GAC3B,IAAIC,EAAQC,EAAcC,EAAUC,EAOpC,YAJoB,IAATJ,IACPA,EAAO,KAGPxxC,EAAE65B,OAAOiB,iBACF96B,EAAEqhB,KAAOrhB,EAAEgkC,UAAYhkC,EAAEgkC,WAGpC2N,EAAWtxC,OAAOwpB,iBAAiBmK,EAAI,MACnC3zB,OAAOwxC,kBACPH,EAAeC,EAASjI,WAAaiI,EAASG,iBAC7B/pC,MAAM,KAAK5G,OAAS,IACjCuwC,EAAeA,EAAa3pC,MAAM,MAAM0B,KAAI,SAASs5B,GACjD,OAAOA,EAAE1qB,QAAQ,IAAI,QACtB1O,KAAK,OAIZioC,EAAkB,IAAIvxC,OAAOwxC,gBAAiC,SAAjBH,EAA0B,GAAKA,IAI5ED,GADAG,EAAkBD,EAASI,cAAgBJ,EAASK,YAAcL,EAASM,aAAeN,EAASO,aAAgBP,EAASjI,WAAaiI,EAASpgB,iBAAiB,aAAalZ,QAAQ,aAAc,uBAC7K6F,WAAWnW,MAAM,KAGjC,MAATypC,IAGIE,EADArxC,OAAOwxC,gBACQD,EAAgBO,IAER,KAAlBV,EAAOtwC,OACG+oB,WAAWunB,EAAO,KAGlBvnB,WAAWunB,EAAO,KAE5B,MAATD,IAGIE,EADArxC,OAAOwxC,gBACQD,EAAgBQ,IAER,KAAlBX,EAAOtwC,OACG+oB,WAAWunB,EAAO,KAGlBvnB,WAAWunB,EAAO,KAErCzxC,EAAEqhB,KAAOqwB,IAAcA,GAAgBA,GACpCA,GAAgB,IAE3B1xC,EAAEivC,oBAAsB,SAAUuC,GAI9B,YAHoB,IAATA,IACPA,EAAOxxC,EAAE2jC,eAAiB,IAAM,KAE7B3jC,EAAEuxC,aAAavxC,EAAEulB,QAAQ,GAAIisB,IAMxCxxC,EAAEqyC,UAAY,GAoBdryC,EAAEsyC,cAAgB,WACd,GAAItyC,EAAE65B,OAAO2H,eAET,IADA,IAAI+Q,EAAmBvyC,EAAEkJ,UAAUhF,UAC1BjG,EAAI,EAAGA,EAAIs0C,EAAiBpxC,OAAQlD,IACzCu0C,EAAaD,EAAiBt0C,IAKtCu0C,EAAaxyC,EAAEkJ,UAAU,GAAI,CAACupC,WAAW,IAGzCD,EAAaxyC,EAAEulB,QAAQ,GAAI,CAAC9c,YAAY,KAE5CzI,EAAE0yC,oBAAsB,WACpB,IAAK,IAAIz0C,EAAI,EAAGA,EAAI+B,EAAEqyC,UAAUlxC,OAAQlD,IACpC+B,EAAEqyC,UAAUp0C,GAAG00C,aAEnB3yC,EAAEqyC,UAAY,IAMlBryC,EAAE4yC,WAAa,WAEX5yC,EAAEulB,QAAQjb,SAAS,IAAMtK,EAAE65B,OAAOiG,WAAa,IAAM9/B,EAAE65B,OAAOqG,qBAAqBx1B,SAEnF,IAAI47B,EAAStmC,EAAEulB,QAAQjb,SAAS,IAAMtK,EAAE65B,OAAOiG,YAEjB,SAA3B9/B,EAAE65B,OAAO5oB,eAA6BjR,EAAE65B,OAAOqF,eAAcl/B,EAAE65B,OAAOqF,aAAeoH,EAAOnlC,QAE/FnB,EAAEk/B,aAAe17B,SAASxD,EAAE65B,OAAOqF,cAAgBl/B,EAAE65B,OAAO5oB,cAAe,IAC3EjR,EAAEk/B,aAAel/B,EAAEk/B,aAAel/B,EAAE65B,OAAOoF,qBACvCj/B,EAAEk/B,aAAeoH,EAAOnlC,SACxBnB,EAAEk/B,aAAeoH,EAAOnlC,QAG5B,IAA2ClD,EAAvC40C,EAAgB,GAAIC,EAAe,GAOvC,IANAxM,EAAOl5B,MAAK,SAAUtG,EAAOktB,GACzB,IAAItI,EAAQ9qB,EAAEV,MACV4G,EAAQ9G,EAAEk/B,cAAc4T,EAAazlC,KAAK2mB,GAC1CltB,EAAQw/B,EAAOnlC,QAAU2F,GAASw/B,EAAOnlC,OAASnB,EAAEk/B,cAAc2T,EAAcxlC,KAAK2mB,GACzFtI,EAAMzpB,KAAK,0BAA2B6E,MAErC7I,EAAI,EAAGA,EAAI60C,EAAa3xC,OAAQlD,IACjC+B,EAAEulB,QAAQvd,OAAOpH,EAAEkyC,EAAa70C,GAAG80C,WAAU,IAAOhuC,SAAS/E,EAAE65B,OAAOqG,sBAE1E,IAAKjiC,EAAI40C,EAAc1xC,OAAS,EAAGlD,GAAK,EAAGA,IACvC+B,EAAEulB,QAAQytB,QAAQpyC,EAAEiyC,EAAc50C,GAAG80C,WAAU,IAAOhuC,SAAS/E,EAAE65B,OAAOqG,uBAGhFlgC,EAAEmjC,YAAc,WACZnjC,EAAEulB,QAAQjb,SAAS,IAAMtK,EAAE65B,OAAOiG,WAAa,IAAM9/B,EAAE65B,OAAOqG,qBAAqBx1B,SACnF1K,EAAEsmC,OAAOnjC,WAAW,4BAExBnD,EAAEojC,OAAS,SAAU6P,GACjB,IAAIC,EAAWlzC,EAAEqmC,YAAcrmC,EAAEk/B,aACjCl/B,EAAEmjC,cACFnjC,EAAE4yC,aACF5yC,EAAE6T,mBACEo/B,GACAjzC,EAAEmI,QAAQ+qC,EAAWlzC,EAAEk/B,aAAc,GAAG,IAIhDl/B,EAAEgtC,QAAU,WACR,IAAIvhB,EAEAzrB,EAAEqmC,YAAcrmC,EAAEk/B,cAClBzT,EAAWzrB,EAAEsmC,OAAOnlC,OAA0B,EAAjBnB,EAAEk/B,aAAmBl/B,EAAEqmC,YACpD5a,GAAsBzrB,EAAEk/B,aACxBl/B,EAAEmI,QAAQsjB,EAAU,GAAG,GAAO,KAGG,SAA3BzrB,EAAE65B,OAAO5oB,eAA4BjR,EAAEqmC,aAAgC,EAAjBrmC,EAAEk/B,cAAsBl/B,EAAEqmC,YAAcrmC,EAAEsmC,OAAOnlC,OAAkC,EAAzBnB,EAAE65B,OAAO5oB,iBAC/Hwa,GAAYzrB,EAAEsmC,OAAOnlC,OAASnB,EAAEqmC,YAAcrmC,EAAEk/B,aAChDzT,GAAsBzrB,EAAEk/B,aACxBl/B,EAAEmI,QAAQsjB,EAAU,GAAG,GAAO,KAMtCzrB,EAAE8H,YAAc,SAAUw+B,GAItB,GAHItmC,EAAE65B,OAAOxmB,MACTrT,EAAEmjC,cAEgB,WAAlB7iC,EAAOgmC,IAAuBA,EAAOnlC,OACrC,IAAK,IAAIlD,EAAI,EAAGA,EAAIqoC,EAAOnlC,OAAQlD,IAC3BqoC,EAAOroC,IAAI+B,EAAEulB,QAAQvd,OAAOs+B,EAAOroC,SAI3C+B,EAAEulB,QAAQvd,OAAOs+B,GAEjBtmC,EAAE65B,OAAOxmB,MACTrT,EAAE4yC,aAEA5yC,EAAE65B,OAAOngB,UAAY1Z,EAAEsjC,QAAQ5pB,UACjC1Z,EAAE6V,QAAO,IAGjB7V,EAAEmzC,aAAe,SAAU7M,GACnBtmC,EAAE65B,OAAOxmB,MACTrT,EAAEmjC,cAEN,IAAI0F,EAAiB7oC,EAAEqmC,YAAc,EACrC,GAAsB,WAAlB/lC,EAAOgmC,IAAuBA,EAAOnlC,OAAQ,CAC7C,IAAK,IAAIlD,EAAI,EAAGA,EAAIqoC,EAAOnlC,OAAQlD,IAC3BqoC,EAAOroC,IAAI+B,EAAEulB,QAAQytB,QAAQ1M,EAAOroC,IAE5C4qC,EAAiB7oC,EAAEqmC,YAAcC,EAAOnlC,YAGxCnB,EAAEulB,QAAQytB,QAAQ1M,GAElBtmC,EAAE65B,OAAOxmB,MACTrT,EAAE4yC,aAEA5yC,EAAE65B,OAAOngB,UAAY1Z,EAAEsjC,QAAQ5pB,UACjC1Z,EAAE6V,QAAO,GAEb7V,EAAEmI,QAAQ0gC,EAAgB,GAAG,IAEjC7oC,EAAEozC,YAAc,SAAUC,GAClBrzC,EAAE65B,OAAOxmB,OACTrT,EAAEmjC,cACFnjC,EAAEsmC,OAAStmC,EAAEulB,QAAQjb,SAAS,IAAMtK,EAAE65B,OAAOiG,aAEjD,IACIwT,EADAzK,EAAiB7oC,EAAEqmC,YAEvB,GAA6B,WAAzB/lC,EAAO+yC,IAA8BA,EAAclyC,OAAQ,CAC3D,IAAK,IAAIlD,EAAI,EAAGA,EAAIo1C,EAAclyC,OAAQlD,IACtCq1C,EAAgBD,EAAcp1C,GAC1B+B,EAAEsmC,OAAOgN,IAAgBtzC,EAAEsmC,OAAO9xB,GAAG8+B,GAAe5oC,SACpD4oC,EAAgBzK,GAAgBA,IAExCA,EAAiBpf,KAAK4D,IAAIwb,EAAgB,QAG1CyK,EAAgBD,EACZrzC,EAAEsmC,OAAOgN,IAAgBtzC,EAAEsmC,OAAO9xB,GAAG8+B,GAAe5oC,SACpD4oC,EAAgBzK,GAAgBA,IACpCA,EAAiBpf,KAAK4D,IAAIwb,EAAgB,GAG1C7oC,EAAE65B,OAAOxmB,MACTrT,EAAE4yC,aAGA5yC,EAAE65B,OAAOngB,UAAY1Z,EAAEsjC,QAAQ5pB,UACjC1Z,EAAE6V,QAAO,GAET7V,EAAE65B,OAAOxmB,KACTrT,EAAEmI,QAAQ0gC,EAAiB7oC,EAAEk/B,aAAc,GAAG,GAG9Cl/B,EAAEmI,QAAQ0gC,EAAgB,GAAG,IAIrC7oC,EAAEyH,gBAAkB,WAEhB,IADA,IAAI4rC,EAAgB,GACXp1C,EAAI,EAAGA,EAAI+B,EAAEsmC,OAAOnlC,OAAQlD,IACjCo1C,EAAchmC,KAAKpP,GAEvB+B,EAAEozC,YAAYC,IAOlBrzC,EAAEoxC,QAAU,CACR3f,KAAM,CACF6f,aAAc,WACV,IAAK,IAAIrzC,EAAI,EAAGA,EAAI+B,EAAEsmC,OAAOnlC,OAAQlD,IAAK,CACtC,IAAIytB,EAAQ1rB,EAAEsmC,OAAO9xB,GAAGvW,GAEpBs1C,GADS7nB,EAAM,GAAGmc,kBAEjB7nC,EAAE65B,OAAOiB,mBAAkByY,GAAUvzC,EAAEgkC,WAC5C,IAAIwP,EAAK,EACJxzC,EAAE2jC,iBACH6P,EAAKD,EACLA,EAAK,GAET,IAAIE,EAAezzC,EAAE65B,OAAOpI,KAAKmK,UACzBnS,KAAK4D,IAAI,EAAI5D,KAAKC,IAAIgC,EAAM,GAAGuY,UAAW,GAC1C,EAAIxa,KAAK2D,IAAI3D,KAAK4D,IAAI3B,EAAM,GAAGuY,UAAW,GAAI,GACtDvY,EACKpkB,IAAI,CACD6mB,QAASslB,IAEZ/J,UAAU,eAAiB6J,EAAK,OAASC,EAAK,cAK3DnC,cAAe,SAAUlgB,GAErB,GADAnxB,EAAEsmC,OAAOqD,WAAWxY,GAChBnxB,EAAE65B,OAAOiB,kBAAiC,IAAb3J,EAAgB,CAC7C,IAAIuiB,GAAiB,EACrB1zC,EAAEsmC,OAAOT,eAAc,WACnB,IAAI6N,GACC1zC,EAAL,CACA0zC,GAAiB,EACjB1zC,EAAEssC,WAAY,EAEd,IADA,IAAIqH,EAAgB,CAAC,sBAAuB,gBAAiB,iBAAkB,kBAAmB,mBACzF11C,EAAI,EAAGA,EAAI01C,EAAcxyC,OAAQlD,IACtC+B,EAAEulB,QAAQzhB,QAAQ6vC,EAAc11C,WAMpDq9B,KAAM,CACFgW,aAAc,WACV,IAAK,IAAIrzC,EAAI,EAAGA,EAAI+B,EAAEsmC,OAAOnlC,OAAQlD,IAAK,CACtC,IAAIytB,EAAQ1rB,EAAEsmC,OAAO9xB,GAAGvW,GACpBgmC,EAAWvY,EAAM,GAAGuY,SACpBjkC,EAAE65B,OAAOyB,KAAKC,gBACd0I,EAAWxa,KAAK4D,IAAI5D,KAAK2D,IAAI1B,EAAM,GAAGuY,SAAU,IAAK,IAEzD,IAEI2P,GADU,IAAM3P,EAEhB4P,EAAU,EACVN,GAJS7nB,EAAM,GAAGmc,kBAKlB2L,EAAK,EAaT,GAZKxzC,EAAE2jC,eAME3jC,EAAEqhB,MACPuyB,GAAWA,IANXJ,EAAKD,EACLA,EAAK,EACLM,GAAWD,EACXA,EAAU,GAMdloB,EAAM,GAAG7Q,MAAMmd,QAAUvO,KAAKC,IAAID,KAAK0O,MAAM8L,IAAajkC,EAAEsmC,OAAOnlC,OAE/DnB,EAAE65B,OAAOyB,KAAKD,aAAc,CAE5B,IAAIyY,EAAe9zC,EAAE2jC,eAAiBjY,EAAM5pB,KAAK,6BAA+B4pB,EAAM5pB,KAAK,4BACvFiyC,EAAc/zC,EAAE2jC,eAAiBjY,EAAM5pB,KAAK,8BAAgC4pB,EAAM5pB,KAAK,+BAC/D,IAAxBgyC,EAAa3yC,SACb2yC,EAAelzC,EAAE,oCAAsCZ,EAAE2jC,eAAiB,OAAS,OAAS,YAC5FjY,EAAM1jB,OAAO8rC,IAEU,IAAvBC,EAAY5yC,SACZ4yC,EAAcnzC,EAAE,oCAAsCZ,EAAE2jC,eAAiB,QAAU,UAAY,YAC/FjY,EAAM1jB,OAAO+rC,IAEbD,EAAa3yC,SAAQ2yC,EAAa,GAAGj5B,MAAMsT,QAAU1E,KAAK4D,KAAK4W,EAAU,IACzE8P,EAAY5yC,SAAQ4yC,EAAY,GAAGl5B,MAAMsT,QAAU1E,KAAK4D,IAAI4W,EAAU,IAG9EvY,EACKge,UAAU,eAAiB6J,EAAK,OAASC,EAAK,oBAAsBK,EAAU,gBAAkBD,EAAU,UAGvHvC,cAAe,SAAUlgB,GAErB,GADAnxB,EAAEsmC,OAAOqD,WAAWxY,GAAUrvB,KAAK,gHAAgH6nC,WAAWxY,GAC1JnxB,EAAE65B,OAAOiB,kBAAiC,IAAb3J,EAAgB,CAC7C,IAAIuiB,GAAiB,EACrB1zC,EAAEsmC,OAAO9xB,GAAGxU,EAAEqmC,aAAaR,eAAc,WACrC,IAAI6N,GACC1zC,GACAY,EAAEV,MAAM0B,SAAS5B,EAAE65B,OAAOkG,kBAA/B,CACA2T,GAAiB,EACjB1zC,EAAEssC,WAAY,EAEd,IADA,IAAIqH,EAAgB,CAAC,sBAAuB,gBAAiB,iBAAkB,kBAAmB,mBACzF11C,EAAI,EAAGA,EAAI01C,EAAcxyC,OAAQlD,IACtC+B,EAAEulB,QAAQzhB,QAAQ6vC,EAAc11C,WAMpDu9B,KAAM,CACF8V,aAAc,WACV,IAAuB0C,EAAnBC,EAAgB,EAChBj0C,EAAE65B,OAAO2B,KAAKC,SACVz7B,EAAE2jC,gBAEwB,KAD1BqQ,EAAah0C,EAAEulB,QAAQzjB,KAAK,wBACbX,SACX6yC,EAAapzC,EAAE,0CACfZ,EAAEulB,QAAQvd,OAAOgsC,IAErBA,EAAW1sC,IAAI,CAACuL,OAAQ7S,EAAEoU,MAAQ,QAIR,KAD1B4/B,EAAah0C,EAAEkJ,UAAUpH,KAAK,wBACfX,SACX6yC,EAAapzC,EAAE,0CACfZ,EAAEkJ,UAAUlB,OAAOgsC,KAI/B,IAAK,IAAI/1C,EAAI,EAAGA,EAAI+B,EAAEsmC,OAAOnlC,OAAQlD,IAAK,CACtC,IAAIytB,EAAQ1rB,EAAEsmC,OAAO9xB,GAAGvW,GACpBi2C,EAAiB,GAAJj2C,EACbk6B,EAAQ1O,KAAK4d,MAAM6M,EAAa,KAChCl0C,EAAEqhB,MACF6yB,GAAcA,EACd/b,EAAQ1O,KAAK4d,OAAO6M,EAAa,MAErC,IAAIjQ,EAAWxa,KAAK4D,IAAI5D,KAAK2D,IAAI1B,EAAM,GAAGuY,SAAU,IAAK,GACrDsP,EAAK,EAAGC,EAAK,EAAGW,EAAK,EACrBl2C,EAAI,GAAM,GACVs1C,EAAe,GAARpb,EAAYn4B,EAAEymC,KACrB0N,EAAK,IAECl2C,EAAI,GAAK,GAAM,GACrBs1C,EAAK,EACLY,EAAe,GAARhc,EAAYn4B,EAAEymC,OAEfxoC,EAAI,GAAK,GAAM,GACrBs1C,EAAKvzC,EAAEymC,KAAe,EAARtO,EAAYn4B,EAAEymC,KAC5B0N,EAAKn0C,EAAEymC,OAEDxoC,EAAI,GAAK,GAAM,IACrBs1C,GAAOvzC,EAAEymC,KACT0N,EAAK,EAAIn0C,EAAEymC,KAAgB,EAATzmC,EAAEymC,KAAWtO,GAE/Bn4B,EAAEqhB,MACFkyB,GAAMA,GAGLvzC,EAAE2jC,iBACH6P,EAAKD,EACLA,EAAK,GAGT,IAAI7J,EAAY,YAAc1pC,EAAE2jC,eAAiB,GAAKuQ,GAAc,iBAAmBl0C,EAAE2jC,eAAiBuQ,EAAa,GAAK,oBAAsBX,EAAK,OAASC,EAAK,OAASW,EAAK,MAMnL,GALIlQ,GAAY,GAAKA,GAAY,IAC7BgQ,EAAoB,GAAJh2C,EAAoB,GAAXgmC,EACrBjkC,EAAEqhB,MAAK4yB,EAAqB,IAAJh2C,EAAoB,GAAXgmC,IAEzCvY,EAAMge,UAAUA,GACZ1pC,EAAE65B,OAAO2B,KAAKH,aAAc,CAE5B,IAAIyY,EAAe9zC,EAAE2jC,eAAiBjY,EAAM5pB,KAAK,6BAA+B4pB,EAAM5pB,KAAK,4BACvFiyC,EAAc/zC,EAAE2jC,eAAiBjY,EAAM5pB,KAAK,8BAAgC4pB,EAAM5pB,KAAK,+BAC/D,IAAxBgyC,EAAa3yC,SACb2yC,EAAelzC,EAAE,oCAAsCZ,EAAE2jC,eAAiB,OAAS,OAAS,YAC5FjY,EAAM1jB,OAAO8rC,IAEU,IAAvBC,EAAY5yC,SACZ4yC,EAAcnzC,EAAE,oCAAsCZ,EAAE2jC,eAAiB,QAAU,UAAY,YAC/FjY,EAAM1jB,OAAO+rC,IAEbD,EAAa3yC,SAAQ2yC,EAAa,GAAGj5B,MAAMsT,QAAU1E,KAAK4D,KAAK4W,EAAU,IACzE8P,EAAY5yC,SAAQ4yC,EAAY,GAAGl5B,MAAMsT,QAAU1E,KAAK4D,IAAI4W,EAAU,KAUlF,GAPAjkC,EAAEulB,QAAQje,IAAI,CACV,2BAA4B,YAAetH,EAAEymC,KAAO,EAAK,KACzD,wBAAyB,YAAezmC,EAAEymC,KAAO,EAAK,KACtD,uBAAwB,YAAezmC,EAAEymC,KAAO,EAAK,KACrD,mBAAoB,YAAezmC,EAAEymC,KAAO,EAAK,OAGjDzmC,EAAE65B,OAAO2B,KAAKC,OACd,GAAIz7B,EAAE2jC,eACFqQ,EAAWtK,UAAU,qBAAuB1pC,EAAEoU,MAAQ,EAAIpU,EAAE65B,OAAO2B,KAAKE,cAAgB,QAAW17B,EAAEoU,MAAQ,EAAK,0CAA6CpU,EAAE65B,OAAO2B,KAAKG,YAAe,SAE3L,CACD,IAAIyY,EAAc3qB,KAAKC,IAAIuqB,GAA4D,GAA3CxqB,KAAK4d,MAAM5d,KAAKC,IAAIuqB,GAAiB,IAC7EI,EAAa,KAAO5qB,KAAK6qB,IAAkB,EAAdF,EAAkB3qB,KAAKulB,GAAK,KAAO,EAAIvlB,KAAK8qB,IAAkB,EAAdH,EAAkB3qB,KAAKulB,GAAK,KAAO,GAChHwF,EAASx0C,EAAE65B,OAAO2B,KAAKG,YACvB8Y,EAASz0C,EAAE65B,OAAO2B,KAAKG,YAAc0Y,EACrCrhC,EAAShT,EAAE65B,OAAO2B,KAAKE,aAC3BsY,EAAWtK,UAAU,WAAa8K,EAAS,QAAUC,EAAS,uBAAyBz0C,EAAE6S,OAAS,EAAIG,GAAU,QAAWhT,EAAE6S,OAAS,EAAI4hC,EAAU,uBAG5J,IAAIC,EAAW10C,EAAE20C,UAAY30C,EAAE40C,aAAiB50C,EAAEymC,KAAO,EAAK,EAC9DzmC,EAAEulB,QAAQmkB,UAAU,qBAAuBgL,EAAU,gBAAkB10C,EAAE2jC,eAAiB,EAAIsQ,GAAiB,iBAAmBj0C,EAAE2jC,gBAAkBsQ,EAAgB,GAAK,SAE/K5C,cAAe,SAAUlgB,GACrBnxB,EAAEsmC,OAAOqD,WAAWxY,GAAUrvB,KAAK,gHAAgH6nC,WAAWxY,GAC1JnxB,EAAE65B,OAAO2B,KAAKC,SAAWz7B,EAAE2jC,gBAC3B3jC,EAAEkJ,UAAUpH,KAAK,uBAAuB6nC,WAAWxY,KAI/D6J,UAAW,CACPsW,aAAc,WAMV,IALA,IAAI5H,EAAY1pC,EAAEgkC,UACd6Q,EAAS70C,EAAE2jC,gBAAkB+F,EAAY1pC,EAAEoU,MAAQ,GAAKs1B,EAAY1pC,EAAE6S,OAAS,EAC/EooB,EAASj7B,EAAE2jC,eAAiB3jC,EAAE65B,OAAOmB,UAAUC,QAASj7B,EAAE65B,OAAOmB,UAAUC,OAC3E+I,EAAYhkC,EAAE65B,OAAOmB,UAAUG,MAE1Bl9B,EAAI,EAAGkD,EAASnB,EAAEsmC,OAAOnlC,OAAQlD,EAAIkD,EAAQlD,IAAK,CACvD,IAAIytB,EAAQ1rB,EAAEsmC,OAAO9xB,GAAGvW,GACpB8oC,EAAY/mC,EAAE2mC,gBAAgB1oC,GAE9B62C,GAAoBD,EADNnpB,EAAM,GAAGmc,kBACoBd,EAAY,GAAKA,EAAY/mC,EAAE65B,OAAOmB,UAAUI,SAE3FwY,EAAU5zC,EAAE2jC,eAAiB1I,EAAS6Z,EAAmB,EACzDjB,EAAU7zC,EAAE2jC,eAAiB,EAAI1I,EAAS6Z,EAE1CC,GAAc/Q,EAAYva,KAAKC,IAAIorB,GAEnC1oB,EAAapsB,EAAE2jC,eAAiB,EAAI3jC,EAAE65B,OAAOmB,UAAUE,QAAW4Z,EAClE3oB,EAAansB,EAAE2jC,eAAiB3jC,EAAE65B,OAAOmB,UAAUE,QAAW4Z,EAAoB,EAGlFrrB,KAAKC,IAAIyC,GAAc,OAAOA,EAAa,GAC3C1C,KAAKC,IAAI0C,GAAc,OAAOA,EAAa,GAC3C3C,KAAKC,IAAIqrB,GAAc,OAAOA,EAAa,GAC3CtrB,KAAKC,IAAIkqB,GAAW,OAAOA,EAAU,GACrCnqB,KAAKC,IAAImqB,GAAW,OAAOA,EAAU,GAEzC,IAAImB,EAAiB,eAAiB7oB,EAAa,MAAQC,EAAa,MAAQ2oB,EAAa,gBAAkBlB,EAAU,gBAAkBD,EAAU,OAIrJ,GAFAloB,EAAMge,UAAUsL,GAChBtpB,EAAM,GAAG7Q,MAAMmd,OAAmD,EAAzCvO,KAAKC,IAAID,KAAK0O,MAAM2c,IACzC90C,EAAE65B,OAAOmB,UAAUK,aAAc,CAEjC,IAAIyY,EAAe9zC,EAAE2jC,eAAiBjY,EAAM5pB,KAAK,6BAA+B4pB,EAAM5pB,KAAK,4BACvFiyC,EAAc/zC,EAAE2jC,eAAiBjY,EAAM5pB,KAAK,8BAAgC4pB,EAAM5pB,KAAK,+BAC/D,IAAxBgyC,EAAa3yC,SACb2yC,EAAelzC,EAAE,oCAAsCZ,EAAE2jC,eAAiB,OAAS,OAAS,YAC5FjY,EAAM1jB,OAAO8rC,IAEU,IAAvBC,EAAY5yC,SACZ4yC,EAAcnzC,EAAE,oCAAsCZ,EAAE2jC,eAAiB,QAAU,UAAY,YAC/FjY,EAAM1jB,OAAO+rC,IAEbD,EAAa3yC,SAAQ2yC,EAAa,GAAGj5B,MAAMsT,QAAU2mB,EAAmB,EAAIA,EAAmB,GAC/Ff,EAAY5yC,SAAQ4yC,EAAY,GAAGl5B,MAAMsT,SAAY2mB,EAAoB,GAAKA,EAAmB,IAKzG90C,EAAEwrC,QAAQC,KACDzrC,EAAEulB,QAAQ,GAAG1K,MACnBo6B,kBAAoBJ,EAAS,WAGxCxD,cAAe,SAAUlgB,GACrBnxB,EAAEsmC,OAAOqD,WAAWxY,GAAUrvB,KAAK,gHAAgH6nC,WAAWxY,MAS1KnxB,EAAE2qC,KAAO,CACLuK,oBAAoB,EACpBC,iBAAkB,SAAUruC,EAAOsuC,GAC/B,QAAqB,IAAVtuC,SACoB,IAApBsuC,IAAiCA,GAAkB,GACtC,IAApBp1C,EAAEsmC,OAAOnlC,QAAb,CAEA,IAAIuqB,EAAQ1rB,EAAEsmC,OAAO9xB,GAAG1N,GACpB8tB,EAAMlJ,EAAM5pB,KAAK,IAAM9B,EAAE65B,OAAOoH,iBAAmB,SAAWjhC,EAAE65B,OAAOsH,sBAAwB,UAAYnhC,EAAE65B,OAAOqH,uBAAyB,MAC7IxV,EAAM9pB,SAAS5B,EAAE65B,OAAOoH,mBAAsBvV,EAAM9pB,SAAS5B,EAAE65B,OAAOsH,wBAA2BzV,EAAM9pB,SAAS5B,EAAE65B,OAAOqH,0BACzHtM,EAAMA,EAAI5a,IAAI0R,EAAM,KAEL,IAAfkJ,EAAIzzB,QAERyzB,EAAIxnB,MAAK,WACL,IAAIioC,EAAOz0C,EAAEV,MACbm1C,EAAKtwC,SAAS/E,EAAE65B,OAAOqH,wBACvB,IAAIoU,EAAaD,EAAKpzC,KAAK,mBACvBkjB,EAAMkwB,EAAKpzC,KAAK,YAChB8iC,EAASsQ,EAAKpzC,KAAK,eACnB+iC,EAAQqQ,EAAKpzC,KAAK,cACtBjC,EAAEwmB,UAAU6uB,EAAK,GAAKlwB,GAAOmwB,EAAavQ,EAAQC,GAAO,GAAO,WAC5D,GAAI,MAAOhlC,GAAoCA,EAA/C,CAuBA,GAtBIs1C,GACAD,EAAK/tC,IAAI,mBAAoB,QAAUguC,EAAa,MACpDD,EAAKlyC,WAAW,qBAGZ4hC,IACAsQ,EAAKpzC,KAAK,SAAU8iC,GACpBsQ,EAAKlyC,WAAW,gBAEhB6hC,IACAqQ,EAAKpzC,KAAK,QAAS+iC,GACnBqQ,EAAKlyC,WAAW,eAEhBgiB,IACAkwB,EAAKpzC,KAAK,MAAOkjB,GACjBkwB,EAAKlyC,WAAW,cAKxBkyC,EAAKtwC,SAAS/E,EAAE65B,OAAOsH,uBAAuBj8B,YAAYlF,EAAE65B,OAAOqH,wBACnExV,EAAM5pB,KAAK,IAAM9B,EAAE65B,OAAOuH,mBAAqB,MAAQphC,EAAE65B,OAAOyH,gBAAgB52B,SAC5E1K,EAAE65B,OAAOxmB,MAAQ+hC,EAAiB,CAClC,IAAIG,EAAqB7pB,EAAMzpB,KAAK,2BACpC,GAAIypB,EAAM9pB,SAAS5B,EAAE65B,OAAOqG,qBAAsB,CAC9C,IAAIsV,EAAgBx1C,EAAEulB,QAAQjb,SAAS,6BAA+BirC,EAAqB,WAAav1C,EAAE65B,OAAOqG,oBAAsB,KACvIlgC,EAAE2qC,KAAKwK,iBAAiBK,EAAc1uC,SAAS,OAE9C,CACD,IAAI2uC,EAAkBz1C,EAAEulB,QAAQjb,SAAS,IAAMtK,EAAE65B,OAAOqG,oBAAsB,6BAA+BqV,EAAqB,MAClIv1C,EAAE2qC,KAAKwK,iBAAiBM,EAAgB3uC,SAAS,IAGzD9G,EAAEolC,KAAK,mBAAoBplC,EAAG0rB,EAAM,GAAI2pB,EAAK,QAGjDr1C,EAAEolC,KAAK,kBAAmBplC,EAAG0rB,EAAM,GAAI2pB,EAAK,SAIpDzc,KAAM,WACF,IAAI36B,EACAgT,EAAgBjR,EAAE65B,OAAO5oB,cAK7B,GAJsB,SAAlBA,IACAA,EAAgB,GAEfjR,EAAE2qC,KAAKuK,qBAAoBl1C,EAAE2qC,KAAKuK,oBAAqB,GACxDl1C,EAAE65B,OAAO2E,sBACTx+B,EAAEulB,QAAQjb,SAAS,IAAMtK,EAAE65B,OAAOoG,mBAAmB7yB,MAAK,WACtDpN,EAAE2qC,KAAKwK,iBAAiBv0C,EAAEV,MAAM4G,iBAIpC,GAAImK,EAAgB,EAChB,IAAKhT,EAAI+B,EAAEqmC,YAAapoC,EAAI+B,EAAEqmC,YAAcp1B,EAAgBhT,IACpD+B,EAAEsmC,OAAOroC,IAAI+B,EAAE2qC,KAAKwK,iBAAiBl3C,QAI7C+B,EAAE2qC,KAAKwK,iBAAiBn1C,EAAEqmC,aAGlC,GAAIrmC,EAAE65B,OAAOgF,sBACT,GAAI5tB,EAAgB,GAAMjR,EAAE65B,OAAOiF,6BAA+B9+B,EAAE65B,OAAOiF,4BAA8B,EAAI,CACzG,IAAI4W,EAAS11C,EAAE65B,OAAOiF,4BAClBiJ,EAAM92B,EACN0kC,EAAWlsB,KAAK2D,IAAIptB,EAAEqmC,YAAc0B,EAAMte,KAAK4D,IAAIqoB,EAAQ3N,GAAM/nC,EAAEsmC,OAAOnlC,QAC1Ey0C,EAAWnsB,KAAK4D,IAAIrtB,EAAEqmC,YAAc5c,KAAK4D,IAAI0a,EAAK2N,GAAS,GAE/D,IAAKz3C,EAAI+B,EAAEqmC,YAAcp1B,EAAehT,EAAI03C,EAAU13C,IAC9C+B,EAAEsmC,OAAOroC,IAAI+B,EAAE2qC,KAAKwK,iBAAiBl3C,GAG7C,IAAKA,EAAI23C,EAAU33C,EAAI+B,EAAEqmC,YAAcpoC,IAC/B+B,EAAEsmC,OAAOroC,IAAI+B,EAAE2qC,KAAKwK,iBAAiBl3C,OAG5C,CACD,IAAIkrC,EAAYnpC,EAAEulB,QAAQjb,SAAS,IAAMtK,EAAE65B,OAAOsG,gBAC9CgJ,EAAUhoC,OAAS,GAAGnB,EAAE2qC,KAAKwK,iBAAiBhM,EAAUriC,SAE5D,IAAIsiC,EAAYppC,EAAEulB,QAAQjb,SAAS,IAAMtK,EAAE65B,OAAOwG,gBAC9C+I,EAAUjoC,OAAS,GAAGnB,EAAE2qC,KAAKwK,iBAAiB/L,EAAUtiC,WAIxEupC,kBAAmB,WACXrwC,EAAE65B,OAAO+E,cACL5+B,EAAE65B,OAAOkF,+BAAkC/+B,EAAE65B,OAAOkF,+BAAiC/+B,EAAE2qC,KAAKuK,qBAC5Fl1C,EAAE2qC,KAAK/R,QAInB0X,gBAAiB,WACTtwC,EAAE65B,OAAO+E,cAAgB5+B,EAAE65B,OAAOkF,8BAClC/+B,EAAE2qC,KAAK/R,SASnB54B,EAAEi8B,UAAY,CACVgR,WAAW,EACX4I,gBAAiB,SAAUz1C,GACvB,IAAI01C,EAAK91C,EAAEi8B,UAMP1I,GAHkBvzB,EAAE2jC,eACP,eAAXvjC,EAAEkW,MAAoC,cAAXlW,EAAEkW,KAAwBlW,EAAEsuC,cAAc,GAAGl0B,MAAQpa,EAAEoa,OAASpa,EAAEiuB,QAClF,eAAXjuB,EAAEkW,MAAoC,cAAXlW,EAAEkW,KAAwBlW,EAAEsuC,cAAc,GAAGxgB,MAAQ9tB,EAAE8tB,OAAS9tB,EAAEkuB,SAChEwnB,EAAGC,MAAM/iC,SAAShT,EAAE2jC,eAAiB,OAAS,OAASmS,EAAGE,SAAW,EACpGC,GAAej2C,EAAE8lC,eAAiBgQ,EAAGI,YACrCC,GAAen2C,EAAEgmC,eAAiB8P,EAAGI,YACrC3iB,EAAW0iB,EACX1iB,EAAW0iB,EAEN1iB,EAAW4iB,IAChB5iB,EAAW4iB,GAEf5iB,GAAYA,EAAWuiB,EAAGI,YAC1Bl2C,EAAEsoC,eAAe/U,GACjBvzB,EAAEsqC,oBAAoB/W,GAAU,IAEpC6iB,UAAW,SAAUh2C,GACjB,IAAI01C,EAAK91C,EAAEi8B,UACX6Z,EAAG7I,WAAY,EACf7sC,EAAEmB,iBACFnB,EAAE8W,kBAEF4+B,EAAGD,gBAAgBz1C,GACnBuvB,aAAammB,EAAGO,aAEhBP,EAAGC,MAAMpM,WAAW,GAChB3pC,EAAE65B,OAAOqC,eACT4Z,EAAGC,MAAMzuC,IAAI,UAAW,GAE5BtH,EAAEulB,QAAQokB,WAAW,KACrBmM,EAAGQ,KAAK3M,WAAW,KACnB3pC,EAAEolC,KAAK,uBAAwBplC,IAEnCu2C,SAAU,SAAUn2C,GAChB,IAAI01C,EAAK91C,EAAEi8B,UACN6Z,EAAG7I,YACJ7sC,EAAEmB,eAAgBnB,EAAEmB,iBACnBnB,EAAEo2C,aAAc,EACrBV,EAAGD,gBAAgBz1C,GACnBJ,EAAEulB,QAAQokB,WAAW,GACrBmM,EAAGC,MAAMpM,WAAW,GACpBmM,EAAGQ,KAAK3M,WAAW,GACnB3pC,EAAEolC,KAAK,sBAAuBplC,KAElCy2C,QAAS,SAAUr2C,GACf,IAAI01C,EAAK91C,EAAEi8B,UACN6Z,EAAG7I,YACR6I,EAAG7I,WAAY,EACXjtC,EAAE65B,OAAOqC,gBACTvM,aAAammB,EAAGO,aAChBP,EAAGO,YAAcroC,YAAW,WACxB8nC,EAAGC,MAAMzuC,IAAI,UAAW,GACxBwuC,EAAGC,MAAMpM,WAAW,OACrB,MAGP3pC,EAAEolC,KAAK,qBAAsBplC,GACzBA,EAAE65B,OAAOuC,wBACTp8B,EAAEowC,eAGVsG,iBACoC,IAA3B12C,EAAE65B,OAAOsD,eAA4Bn9B,EAAEsjC,QAAQG,MACxCzjC,EAAEirC,YADqDjrC,EAAE4qC,mBAGzE+L,gBAAiB,WACb,IAAIb,EAAK91C,EAAEi8B,UACPtrB,EAAS3Q,EAAEsjC,QAAQG,MAAQqS,EAAGC,MAAQlpC,SAC1CjM,EAAEk1C,EAAGC,OAAOtpC,GAAGqpC,EAAGY,gBAAgBjsC,MAAOqrC,EAAGM,WAC5Cx1C,EAAE+P,GAAQlE,GAAGqpC,EAAGY,gBAAgB7L,KAAMiL,EAAGS,UACzC31C,EAAE+P,GAAQlE,GAAGqpC,EAAGY,gBAAgB5L,IAAKgL,EAAGW,UAE5CG,iBAAkB,WACd,IAAId,EAAK91C,EAAEi8B,UACPtrB,EAAS3Q,EAAEsjC,QAAQG,MAAQqS,EAAGC,MAAQlpC,SAC1CjM,EAAEk1C,EAAGC,OAAOtiB,IAAIqiB,EAAGY,gBAAgBjsC,MAAOqrC,EAAGM,WAC7Cx1C,EAAE+P,GAAQ8iB,IAAIqiB,EAAGY,gBAAgB7L,KAAMiL,EAAGS,UAC1C31C,EAAE+P,GAAQ8iB,IAAIqiB,EAAGY,gBAAgB5L,IAAKgL,EAAGW,UAE7CvM,IAAK,WACD,GAAKlqC,EAAE65B,OAAOoC,UAAd,CACA,IAAI6Z,EAAK91C,EAAEi8B,UACX6Z,EAAGC,MAAQn1C,EAAEZ,EAAE65B,OAAOoC,WAClBj8B,EAAE65B,OAAOgE,mBAAmD,iBAAvB79B,EAAE65B,OAAOoC,WAA0B6Z,EAAGC,MAAM50C,OAAS,GAAqD,IAAhDnB,EAAEkJ,UAAUpH,KAAK9B,EAAE65B,OAAOoC,WAAW96B,SACpI20C,EAAGC,MAAQ/1C,EAAEkJ,UAAUpH,KAAK9B,EAAE65B,OAAOoC,YAEzC6Z,EAAGQ,KAAOR,EAAGC,MAAMj0C,KAAK,0BACD,IAAnBg0C,EAAGQ,KAAKn1C,SACR20C,EAAGQ,KAAO11C,EAAE,6CACZk1C,EAAGC,MAAM/tC,OAAO8tC,EAAGQ,OAEvBR,EAAGQ,KAAK,GAAGz7B,MAAMzG,MAAQ,GACzB0hC,EAAGQ,KAAK,GAAGz7B,MAAMhI,OAAS,GAC1BijC,EAAGe,UAAY72C,EAAE2jC,eAAiBmS,EAAGC,MAAM,GAAGr7B,YAAco7B,EAAGC,MAAM,GAAGn7B,aAExEk7B,EAAGgB,QAAU92C,EAAEymC,KAAOzmC,EAAEgnC,YACxB8O,EAAGI,YAAcJ,EAAGgB,SAAWhB,EAAGe,UAAY72C,EAAEymC,MAChDqP,EAAGE,SAAWF,EAAGe,UAAYf,EAAGgB,QAE5B92C,EAAE2jC,eACFmS,EAAGQ,KAAK,GAAGz7B,MAAMzG,MAAQ0hC,EAAGE,SAAW,KAGvCF,EAAGQ,KAAK,GAAGz7B,MAAMhI,OAASijC,EAAGE,SAAW,KAGxCF,EAAGgB,SAAW,EACdhB,EAAGC,MAAM,GAAGl7B,MAAMyR,QAAU,OAG5BwpB,EAAGC,MAAM,GAAGl7B,MAAMyR,QAAU,GAE5BtsB,EAAE65B,OAAOqC,gBACT4Z,EAAGC,MAAM,GAAGl7B,MAAMsT,QAAU,KAGpCmjB,aAAc,WACV,GAAKtxC,EAAE65B,OAAOoC,UAAd,CACA,IAGI8a,EAFAjB,EAAK91C,EAAEi8B,UAIP+a,GAHYh3C,EAAEgkC,UAGJ8R,EAAGE,UACjBe,GAAUjB,EAAGe,UAAYf,EAAGE,UAAYh2C,EAAEikC,SACtCjkC,EAAEqhB,KAAOrhB,EAAE2jC,gBACXoT,GAAUA,GACG,GACTC,EAAUlB,EAAGE,SAAWe,EACxBA,EAAS,IAEHA,EAASjB,EAAGE,SAAWF,EAAGe,YAChCG,EAAUlB,EAAGe,UAAYE,GAIzBA,EAAS,GACTC,EAAUlB,EAAGE,SAAWe,EACxBA,EAAS,GAEJA,EAASjB,EAAGE,SAAWF,EAAGe,YAC/BG,EAAUlB,EAAGe,UAAYE,GAG7B/2C,EAAE2jC,gBACE3jC,EAAEsjC,QAAQE,aACVsS,EAAGQ,KAAK5M,UAAU,eAAkBqN,EAAU,aAG9CjB,EAAGQ,KAAK5M,UAAU,cAAiBqN,EAAU,OAEjDjB,EAAGQ,KAAK,GAAGz7B,MAAMzG,MAAQ4iC,EAAU,OAG/Bh3C,EAAEsjC,QAAQE,aACVsS,EAAGQ,KAAK5M,UAAU,oBAAuBqN,EAAU,UAGnDjB,EAAGQ,KAAK5M,UAAU,cAAiBqN,EAAU,OAEjDjB,EAAGQ,KAAK,GAAGz7B,MAAMhI,OAASmkC,EAAU,MAEpCh3C,EAAE65B,OAAOqC,gBACTvM,aAAammB,EAAGmB,SAChBnB,EAAGC,MAAM,GAAGl7B,MAAMsT,QAAU,EAC5B2nB,EAAGmB,QAAUjpC,YAAW,WACpB8nC,EAAGC,MAAM,GAAGl7B,MAAMsT,QAAU,EAC5B2nB,EAAGC,MAAMpM,WAAW,OACrB,QAGX0H,cAAe,SAAUlgB,GAChBnxB,EAAE65B,OAAOoC,WACdj8B,EAAEi8B,UAAUqa,KAAK3M,WAAWxY,KAQpCnxB,EAAEmqC,WAAa,CACX+M,aAAc,SAAUz8B,EAAGE,GACvB,IACQg7B,EAAUC,EAAUuB,EAmBxBC,EAAIC,EApBJC,EAEO,SAASC,EAAOn1C,GAGnB,IAFAwzC,GAAY,EACZD,EAAW4B,EAAMp2C,OACVw0C,EAAWC,EAAW,GACrB2B,EAAMJ,EAAQxB,EAAWC,GAAY,IAAMxzC,EAC3CwzC,EAAWuB,EAEXxB,EAAWwB,EAEnB,OAAOxB,GAGfz1C,KAAKua,EAAIA,EACTva,KAAKya,EAAIA,EACTza,KAAKs3C,UAAY/8B,EAAEtZ,OAAS,EAKpBjB,KAAKua,EAAEtZ,OAEfjB,KAAKu3C,YAAc,SAAUC,GACzB,OAAKA,GAGLL,EAAKC,EAAap3C,KAAKua,EAAGi9B,GAC1BN,EAAKC,EAAK,GAIDK,EAAKx3C,KAAKua,EAAE28B,KAAQl3C,KAAKya,EAAE08B,GAAMn3C,KAAKya,EAAEy8B,KAASl3C,KAAKua,EAAE48B,GAAMn3C,KAAKua,EAAE28B,IAAOl3C,KAAKya,EAAEy8B,IAR5E,IAYxBO,uBAAwB,SAASr5C,GACzB0B,EAAEmqC,WAAWC,SAAQpqC,EAAEmqC,WAAWC,OAASpqC,EAAE65B,OAAOxmB,KACpD,IAAIrT,EAAEmqC,WAAW+M,aAAal3C,EAAE0mC,WAAYpoC,EAAEooC,YAC9C,IAAI1mC,EAAEmqC,WAAW+M,aAAal3C,EAAE+lC,SAAUznC,EAAEynC,YAEpDuL,aAAc,SAAUtN,EAAWmN,GAChC,IACIkD,EAAYuD,EADZC,EAAa73C,EAAE65B,OAAOsF,QAE1B,SAAS2Y,EAAuBx5C,GAK3B0lC,EAAY1lC,EAAE+iB,KAA8B,eAAvB/iB,EAAEu7B,OAAOvO,WAA8BtrB,EAAEgkC,UAAYhkC,EAAEgkC,UACjD,UAAvBhkC,EAAE65B,OAAOwF,YACTr/B,EAAEmqC,WAAWwN,uBAAuBr5C,GAGpCs5C,GAAuB53C,EAAEmqC,WAAWC,OAAOqN,aAAazT,IAGxD4T,GAA8C,cAAvB53C,EAAE65B,OAAOwF,YAChCgV,GAAc/1C,EAAE0nC,eAAiB1nC,EAAEwnC,iBAAmB9lC,EAAEgmC,eAAiBhmC,EAAE8lC,gBAC3E8R,GAAuB5T,EAAYhkC,EAAE8lC,gBAAkBuO,EAAa/1C,EAAEwnC,gBAGtE9lC,EAAE65B,OAAOuF,iBACTwY,EAAsBt5C,EAAE0nC,eAAiB4R,GAE7Ct5C,EAAEgqC,eAAesP,GACjBt5C,EAAEgsC,oBAAoBsN,GAAqB,EAAO53C,GAClD1B,EAAEsqC,oBAEP,GAAIhsB,MAAMC,QAAQg7B,GACd,IAAK,IAAI55C,EAAI,EAAGA,EAAI45C,EAAW12C,OAAQlD,IAC/B45C,EAAW55C,KAAOkzC,GAAgB0G,EAAW55C,aAAc8S,GAC3D+mC,EAAuBD,EAAW55C,SAIrC45C,aAAsB9mC,GAAUogC,IAAiB0G,GAEtDC,EAAuBD,IAG9BxG,cAAe,SAAUlgB,EAAUggB,GAC/B,IACIlzC,EADA45C,EAAa73C,EAAE65B,OAAOsF,QAE1B,SAAS4Y,EAAwBz5C,GAC7BA,EAAE4wC,qBAAqB/d,EAAUnxB,GAChB,IAAbmxB,IACA7yB,EAAE+xC,oBACF/xC,EAAEinB,QAAQsgB,eAAc,WACfgS,IACDv5C,EAAEu7B,OAAOxmB,MAA+B,UAAvBrT,EAAE65B,OAAOwF,WAC1B/gC,EAAE0uC,UAEN1uC,EAAEgyC,uBAKd,GAAI1zB,MAAMC,QAAQg7B,GACd,IAAK55C,EAAI,EAAGA,EAAI45C,EAAW12C,OAAQlD,IAC3B45C,EAAW55C,KAAOkzC,GAAgB0G,EAAW55C,aAAc8S,GAC3DgnC,EAAwBF,EAAW55C,SAItC45C,aAAsB9mC,GAAUogC,IAAiB0G,GACtDE,EAAwBF,KASpC73C,EAAEy8B,QAAU,CACRub,YAAa,SAAU53C,EAAG2iC,GACtB,IAAI7T,EAAUriB,SAASoB,SAAS8W,KAAK1M,QAAQ,IAAK,IAE9C6W,IADkBlvB,EAAEsmC,OAAO9xB,GAAGxU,EAAEqmC,aAAapkC,KAAK,cAElDjC,EAAEmI,QAAQnI,EAAEulB,QAAQjb,SAAS,IAAMtK,EAAE65B,OAAOiG,WAAa,eAAkB5Q,EAAW,MAAMpoB,UAGpGqlC,aAAc,SAAUhB,GACpB,IAAIE,EAASF,EAAS,MAAQ,KAC9BvqC,EAAEP,QAAQgrC,GAAQ,aAAcrrC,EAAEy8B,QAAQub,cAE9CnH,QAAS,WACL,GAAK7wC,EAAEy8B,QAAQwb,aAAgBj4C,EAAE65B,OAAO4C,QACxC,GAAIz8B,EAAE65B,OAAO8C,cAAgBt8B,OAAO2gB,SAAW3gB,OAAO2gB,QAAQ2b,aAC1Dt8B,OAAO2gB,QAAQ2b,aAAa,KAAM,KAAO,IAAM38B,EAAEsmC,OAAO9xB,GAAGxU,EAAEqmC,aAAapkC,KAAK,eAAgB,OAC5F,CACH,IAAIypB,EAAQ1rB,EAAEsmC,OAAO9xB,GAAGxU,EAAEqmC,aACtBthB,EAAO2G,EAAMzpB,KAAK,cAAgBypB,EAAMzpB,KAAK,gBACjD4K,SAASoB,SAAS8W,KAAOA,GAAQ,KAGzC8T,KAAM,WACF,GAAK74B,EAAE65B,OAAO4C,UAAWz8B,EAAE65B,OAAO7Y,QAAlC,CACAhhB,EAAEy8B,QAAQwb,aAAc,EACxB,IAAIlzB,EAAOlY,SAASoB,SAAS8W,KAAK1M,QAAQ,IAAK,IAC/C,GAAI0M,EAEA,IADA,IACS9mB,EAAI,EAAGkD,EAASnB,EAAEsmC,OAAOnlC,OAAQlD,EAAIkD,EAAQlD,IAAK,CACvD,IAAIytB,EAAQ1rB,EAAEsmC,OAAO9xB,GAAGvW,GAExB,IADgBytB,EAAMzpB,KAAK,cAAgBypB,EAAMzpB,KAAK,mBACpC8iB,IAAS2G,EAAM9pB,SAAS5B,EAAE65B,OAAOqG,qBAAsB,CACrE,IAAIp5B,EAAQ4kB,EAAM5kB,QAClB9G,EAAEmI,QAAQrB,EANN,EAMoB9G,EAAE65B,OAAOkI,oBAAoB,IAI7D/hC,EAAE65B,OAAO6C,mBAAmB18B,EAAEy8B,QAAQ0P,iBAE9CzY,QAAS,WACD1zB,EAAE65B,OAAO6C,mBAAmB18B,EAAEy8B,QAAQ0P,cAAa,KAQ/DnsC,EAAEghB,QAAU,CACR6X,KAAM,WACF,GAAK74B,EAAE65B,OAAO7Y,QAAd,CACA,IAAK3gB,OAAO2gB,UAAY3gB,OAAO2gB,QAAQwO,UAGnC,OAFAxvB,EAAE65B,OAAO7Y,SAAU,OACnBhhB,EAAE65B,OAAO4C,SAAU,GAGvBz8B,EAAEghB,QAAQi3B,aAAc,EACxB/3C,KAAKg4C,MAAQh4C,KAAKi4C,iBACbj4C,KAAKg4C,MAAM14C,KAAQU,KAAKg4C,MAAMh5C,SACnCgB,KAAKk4C,cAAc,EAAGl4C,KAAKg4C,MAAMh5C,MAAOc,EAAE65B,OAAOkI,oBAC5C/hC,EAAE65B,OAAO8C,cACVt8B,OAAOslB,iBAAiB,WAAYzlB,KAAKm4C,uBAGjDA,mBAAoB,WAChBr4C,EAAEghB,QAAQk3B,MAAQl4C,EAAEghB,QAAQm3B,gBAC5Bn4C,EAAEghB,QAAQo3B,cAAcp4C,EAAE65B,OAAO5J,MAAOjwB,EAAEghB,QAAQk3B,MAAMh5C,OAAO,IAEnEi5C,cAAe,WACX,IAAIG,EAAYj4C,OAAO4N,SAASwhB,SAAStR,MAAM,GAAGpW,MAAM,KACpDuhC,EAAQgP,EAAUn3C,OAGtB,MAAO,CAAE3B,IAFC84C,EAAUhP,EAAQ,GAETpqC,MADPo5C,EAAUhP,EAAQ,KAGlCsH,WAAY,SAAUpxC,EAAKsH,GACvB,GAAK9G,EAAEghB,QAAQi3B,aAAgBj4C,EAAE65B,OAAO7Y,QAAxC,CACA,IAAI0K,EAAQ1rB,EAAEsmC,OAAO9xB,GAAG1N,GACpB5H,EAAQgB,KAAKq4C,QAAQ7sB,EAAMzpB,KAAK,iBAC/B5B,OAAO4N,SAASwhB,SAASjpB,SAAShH,KACnCN,EAAQM,EAAM,IAAMN,GAEpBc,EAAE65B,OAAO8C,aACTt8B,OAAO2gB,QAAQ2b,aAAa,KAAM,KAAMz9B,GAExCmB,OAAO2gB,QAAQwO,UAAU,KAAM,KAAMtwB,KAG7Cq5C,QAAS,SAASv2C,GACd,OAAOA,EAAKkc,WAAW5F,cAClBD,QAAQ,OAAQ,KAChBA,QAAQ,YAAa,IACrBA,QAAQ,SAAU,KAClBA,QAAQ,MAAO,IACfA,QAAQ,MAAO,KAExB+/B,cAAe,SAASnoB,EAAO/wB,EAAOwxC,GAClC,GAAIxxC,EACA,IAAK,IAAIjB,EAAI,EAAGkD,EAASnB,EAAEsmC,OAAOnlC,OAAQlD,EAAIkD,EAAQlD,IAAK,CACvD,IAAIytB,EAAQ1rB,EAAEsmC,OAAO9xB,GAAGvW,GAExB,GADmBiC,KAAKq4C,QAAQ7sB,EAAMzpB,KAAK,mBACtB/C,IAAUwsB,EAAM9pB,SAAS5B,EAAE65B,OAAOqG,qBAAsB,CACzE,IAAIp5B,EAAQ4kB,EAAM5kB,QAClB9G,EAAEmI,QAAQrB,EAAOmpB,EAAOygB,SAIhC1wC,EAAEmI,QAAQ,EAAG8nB,EAAOygB,KA2EhC1wC,EAAEw4C,uBAAyB,WACvBx4C,EAAE65B,OAAOpoB,iBAAkB,EAC3B7Q,EAAEiM,UAAU4mB,IAAI,UAAWglB,IAE/Bz4C,EAAE04C,sBAAwB,WACtB14C,EAAE65B,OAAOpoB,iBAAkB,EAC3B7Q,EAAEiM,UAAUJ,GAAG,UAAWgsC,IAO9Bz4C,EAAE24C,WAAa,CACXl4C,OAAO,EACPm4C,gBAAiB,IAAIv4C,OAAO0tC,MAAQuB,WA4LpCtvC,EAAE65B,OAAOnoB,oBAMT1R,EAAE24C,WAAWl4C,MAASkhB,UAAUk3B,UAAUt0C,QAAQ,YAAc,EAC5D,iBAjMR,WACI,IACIu0C,EADY,YACejsC,SAE/B,IAAKisC,EAAa,CACd,IAAI5zB,EAAUrY,SAASkb,cAAc,OACrC7C,EAAQqB,aALI,UAKoB,WAChCuyB,EAA4C,mBAAvB5zB,EAAiB,QAa1C,OAVK4zB,GACDjsC,SAASksC,gBACTlsC,SAASksC,eAAeC,aAGuB,IAA/CnsC,SAASksC,eAAeC,WAAW,GAAI,MAEvCF,EAAcjsC,SAASksC,eAAeC,WAAW,eAAgB,QAG9DF,EA8KHG,GACI,QAAU,cA0FtBj5C,EAAEk5C,yBAA2B,WACzB,IAAKl5C,EAAE24C,WAAWl4C,MAAO,OAAO,EAChC,IAAIkQ,EAAS3Q,EAAEkJ,UAMf,MALwC,cAApClJ,EAAE65B,OAAO2C,yBACT7rB,EAAS/P,EAAEZ,EAAE65B,OAAO2C,yBAExB7rB,EAAO8iB,IAAIzzB,EAAE24C,WAAWl4C,MAAO04C,GAC/Bn5C,EAAE65B,OAAOnoB,mBAAoB,GACtB,GAGX1R,EAAEo5C,wBAA0B,WACxB,IAAKp5C,EAAE24C,WAAWl4C,MAAO,OAAO,EAChC,IAAIkQ,EAAS3Q,EAAEkJ,UAMf,MALwC,cAApClJ,EAAE65B,OAAO2C,yBACT7rB,EAAS/P,EAAEZ,EAAE65B,OAAO2C,yBAExB7rB,EAAOlE,GAAGzM,EAAE24C,WAAWl4C,MAAO04C,GAC9Bn5C,EAAE65B,OAAOnoB,mBAAoB,GACtB,GA6CX1R,EAAE67B,SAAW,CACTyV,aAAc,WACVtxC,EAAEkJ,UAAUoB,SAAS,8EAA8E8C,MAAK,WACpGisC,EAAqBn5C,KAAMF,EAAEikC,aAGjCjkC,EAAEsmC,OAAOl5B,MAAK,WACV,IAAIse,EAAQ9qB,EAAEV,MACdwrB,EAAM5pB,KAAK,8EAA8EsL,MAAK,WAE1FisC,EAAqBn5C,KADNupB,KAAK2D,IAAI3D,KAAK4D,IAAI3B,EAAM,GAAGuY,UAAW,GAAI,WAKrEoN,cAAe,SAAUlgB,QACG,IAAbA,IAA0BA,EAAWnxB,EAAE65B,OAAO5J,OACzDjwB,EAAEkJ,UAAUpH,KAAK,8EAA8EsL,MAAK,WAChG,IAAI4mB,EAAKpzB,EAAEV,MACPo5C,EAAmB91C,SAASwwB,EAAG/xB,KAAK,iCAAkC,KAAOkvB,EAChE,IAAbA,IAAgBmoB,EAAmB,GACvCtlB,EAAG2V,WAAW2P,QAS1Bt5C,EAAEgR,KAAO,CAELkb,MAAO,EACPqtB,aAAc,EACdC,WAAW,EACXC,QAAS,CACL/tB,WAAOqC,EACP2rB,gBAAY3rB,EACZ4rB,iBAAa5rB,EACbvf,WAAOuf,EACP6rB,eAAW7rB,EACX+N,QAAS97B,EAAE65B,OAAOiC,SAEtBttB,MAAO,CACHy+B,eAAWlf,EACXmf,aAASnf,EACTsgB,cAAUtgB,EACVugB,cAAUvgB,EACV8rB,UAAM9rB,EACN+rB,UAAM/rB,EACNgsB,UAAMhsB,EACNisB,UAAMjsB,EACN3Z,WAAO2Z,EACPlb,YAAQkb,EACRogB,YAAQpgB,EACRqgB,YAAQrgB,EACRksB,aAAc,GACdC,eAAgB,IAEpBhW,SAAU,CACNzpB,OAAGsT,EACHpT,OAAGoT,EACHosB,mBAAepsB,EACfqsB,mBAAersB,EACfssB,cAAUtsB,GAGdusB,0BAA2B,SAAUl6C,GACjC,GAAIA,EAAEsuC,cAAcvtC,OAAS,EAAG,OAAO,EACvC,IAAIo5C,EAAKn6C,EAAEsuC,cAAc,GAAGl0B,MACxBggC,EAAKp6C,EAAEsuC,cAAc,GAAGxgB,MACxBwpB,EAAKt3C,EAAEsuC,cAAc,GAAGl0B,MACxBigC,EAAKr6C,EAAEsuC,cAAc,GAAGxgB,MAE5B,OADezE,KAAK8E,KAAK9E,KAAK2lB,IAAIsI,EAAK6C,EAAI,GAAK9wB,KAAK2lB,IAAIqL,EAAKD,EAAI,KAItEE,eAAgB,SAAUt6C,GACtB,IAAIu6C,EAAI36C,EAAEgR,KACV,IAAKhR,EAAEsjC,QAAQsX,SAAU,CACrB,GAAe,eAAXx6C,EAAEkW,MAAoC,eAAXlW,EAAEkW,MAAyBlW,EAAEsuC,cAAcvtC,OAAS,EAC/E,OAEJw5C,EAAElB,QAAQoB,WAAaF,EAAEL,0BAA0Bl6C,GAElDu6C,EAAElB,QAAQ/tB,OAAUivB,EAAElB,QAAQ/tB,MAAMvqB,SACrCw5C,EAAElB,QAAQ/tB,MAAQ9qB,EAAEV,MACW,IAA3By6C,EAAElB,QAAQ/tB,MAAMvqB,SAAcw5C,EAAElB,QAAQ/tB,MAAQ1rB,EAAEsmC,OAAO9xB,GAAGxU,EAAEqmC,cAClEsU,EAAElB,QAAQjrC,MAAQmsC,EAAElB,QAAQ/tB,MAAM5pB,KAAK,oBACvC64C,EAAElB,QAAQG,UAAYe,EAAElB,QAAQjrC,MAAM3J,OAAO,IAAM7E,EAAE65B,OAAO0H,oBAC5DoZ,EAAElB,QAAQ3d,QAAU6e,EAAElB,QAAQG,UAAU33C,KAAK,qBAAuBjC,EAAE65B,OAAOiC,QAC1C,IAA/B6e,EAAElB,QAAQG,UAAUz4C,SAK5Bw5C,EAAElB,QAAQjrC,MAAMm7B,WAAW,GAC3BgR,EAAEnB,WAAY,GALNmB,EAAElB,QAAQjrC,WAAQuf,GAO9B+sB,gBAAiB,SAAU16C,GACvB,IAAIu6C,EAAI36C,EAAEgR,KACV,IAAKhR,EAAEsjC,QAAQsX,SAAU,CACrB,GAAe,cAAXx6C,EAAEkW,MAAmC,cAAXlW,EAAEkW,MAAwBlW,EAAEsuC,cAAcvtC,OAAS,EAC7E,OAEJw5C,EAAElB,QAAQsB,UAAYJ,EAAEL,0BAA0Bl6C,GAEjDu6C,EAAElB,QAAQjrC,OAAoC,IAA3BmsC,EAAElB,QAAQjrC,MAAMrN,SACpCnB,EAAEsjC,QAAQsX,SACVD,EAAEzuB,MAAQ9rB,EAAE8rB,MAAQyuB,EAAEpB,aAGtBoB,EAAEzuB,MAASyuB,EAAElB,QAAQsB,UAAYJ,EAAElB,QAAQoB,WAAcF,EAAEpB,aAE3DoB,EAAEzuB,MAAQyuB,EAAElB,QAAQ3d,UACpB6e,EAAEzuB,MAAQyuB,EAAElB,QAAQ3d,QAAU,EAAIrS,KAAK2lB,IAAKuL,EAAEzuB,MAAQyuB,EAAElB,QAAQ3d,QAAU,EAAI,KAE9E6e,EAAEzuB,MAAQlsB,EAAE65B,OAAOkC,UACnB4e,EAAEzuB,MAASlsB,EAAE65B,OAAOkC,QAAU,EAAItS,KAAK2lB,IAAKpvC,EAAE65B,OAAOkC,QAAU4e,EAAEzuB,MAAQ,EAAI,KAEjFyuB,EAAElB,QAAQjrC,MAAMk7B,UAAU,4BAA8BiR,EAAEzuB,MAAQ,OAEtE8uB,aAAc,SAAU56C,GACpB,IAAIu6C,EAAI36C,EAAEgR,MACLhR,EAAEsjC,QAAQsX,WACI,aAAXx6C,EAAEkW,MAAkC,aAAXlW,EAAEkW,MAAuBlW,EAAE66C,eAAe95C,OAAS,IAI/Ew5C,EAAElB,QAAQjrC,OAAoC,IAA3BmsC,EAAElB,QAAQjrC,MAAMrN,SACxCw5C,EAAEzuB,MAAQzC,KAAK4D,IAAI5D,KAAK2D,IAAIutB,EAAEzuB,MAAOyuB,EAAElB,QAAQ3d,SAAU97B,EAAE65B,OAAOkC,SAClE4e,EAAElB,QAAQjrC,MAAMm7B,WAAW3pC,EAAE65B,OAAO5J,OAAOyZ,UAAU,4BAA8BiR,EAAEzuB,MAAQ,KAC7FyuB,EAAEpB,aAAeoB,EAAEzuB,MACnByuB,EAAEnB,WAAY,EACE,IAAZmB,EAAEzuB,QAAayuB,EAAElB,QAAQ/tB,WAAQqC,KAEzC2d,aAAc,SAAU1rC,EAAGI,GACvB,IAAIu6C,EAAI36C,EAAEgR,KACL2pC,EAAElB,QAAQjrC,OAAoC,IAA3BmsC,EAAElB,QAAQjrC,MAAMrN,SACpCw5C,EAAEnsC,MAAMy+B,YACQ,YAAhBjtC,EAAE8jC,OAAOoX,IAAkB96C,EAAEmB,iBACjCo5C,EAAEnsC,MAAMy+B,WAAY,EACpB0N,EAAEnsC,MAAMyrC,aAAax/B,EAAe,eAAXra,EAAEkW,KAAwBlW,EAAEsuC,cAAc,GAAGl0B,MAAQpa,EAAEoa,MAChFmgC,EAAEnsC,MAAMyrC,aAAat/B,EAAe,eAAXva,EAAEkW,KAAwBlW,EAAEsuC,cAAc,GAAGxgB,MAAQ9tB,EAAE8tB,SAEpFyd,YAAa,SAAUvrC,GACnB,IAAIu6C,EAAI36C,EAAEgR,KACV,GAAK2pC,EAAElB,QAAQjrC,OAAoC,IAA3BmsC,EAAElB,QAAQjrC,MAAMrN,SACxCnB,EAAEqsC,YAAa,EACVsO,EAAEnsC,MAAMy+B,WAAc0N,EAAElB,QAAQ/tB,OAArC,CAEKivB,EAAEnsC,MAAM0+B,UACTyN,EAAEnsC,MAAM4F,MAAQumC,EAAElB,QAAQjrC,MAAM,GAAGkM,YACnCigC,EAAEnsC,MAAMqE,OAAS8nC,EAAElB,QAAQjrC,MAAM,GAAGoM,aACpC+/B,EAAEnsC,MAAM2/B,OAASnuC,EAAEuxC,aAAaoJ,EAAElB,QAAQG,UAAU,GAAI,MAAQ,EAChEe,EAAEnsC,MAAM4/B,OAASpuC,EAAEuxC,aAAaoJ,EAAElB,QAAQG,UAAU,GAAI,MAAQ,EAChEe,EAAElB,QAAQC,WAAaiB,EAAElB,QAAQ/tB,MAAM,GAAGhR,YAC1CigC,EAAElB,QAAQE,YAAcgB,EAAElB,QAAQ/tB,MAAM,GAAG9Q,aAC3C+/B,EAAElB,QAAQG,UAAUjQ,WAAW,GAC3B3pC,EAAEqhB,MAAKs5B,EAAEnsC,MAAM2/B,QAAUwM,EAAEnsC,MAAM2/B,QACjCnuC,EAAEqhB,MAAKs5B,EAAEnsC,MAAM4/B,QAAUuM,EAAEnsC,MAAM4/B,SAGzC,IAAI+M,EAAcR,EAAEnsC,MAAM4F,MAAQumC,EAAEzuB,MAChCkvB,EAAeT,EAAEnsC,MAAMqE,OAAS8nC,EAAEzuB,MAEtC,KAAIivB,EAAcR,EAAElB,QAAQC,YAAc0B,EAAeT,EAAElB,QAAQE,aAAnE,CAUA,GARAgB,EAAEnsC,MAAMqrC,KAAOpwB,KAAK2D,IAAKutB,EAAElB,QAAQC,WAAa,EAAIyB,EAAc,EAAI,GACtER,EAAEnsC,MAAMurC,MAAQY,EAAEnsC,MAAMqrC,KACxBc,EAAEnsC,MAAMsrC,KAAOrwB,KAAK2D,IAAKutB,EAAElB,QAAQE,YAAc,EAAIyB,EAAe,EAAI,GACxET,EAAEnsC,MAAMwrC,MAAQW,EAAEnsC,MAAMsrC,KAExBa,EAAEnsC,MAAM0rC,eAAez/B,EAAe,cAAXra,EAAEkW,KAAuBlW,EAAEsuC,cAAc,GAAGl0B,MAAQpa,EAAEoa,MACjFmgC,EAAEnsC,MAAM0rC,eAAev/B,EAAe,cAAXva,EAAEkW,KAAuBlW,EAAEsuC,cAAc,GAAGxgB,MAAQ9tB,EAAE8tB,OAE5EysB,EAAEnsC,MAAM0+B,UAAYyN,EAAEnB,UAAW,CAClC,GAAIx5C,EAAE2jC,gBACDla,KAAK4d,MAAMsT,EAAEnsC,MAAMqrC,QAAUpwB,KAAK4d,MAAMsT,EAAEnsC,MAAM2/B,SAAWwM,EAAEnsC,MAAM0rC,eAAez/B,EAAIkgC,EAAEnsC,MAAMyrC,aAAax/B,GAC3GgP,KAAK4d,MAAMsT,EAAEnsC,MAAMurC,QAAUtwB,KAAK4d,MAAMsT,EAAEnsC,MAAM2/B,SAAWwM,EAAEnsC,MAAM0rC,eAAez/B,EAAIkgC,EAAEnsC,MAAMyrC,aAAax/B,EAG5G,YADAkgC,EAAEnsC,MAAMy+B,WAAY,GAGnB,IAAKjtC,EAAE2jC,gBACPla,KAAK4d,MAAMsT,EAAEnsC,MAAMsrC,QAAUrwB,KAAK4d,MAAMsT,EAAEnsC,MAAM4/B,SAAWuM,EAAEnsC,MAAM0rC,eAAev/B,EAAIggC,EAAEnsC,MAAMyrC,aAAat/B,GAC3G8O,KAAK4d,MAAMsT,EAAEnsC,MAAMwrC,QAAUvwB,KAAK4d,MAAMsT,EAAEnsC,MAAM4/B,SAAWuM,EAAEnsC,MAAM0rC,eAAev/B,EAAIggC,EAAEnsC,MAAMyrC,aAAat/B,EAG5G,YADAggC,EAAEnsC,MAAMy+B,WAAY,GAI5B7sC,EAAEmB,iBACFnB,EAAE8W,kBAEFyjC,EAAEnsC,MAAM0+B,SAAU,EAClByN,EAAEnsC,MAAM6/B,SAAWsM,EAAEnsC,MAAM0rC,eAAez/B,EAAIkgC,EAAEnsC,MAAMyrC,aAAax/B,EAAIkgC,EAAEnsC,MAAM2/B,OAC/EwM,EAAEnsC,MAAM8/B,SAAWqM,EAAEnsC,MAAM0rC,eAAev/B,EAAIggC,EAAEnsC,MAAMyrC,aAAat/B,EAAIggC,EAAEnsC,MAAM4/B,OAE3EuM,EAAEnsC,MAAM6/B,SAAWsM,EAAEnsC,MAAMqrC,OAC3Bc,EAAEnsC,MAAM6/B,SAAYsM,EAAEnsC,MAAMqrC,KAAO,EAAIpwB,KAAK2lB,IAAKuL,EAAEnsC,MAAMqrC,KAAOc,EAAEnsC,MAAM6/B,SAAW,EAAI,KAEvFsM,EAAEnsC,MAAM6/B,SAAWsM,EAAEnsC,MAAMurC,OAC3BY,EAAEnsC,MAAM6/B,SAAWsM,EAAEnsC,MAAMurC,KAAO,EAAItwB,KAAK2lB,IAAKuL,EAAEnsC,MAAM6/B,SAAWsM,EAAEnsC,MAAMurC,KAAO,EAAI,KAGtFY,EAAEnsC,MAAM8/B,SAAWqM,EAAEnsC,MAAMsrC,OAC3Ba,EAAEnsC,MAAM8/B,SAAYqM,EAAEnsC,MAAMsrC,KAAO,EAAIrwB,KAAK2lB,IAAKuL,EAAEnsC,MAAMsrC,KAAOa,EAAEnsC,MAAM8/B,SAAW,EAAI,KAEvFqM,EAAEnsC,MAAM8/B,SAAWqM,EAAEnsC,MAAMwrC,OAC3BW,EAAEnsC,MAAM8/B,SAAWqM,EAAEnsC,MAAMwrC,KAAO,EAAIvwB,KAAK2lB,IAAKuL,EAAEnsC,MAAM8/B,SAAWqM,EAAEnsC,MAAMwrC,KAAO,EAAI,KAIrFW,EAAEzW,SAASiW,gBAAeQ,EAAEzW,SAASiW,cAAgBQ,EAAEnsC,MAAM0rC,eAAez/B,GAC5EkgC,EAAEzW,SAASkW,gBAAeO,EAAEzW,SAASkW,cAAgBO,EAAEnsC,MAAM0rC,eAAev/B,GAC5EggC,EAAEzW,SAASmW,WAAUM,EAAEzW,SAASmW,SAAWtM,KAAKC,OACrD2M,EAAEzW,SAASzpB,GAAKkgC,EAAEnsC,MAAM0rC,eAAez/B,EAAIkgC,EAAEzW,SAASiW,gBAAkBpM,KAAKC,MAAQ2M,EAAEzW,SAASmW,UAAY,EAC5GM,EAAEzW,SAASvpB,GAAKggC,EAAEnsC,MAAM0rC,eAAev/B,EAAIggC,EAAEzW,SAASkW,gBAAkBrM,KAAKC,MAAQ2M,EAAEzW,SAASmW,UAAY,EACxG5wB,KAAKC,IAAIixB,EAAEnsC,MAAM0rC,eAAez/B,EAAIkgC,EAAEzW,SAASiW,eAAiB,IAAGQ,EAAEzW,SAASzpB,EAAI,GAClFgP,KAAKC,IAAIixB,EAAEnsC,MAAM0rC,eAAev/B,EAAIggC,EAAEzW,SAASkW,eAAiB,IAAGO,EAAEzW,SAASvpB,EAAI,GACtFggC,EAAEzW,SAASiW,cAAgBQ,EAAEnsC,MAAM0rC,eAAez/B,EAClDkgC,EAAEzW,SAASkW,cAAgBO,EAAEnsC,MAAM0rC,eAAev/B,EAClDggC,EAAEzW,SAASmW,SAAWtM,KAAKC,MAE3B2M,EAAElB,QAAQG,UAAUlQ,UAAU,eAAiBiR,EAAEnsC,MAAM6/B,SAAW,OAASsM,EAAEnsC,MAAM8/B,SAAW,YAElG1C,WAAY,SAAU5rC,EAAGI,GACrB,IAAIu6C,EAAI36C,EAAEgR,KACV,GAAK2pC,EAAElB,QAAQjrC,OAAoC,IAA3BmsC,EAAElB,QAAQjrC,MAAMrN,OAAxC,CACA,IAAKw5C,EAAEnsC,MAAMy+B,YAAc0N,EAAEnsC,MAAM0+B,QAG/B,OAFAyN,EAAEnsC,MAAMy+B,WAAY,OACpB0N,EAAEnsC,MAAM0+B,SAAU,GAGtByN,EAAEnsC,MAAMy+B,WAAY,EACpB0N,EAAEnsC,MAAM0+B,SAAU,EAClB,IAAImO,EAAoB,IACpBC,EAAoB,IACpBC,EAAoBZ,EAAEzW,SAASzpB,EAAI4gC,EACnCG,EAAeb,EAAEnsC,MAAM6/B,SAAWkN,EAClCE,EAAoBd,EAAEzW,SAASvpB,EAAI2gC,EACnCI,EAAef,EAAEnsC,MAAM8/B,SAAWmN,EAGjB,IAAjBd,EAAEzW,SAASzpB,IAAS4gC,EAAoB5xB,KAAKC,KAAK8xB,EAAeb,EAAEnsC,MAAM6/B,UAAYsM,EAAEzW,SAASzpB,IAC/E,IAAjBkgC,EAAEzW,SAASvpB,IAAS2gC,EAAoB7xB,KAAKC,KAAKgyB,EAAef,EAAEnsC,MAAM8/B,UAAYqM,EAAEzW,SAASvpB,IACpG,IAAIm1B,EAAmBrmB,KAAK4D,IAAIguB,EAAmBC,GAEnDX,EAAEnsC,MAAM6/B,SAAWmN,EACnBb,EAAEnsC,MAAM8/B,SAAWoN,EAGnB,IAAIP,EAAcR,EAAEnsC,MAAM4F,MAAQumC,EAAEzuB,MAChCkvB,EAAeT,EAAEnsC,MAAMqE,OAAS8nC,EAAEzuB,MACtCyuB,EAAEnsC,MAAMqrC,KAAOpwB,KAAK2D,IAAKutB,EAAElB,QAAQC,WAAa,EAAIyB,EAAc,EAAI,GACtER,EAAEnsC,MAAMurC,MAAQY,EAAEnsC,MAAMqrC,KACxBc,EAAEnsC,MAAMsrC,KAAOrwB,KAAK2D,IAAKutB,EAAElB,QAAQE,YAAc,EAAIyB,EAAe,EAAI,GACxET,EAAEnsC,MAAMwrC,MAAQW,EAAEnsC,MAAMsrC,KACxBa,EAAEnsC,MAAM6/B,SAAW5kB,KAAK4D,IAAI5D,KAAK2D,IAAIutB,EAAEnsC,MAAM6/B,SAAUsM,EAAEnsC,MAAMurC,MAAOY,EAAEnsC,MAAMqrC,MAC9Ec,EAAEnsC,MAAM8/B,SAAW7kB,KAAK4D,IAAI5D,KAAK2D,IAAIutB,EAAEnsC,MAAM8/B,SAAUqM,EAAEnsC,MAAMwrC,MAAOW,EAAEnsC,MAAMsrC,MAE9Ea,EAAElB,QAAQG,UAAUjQ,WAAWmG,GAAkBpG,UAAU,eAAiBiR,EAAEnsC,MAAM6/B,SAAW,OAASsM,EAAEnsC,MAAM8/B,SAAW,WAE/HgC,gBAAiB,SAAUtwC,GACvB,IAAI26C,EAAI36C,EAAEgR,KACN2pC,EAAElB,QAAQ/tB,OAAS1rB,EAAE+oC,gBAAkB/oC,EAAEqmC,cACzCsU,EAAElB,QAAQjrC,MAAMk7B,UAAU,+BAC1BiR,EAAElB,QAAQG,UAAUlQ,UAAU,sBAC9BiR,EAAElB,QAAQ/tB,MAAQivB,EAAElB,QAAQjrC,MAAQmsC,EAAElB,QAAQG,eAAY7rB,EAC1D4sB,EAAEzuB,MAAQyuB,EAAEpB,aAAe,IAInCoC,WAAY,SAAU37C,EAAGI,GACrB,IAQIw7C,EAAQC,EAA0BC,EAAOC,EAAO5vB,EAAYC,EAAYQ,EAAYC,EAAasuB,EAAaC,EAAcY,EAAeC,EAAeC,EAAeC,EAAezC,EAAYC,EARpMgB,EAAI36C,EAAEgR,MACL2pC,EAAElB,QAAQ/tB,QACXivB,EAAElB,QAAQ/tB,MAAQ1rB,EAAE6sC,aAAejsC,EAAEZ,EAAE6sC,cAAgB7sC,EAAEsmC,OAAO9xB,GAAGxU,EAAEqmC,aACrEsU,EAAElB,QAAQjrC,MAAQmsC,EAAElB,QAAQ/tB,MAAM5pB,KAAK,oBACvC64C,EAAElB,QAAQG,UAAYe,EAAElB,QAAQjrC,MAAM3J,OAAO,IAAM7E,EAAE65B,OAAO0H,qBAE3DoZ,EAAElB,QAAQjrC,OAAoC,IAA3BmsC,EAAElB,QAAQjrC,MAAMrN,eAIF,IAA3Bw5C,EAAEnsC,MAAMyrC,aAAax/B,GAAqBra,GACjDw7C,EAAoB,aAAXx7C,EAAEkW,KAAsBlW,EAAE66C,eAAe,GAAGzgC,MAAQpa,EAAEoa,MAC/DqhC,EAAoB,aAAXz7C,EAAEkW,KAAsBlW,EAAE66C,eAAe,GAAG/sB,MAAQ9tB,EAAE8tB,QAG/D0tB,EAASjB,EAAEnsC,MAAMyrC,aAAax/B,EAC9BohC,EAASlB,EAAEnsC,MAAMyrC,aAAat/B,GAG9BggC,EAAEzuB,OAAqB,IAAZyuB,EAAEzuB,OAEbyuB,EAAEzuB,MAAQyuB,EAAEpB,aAAe,EAC3BoB,EAAElB,QAAQG,UAAUjQ,WAAW,KAAKD,UAAU,sBAC9CiR,EAAElB,QAAQjrC,MAAMm7B,WAAW,KAAKD,UAAU,+BAC1CiR,EAAElB,QAAQ/tB,WAAQqC,IAIlB4sB,EAAEzuB,MAAQyuB,EAAEpB,aAAeoB,EAAElB,QAAQG,UAAU33C,KAAK,qBAAuBjC,EAAE65B,OAAOiC,QAChF17B,GACAs5C,EAAaiB,EAAElB,QAAQ/tB,MAAM,GAAGhR,YAChCi/B,EAAcgB,EAAElB,QAAQ/tB,MAAM,GAAG9Q,aAGjCkhC,EAFUnB,EAAElB,QAAQ/tB,MAAM1Y,SAASoE,KAEjBsiC,EAAW,EAAIkC,EACjCG,EAFUpB,EAAElB,QAAQ/tB,MAAM1Y,SAASC,IAEjB0mC,EAAY,EAAIkC,EAElCjvB,EAAa+tB,EAAElB,QAAQjrC,MAAM,GAAGkM,YAChCmS,EAAc8tB,EAAElB,QAAQjrC,MAAM,GAAGoM,aACjCugC,EAAcvuB,EAAa+tB,EAAEzuB,MAC7BkvB,EAAevuB,EAAc8tB,EAAEzuB,MAI/BgwB,IAFAF,EAAgBvyB,KAAK2D,IAAKssB,EAAa,EAAIyB,EAAc,EAAI,IAG7DgB,IAFAF,EAAgBxyB,KAAK2D,IAAKusB,EAAc,EAAIyB,EAAe,EAAI,KAI/DjvB,EAAa2vB,EAAQnB,EAAEzuB,OAGN8vB,IACb7vB,EAAc6vB,GAEd7vB,EAAa+vB,IACb/vB,EAAa+vB,IANjB9vB,EAAa2vB,EAAQpB,EAAEzuB,OASN+vB,IACb7vB,EAAc6vB,GAEd7vB,EAAa+vB,IACb/vB,EAAa+vB,KAIjBhwB,EAAa,EACbC,EAAa,GAEjBuuB,EAAElB,QAAQG,UAAUjQ,WAAW,KAAKD,UAAU,eAAiBvd,EAAa,OAASC,EAAa,SAClGuuB,EAAElB,QAAQjrC,MAAMm7B,WAAW,KAAKD,UAAU,4BAA8BiR,EAAEzuB,MAAQ,QAI1FigB,aAAc,SAAUhB,GACpB,IAAIE,EAASF,EAAS,MAAQ,KAE9B,GAAInrC,EAAE65B,OAAO7oB,KAAM,CACFhR,EAAEsmC,OAAf,IACIuF,IAA0C,eAAxB7rC,EAAEirC,YAAYxgC,QAA0BzK,EAAEsjC,QAAQuI,kBAAmB7rC,EAAE65B,OAAO+F,mBAAmB,CAAC9O,SAAS,EAAMlO,SAAS,GAE5I5iB,EAAEsjC,QAAQsX,UACV56C,EAAEsmC,OAAO+E,GAAQ,eAAgBrrC,EAAEgR,KAAK0pC,eAAgB7O,GACxD7rC,EAAEsmC,OAAO+E,GAAQ,gBAAiBrrC,EAAEgR,KAAK8pC,gBAAiBjP,GAC1D7rC,EAAEsmC,OAAO+E,GAAQ,aAAcrrC,EAAEgR,KAAKgqC,aAAcnP,IAEvB,eAAxB7rC,EAAEirC,YAAYxgC,QACnBzK,EAAEsmC,OAAO+E,GAAQrrC,EAAEirC,YAAYxgC,MAAOzK,EAAEgR,KAAK0pC,eAAgB7O,GAC7D7rC,EAAEsmC,OAAO+E,GAAQrrC,EAAEirC,YAAYJ,KAAM7qC,EAAEgR,KAAK8pC,gBAAiBjP,GAC7D7rC,EAAEsmC,OAAO+E,GAAQrrC,EAAEirC,YAAYH,IAAK9qC,EAAEgR,KAAKgqC,aAAcnP,IAI7D7rC,EAAEqrC,GAAQ,aAAcrrC,EAAEgR,KAAK06B,cAC/B1rC,EAAEsmC,OAAOl5B,MAAK,SAAUtG,EAAO4kB,GACvB9qB,EAAE8qB,GAAO5pB,KAAK,IAAM9B,EAAE65B,OAAO0H,oBAAoBpgC,OAAS,GAC1DP,EAAE8qB,GAAO2f,GAAQrrC,EAAEirC,YAAYJ,KAAM7qC,EAAEgR,KAAK26B,gBAGpD3rC,EAAEqrC,GAAQ,WAAYrrC,EAAEgR,KAAK46B,YAG7B5rC,EAAEqrC,GAAQ,gBAAiBrrC,EAAEgR,KAAKs/B,iBAC9BtwC,EAAE65B,OAAOmC,YACTh8B,EAAEyM,GAAG,YAAazM,EAAEgR,KAAK2qC,cAIrC9iB,KAAM,WACF74B,EAAEgR,KAAKm7B,gBAEXzY,QAAS,WACL1zB,EAAEgR,KAAKm7B,cAAa,KAQ5BnsC,EAAEo8C,SAAW,GACMp8C,EAAEq8C,QAAS,CAC1B,IAAIt8C,EAAIC,EAAEq8C,QAAQnO,GAAQluC,EAAGA,EAAE65B,OAAOqU,IAClCnuC,GAAGC,EAAEo8C,SAAS/uC,KAAKtN,GAoU3B,OAjUAC,EAAEs8C,YAAc,SAAUC,GACtB,IAAK,IAAIt+C,EAAI,EAAGA,EAAI+B,EAAEo8C,SAASj7C,OAAQlD,IAC/Bs+C,KAAav8C,EAAEo8C,SAASn+C,IACxB+B,EAAEo8C,SAASn+C,GAAGs+C,GAAW1zB,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,KAoBvG7oB,EAAEw8C,sBAAwB,GAG1Bx8C,EAAEolC,KAAO,SAAUmX,GAKf,IAAIt+C,EAEJ,GALI+B,EAAE65B,OAAO0iB,IACTv8C,EAAE65B,OAAO0iB,GAAW1zB,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,IAItF7oB,EAAEw8C,sBAAsBD,GACxB,IAAKt+C,EAAI,EAAGA,EAAI+B,EAAEw8C,sBAAsBD,GAAWp7C,OAAQlD,IACvD+B,EAAEw8C,sBAAsBD,GAAWt+C,GAAG4qB,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,IAI5G7oB,EAAEs8C,aAAat8C,EAAEs8C,YAAYC,EAAW1zB,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,KAElH7oB,EAAEyM,GAAK,SAAU8vC,EAAWE,GAIxB,OAHAF,EAAYG,EAAmBH,GAC1Bv8C,EAAEw8C,sBAAsBD,KAAYv8C,EAAEw8C,sBAAsBD,GAAa,IAC9Ev8C,EAAEw8C,sBAAsBD,GAAWlvC,KAAKovC,GACjCz8C,GAEXA,EAAEyzB,IAAM,SAAU8oB,EAAWE,GACzB,IAAIx+C,EAEJ,GADAs+C,EAAYG,EAAmBH,QACR,IAAZE,EAGP,OADAz8C,EAAEw8C,sBAAsBD,GAAa,GAC9Bv8C,EAEX,GAAKA,EAAEw8C,sBAAsBD,IAA4D,IAA9Cv8C,EAAEw8C,sBAAsBD,GAAWp7C,OAA9E,CACA,IAAKlD,EAAI,EAAGA,EAAI+B,EAAEw8C,sBAAsBD,GAAWp7C,OAAQlD,IACpD+B,EAAEw8C,sBAAsBD,GAAWt+C,KAAOw+C,GAASz8C,EAAEw8C,sBAAsBD,GAAW91C,OAAOxI,EAAG,GAEvG,OAAO+B,IAEXA,EAAE28C,KAAO,SAAUJ,EAAWE,GAC1BF,EAAYG,EAAmBH,GAM/B,OADAv8C,EAAEyM,GAAG8vC,GAJU,SAAXK,IACAH,EAAQ5zB,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,IAC1E7oB,EAAEyzB,IAAI8oB,EAAWK,MAGd58C,GAKXA,EAAEyhC,KAAO,CACLob,cAAe,SAAUl7C,GAErB,OADAA,EAAIM,KAAK,WAAY,KACdN,GAEXm7C,QAAS,SAAUn7C,EAAKo7C,GAEpB,OADAp7C,EAAIM,KAAK,OAAQ86C,GACVp7C,GAGXq7C,SAAU,SAAUr7C,EAAKkH,GAErB,OADAlH,EAAIM,KAAK,aAAc4G,GAChBlH,GAGX63B,QAAS,SAAU73B,GAEf,OADAA,EAAIM,KAAK,iBAAiB,GACnBN,GAGXoU,OAAQ,SAAUpU,GAEd,OADAA,EAAIM,KAAK,iBAAiB,GACnBN,GAGXqqC,WAAY,SAAUvrC,GACI,KAAlBA,EAAMC,UACNE,EAAEH,EAAMkQ,QAAQ1P,GAAGjB,EAAE65B,OAAO3oB,aAC5BlR,EAAE+rC,YAAYtrC,GACVT,EAAE2oC,MACF3oC,EAAEyhC,KAAKwb,OAAOj9C,EAAE65B,OAAOgI,kBAGvB7hC,EAAEyhC,KAAKwb,OAAOj9C,EAAE65B,OAAO8H,mBAGtB/gC,EAAEH,EAAMkQ,QAAQ1P,GAAGjB,EAAE65B,OAAO1oB,cACjCnR,EAAEisC,YAAYxrC,GACVT,EAAEyoC,YACFzoC,EAAEyhC,KAAKwb,OAAOj9C,EAAE65B,OAAO+H,mBAGvB5hC,EAAEyhC,KAAKwb,OAAOj9C,EAAE65B,OAAO6H,mBAG3B9gC,EAAEH,EAAMkQ,QAAQ1P,GAAG,IAAMjB,EAAE65B,OAAO2G,cAClC5/B,EAAEH,EAAMkQ,QAAQ,GAAGusC,UAI3BC,WAAYv8C,EAAE,gBAAkBZ,EAAE65B,OAAOwH,kBAAoB,sDAE7D4b,OAAQ,SAAUl6C,GACd,IAAIq6C,EAAep9C,EAAEyhC,KAAK0b,WACE,IAAxBC,EAAaj8C,SACjBi8C,EAAa15C,KAAK,IAClB05C,EAAa15C,KAAKX,KAEtB81B,KAAM,WAEE74B,EAAE65B,OAAO3oB,YAAclR,EAAEkR,YAAclR,EAAEkR,WAAW/P,OAAS,IAC7DnB,EAAEyhC,KAAKob,cAAc78C,EAAEkR,YACvBlR,EAAEyhC,KAAKqb,QAAQ98C,EAAEkR,WAAY,UAC7BlR,EAAEyhC,KAAKub,SAASh9C,EAAEkR,WAAYlR,EAAE65B,OAAO8H,mBAEvC3hC,EAAE65B,OAAO1oB,YAAcnR,EAAEmR,YAAcnR,EAAEmR,WAAWhQ,OAAS,IAC7DnB,EAAEyhC,KAAKob,cAAc78C,EAAEmR,YACvBnR,EAAEyhC,KAAKqb,QAAQ98C,EAAEmR,WAAY,UAC7BnR,EAAEyhC,KAAKub,SAASh9C,EAAEmR,WAAYnR,EAAE65B,OAAO6H,mBAG3C9gC,EAAEZ,EAAEkJ,WAAWlB,OAAOhI,EAAEyhC,KAAK0b,aAEjCpT,eAAgB,WACR/pC,EAAE65B,OAAOzoB,YAAcpR,EAAE65B,OAAOroB,qBAAuBxR,EAAEupC,SAAWvpC,EAAEupC,QAAQpoC,QAC9EnB,EAAEupC,QAAQn8B,MAAK,WACX,IAAIiwC,EAASz8C,EAAEV,MACfF,EAAEyhC,KAAKob,cAAcQ,GACrBr9C,EAAEyhC,KAAKqb,QAAQO,EAAQ,UACvBr9C,EAAEyhC,KAAKub,SAASK,EAAQr9C,EAAE65B,OAAOiI,wBAAwBzpB,QAAQ,YAAaglC,EAAOv2C,QAAU,QAI3G4sB,QAAS,WACD1zB,EAAEyhC,KAAK0b,YAAcn9C,EAAEyhC,KAAK0b,WAAWh8C,OAAS,GAAGnB,EAAEyhC,KAAK0b,WAAWzyC,WAQjF1K,EAAE64B,KAAO,WACD74B,EAAE65B,OAAOxmB,MAAMrT,EAAE4yC,aACrB5yC,EAAEumC,sBACFvmC,EAAE6T,mBACF7T,EAAE4pC,mBACE5pC,EAAE65B,OAAOoC,WAAaj8B,EAAEi8B,YACxBj8B,EAAEi8B,UAAUiO,MACRlqC,EAAE65B,OAAOsC,oBACTn8B,EAAEi8B,UAAU0a,mBAGI,UAApB32C,EAAE65B,OAAOkB,QAAsB/6B,EAAEoxC,QAAQpxC,EAAE65B,OAAOkB,UAC7C/6B,EAAE65B,OAAOxmB,MAAMrT,EAAEsoC,iBACtBtoC,EAAEoxC,QAAQpxC,EAAE65B,OAAOkB,QAAQuW,gBAE3BtxC,EAAE65B,OAAOxmB,KACTrT,EAAEmI,QAAQnI,EAAE65B,OAAOE,aAAe/5B,EAAEk/B,aAAc,EAAGl/B,EAAE65B,OAAOkI,qBAG9D/hC,EAAEmI,QAAQnI,EAAE65B,OAAOE,aAAc,EAAG/5B,EAAE65B,OAAOkI,oBACf,IAA1B/hC,EAAE65B,OAAOE,eACL/5B,EAAE67B,UAAY77B,EAAE65B,OAAOgC,UAAU77B,EAAE67B,SAASyV,eAC5CtxC,EAAE2qC,MAAQ3qC,EAAE65B,OAAO+E,cACnB5+B,EAAE2qC,KAAK/R,OACP54B,EAAE2qC,KAAKuK,oBAAqB,KAIxCl1C,EAAEmsC,eACEnsC,EAAE65B,OAAOngB,UAAY1Z,EAAEsjC,QAAQ5pB,UAC/B1Z,EAAEsyC,gBAEFtyC,EAAE65B,OAAOre,gBAAkBxb,EAAE65B,OAAO+E,aACpC5+B,EAAEwb,gBAEFxb,EAAE65B,OAAO7oB,MAAQhR,EAAEgR,MACnBhR,EAAEgR,KAAK6nB,OAEP74B,EAAE65B,OAAOjlB,UACT5U,EAAEylC,gBAEFzlC,EAAE65B,OAAOpoB,iBACLzR,EAAE04C,uBAAuB14C,EAAE04C,wBAE/B14C,EAAE65B,OAAOnoB,mBACL1R,EAAEo5C,yBAAyBp5C,EAAEo5C,0BAGjCp5C,EAAE65B,OAAOyjB,sBACTt9C,EAAE65B,OAAO8C,aAAe38B,EAAE65B,OAAOyjB,qBAEjCt9C,EAAE65B,OAAO7Y,SACLhhB,EAAEghB,SAAShhB,EAAEghB,QAAQ6X,OAEzB74B,EAAE65B,OAAO4C,SACLz8B,EAAEy8B,SAASz8B,EAAEy8B,QAAQ5D,OAEzB74B,EAAE65B,OAAO4H,MAAQzhC,EAAEyhC,MAAMzhC,EAAEyhC,KAAK5I,OACpC74B,EAAEolC,KAAK,SAAUplC,IAIrBA,EAAEu9C,cAAgB,WAEdv9C,EAAEkJ,UAAUhE,YAAYlF,EAAEwiC,WAAW74B,KAAK,MAAMxG,WAAW,SAG3DnD,EAAEulB,QAAQpiB,WAAW,SAGjBnD,EAAEsmC,QAAUtmC,EAAEsmC,OAAOnlC,QACrBnB,EAAEsmC,OACGphC,YAAY,CACXlF,EAAE65B,OAAOoG,kBACTjgC,EAAE65B,OAAOkG,iBACT//B,EAAE65B,OAAOsG,eACTngC,EAAE65B,OAAOwG,gBACT12B,KAAK,MACNxG,WAAW,SACXA,WAAW,sBACXA,WAAW,mBAIhBnD,EAAE0jC,qBAAuB1jC,EAAE0jC,oBAAoBviC,QAC/CnB,EAAE0jC,oBAAoBx+B,YAAYlF,EAAE65B,OAAOgH,uBAE3C7gC,EAAEupC,SAAWvpC,EAAEupC,QAAQpoC,QACvBnB,EAAEupC,QAAQrkC,YAAYlF,EAAE65B,OAAO4G,mBAI/BzgC,EAAE65B,OAAO1oB,YAAYvQ,EAAEZ,EAAE65B,OAAO1oB,YAAYjM,YAAYlF,EAAE65B,OAAO6G,qBACjE1gC,EAAE65B,OAAO3oB,YAAYtQ,EAAEZ,EAAE65B,OAAO3oB,YAAYhM,YAAYlF,EAAE65B,OAAO6G,qBAGjE1gC,EAAE65B,OAAOoC,WAAaj8B,EAAEi8B,YACpBj8B,EAAEi8B,UAAU8Z,OAAS/1C,EAAEi8B,UAAU8Z,MAAM50C,QAAQnB,EAAEi8B,UAAU8Z,MAAM5yC,WAAW,SAC5EnD,EAAEi8B,UAAUqa,MAAQt2C,EAAEi8B,UAAUqa,KAAKn1C,QAAQnB,EAAEi8B,UAAUqa,KAAKnzC,WAAW,WAKrFnD,EAAE0zB,QAAU,SAAU8pB,EAAgBD,GAElCv9C,EAAEosC,eAEFpsC,EAAE0lC,eAEE1lC,EAAE65B,OAAOoC,WAAaj8B,EAAEi8B,WACpBj8B,EAAE65B,OAAOsC,oBACTn8B,EAAEi8B,UAAU2a,mBAIhB52C,EAAE65B,OAAOxmB,MACTrT,EAAEmjC,cAGFoa,GACAv9C,EAAEu9C,gBAGNv9C,EAAE0yC,sBAGE1yC,EAAE65B,OAAO7oB,MAAQhR,EAAEgR,MACnBhR,EAAEgR,KAAK0iB,UAGP1zB,EAAE65B,OAAOpoB,iBACLzR,EAAEw4C,wBAAwBx4C,EAAEw4C,yBAEhCx4C,EAAE65B,OAAOnoB,mBACL1R,EAAEk5C,0BAA0Bl5C,EAAEk5C,2BAGlCl5C,EAAE65B,OAAO4H,MAAQzhC,EAAEyhC,MAAMzhC,EAAEyhC,KAAK/N,UAEhC1zB,EAAE65B,OAAO7Y,UAAYhhB,EAAE65B,OAAO8C,cAC9Bt8B,OAAOymB,oBAAoB,WAAY9mB,EAAEghB,QAAQq3B,oBAEjDr4C,EAAE65B,OAAO4C,SAAWz8B,EAAEy8B,SACtBz8B,EAAEy8B,QAAQ/I,UAGd1zB,EAAEolC,KAAK,cAEgB,IAAnBoY,IAA0Bx9C,EAAI,OAGtCA,EAAE64B,OAKK74B,EA32HP,SAASm4B,EAAM4K,GACX,OAAOtZ,KAAK4d,MAAMtE,GAuEtB,SAASnuB,IACL,IAAI6oC,EAAgBz9C,EAAE65B,OAAOjlB,SACzBrB,EAAcvT,EAAEsmC,OAAO9xB,GAAGxU,EAAEqmC,aAC5B9yB,EAAYtR,KAAK,0BACjBw7C,EAAgBlqC,EAAYtR,KAAK,yBAA2BjC,EAAE65B,OAAOjlB,UAEzE5U,EAAEslC,kBAAoBt3B,YAAW,WACzBhO,EAAE65B,OAAOxmB,MACTrT,EAAEgtC,UACFhtC,EAAE+wC,aACF/wC,EAAEolC,KAAK,aAAcplC,IAGhBA,EAAE2oC,MAKE9O,EAAOI,mBAKRj6B,EAAE0lC,gBAJF1lC,EAAEywC,SAAS,GACXzwC,EAAEolC,KAAK,aAAcplC,KANzBA,EAAE+wC,aACF/wC,EAAEolC,KAAK,aAAcplC,MAY9By9C,GAyxBP,SAAS9Q,EAAmBvsC,EAAG6mB,GAC3B,IAAI+M,EAAKpzB,EAAER,EAAEuQ,QACb,IAAKqjB,EAAG/yB,GAAGgmB,GACP,GAAwB,iBAAbA,EACP+M,EAAKA,EAAG9vB,QAAQ+iB,QAEf,GAAIA,EAASkb,SAAU,CACxB,IAAIub,EAIJ,OAHA1pB,EAAG9vB,UAAUkJ,MAAK,SAAUtG,EAAO62C,GAC3BA,IAAQ12B,IAAUy2B,EAAQz2B,MAE7By2B,EACOz2B,OADA,EAIpB,GAAkB,IAAd+M,EAAG7yB,OAGP,OAAO6yB,EAAG,GAm2Bd,SAASwe,EAAa7hC,EAAQ9E,GAC1BA,EAAUA,GAAW,GAErB,IACI6N,EAAW,IADIrZ,OAAOu9C,kBAAoBv9C,OAAOw9C,yBACrB,SAAUC,GACtCA,EAAUh7C,SAAQ,SAAUi7C,GACxB/9C,EAAEuqC,UAAS,GACXvqC,EAAEolC,KAAK,mBAAoBplC,EAAG+9C,SAItCrkC,EAASO,QAAQtJ,EAAQ,CACrBlI,gBAA0C,IAAvBoD,EAAQpD,YAAoCoD,EAAQpD,WACvEgqC,eAAwC,IAAtB5mC,EAAQ4mC,WAAmC5mC,EAAQ4mC,UACrEuL,mBAAgD,IAA1BnyC,EAAQmyC,eAAuCnyC,EAAQmyC,gBAGjFh+C,EAAEqyC,UAAUhlC,KAAKqM,GAy+BrB,SAAS++B,EAAer4C,GAChBA,EAAEouC,gBAAepuC,EAAIA,EAAEouC,eAC3B,IAAIyP,EAAK79C,EAAEM,SAAWN,EAAE89C,SAExB,IAAKl+C,EAAE65B,OAAO2F,mBAAqBx/B,EAAE2jC,gBAAyB,KAAPsa,IAAcj+C,EAAE2jC,gBAAyB,KAAPsa,GACrF,OAAO,EAEX,IAAKj+C,EAAE65B,OAAO0F,mBAAqBv/B,EAAE2jC,gBAAyB,KAAPsa,IAAcj+C,EAAE2jC,gBAAyB,KAAPsa,GACrF,OAAO,EAEX,KAAI79C,EAAEiB,UAAYjB,EAAE+9C,QAAU/9C,EAAEg+C,SAAWh+C,EAAEi+C,SAGzCxxC,SAAS+hC,eAAiB/hC,SAAS+hC,cAAc7a,WAA+D,UAAlDlnB,SAAS+hC,cAAc7a,SAASzb,eAA+E,aAAlDzL,SAAS+hC,cAAc7a,SAASzb,gBAA/J,CAGA,GAAW,KAAP2lC,GAAoB,KAAPA,GAAoB,KAAPA,GAAoB,KAAPA,EAAW,CAClD,IAAIK,GAAS,EAEb,GAAIt+C,EAAEkJ,UAAUhF,QAAQ,IAAMlE,EAAE65B,OAAOiG,YAAY3+B,OAAS,GAAqE,IAAhEnB,EAAEkJ,UAAUhF,QAAQ,IAAMlE,EAAE65B,OAAOkG,kBAAkB5+B,OAClH,OAEJ,IAAIo9C,EAAe,CACfnnC,KAAM/W,OAAOm+C,YACbvrC,IAAK5S,OAAOo+C,aAEZ1yB,EAAc1rB,OAAOwb,WACrBmQ,EAAe3rB,OAAO4rB,YACtByyB,EAAe1+C,EAAEkJ,UAAU8J,SAC3BhT,EAAEqhB,MAAKq9B,EAAatnC,KAAOsnC,EAAatnC,KAAOpX,EAAEkJ,UAAU,GAAGy1C,YAOlE,IANA,IAAIC,EAAc,CACd,CAACF,EAAatnC,KAAMsnC,EAAazrC,KACjC,CAACyrC,EAAatnC,KAAOpX,EAAEoU,MAAOsqC,EAAazrC,KAC3C,CAACyrC,EAAatnC,KAAMsnC,EAAazrC,IAAMjT,EAAE6S,QACzC,CAAC6rC,EAAatnC,KAAOpX,EAAEoU,MAAOsqC,EAAazrC,IAAMjT,EAAE6S,SAE9C5U,EAAI,EAAGA,EAAI2gD,EAAYz9C,OAAQlD,IAAK,CACzC,IAAI2kC,EAAQgc,EAAY3gD,GAEpB2kC,EAAM,IAAM2b,EAAannC,MAAQwrB,EAAM,IAAM2b,EAAannC,KAAO2U,GACjE6W,EAAM,IAAM2b,EAAatrC,KAAO2vB,EAAM,IAAM2b,EAAatrC,IAAM+Y,IAE/DsyB,GAAS,GAIjB,IAAKA,EAAQ,OAEbt+C,EAAE2jC,gBACS,KAAPsa,GAAoB,KAAPA,IACT79C,EAAEmB,eAAgBnB,EAAEmB,iBACnBnB,EAAEo2C,aAAc,IAEb,KAAPyH,IAAcj+C,EAAEqhB,KAAgB,KAAP48B,GAAaj+C,EAAEqhB,MAAMrhB,EAAEwsC,aACzC,KAAPyR,IAAcj+C,EAAEqhB,KAAgB,KAAP48B,GAAaj+C,EAAEqhB,MAAMrhB,EAAEysC,cAG1C,KAAPwR,GAAoB,KAAPA,IACT79C,EAAEmB,eAAgBnB,EAAEmB,iBACnBnB,EAAEo2C,aAAc,GAEd,KAAPyH,GAAWj+C,EAAEwsC,YACN,KAAPyR,GAAWj+C,EAAEysC,aAErBzsC,EAAEolC,KAAK,aAAcplC,EAAGi+C,IAwN5B,SAAS9E,EAAiB/4C,GAClBA,EAAEouC,gBAAepuC,EAAIA,EAAEouC,eAC3B,IAAI3gB,EAAQ,EACRgxB,EAAY7+C,EAAEqhB,KAAO,EAAI,EAEzBtf,EAhFR,SAAoCtB,GAEhC,IAIIq+C,EAAK,EAAGC,EAAK,EACbC,EAAK,EAAGC,EAAK,EAkDjB,MA/CI,WAAYx+C,IACZs+C,EAAKt+C,EAAMutB,QAEX,eAAgBvtB,IAChBs+C,GAAMt+C,EAAMqtB,WAAa,KAEzB,gBAAiBrtB,IACjBs+C,GAAMt+C,EAAMy+C,YAAc,KAE1B,gBAAiBz+C,IACjBq+C,GAAMr+C,EAAM0+C,YAAc,KAI1B,SAAU1+C,GAASA,EAAM+wC,OAAS/wC,EAAM2+C,kBACxCN,EAAKC,EACLA,EAAK,GAGTC,EA3BiB,GA2BZF,EACLG,EA5BiB,GA4BZF,EAED,WAAYt+C,IACZw+C,EAAKx+C,EAAM4+C,QAEX,WAAY5+C,IACZu+C,EAAKv+C,EAAM6+C,SAGVN,GAAMC,IAAOx+C,EAAM8+C,YACI,IAApB9+C,EAAM8+C,WACNP,GAtCU,GAuCVC,GAvCU,KAyCVD,GAxCU,IAyCVC,GAzCU,MA8CdD,IAAOF,IACPA,EAAME,EAAK,GAAM,EAAI,GAErBC,IAAOF,IACPA,EAAME,EAAK,GAAM,EAAI,GAGlB,CACHO,MAAOV,EACPW,MAAOV,EACPW,OAAQV,EACRW,OAAQV,GAmBDW,CAAgBx/C,GAE3B,GAAIJ,EAAE65B,OAAOloB,sBACT,GAAI3R,EAAE2jC,eAAgB,CAClB,KAAIla,KAAKC,IAAI3nB,EAAK29C,QAAUj2B,KAAKC,IAAI3nB,EAAK49C,SACrC,OAD8C9xB,EAAQ9rB,EAAK29C,OAASb,MAGxE,CACD,KAAIp1B,KAAKC,IAAI3nB,EAAK49C,QAAUl2B,KAAKC,IAAI3nB,EAAK29C,SACrC,OAD8C7xB,EAAQ9rB,EAAK49C,YAKpE9xB,EAAQpE,KAAKC,IAAI3nB,EAAK29C,QAAUj2B,KAAKC,IAAI3nB,EAAK49C,SAAY59C,EAAK29C,OAASb,GAAc98C,EAAK49C,OAG/F,GAAc,IAAV9xB,EAAJ,CAIA,GAFI7tB,EAAE65B,OAAOyC,mBAAkBzO,GAASA,GAEnC7tB,EAAE65B,OAAOO,SAoBT,CAED,IAAI7G,EAAWvzB,EAAEivC,sBAAwBphB,EAAQ7tB,EAAE65B,OAAO0C,sBACtDiM,EAAexoC,EAAEyoC,YACjBC,EAAS1oC,EAAE2oC,MAgCf,GA9BIpV,GAAYvzB,EAAE8lC,iBAAgBvS,EAAWvzB,EAAE8lC,gBAC3CvS,GAAYvzB,EAAEgmC,iBAAgBzS,EAAWvzB,EAAEgmC,gBAE/ChmC,EAAEkvC,qBAAqB,GACvBlvC,EAAEsqC,oBAAoB/W,GACtBvzB,EAAEsoC,iBACFtoC,EAAE4oC,sBAEGJ,GAAgBxoC,EAAEyoC,cAAgBC,GAAU1oC,EAAE2oC,QAC/C3oC,EAAEgpC,gBAGFhpC,EAAE65B,OAAOa,gBACT/K,aAAa3vB,EAAE24C,WAAW1B,SAC1Bj3C,EAAE24C,WAAW1B,QAAUjpC,YAAW,WAC9BhO,EAAEowC,eACH,MAGCpwC,EAAE65B,OAAO+E,aAAe5+B,EAAE2qC,MAC1B3qC,EAAE2qC,KAAK/R,OAIf54B,EAAEolC,KAAK,WAAYplC,EAAGI,GAGlBJ,EAAE65B,OAAOjlB,UAAY5U,EAAE65B,OAAOG,8BAA8Bh6B,EAAE0lC,eAGjD,IAAbnS,GAAkBA,IAAavzB,EAAEgmC,eAAgB,WAxDjC,CACpB,IAAK,IAAI3lC,OAAO0tC,MAAQuB,UAAYtvC,EAAE24C,WAAWC,eAAiB,GAC9D,GAAI/qB,EAAQ,EACR,GAAM7tB,EAAE2oC,QAAS3oC,EAAE65B,OAAOxmB,MAAUrT,EAAEssC,WAIjC,GAAItsC,EAAE65B,OAAOwC,yBAA0B,OAAO,OAH/Cr8B,EAAEwsC,YACFxsC,EAAEolC,KAAK,WAAYplC,EAAGI,QAK1B,GAAMJ,EAAEyoC,cAAezoC,EAAE65B,OAAOxmB,MAAUrT,EAAEssC,WAIvC,GAAItsC,EAAE65B,OAAOwC,yBAA0B,OAAO,OAH/Cr8B,EAAEysC,YACFzsC,EAAEolC,KAAK,WAAYplC,EAAGI,GAKlCJ,EAAE24C,WAAWC,gBAAkB,IAAIv4C,OAAO0tC,MAAQuB,UA4CtD,OAFIlvC,EAAEmB,eAAgBnB,EAAEmB,iBACnBnB,EAAEo2C,aAAc,GACd,GA4BX,SAAS6C,EAAqBrlB,EAAIiQ,GAE9B,IAAIlkC,EAAGi/C,EAAIC,EADXjrB,EAAKpzB,EAAEozB,GAEP,IAAI6qB,EAAY7+C,EAAEqhB,KAAO,EAAI,EAE7BthB,EAAIi0B,EAAG/xB,KAAK,yBAA2B,IACvC+8C,EAAKhrB,EAAG/xB,KAAK,0BACbg9C,EAAKjrB,EAAG/xB,KAAK,0BACT+8C,GAAMC,GACND,EAAKA,GAAM,IACXC,EAAKA,GAAM,KAGPj/C,EAAE2jC,gBACFqb,EAAKj/C,EACLk/C,EAAK,MAGLA,EAAKl/C,EACLi/C,EAAK,KAKTA,EADCA,EAAIz6C,QAAQ,MAAQ,EAChBf,SAASw7C,EAAI,IAAM/a,EAAW4a,EAAY,IAG1CG,EAAK/a,EAAW4a,EAAY,KAGjCI,EADCA,EAAI16C,QAAQ,MAAQ,EAChBf,SAASy7C,EAAI,IAAMhb,EAAW,IAG9Bgb,EAAKhb,EAAW,KAGzBjQ,EAAG0V,UAAU,eAAiBsV,EAAK,KAAOC,EAAK,SA6ZnD,SAASvC,EAAoBH,GASzB,OARgC,IAA5BA,EAAUh4C,QAAQ,QAEdg4C,EADAA,EAAU,KAAOA,EAAU,GAAGsD,cAClB,KAAOtD,EAAU,GAAGsD,cAAgBtD,EAAUxxB,UAAU,GAGxD,KAAOwxB,GAGpBA,IAmTfxrC,EAAOlR,UAAY,CACf80C,UACQ/a,EAAKv5B,OAAOshB,UAAUk3B,UAAUvgC,cAC5BshB,EAAGr1B,QAAQ,WAAa,GAAKq1B,EAAGr1B,QAAQ,UAAY,GAAKq1B,EAAGr1B,QAAQ,WAAa,GAE7FqwC,YAAa,+CAA+Cx2B,KAAK/d,OAAOshB,UAAUk3B,WAClFh8B,QAAS,SAAUa,GACf,MAAgD,mBAAzC/e,OAAOkB,UAAUqe,SAASuK,MAAM/K,IAK3C8tB,QAAS,CACLC,GAAIprC,OAAOshB,UAAUopB,gBAAkB1qC,OAAOshB,UAAUqpB,iBACxD8U,QAAUz/C,OAAOshB,UAAUqpB,kBAAoB3qC,OAAOshB,UAAUo+B,iBAAmB,GAAO1/C,OAAOshB,UAAUopB,gBAAkB1qC,OAAOshB,UAAUq+B,eAAiB,EAC/JrP,QAEQhX,EAAM9sB,SAASkb,cAAc,OAEjC4R,EAAIzR,UAAY,8CAEgC,IAAzCyR,EAAInM,qBAAqB,KAAKrsB,SAM7C2iC,OAAS,WACL,IAAIlK,EAAKv5B,OAAOshB,UAAUk3B,UACtB9U,EAAUnK,EAAGnM,MAAM,+BACnBwyB,EAAOrmB,EAAGnM,MAAM,wBAChByyB,EAAOtmB,EAAGnM,MAAM,2BAChB0yB,GAAUF,GAAQrmB,EAAGnM,MAAM,8BAC/B,MAAO,CACHqe,IAAKmU,GAAQE,GAAUD,EACvBnc,QAASA,GARR,GAcTT,QAAS,CACLG,MAASpjC,OAAO+/C,YAAiC,IAApBA,UAAU3c,UACxB,iBAAkBpjC,QAAWA,OAAOggD,eAAiBxzC,oBAAoBwzC,eAGxF7c,aAAgBnjC,OAAO+/C,YAA2C,IAA9BA,UAAUE,iBAA8B,WACxE,IAAI3mB,EAAM9sB,SAASkb,cAAc,OAAOlN,MACxC,MAAQ,sBAAuB8e,GAAO,mBAAoBA,GAAO,iBAAkBA,GAAO,kBAAmBA,GAAO,gBAAiBA,EAF7D,GAK5E4J,QAAU,WAGN,IAFA,IAAI5J,EAAM9sB,SAASkb,cAAc,OAAOlN,MACpC6T,EAAU,yKAA0K3mB,MAAM,KACrL9J,EAAI,EAAGA,EAAIywB,EAAOvtB,OAAQlD,IAC/B,GAAIywB,EAAOzwB,KAAM07B,EAAK,OAAO,EAJ3B,GAQVjgB,SACY,qBAAsBrZ,QAAU,2BAA4BA,OAGxEwrC,gBAAkB,WACd,IAAIjlB,GAAkB,EACtB,IACI,IAAIC,EAAOloB,OAAOC,eAAe,GAAI,UAAW,CAC5CE,IAAK,WACD8nB,GAAkB,KAG1BvmB,OAAOslB,iBAAiB,sBAAuB,KAAMkB,GACvD,MAAOzmB,IACT,OAAOwmB,EAVO,GAalBg0B,SACW,mBAAoBv6C,QAMnCg8C,QAAS,IAkqBb,IA3pBA,IAiqBIkE,EAjqBAne,EAAQ,WACR,IAAIA,EAAO,SAAU1kB,GACjB,IAAkBzf,EAAI,EAEtB,IAAKA,EAAI,EAAGA,EAAIyf,EAAIvc,OAAQlD,IAFhBiC,KAGFjC,GAAKyf,EAAIzf,GAInB,OAPYiC,KAKNiB,OAASuc,EAAIvc,OAEZjB,MAEPU,EAAI,SAAUqmB,EAAUu5B,GACxB,IAAI9iC,EAAM,GAAIzf,EAAI,EAClB,GAAIgpB,IAAau5B,GACTv5B,aAAoBmb,EACpB,OAAOnb,EAGf,GAAIA,EAEA,GAAwB,iBAAbA,EAAuB,CAC9B,IAAIw5B,EAAKC,EAAYh9C,EAAOujB,EAAS7O,OACrC,GAAI1U,EAAKa,QAAQ,MAAQ,GAAKb,EAAKa,QAAQ,MAAQ,EAAG,CAClD,IAAIo8C,EAAW,MAQf,IAP4B,IAAxBj9C,EAAKa,QAAQ,SAAco8C,EAAW,MACd,IAAxBj9C,EAAKa,QAAQ,SAAco8C,EAAW,SACd,IAAxBj9C,EAAKa,QAAQ,QAAwC,IAAxBb,EAAKa,QAAQ,SAAco8C,EAAW,MACxC,IAA3Bj9C,EAAKa,QAAQ,YAAiBo8C,EAAW,SACb,IAA5Bj9C,EAAKa,QAAQ,aAAkBo8C,EAAW,WAC9CD,EAAa7zC,SAASkb,cAAc44B,IACzBz4B,UAAYjB,EAClBhpB,EAAI,EAAGA,EAAIyiD,EAAWE,WAAWz/C,OAAQlD,IAC1Cyf,EAAIrQ,KAAKqzC,EAAWE,WAAW3iD,SAYnC,IAFIwiD,EANCD,GAA2B,MAAhBv5B,EAAS,IAAeA,EAASwG,MAAM,aAM5C+yB,GAAW3zC,UAAU4M,iBAAiBwN,GAJvC,CAACpa,SAASg0C,eAAe55B,EAASlf,MAAM,KAAK,KAMlD9J,EAAI,EAAGA,EAAIwiD,EAAIt/C,OAAQlD,IACpBwiD,EAAIxiD,IAAIyf,EAAIrQ,KAAKozC,EAAIxiD,SAKhC,GAAIgpB,EAASkb,UAAYlb,IAAa5mB,QAAU4mB,IAAapa,SAC9D6Q,EAAIrQ,KAAK4Z,QAGR,GAAIA,EAAS9lB,OAAS,GAAK8lB,EAAS,GAAGkb,SACxC,IAAKlkC,EAAI,EAAGA,EAAIgpB,EAAS9lB,OAAQlD,IAC7Byf,EAAIrQ,KAAK4Z,EAAShpB,IAI9B,OAAO,IAAImkC,EAAK1kB,IAulBpB,OArlBA0kB,EAAKviC,UAAY,CAEbkF,SAAU,SAAUwb,GAChB,QAAyB,IAAdA,EACP,OAAOrgB,KAGX,IADA,IAAIynB,EAAUpH,EAAUxY,MAAM,KACrB9J,EAAI,EAAGA,EAAI0pB,EAAQxmB,OAAQlD,IAChC,IAAK,IAAI2I,EAAI,EAAGA,EAAI1G,KAAKiB,OAAQyF,IAC7B1G,KAAK0G,GAAGmT,UAAUC,IAAI2N,EAAQ1pB,IAGtC,OAAOiC,MAEXgF,YAAa,SAAUqb,GAEnB,IADA,IAAIoH,EAAUpH,EAAUxY,MAAM,KACrB9J,EAAI,EAAGA,EAAI0pB,EAAQxmB,OAAQlD,IAChC,IAAK,IAAI2I,EAAI,EAAGA,EAAI1G,KAAKiB,OAAQyF,IAC7B1G,KAAK0G,GAAGmT,UAAUrP,OAAOid,EAAQ1pB,IAGzC,OAAOiC,MAEX0B,SAAU,SAAU2e,GAChB,QAAKrgB,KAAK,IACEA,KAAK,GAAG6Z,UAAUoM,SAAS5F,IAE3C/J,YAAa,SAAU+J,GAEnB,IADA,IAAIoH,EAAUpH,EAAUxY,MAAM,KACrB9J,EAAI,EAAGA,EAAI0pB,EAAQxmB,OAAQlD,IAChC,IAAK,IAAI2I,EAAI,EAAGA,EAAI1G,KAAKiB,OAAQyF,IAC7B1G,KAAK0G,GAAGmT,UAAUxC,OAAOoQ,EAAQ1pB,IAGzC,OAAOiC,MAEX+B,KAAM,SAAUmC,EAAOlF,GACnB,GAAyB,IAArB2pB,UAAU1nB,QAAiC,iBAAViD,EAEjC,OAAIlE,KAAK,GAAWA,KAAK,GAAGklB,aAAahhB,QACpC,EAIL,IAAK,IAAInG,EAAI,EAAGA,EAAIiC,KAAKiB,OAAQlD,IAC7B,GAAyB,IAArB4qB,UAAU1nB,OAEVjB,KAAKjC,GAAGsoB,aAAaniB,EAAOlF,QAI5B,IAAK,IAAI4hD,KAAY18C,EACjBlE,KAAKjC,GAAG6iD,GAAY18C,EAAM08C,GAC1B5gD,KAAKjC,GAAGsoB,aAAau6B,EAAU18C,EAAM08C,IAIjD,OAAO5gD,MAGfiD,WAAY,SAAUlB,GAClB,IAAK,IAAIhE,EAAI,EAAGA,EAAIiC,KAAKiB,OAAQlD,IAC7BiC,KAAKjC,GAAG8iD,gBAAgB9+C,GAE5B,OAAO/B,MAEX6B,KAAM,SAAUvC,EAAKN,GACjB,QAAqB,IAAVA,EAAX,CAYI,IAAK,IAAIjB,EAAI,EAAGA,EAAIiC,KAAKiB,OAAQlD,IAAK,CAClC,IAAI+1B,EAAK9zB,KAAKjC,GACT+1B,EAAGgtB,yBAAwBhtB,EAAGgtB,uBAAyB,IAC5DhtB,EAAGgtB,uBAAuBxhD,GAAON,EAErC,OAAOgB,KAfP,GAAIA,KAAK,GAAI,CACT,IAAI+gD,EAAU/gD,KAAK,GAAGklB,aAAa,QAAU5lB,GAC7C,OAAIyhD,IACK/gD,KAAK,GAAG8gD,wBAA2BxhD,KAAOU,KAAK,GAAG8gD,uBAAgC9gD,KAAK,GAAG8gD,uBAAuBxhD,QACrH,KAejBkqC,UAAY,SAAUA,GAClB,IAAK,IAAIzrC,EAAI,EAAGA,EAAIiC,KAAKiB,OAAQlD,IAAK,CAClC,IAAIijD,EAAUhhD,KAAKjC,GAAG4c,MACtBqmC,EAAQpP,gBAAkBoP,EAAQjP,YAAciP,EAAQhP,YAAcgP,EAAQnP,aAAemP,EAAQlP,WAAakP,EAAQxX,UAAYA,EAE1I,OAAOxpC,MAEXypC,WAAY,SAAUxY,GACM,iBAAbA,IACPA,GAAsB,MAE1B,IAAK,IAAIlzB,EAAI,EAAGA,EAAIiC,KAAKiB,OAAQlD,IAAK,CAClC,IAAIijD,EAAUhhD,KAAKjC,GAAG4c,MACtBqmC,EAAQC,yBAA2BD,EAAQE,qBAAuBF,EAAQG,qBAAuBH,EAAQI,sBAAwBJ,EAAQK,oBAAsBL,EAAQM,mBAAqBrwB,EAEhM,OAAOjxB,MAGXuM,GAAI,SAAU8vC,EAAWkF,EAAgBC,EAAU9+B,GAC/C,SAAS++B,EAAgBvhD,GACrB,IAAIuQ,EAASvQ,EAAEuQ,OACf,GAAI/P,EAAE+P,GAAQ1P,GAAGwgD,GAAiBC,EAAStjD,KAAKuS,EAAQvQ,QAGpD,IADA,IAAI8D,EAAUtD,EAAE+P,GAAQzM,UACfwQ,EAAI,EAAGA,EAAIxQ,EAAQ/C,OAAQuT,IAC5B9T,EAAEsD,EAAQwQ,IAAIzT,GAAGwgD,IAAiBC,EAAStjD,KAAK8F,EAAQwQ,GAAItU,GAI5E,IACInC,EAAG2I,EADH0pB,EAASisB,EAAUx0C,MAAM,KAE7B,IAAK9J,EAAI,EAAGA,EAAIiC,KAAKiB,OAAQlD,IACzB,GAA8B,mBAAnBwjD,IAAoD,IAAnBA,EAMxC,IAJ8B,mBAAnBA,IACPC,EAAW74B,UAAU,GACrBjG,EAAUiG,UAAU,KAAM,GAEzBjiB,EAAI,EAAGA,EAAI0pB,EAAOnvB,OAAQyF,IAC3B1G,KAAKjC,GAAG0nB,iBAAiB2K,EAAO1pB,GAAI86C,EAAU9+B,QAKlD,IAAKhc,EAAI,EAAGA,EAAI0pB,EAAOnvB,OAAQyF,IACtB1G,KAAKjC,GAAG2jD,oBAAmB1hD,KAAKjC,GAAG2jD,kBAAoB,IAC5D1hD,KAAKjC,GAAG2jD,kBAAkBv0C,KAAK,CAACq0C,SAAUA,EAAUG,aAAcF,IAClEzhD,KAAKjC,GAAG0nB,iBAAiB2K,EAAO1pB,GAAI+6C,EAAiB/+B,GAKjE,OAAO1iB,MAEXuzB,IAAK,SAAU8oB,EAAWkF,EAAgBC,EAAU9+B,GAEhD,IADA,IAAI0N,EAASisB,EAAUx0C,MAAM,KACpB9J,EAAI,EAAGA,EAAIqyB,EAAOnvB,OAAQlD,IAC/B,IAAK,IAAI2I,EAAI,EAAGA,EAAI1G,KAAKiB,OAAQyF,IAC7B,GAA8B,mBAAnB66C,IAAoD,IAAnBA,EAEV,mBAAnBA,IACPC,EAAW74B,UAAU,GACrBjG,EAAUiG,UAAU,KAAM,GAE9B3oB,KAAK0G,GAAGkgB,oBAAoBwJ,EAAOryB,GAAIyjD,EAAU9+B,QAIjD,GAAI1iB,KAAK0G,GAAGg7C,kBACR,IAAK,IAAIltC,EAAI,EAAGA,EAAIxU,KAAK0G,GAAGg7C,kBAAkBzgD,OAAQuT,IAC9CxU,KAAK0G,GAAGg7C,kBAAkBltC,GAAGgtC,WAAaA,GAC1CxhD,KAAK0G,GAAGkgB,oBAAoBwJ,EAAOryB,GAAIiC,KAAK0G,GAAGg7C,kBAAkBltC,GAAGmtC,aAAcj/B,GAO1G,OAAO1iB,MAEXy8C,KAAM,SAAUJ,EAAWkF,EAAgBC,EAAU9+B,GACjD,IAAIk/B,EAAM5hD,KAMV,SAAS6hD,EAAM3hD,GACXshD,EAASthD,GACT0hD,EAAIruB,IAAI8oB,EAAWkF,EAAgBM,EAAOn/B,GAPhB,mBAAnB6+B,IACPA,GAAiB,EACjBC,EAAW74B,UAAU,GACrBjG,EAAUiG,UAAU,IAMxBi5B,EAAIr1C,GAAG8vC,EAAWkF,EAAgBM,EAAOn/B,IAE7C9e,QAAS,SAAUy4C,EAAWyF,GAC1B,IAAK,IAAI/jD,EAAI,EAAGA,EAAIiC,KAAKiB,OAAQlD,IAAK,CAClC,IAAIgkD,EACJ,IACIA,EAAM,IAAI5hD,OAAO6hD,YAAY3F,EAAW,CAACvuB,OAAQg0B,EAAWG,SAAS,EAAMC,YAAY,IAE3F,MAAOhiD,IACH6hD,EAAMp1C,SAASw1C,YAAY,UACvBC,UAAU/F,GAAW,GAAM,GAC/B0F,EAAIj0B,OAASg0B,EAEjB9hD,KAAKjC,GAAGssB,cAAc03B,GAE1B,OAAO/hD,MAEX2lC,cAAe,SAAUtV,GACrB,IACItyB,EADAqyB,EAAS,CAAC,sBAAuB,gBAAiB,iBAAkB,kBAAmB,mBACjFwxB,EAAM5hD,KAChB,SAASqiD,EAAaniD,GAElB,GAAIA,EAAEuQ,SAAWzQ,KAEjB,IADAqwB,EAASnyB,KAAK8B,KAAME,GACfnC,EAAI,EAAGA,EAAIqyB,EAAOnvB,OAAQlD,IAC3B6jD,EAAIruB,IAAInD,EAAOryB,GAAIskD,GAG3B,GAAIhyB,EACA,IAAKtyB,EAAI,EAAGA,EAAIqyB,EAAOnvB,OAAQlD,IAC3B6jD,EAAIr1C,GAAG6jB,EAAOryB,GAAIskD,GAG1B,OAAOriD,MAGXkU,MAAO,WACH,OAAIlU,KAAK,KAAOG,OACLA,OAAOwb,WAGV3b,KAAKiB,OAAS,EACP+oB,WAAWhqB,KAAKoH,IAAI,UAGpB,MAInBgvB,WAAY,SAAUksB,GAClB,OAAItiD,KAAKiB,OAAS,EACVqhD,EACOtiD,KAAK,GAAGwa,YAAcwP,WAAWhqB,KAAKoH,IAAI,iBAAmB4iB,WAAWhqB,KAAKoH,IAAI,gBAEjFpH,KAAK,GAAGwa,YAEX,MAEhB7H,OAAQ,WACJ,OAAI3S,KAAK,KAAOG,OACLA,OAAO4rB,YAGV/rB,KAAKiB,OAAS,EACP+oB,WAAWhqB,KAAKoH,IAAI,WAGpB,MAInByU,YAAa,SAAUymC,GACnB,OAAItiD,KAAKiB,OAAS,EACVqhD,EACOtiD,KAAK,GAAG0a,aAAesP,WAAWhqB,KAAKoH,IAAI,eAAiB4iB,WAAWhqB,KAAKoH,IAAI,kBAEhFpH,KAAK,GAAG0a,aAEX,MAEhB5H,OAAQ,WACJ,GAAI9S,KAAKiB,OAAS,EAAG,CACjB,IAAI6yB,EAAK9zB,KAAK,GACV0Y,EAAMob,EAAGzK,wBACTnf,EAAOyC,SAASzC,KAChBq4C,EAAazuB,EAAGyuB,WAAcr4C,EAAKq4C,WAAc,EACjD3R,EAAa9c,EAAG8c,YAAc1mC,EAAK0mC,YAAc,EACjD39B,EAAa9S,OAAOo+C,aAAezqB,EAAG7gB,UACtCwrC,EAAat+C,OAAOm+C,aAAexqB,EAAG2qB,WAC1C,MAAO,CACH1rC,IAAK2F,EAAI3F,IAAOE,EAAasvC,EAC7BrrC,KAAMwB,EAAIxB,KAAOunC,EAAa7N,GAIlC,OAAO,MAGfxpC,IAAK,SAAUkX,EAAOtf,GAClB,IAAIjB,EACJ,GAAyB,IAArB4qB,UAAU1nB,OAAc,CACxB,GAAqB,iBAAVqd,EAGN,CACD,IAAKvgB,EAAI,EAAGA,EAAIiC,KAAKiB,OAAQlD,IACzB,IAAK,IAAIykD,KAAQlkC,EACbte,KAAKjC,GAAG4c,MAAM6nC,GAAQlkC,EAAMkkC,GAGpC,OAAOxiD,KARP,GAAIA,KAAK,GAAI,OAAOG,OAAOwpB,iBAAiB3pB,KAAK,GAAI,MAAMqxB,iBAAiB/S,GAWpF,GAAyB,IAArBqK,UAAU1nB,QAAiC,iBAAVqd,EAAoB,CACrD,IAAKvgB,EAAI,EAAGA,EAAIiC,KAAKiB,OAAQlD,IACzBiC,KAAKjC,GAAG4c,MAAM2D,GAAStf,EAE3B,OAAOgB,KAEX,OAAOA,MAIXkN,KAAM,SAAUmjB,GACZ,IAAK,IAAItyB,EAAI,EAAGA,EAAIiC,KAAKiB,OAAQlD,IAC7BsyB,EAASnyB,KAAK8B,KAAKjC,GAAIA,EAAGiC,KAAKjC,IAEnC,OAAOiC,MAEXwD,KAAM,SAAUA,GACZ,QAAoB,IAATA,EACP,OAAOxD,KAAK,GAAKA,KAAK,GAAGgoB,eAAY6F,EAGrC,IAAK,IAAI9vB,EAAI,EAAGA,EAAIiC,KAAKiB,OAAQlD,IAC7BiC,KAAKjC,GAAGiqB,UAAYxkB,EAExB,OAAOxD,MAGf8B,KAAM,SAAUA,GACZ,QAAoB,IAATA,EACP,OAAI9B,KAAK,GACEA,KAAK,GAAGmoB,YAAYjQ,OAEnB,KAGZ,IAAK,IAAIna,EAAI,EAAGA,EAAIiC,KAAKiB,OAAQlD,IAC7BiC,KAAKjC,GAAGoqB,YAAcrmB,EAE1B,OAAO9B,MAGfe,GAAI,SAAUgmB,GACV,IAAK/mB,KAAK,GAAI,OAAO,EACrB,IAAIyiD,EAAa1kD,EACjB,GAAwB,iBAAbgpB,EAAuB,CAC9B,IAAI+M,EAAK9zB,KAAK,GACd,GAAI8zB,IAAOnnB,SAAU,OAAOoa,IAAapa,SACzC,GAAImnB,IAAO3zB,OAAQ,OAAO4mB,IAAa5mB,OAEvC,GAAI2zB,EAAG3M,QAAS,OAAO2M,EAAG3M,QAAQJ,GAC7B,GAAI+M,EAAG4uB,sBAAuB,OAAO5uB,EAAG4uB,sBAAsB37B,GAC9D,GAAI+M,EAAG6uB,mBAAoB,OAAO7uB,EAAG6uB,mBAAmB57B,GACxD,GAAI+M,EAAG8uB,kBAAmB,OAAO9uB,EAAG8uB,kBAAkB77B,GAGvD,IADA07B,EAAc/hD,EAAEqmB,GACXhpB,EAAI,EAAGA,EAAI0kD,EAAYxhD,OAAQlD,IAChC,GAAI0kD,EAAY1kD,KAAOiC,KAAK,GAAI,OAAO,EAE3C,OAAO,EAGV,GAAI+mB,IAAapa,SAAU,OAAO3M,KAAK,KAAO2M,SAC9C,GAAIoa,IAAa5mB,OAAQ,OAAOH,KAAK,KAAOG,OAE7C,GAAI4mB,EAASkb,UAAYlb,aAAoBmb,EAAM,CAE/C,IADAugB,EAAc17B,EAASkb,SAAW,CAAClb,GAAYA,EAC1ChpB,EAAI,EAAGA,EAAI0kD,EAAYxhD,OAAQlD,IAChC,GAAI0kD,EAAY1kD,KAAOiC,KAAK,GAAI,OAAO,EAE3C,OAAO,EAEX,OAAO,GAIf4G,MAAO,WACH,GAAI5G,KAAK,GAAI,CAGT,IAFA,IAAI6iD,EAAQ7iD,KAAK,GACbjC,EAAI,EACmC,QAAnC8kD,EAAQA,EAAMC,kBACK,IAAnBD,EAAM5gB,UAAgBlkC,IAE9B,OAAOA,IAIfuW,GAAI,SAAU1N,GACV,QAAqB,IAAVA,EAAuB,OAAO5G,KACzC,IACI+iD,EADA9hD,EAASjB,KAAKiB,OAElB,OACW,IAAIihC,EADXt7B,EAAQ3F,EAAS,EACD,GAEhB2F,EAAQ,GACRm8C,EAAc9hD,EAAS2F,GACL,EAAmB,GAChB,CAAC5G,KAAK+iD,IAEf,CAAC/iD,KAAK4G,MAE1BkB,OAAQ,SAAUk7C,GACd,IAAIjlD,EAAG2I,EACP,IAAK3I,EAAI,EAAGA,EAAIiC,KAAKiB,OAAQlD,IACzB,GAAwB,iBAAbilD,EAAuB,CAC9B,IAAIC,EAAUt2C,SAASkb,cAAc,OAErC,IADAo7B,EAAQj7B,UAAYg7B,EACbC,EAAQC,YACXljD,KAAKjC,GAAGunB,YAAY29B,EAAQC,iBAG/B,GAAIF,aAAoB9gB,EACzB,IAAKx7B,EAAI,EAAGA,EAAIs8C,EAAS/hD,OAAQyF,IAC7B1G,KAAKjC,GAAGunB,YAAY09B,EAASt8C,SAIjC1G,KAAKjC,GAAGunB,YAAY09B,GAG5B,OAAOhjD,MAEX8yC,QAAS,SAAUkQ,GACf,IAAIjlD,EAAG2I,EACP,IAAK3I,EAAI,EAAGA,EAAIiC,KAAKiB,OAAQlD,IACzB,GAAwB,iBAAbilD,EAAuB,CAC9B,IAAIC,EAAUt2C,SAASkb,cAAc,OAErC,IADAo7B,EAAQj7B,UAAYg7B,EACft8C,EAAIu8C,EAAQvC,WAAWz/C,OAAS,EAAGyF,GAAK,EAAGA,IAC5C1G,KAAKjC,GAAGolD,aAAaF,EAAQvC,WAAWh6C,GAAI1G,KAAKjC,GAAG2iD,WAAW,SAIlE,GAAIsC,aAAoB9gB,EACzB,IAAKx7B,EAAI,EAAGA,EAAIs8C,EAAS/hD,OAAQyF,IAC7B1G,KAAKjC,GAAGolD,aAAaH,EAASt8C,GAAI1G,KAAKjC,GAAG2iD,WAAW,SAIzD1gD,KAAKjC,GAAGolD,aAAaH,EAAUhjD,KAAKjC,GAAG2iD,WAAW,IAG1D,OAAO1gD,MAEXmjD,aAAc,SAAUp8B,GAEpB,IADA,IAAIq8B,EAAS1iD,EAAEqmB,GACNhpB,EAAI,EAAGA,EAAIiC,KAAKiB,OAAQlD,IAC7B,GAAsB,IAAlBqlD,EAAOniD,OACPmiD,EAAO,GAAG77B,WAAW47B,aAAanjD,KAAKjC,GAAIqlD,EAAO,SAEjD,GAAIA,EAAOniD,OAAS,EACrB,IAAK,IAAIyF,EAAI,EAAGA,EAAI08C,EAAOniD,OAAQyF,IAC/B08C,EAAO18C,GAAG6gB,WAAW47B,aAAanjD,KAAKjC,GAAG80C,WAAU,GAAOuQ,EAAO18C,KAKlF28C,YAAa,SAAUt8B,GAEnB,IADA,IAAIu8B,EAAQ5iD,EAAEqmB,GACLhpB,EAAI,EAAGA,EAAIiC,KAAKiB,OAAQlD,IAC7B,GAAqB,IAAjBulD,EAAMriD,OACNqiD,EAAM,GAAG/7B,WAAW47B,aAAanjD,KAAKjC,GAAIulD,EAAM,GAAGC,kBAElD,GAAID,EAAMriD,OAAS,EACpB,IAAK,IAAIyF,EAAI,EAAGA,EAAI48C,EAAMriD,OAAQyF,IAC9B48C,EAAM58C,GAAG6gB,WAAW47B,aAAanjD,KAAKjC,GAAG80C,WAAU,GAAOyQ,EAAM58C,GAAG68C,cAKnFlmC,KAAM,SAAU0J,GACZ,OAAI/mB,KAAKiB,OAAS,EACV8lB,EACI/mB,KAAK,GAAGknB,oBAAsBxmB,EAAEV,KAAK,GAAGknB,oBAAoBnmB,GAAGgmB,GAAkB,IAAImb,EAAK,CAACliC,KAAK,GAAGknB,qBAC3F,IAAIgb,EAAK,IAGjBliC,KAAK,GAAGknB,mBAA2B,IAAIgb,EAAK,CAACliC,KAAK,GAAGknB,qBAC7C,IAAIgb,EAAK,IAGjB,IAAIA,EAAK,KAEzBshB,QAAS,SAAUz8B,GACf,IAAI08B,EAAU,GACV3vB,EAAK9zB,KAAK,GACd,IAAK8zB,EAAI,OAAO,IAAIoO,EAAK,IACzB,KAAOpO,EAAG5M,oBAAoB,CAC1B,IAAI7J,EAAOyW,EAAG5M,mBACVH,EACGrmB,EAAE2c,GAAMtc,GAAGgmB,IAAW08B,EAAQt2C,KAAKkQ,GAErComC,EAAQt2C,KAAKkQ,GAClByW,EAAKzW,EAET,OAAO,IAAI6kB,EAAKuhB,IAEpB14B,KAAM,SAAUhE,GACZ,OAAI/mB,KAAKiB,OAAS,EACV8lB,EACI/mB,KAAK,GAAG2nB,wBAA0BjnB,EAAEV,KAAK,GAAG2nB,wBAAwB5mB,GAAGgmB,GAAkB,IAAImb,EAAK,CAACliC,KAAK,GAAG2nB,yBACnG,IAAIua,EAAK,IAGjBliC,KAAK,GAAG2nB,uBAA+B,IAAIua,EAAK,CAACliC,KAAK,GAAG2nB,yBACjD,IAAIua,EAAK,IAGjB,IAAIA,EAAK,KAEzBwhB,QAAS,SAAU38B,GACf,IAAI48B,EAAU,GACV7vB,EAAK9zB,KAAK,GACd,IAAK8zB,EAAI,OAAO,IAAIoO,EAAK,IACzB,KAAOpO,EAAGnM,wBAAwB,CAC9B,IAAIoD,EAAO+I,EAAGnM,uBACVZ,EACGrmB,EAAEqqB,GAAMhqB,GAAGgmB,IAAW48B,EAAQx2C,KAAK4d,GAErC44B,EAAQx2C,KAAK4d,GAClB+I,EAAK/I,EAET,OAAO,IAAImX,EAAKyhB,IAEpBh/C,OAAQ,SAAUoiB,GAEd,IADA,IAAI/iB,EAAU,GACLjG,EAAI,EAAGA,EAAIiC,KAAKiB,OAAQlD,IACzBgpB,EACIrmB,EAAEV,KAAKjC,GAAGwpB,YAAYxmB,GAAGgmB,IAAW/iB,EAAQmJ,KAAKnN,KAAKjC,GAAGwpB,YAG7DvjB,EAAQmJ,KAAKnN,KAAKjC,GAAGwpB,YAG7B,OAAO7mB,EAAEA,EAAEkjD,OAAO5/C,KAEtBA,QAAS,SAAU+iB,GAEf,IADA,IAAI/iB,EAAU,GACLjG,EAAI,EAAGA,EAAIiC,KAAKiB,OAAQlD,IAE7B,IADA,IAAI4G,EAAS3E,KAAKjC,GAAGwpB,WACd5iB,GACCoiB,EACIrmB,EAAEiE,GAAQ5D,GAAGgmB,IAAW/iB,EAAQmJ,KAAKxI,GAGzCX,EAAQmJ,KAAKxI,GAEjBA,EAASA,EAAO4iB,WAGxB,OAAO7mB,EAAEA,EAAEkjD,OAAO5/C,KAEtBpC,KAAO,SAAUmlB,GAEb,IADA,IAAI88B,EAAgB,GACX9lD,EAAI,EAAGA,EAAIiC,KAAKiB,OAAQlD,IAE7B,IADA,IAAIy/C,EAAQx9C,KAAKjC,GAAGwb,iBAAiBwN,GAC5BrgB,EAAI,EAAGA,EAAI82C,EAAMv8C,OAAQyF,IAC9Bm9C,EAAc12C,KAAKqwC,EAAM92C,IAGjC,OAAO,IAAIw7B,EAAK2hB,IAEpBz5C,SAAU,SAAU2c,GAEhB,IADA,IAAI3c,EAAW,GACNrM,EAAI,EAAGA,EAAIiC,KAAKiB,OAAQlD,IAG7B,IAFA,IAAI2iD,EAAa1gD,KAAKjC,GAAG2iD,WAEhBh6C,EAAI,EAAGA,EAAIg6C,EAAWz/C,OAAQyF,IAC9BqgB,EAI8B,IAA3B25B,EAAWh6C,GAAGu7B,UAAkBvhC,EAAEggD,EAAWh6C,IAAI3F,GAAGgmB,IAAW3c,EAAS+C,KAAKuzC,EAAWh6C,IAH7D,IAA3Bg6C,EAAWh6C,GAAGu7B,UAAgB73B,EAAS+C,KAAKuzC,EAAWh6C,IAOvE,OAAO,IAAIw7B,EAAKxhC,EAAEkjD,OAAOx5C,KAE7BI,OAAQ,WACJ,IAAK,IAAIzM,EAAI,EAAGA,EAAIiC,KAAKiB,OAAQlD,IACzBiC,KAAKjC,GAAGwpB,YAAYvnB,KAAKjC,GAAGwpB,WAAW0B,YAAYjpB,KAAKjC,IAEhE,OAAOiC,MAEX8Z,IAAK,WACD,IACI/b,EAAG2I,EADHk7C,EAAM5hD,KAEV,IAAKjC,EAAI,EAAGA,EAAI4qB,UAAU1nB,OAAQlD,IAAK,CACnC,IAAI+lD,EAAQpjD,EAAEioB,UAAU5qB,IACxB,IAAK2I,EAAI,EAAGA,EAAIo9C,EAAM7iD,OAAQyF,IAC1Bk7C,EAAIA,EAAI3gD,QAAU6iD,EAAMp9C,GACxBk7C,EAAI3gD,SAGZ,OAAO2gD,IAGflhD,EAAEkzB,GAAKsO,EAAKviC,UACZe,EAAEkjD,OAAS,SAAUpmC,GAEjB,IADA,IAAIomC,EAAS,GACJ7lD,EAAI,EAAGA,EAAIyf,EAAIvc,OAAQlD,KACI,IAA5B6lD,EAAOv/C,QAAQmZ,EAAIzf,KAAY6lD,EAAOz2C,KAAKqQ,EAAIzf,IAEvD,OAAO6lD,GAGJljD,EAnpBC,GA0pBRqjD,EAAmB,CAAC,SAAU,QAAS,QAClChmD,EAAI,EAAGA,EAAIgmD,EAAiB9iD,OAAQlD,IACxCoC,OAAO4jD,EAAiBhmD,KAC3BimD,EAAiB7jD,OAAO4jD,EAAiBhmD,KAgB3C,SAASimD,EAAiBC,GACtBA,EAAIrwB,GAAG5sB,OAAS,SAAU2yB,GACtB,IAAIuqB,EAKJ,OAJAD,EAAIjkD,MAAMkN,MAAK,WACX,IAAIpN,EAAI,IAAI+Q,EAAO7Q,KAAM25B,GACpBuqB,IAAeA,EAAgBpkD,MAEjCokD,IAjBd7D,OADmB,IAATne,EACD/hC,OAAO+hC,MAAQ/hC,OAAOoiC,OAASpiC,OAAOmzB,OAGtC4O,KAmBA,kBAAmBme,EAAOzsB,KAC5BysB,EAAOzsB,GAAG+R,cAAgB,SAAUtV,GAChC,IACItyB,EADAqyB,EAAS,CAAC,sBAAuB,gBAAiB,iBAAkB,kBAAmB,mBACjFwxB,EAAM5hD,KAChB,SAASqiD,EAAaniD,GAElB,GAAIA,EAAEuQ,SAAWzQ,KAEjB,IADAqwB,EAASnyB,KAAK8B,KAAME,GACfnC,EAAI,EAAGA,EAAIqyB,EAAOnvB,OAAQlD,IAC3B6jD,EAAIruB,IAAInD,EAAOryB,GAAIskD,GAG3B,GAAIhyB,EACA,IAAKtyB,EAAI,EAAGA,EAAIqyB,EAAOnvB,OAAQlD,IAC3B6jD,EAAIr1C,GAAG6jB,EAAOryB,GAAIskD,GAG1B,OAAOriD,OAGT,cAAeqgD,EAAOzsB,KACxBysB,EAAOzsB,GAAG4V,UAAY,SAAUA,GAC5B,IAAK,IAAIzrC,EAAI,EAAGA,EAAIiC,KAAKiB,OAAQlD,IAAK,CAClC,IAAIijD,EAAUhhD,KAAKjC,GAAG4c,MACtBqmC,EAAQpP,gBAAkBoP,EAAQjP,YAAciP,EAAQhP,YAAcgP,EAAQnP,aAAemP,EAAQlP,WAAakP,EAAQxX,UAAYA,EAE1I,OAAOxpC,OAGT,eAAgBqgD,EAAOzsB,KACzBysB,EAAOzsB,GAAG6V,WAAa,SAAUxY,GACL,iBAAbA,IACPA,GAAsB,MAE1B,IAAK,IAAIlzB,EAAI,EAAGA,EAAIiC,KAAKiB,OAAQlD,IAAK,CAClC,IAAIijD,EAAUhhD,KAAKjC,GAAG4c,MACtBqmC,EAAQC,yBAA2BD,EAAQE,qBAAuBF,EAAQG,qBAAuBH,EAAQI,sBAAwBJ,EAAQK,oBAAsBL,EAAQM,mBAAqBrwB,EAEhM,OAAOjxB,OAGT,eAAgBqgD,EAAOzsB,KACzBysB,EAAOzsB,GAAGwC,WAAa,SAAUksB,GAC7B,OAAItiD,KAAKiB,OAAS,EACVqhD,EACOtiD,KAAK,GAAGwa,YAAcwP,WAAWhqB,KAAKoH,IAAI,iBAAmB4iB,WAAWhqB,KAAKoH,IAAI,gBAEjFpH,KAAK,GAAGwa,YAEX,QAMxBra,OAAO0Q,OAASA,EA1sKpB,GAktKI/S,EAAOD,QAAUsC,OAAO0Q,Q,wwEC3rK5B/S,EAAOD,QAAU,CACbsmD,UAhCJ,SAAmB7lD,EAAMU,EAAO2M,GAC5B,IAAIy4C,EAAY,GAAAr8C,OAAMzJ,EAAI,KAAAyJ,OAAIs8C,mBAAmBrlD,IAE7C2M,EAAQ24C,OAAMF,GAAY,UAAAr8C,OAAc4D,EAAQ24C,OAChD34C,EAAQ44C,SAAQH,GAAY,YAAAr8C,OAAgB4D,EAAQ44C,SACpD54C,EAAQ64C,SAAQJ,GAAY,YAC5Bz4C,EAAQ84C,WAAUL,GAAY,cAAAr8C,OAAkB4D,EAAQ84C,WAE5D93C,SAAS+3C,OAASN,GAyBlBO,UAjBJ,SAAmBrmD,GACf,IAC0BiyB,EADiBC,E,goBAAAjU,CAA3B5P,SAAS+3C,OAAO78C,MAAM,MACZ,IAA1B,IAAA2oB,EAAA1wB,MAAAywB,EAAAC,EAAAhxB,KAAAsd,MAA4B,CAAC,IACa8nC,EAAAC,EAD3Bt0B,EAAAvxB,MACiB6I,MAAM,KAAI,GAA/BvI,EAAGslD,EAAA,GAAE5lD,EAAK4lD,EAAA,GACjB,GAAItlD,EAAI4Y,SAAW5Z,EACf,OAAOwmD,mBAAmB9lD,IAEjC,MAAAqR,GAAAmgB,EAAAtwB,EAAAmQ,GAAA,QAAAmgB,EAAAxT,IACD,OAAO,MAUP+nC,aAPJ,SAAsBzmD,GAAqB,IAAfqN,EAAOgd,UAAA1nB,OAAA,QAAA4sB,IAAAlF,UAAA,GAAAA,UAAA,GAAG,GAClC3oB,KAAKmkD,UAAU7lD,EAAM,GAAE0mD,IAAA,GAAOr5C,GAAO,IAAEs5C,SAAU","file":"default/js/productDetail.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 285);\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","module.exports = {\n setTabNextFocus: function (focusParams) {\n var KEYCODE_TAB = 9;\n var isTabPressed = (focusParams.event.key === 'Tab' || focusParams.event.keyCode === KEYCODE_TAB);\n\n if (!isTabPressed) {\n return;\n }\n\n var firstFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.firstElementSelector);\n var lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.lastElementSelector);\n\n if ($(focusParams.containerSelector + ' ' + focusParams.lastElementSelector).is(':disabled')) {\n lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.nextToLastElementSelector);\n if ($('.product-quickview.product-set').length > 0) {\n var linkElements = $(focusParams.containerSelector + ' a#fa-link.share-icons');\n lastFocusableEl = linkElements[linkElements.length - 1];\n }\n }\n\n if (focusParams.event.shiftKey) /* shift + tab */ {\n if ($(':focus').is(firstFocusableEl)) {\n lastFocusableEl.focus();\n focusParams.event.preventDefault();\n }\n } else /* tab */ {\n if ($(':focus').is(lastFocusableEl)) { // eslint-disable-line\n firstFocusableEl.focus();\n focusParams.event.preventDefault();\n }\n }\n }\n};\n","var focusHelper = require('../components/focus');\nvar cookieHelpers = require('../helpers/cookieHelpers');\n\n/**\n * Retrieves the relevant pid value\n * @param {jquery} $el - DOM container for a given add to cart button\n * @return {string} - value to be used when adding product to cart\n */\nfunction getPidValue($el) {\n var pid;\n\n if ($('#quickViewModal').hasClass('show') && !$('.product-set').length) {\n pid = $($el).closest('.modal-content').find('.product-quickview').data('pid');\n } else if ($('.product-set-detail').length || $('.product-set').length) {\n pid = $($el).closest('.product-detail').find('.product-id').text();\n } else if ($('.pdp-bundle-selector .bundle-selector').find('.selected')) {\n pid = $('.pdp-bundle-selector .bundle-selector').find('.selected').attr('data-custom-pid');\n } else {\n pid = $('.product-detail:not(\".bundle-item\")').data('pid');\n }\n\n return pid;\n}\n\n/**\n * Retrieve contextual quantity selector\n * @param {jquery} $el - DOM container for the relevant quantity\n * @return {jquery} - quantity selector DOM container\n */\nfunction getQuantitySelector($el) {\n return $el.closest('.product-detail').find('.pdp-quantity input.quantity');\n}\n\n/**\n * Retrieves the value associated with the Quantity pull-down menu\n * @param {jquery} $el - DOM container for the relevant quantity\n * @return {string} - value found in the quantity input\n */\nfunction getQuantitySelected($el) {\n return getQuantitySelector($el).val();\n}\n\n/**\n * Process the attribute values for an attribute that has image swatches\n *\n * @param {Object} attr - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {Object[]} attr.values - Array of attribute value objects\n * @param {string} attr.values.value - Attribute coded value\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\n * selected. If there is no variant that corresponds to a specific combination of attribute\n * values, an attribute may be disabled in the Product Detail Page\n * @param {jQuery} $productContainer - DOM container for a given product\n * @param {Object} msgs - object containing resource messages\n */\nfunction processSwatchValues(attr, $productContainer, msgs) {\n attr.values.forEach(function (attrValue) {\n var $attrValue = $productContainer.find('[data-attr=\"' + attr.id + '\"] [data-attr-value=\"' +\n attrValue.value + '\"]');\n var $swatchButton = $attrValue.parent();\n\n if (attrValue.selected) {\n $attrValue.addClass('selected');\n $attrValue.siblings('.selected-assistive-text').text(msgs.assistiveSelectedText);\n } else {\n $attrValue.removeClass('selected');\n $attrValue.siblings('.selected-assistive-text').empty();\n }\n\n if (attrValue.url) {\n $swatchButton.attr('data-url', attrValue.url);\n } else {\n $swatchButton.removeAttr('data-url');\n }\n\n // Disable if not selectable\n $attrValue.removeClass('selectable unselectable');\n\n $attrValue.addClass(attrValue.selectable ? 'selectable' : 'unselectable');\n });\n}\n\n/**\n * Process attribute values associated with an attribute that does not have image swatches\n *\n * @param {Object} attr - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {Object[]} attr.values - Array of attribute value objects\n * @param {string} attr.values.value - Attribute coded value\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\n * selected. If there is no variant that corresponds to a specific combination of attribute\n * values, an attribute may be disabled in the Product Detail Page\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction processNonSwatchValues(attr, $productContainer) {\n var $attr = '[data-attr=\"' + attr.id + '\"]';\n var $defaultOption = $productContainer.find($attr + ' .select-' + attr.id + ' option:first');\n $defaultOption.attr('value', attr.resetUrl);\n\n attr.values.forEach(function (attrValue) {\n var $attrValue = $productContainer\n .find($attr + ' [data-attr-value=\"' + attrValue.value + '\"]');\n $attrValue.attr('data-url', attrValue.url)\n .removeAttr('disabled');\n\n if (!attrValue.selectable) {\n $attrValue.attr('disabled', true);\n }\n });\n}\n\n/**\n * Routes the handling of attribute processing depending on whether the attribute has image\n * swatches or not\n *\n * @param {Object} attrs - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {jQuery} $productContainer - DOM element for a given product\n * @param {Object} msgs - object containing resource messages\n */\nfunction updateAttrs(attrs, $productContainer, msgs) {\n // Currently, the only attribute type that has image swatches is Color.\n var attrsWithSwatches = ['color'];\n\n attrs.forEach(function (attr) {\n if (attrsWithSwatches.indexOf(attr.id) > -1) {\n processSwatchValues(attr, $productContainer, msgs);\n } else {\n processNonSwatchValues(attr, $productContainer);\n }\n });\n}\n\n/**\n * Updates the availability status in the Product Detail Page\n *\n * @param {Object} response - Ajax response object after an\n * attribute value has been [de]selected\n * @param {jQuery} $productContainer - DOM element for a given product\n */\nfunction updateAvailability(response, $productContainer) {\n var availabilityValue = '';\n var availabilityMessages = response.product.availability.messages;\n if (!response.product.readyToOrder) {\n availabilityValue = '
  • ' + response.resources.info_selectforstock + '
  • ';\n } else {\n availabilityMessages.forEach(function (message) {\n availabilityValue += '
  • ' + message + '
  • ';\n });\n }\n\n // Update max value\n if (response.product.availability.isPerpetual) {\n $('.pdp-quantity input.quantity').removeAttr('max');\n } else {\n $('.pdp-quantity input.quantity').attr('max', response.product.availability.stockLevel);\n }\n\n // Variant has no stock\n if (!response.product.readyToOrder) {\n $productContainer.find('.pdp-out-of-stock').show();\n } else {\n $productContainer.find('.pdp-out-of-stock').hide();\n }\n\n // Variant has less stock than qty input\n var $input = $('.number-input-input-wrapper').find('input.quantity');\n var val = parseInt($input.val(), 10);\n var maxQty = parseInt($input.attr('max'), 10);\n\n $('.pdp-out-of-stock .alert-text').html(response.product.availability.stockLevelMessage);\n $('.pdp-out-of-stock .alert-text span').html(response.product.productName);\n $('.pdp-out-of-stock').hide();\n if (!(val <= maxQty || isNaN(maxQty))) {\n $('.pdp-out-of-stock').show();\n }\n\n $($productContainer).trigger('product:updateAvailability', {\n product: response.product,\n $productContainer: $productContainer,\n message: availabilityValue,\n resources: response.resources\n });\n}\n\n/**\n * Generates html for product attributes section\n *\n * @param {array} attributes - list of attributes\n * @return {string} - Compiled HTML\n */\nfunction getAttributesHtml(attributes) {\n if (!attributes) {\n return '';\n }\n\n var html = '';\n\n attributes.forEach(function (attributeGroup) {\n if (attributeGroup.ID === 'mainAttributes') {\n attributeGroup.attributes.forEach(function (attribute) {\n html += '
    ' + attribute.label + ': '\n + attribute.value + '
    ';\n });\n }\n });\n\n return html;\n}\n\n/**\n * @typedef UpdatedOptionValue\n * @type Object\n * @property {string} id - Option value ID for look up\n * @property {string} url - Updated option value selection URL\n */\n\n/**\n * @typedef OptionSelectionResponse\n * @type Object\n * @property {string} priceHtml - Updated price HTML code\n * @property {Object} options - Updated Options\n * @property {string} options.id - Option ID\n * @property {UpdatedOptionValue[]} options.values - Option values\n */\n\n/**\n * Updates DOM using post-option selection Ajax response\n *\n * @param {OptionSelectionResponse} optionsHtml - Ajax response optionsHtml from selecting a product option\n * @param {jQuery} $productContainer - DOM element for current product\n */\nfunction updateOptions(optionsHtml, $productContainer) {\n // Update options\n $productContainer.find('.product-options').empty().html(optionsHtml);\n}\n\n/**\n * Dynamically creates Bootstrap carousel from response containing images\n * @param {Object[]} imgs - Array of large product images,along with related information\n * @param {string} backgroundImage - URL of the background image\n * @param {jQuery} $productContainer - DOM element for a given product\n */\nfunction createCarousel(imgs, $productContainer) {\n if (!$productContainer.hasClass('product-quickview')) {\n var smallPDPCarousel = $productContainer.find('.pdp-main-swiper-small');\n var smallPDPCarouselSwiper = smallPDPCarousel[0].swiper;\n var gallery = $productContainer.find('.gallery');\n var imageBlockThumbnails = $productContainer.find('.image-block__thumbnails');\n var imageBlockThumbnailsBackgroundColor = imageBlockThumbnails.find('.image-block__thumbnail').css('background-color');\n var imageBlock = $productContainer.find('.image-block__image');\n var smallPDPCarouselPagination = $productContainer.find('.pdp-main-swiper-small-pagination');\n\n smallPDPCarouselSwiper.removeAllSlides();\n gallery.empty();\n imageBlockThumbnails.empty();\n imageBlock.empty();\n\n for (var i = 0; i < imgs.length; i++) {\n const isFullBleedImageClass = imgs[i].fullBleed ? 'full-bleed' : '';\n const imageURL = imgs[i].fullBleed ? imgs[i].fullBleedUrl : imgs[i].url;\n\n smallPDPCarouselSwiper.appendSlide('');\n gallery.append(``);\n imageBlockThumbnails.append(`\n
  • \n \n \"${imgs[i].alt}\n \n
  • \n `);\n\n if (i == 0) {\n imageBlock.append(`\n \n \"${imgs[i].alt}\"\n \n `);\n }\n }\n\n smallPDPCarousel.find('.carousel-image').first().addClass('carousel-selected');\n smallPDPCarousel.parent().find('.active-slide-index').text(1);\n smallPDPCarouselSwiper.slideTo(1);\n smallPDPCarousel.find('.carousel-image').removeClass('hidden');\n smallPDPCarouselPagination.find('.totla-slides').text(imgs.length);\n } else {\n var carousel = $productContainer.find('.swiper-wrapper');\n $(carousel).empty();\n\n for (var j = 0; j < imgs.length; j++) {\n if (i == 0) {\n $('.main-image').attr('src', imgs[j].url);\n }\n $('
    \"'
    ').appendTo($(carousel));\n }\n }\n}\n\n/**\n * Parses JSON from Ajax call made whenever an attribute value is [de]selected\n * @param {Object} response - response from Ajax call\n * @param {Object} response.product - Product object\n * @param {string} response.product.id - Product ID\n * @param {Object[]} response.product.variationAttributes - Product attributes\n * @param {Object[]} response.product.images - Product images\n * @param {boolean} response.product.hasRequiredAttrsSelected - Flag as to whether all required\n * attributes have been selected. Used partially to\n * determine whether the Add to Cart button can be enabled\n * @param {jQuery} $productContainer - DOM element for a given product.\n */\nfunction handleVariantResponse(response, $productContainer) {\n var isChoiceOfBonusProducts =\n $productContainer.parents('.choose-bonus-product-dialog').length > 0;\n var isVaraint;\n if (response.product.variationAttributes) {\n updateAttrs(response.product.variationAttributes, $productContainer, response.resources);\n isVaraint = response.product.productType === 'variant';\n if (isChoiceOfBonusProducts && isVaraint) {\n $productContainer.parent('.bonus-product-item')\n .data('pid', response.product.id);\n\n $productContainer.parent('.bonus-product-item')\n .data('ready-to-order', response.product.readyToOrder);\n }\n }\n\n if ($productContainer.hasClass('product-quickview')) {\n if (response.product.customBundleTemplate) {\n $productContainer.find('.pdp-bundle-selector').html(response.product.customBundleTemplate);\n }\n } else {\n if (response.product.customPDPBundleTemplate) {\n $productContainer.find('.pdp-bundle-selector').html(response.product.customPDPBundleTemplate);\n }\n\n const normalPriceFormatted = response.product.price.SORprice ? response.product.price.list.formatted : response.product.price.sales.formatted;\n const salesPriceFormatted = response.product.price.SORprice ? response.product.price.sales.formatted : '';\n\n $('.pdp-subscription-selection-one-time-price').text(normalPriceFormatted);\n $('.pdp-subscription-selection-save-price .list').text(normalPriceFormatted);\n $('.pdp-subscription-selection-save-price .sales').text(salesPriceFormatted);\n }\n\n // Update primary images (without image composition)\n var primaryImageUrls = response.product.images.large;\n for (var i = 0; i < primaryImageUrls.length; i++) {\n if (primaryImageUrls[i].url.includes('composition')) {\n primaryImageUrls.splice(i, 1);\n }\n }\n createCarousel(primaryImageUrls, $productContainer);\n\n if ($('.pdp-food-image').length > 0 && response.product.foodImage) {\n $('.pdp-food-image').css('background-image', 'url(' + response.product.foodImage.url + ')');\n }\n\n // Update pricing\n if (!isChoiceOfBonusProducts) {\n var $priceSelector = $('.prices .price', $productContainer).length\n ? $('.prices .price', $productContainer)\n : $('.price .price');\n $priceSelector.replaceWith(response.product.renderedPriceQuantity);\n }\n\n // Update promotions\n $productContainer.find('.promotions').empty().html(response.product.promotionsHtml);\n\n updateAvailability(response, $productContainer);\n\n if (isChoiceOfBonusProducts) {\n var $selectButton = $productContainer.find('.select-bonus-product');\n $selectButton.trigger('bonusproduct:updateSelectButton', {\n product: response.product, $productContainer: $productContainer\n });\n } else {\n // Enable \"Add to Cart\" button if all required attributes have been selected\n $('button.add-to-cart, button.add-to-cart-global, button.update-cart-product-global').trigger('product:updateAddToCart', {\n product: response.product, $productContainer: $productContainer\n }).trigger('product:statusUpdate', response.product);\n }\n\n // Update attributes\n $productContainer.find('.main-attributes').empty()\n .html(getAttributesHtml(response.product.attributes));\n\n // update qty url\n if (response.product.quantityURL) {\n $('.pdp-quantity input.quantity').attr('data-qtyurl', response.product.quantityURL);\n }\n\n $('.add-to-cart').attr('data-pid', response.product.id);\n $('.product-detail').attr('data-pid', response.product.id);\n}\n\n/**\n * @typespec UpdatedQuantity\n * @type Object\n * @property {boolean} selected - Whether the quantity has been selected\n * @property {string} value - The number of products to purchase\n * @property {string} url - Compiled URL that specifies variation attributes, product ID, options,\n * etc.\n */\n\n/**\n * Updates the quantity DOM elements post Ajax call\n * @param {UpdatedQuantity[]} quantities -\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction updateQuantities(quantities, $productContainer) {\n if ($productContainer.parent('.bonus-product-item').length <= 0) {\n var optionsHtml = quantities.map(function (quantity) {\n var selected = quantity.selected ? ' selected ' : '';\n return '';\n }).join('');\n getQuantitySelector($productContainer).empty().html(optionsHtml);\n }\n}\n\n/**\n * updates the product view when a product attribute is selected or deselected or when\n * changing quantity\n * @param {string} selectedValueUrl - the Url for the selected variation value\n * @param {jQuery} $productContainer - DOM element for current product\n */\nfunction attributeSelect(selectedValueUrl, $productContainer) {\n if (selectedValueUrl) {\n $('body').trigger('product:beforeAttributeSelect',\n { url: selectedValueUrl, container: $productContainer });\n\n var SORprice = $productContainer.find('.OsfSorRefillProductYes').is(':checked');\n\n if (!$productContainer.hasClass('product-quickview')) {\n SORprice = true;\n }\n\n $.ajax({\n url: selectedValueUrl + '&SORprice=' + SORprice,\n method: 'GET',\n success: function (data) {\n handleVariantResponse(data, $productContainer);\n updateOptions(data.product.optionsHtml, $productContainer);\n updateQuantities(data.product.quantities, $productContainer);\n $('body').trigger('product:afterAttributeSelect',\n { data: data, container: $productContainer });\n if (data.product.discountPercentage) {\n $('body .pdp-price .price-discount').html(data.product.discountPercentage + '%');\n }\n\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n }\n}\n\n/**\n * Retrieves url to use when adding a product to the cart\n *\n * @return {string} - The provided URL to use when adding a product to the cart\n */\nfunction getAddToCartUrl() {\n return $('.add-to-cart-url').val();\n}\n\n/**\n * Parses the html for a modal window\n * @param {string} html - representing the body and footer of the modal window\n *\n * @return {Object} - Object with properties body and footer.\n */\nfunction parseHtml(html) {\n var $html = $('
    ').append($.parseHTML(html));\n\n var body = $html.find('.choice-of-bonus-product');\n var footer = $html.find('.modal-footer').children();\n\n return { body: body, footer: footer };\n}\n\n/**\n * Retrieves url to use when adding a product to the cart\n *\n * @param {Object} data - data object used to fill in dynamic portions of the html\n */\nfunction chooseBonusProducts(data) {\n $('.modal-body').spinner().start();\n\n if ($('#chooseBonusProductModal').length !== 0) {\n $('#chooseBonusProductModal').remove();\n }\n var bonusUrl;\n if (data.bonusChoiceRuleBased) {\n bonusUrl = data.showProductsUrlRuleBased;\n } else {\n bonusUrl = data.showProductsUrlListBased;\n }\n\n var htmlString = ''\n + '
    '\n + ''\n + '
    '\n + ''\n + '
    '\n + '
    '\n + ' ' + data.labels.selectprods + ''\n + ' '\n + '
    '\n + '
    '\n + '
    '\n + '
    '\n + '
    '\n + '
    ';\n $('body').append(htmlString);\n $('.modal-body').spinner().start();\n\n $.ajax({\n url: bonusUrl,\n method: 'GET',\n dataType: 'json',\n success: function (response) {\n var parsedHtml = parseHtml(response.renderedTemplate);\n $('#chooseBonusProductModal .modal-body').empty();\n $('#chooseBonusProductModal .enter-message').text(response.enterDialogMessage);\n $('#chooseBonusProductModal .modal-header .close .sr-only').text(response.closeButtonText);\n $('#chooseBonusProductModal .modal-body').html(parsedHtml.body);\n $('#chooseBonusProductModal .modal-footer').html(parsedHtml.footer);\n $('#chooseBonusProductModal').modal('show');\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n}\n\n/**\n * Updates the Mini-Cart quantity value after the customer has pressed the \"Add to Cart\" button\n * @param {string} response - ajax response from clicking the add to cart button\n */\nfunction handlePostCartAdd(response) {\n $('.minicart').trigger('count:update', response);\n var messageType = response.error ? 'alert-danger' : 'alert-success';\n // show add to cart toast\n if (response.newBonusDiscountLineItem\n && Object.keys(response.newBonusDiscountLineItem).length !== 0) {\n chooseBonusProducts(response.newBonusDiscountLineItem);\n } else if (response.flashMessage) {\n $('body').append(response.flashMessage);\n\n setTimeout(function () {\n $('.flash-messages').remove();\n }, 3000);\n } else {\n if ($('.add-to-cart-messages').length === 0) {\n $('body').append(\n '
    '\n );\n }\n\n $('.add-to-cart-messages').append(\n '
    '\n + response.message\n + '
    '\n );\n\n setTimeout(function () {\n $('.add-to-basket-alert').remove();\n }, 5000);\n }\n\n if ($('.page').attr('data-action') == 'Cart-Show') {\n setTimeout(function () {\n location.reload();\n }, 400);\n }\n}\n\n/**\n * Retrieves the bundle product item ID's for the Controller to replace bundle master product\n * items with their selected variants\n *\n * @return {string[]} - List of selected bundle product item ID's\n */\nfunction getChildProducts() {\n var childProducts = [];\n $('.bundle-item').each(function () {\n childProducts.push({\n pid: $(this).find('.product-id').text(),\n quantity: parseInt($(this).find('label.quantity').data('quantity'), 10)\n });\n });\n\n return childProducts.length ? JSON.stringify(childProducts) : [];\n}\n\n/**\n * Retrieve product options\n *\n * @param {jQuery} $productContainer - DOM element for current product\n * @return {string} - Product options and their selected values\n */\nfunction getOptions($productContainer) {\n var options = $productContainer\n .find('.product-option')\n .map(function () {\n var $elOption = $(this).find('.options-select');\n var urlValue = $elOption.val();\n var selectedValueId = $elOption.find('option[value=\"' + urlValue + '\"]')\n .data('value-id');\n return {\n optionId: $(this).data('option-id'),\n selectedValueId: selectedValueId\n };\n }).toArray();\n\n return JSON.stringify(options);\n}\n\n/**\n * Makes a call to the server to report the event of adding an item to the cart\n *\n * @param {string | boolean} url - a string representing the end point to hit so that the event can be recorded, or false\n */\nfunction miniCartReportingUrl(url) {\n if (url) {\n $.ajax({\n url: url,\n method: 'GET',\n success: function () {\n // reporting urls hit on the server\n },\n error: function () {\n // no reporting urls hit on the server\n }\n });\n }\n}\n\nfunction applySORDiscount(data) {\n var product = data.product ? false : true;\n var url;\n\n if (product) {\n url = data.closest('.subscription-wrapper').siblings('.pdp-cart-and-price').find('input.quantity').attr('data-qtyurl');\n url = url + '&quantity=' + getQuantitySelected(data) + '&SORprice=' + data.closest('.OsfSorRefillProductYes').is(':checked');\n }\n\n if (data && !product) {\n return;\n }\n\n $.spinner().start();\n $.ajax({\n url: url,\n method: 'GET',\n success: function (response) {\n const quickView = $('.product-quickview');\n if (quickView.length > 0 && quickView.is(':visible')) {\n if (response.product.customBundleTemplate) {\n data.closest('.subscription-wrapper').siblings('.js-bundle-selector').find('.pdp-bundle-selector').html(response.product.customBundleTemplate);\n }\n } else {\n if (response.product.customPDPBundleTemplate) {\n data.closest('.subscription-wrapper').siblings('.js-bundle-selector').find('.pdp-bundle-selector').html(response.product.customPDPBundleTemplate);\n }\n }\n $.spinner().stop();\n },\n error: function (err) {\n console.log(err);\n $.spinner().stop();\n }\n });\n}\n\nfunction quickViewSwiper() {\n var Swiper = require('swiper');\n new Swiper('.pdp-swiper-large', {\n zoom: false,\n slidesPerView: 5,\n nextButton: '.swiper-button-next',\n prevButton: '.swiper-button-prev',\n });\n new Swiper('.pdp-swiper-small', {\n zoom: false,\n pagination: '.swiper-pagination',\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerGroup: 1,\n centeredSlides: true,\n paginationClickable: true,\n keyboardControl: false,\n mousewheelControl: false,\n mousewheelForceToAxis: true,\n grabCursor: true\n });\n}\n\nmodule.exports = {\n attributeSelect: attributeSelect,\n methods: {\n editBonusProducts: function (data) {\n chooseBonusProducts(data);\n }\n },\n\n focusChooseBonusProductModal: function () {\n $('body').on('shown.bs.modal', '#chooseBonusProductModal', function () {\n $('#chooseBonusProductModal').siblings().attr('aria-hidden', 'true');\n $('#chooseBonusProductModal .close').focus();\n });\n },\n\n onClosingChooseBonusProductModal: function () {\n $('body').on('hidden.bs.modal', '#chooseBonusProductModal', function () {\n $('#chooseBonusProductModal').siblings().attr('aria-hidden', 'false');\n });\n },\n\n trapChooseBonusProductModalFocus: function () {\n $('body').on('keydown', '#chooseBonusProductModal', function (e) {\n var focusParams = {\n event: e,\n containerSelector: '#chooseBonusProductModal',\n firstElementSelector: '.close',\n lastElementSelector: '.add-bonus-products'\n };\n focusHelper.setTabNextFocus(focusParams);\n });\n },\n\n colorAttribute: function () {\n $(document).on('click', '[data-attr=\"size\"]', function (e) {\n e.preventDefault();\n\n if ($(this).hasClass('disabled')) {\n return;\n }\n var $productContainer = $(this).closest('.set-item');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.product-detail');\n }\n\n attributeSelect($(this).attr('data-url'), $productContainer);\n });\n },\n\n selectAttribute: function () {\n $(document).on('change', 'select[class*=\"select-\"], .options-select', function (e) {\n e.preventDefault();\n\n var $productContainer = $(this).closest('.set-item');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.product-detail');\n }\n attributeSelect(e.currentTarget.value, $productContainer);\n });\n },\n\n availability: function () {\n $(document).on('change', '.quantity-select', function (e) {\n e.preventDefault();\n\n var $productContainer = $(this).closest('.product-detail');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.modal-content').find('.product-quickview');\n }\n\n if ($('.bundle-items', $productContainer).length === 0) {\n attributeSelect($(e.currentTarget).find('option:selected').data('url'),\n $productContainer);\n }\n });\n },\n\n addToCart: function () {\n $(document).on('click', 'button.add-to-cart, button.add-to-cart-global', function () {\n var addToCartUrl;\n var pid;\n var pidsObj;\n var setPids;\n\n $('body').trigger('product:beforeAddToCart', this);\n\n if ($('.set-items').length && $(this).hasClass('add-to-cart-global')) {\n setPids = [];\n\n $('.product-detail').each(function () {\n if (!$(this).hasClass('product-set-detail')) {\n setPids.push({\n pid: $(this).find('.product-id').text(),\n qty: $(this).find('.quantity-select').val(),\n options: getOptions($(this))\n });\n }\n });\n pidsObj = JSON.stringify(setPids);\n }\n\n pid = getPidValue($(this));\n\n var $productContainer = $(this).closest('.product-detail');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.quick-view-dialog').find('.product-detail');\n }\n\n addToCartUrl = getAddToCartUrl();\n var isSubscription = (window.sf_isWizardSubSession && window.sf_isWizardSubSession === 'true') ? true : $('[name=\"hasSmartOrderRefill\"]').filter(':checked').val();\n\n var form = {\n pid: pid,\n pidsObj: pidsObj,\n childProducts: getChildProducts(),\n quantity: getQuantitySelected($(this)),\n isSubscription: isSubscription\n };\n\n if (!$('.bundle-item').length) {\n form.options = getOptions($productContainer);\n }\n\n $(this).trigger('updateAddToCartFormData', form);\n if (addToCartUrl) {\n $.ajax({\n url: addToCartUrl,\n method: 'POST',\n data: form,\n success: function (data) {\n handlePostCartAdd(data);\n $('body').trigger('product:afterAddToCart', data);\n $.spinner().stop();\n miniCartReportingUrl(data.reportingURL);\n },\n error: function () {\n $.spinner().stop();\n }\n });\n }\n });\n },\n selectBonusProduct: function () {\n $(document).on('click', '.select-bonus-product', function () {\n var $choiceOfBonusProduct = $(this).parents('.choice-of-bonus-product');\n var pid = $(this).data('pid');\n var maxPids = $('.choose-bonus-product-dialog').data('total-qty');\n var image = $choiceOfBonusProduct.find('.carousel-image.carousel-selected').attr('src') || $choiceOfBonusProduct.find('.carousel-image.carousel-selected').attr('data-src');\n var submittedQty = parseInt($choiceOfBonusProduct.find('input.quantity').val(), 10);\n var weight = $choiceOfBonusProduct.find('.bundle-selector-weight').text();\n var removeProductIcon = $choiceOfBonusProduct.parents().siblings('.modal-footer').find('.selected-bonus-products').attr('data-remove-product-icon');\n var totalQty = 0;\n $.each($('#chooseBonusProductModal .selected-bonus-products .selected-pid'), function () {\n totalQty += $(this).data('qty');\n });\n totalQty += submittedQty;\n var optionID = $choiceOfBonusProduct.find('.product-option').data('option-id');\n var valueId = $choiceOfBonusProduct.find('.options-select option:selected').data('valueId');\n var warningImg = $('.selected-items-msg').attr('data-warning-img');\n var successImg = $('.selected-items-msg').attr('data-success-img');\n if (totalQty <= maxPids) {\n $('.selected-bonus-products, .selected-items-msg').removeClass('d-none');\n var selectedBonusProductHtml = ''\n + '
    '\n + '
    '\n + '
    '\n + ''\n + '
    '\n + '
    '\n + '
    '\n + '
    '\n + $choiceOfBonusProduct.find('.name').html()\n + '
    '\n + '
    ' + submittedQty + ' x ' + weight + '
    '\n + '
    '\n + '
    '\n + '
    '\n + '\"\"'\n + '
    '\n + '
    ';\n $('#chooseBonusProductModal .selected-bonus-products').append(selectedBonusProductHtml);\n $('.pre-cart-products').html(totalQty);\n $('.selected-msg').removeClass('alert-danger').addClass('alert-success');\n $('.warning-icon-wrappper').empty().append('\"\"');\n } else {\n $('.selected-msg').addClass('alert-danger').removeClass('alert-success');\n\n if ($('.warning-icon-wrappper').empty()) {\n $('.warning-icon-wrappper').append('\"\"');\n }\n }\n });\n },\n removeBonusProduct: function () {\n $(document).on('click', '.selected-pid .remove-bonus-product', function () {\n $(this).closest('.selected-pid.row').remove();\n var $selected = $('#chooseBonusProductModal .selected-bonus-products .selected-pid');\n var count = 0;\n if ($selected.length) {\n $selected.each(function () {\n count += parseInt($(this).closest('.selected-pid.row').data('qty'), 10);\n });\n }\n\n $('.pre-cart-products').html(count);\n $('.selected-bonus-products .bonus-summary').removeClass('alert-danger');\n\n if (count == 0) {\n $('.selected-bonus-products').addClass('d-none');\n }\n });\n },\n enableBonusProductSelection: function () {\n $('body').on('bonusproduct:updateSelectButton', function (e, response) {\n $('button.select-bonus-product', response.$productContainer).attr('disabled',\n (!response.product.readyToOrder || !response.product.available));\n var pid = response.product.id;\n $('button.select-bonus-product', response.$productContainer).data('pid', pid);\n });\n },\n showMoreBonusProducts: function () {\n $(document).on('click', '.show-more-bonus-products', function () {\n var url = $(this).data('url');\n $('.modal-content').spinner().start();\n $.ajax({\n url: url,\n method: 'GET',\n success: function (html) {\n var parsedHtml = parseHtml(html);\n $('.modal-body').append(parsedHtml.body);\n $('.show-more-bonus-products:first').remove();\n $('.modal-content').spinner().stop();\n },\n error: function () {\n $('.modal-content').spinner().stop();\n }\n });\n });\n },\n addBonusProductsToCart: function () {\n $(document).on('click', '.add-bonus-products', function () {\n var $readyToOrderBonusProducts = $('.choose-bonus-product-dialog .selected-pid');\n var queryString = '?pids=';\n var url = $('.choose-bonus-product-dialog').data('addtocarturl');\n var pidsObject = {\n bonusProducts: []\n };\n\n $.each($readyToOrderBonusProducts, function () {\n var qtyOption =\n parseInt($(this)\n .data('qty'), 10);\n\n var option = null;\n if (qtyOption > 0) {\n if ($(this).data('optionid') && $(this).data('option-selected-value')) {\n option = {};\n option.optionId = $(this).data('optionid');\n option.productId = $(this).data('pid');\n option.selectedValueId = $(this).data('option-selected-value');\n }\n pidsObject.bonusProducts.push({\n pid: $(this).data('pid'),\n qty: qtyOption,\n options: [option]\n });\n pidsObject.totalQty = parseInt($('.pre-cart-products').html(), 10);\n }\n });\n queryString += JSON.stringify(pidsObject);\n queryString = queryString + '&uuid=' + $('.choose-bonus-product-dialog').data('uuid');\n queryString = queryString + '&pliuuid=' + $('.choose-bonus-product-dialog').data('pliuuid');\n $.spinner().start();\n $.ajax({\n url: url + queryString,\n method: 'POST',\n success: function (data) {\n $.spinner().stop();\n if (data.error) {\n $('#chooseBonusProductModal').modal('hide');\n if ($('.add-to-cart-messages').length === 0) {\n $('body').append('
    ');\n }\n $('.add-to-cart-messages').append(\n '
    '\n + data.errorMessage + '
    '\n );\n setTimeout(function () {\n $('.add-to-basket-alert').remove();\n }, 3000);\n } else {\n $('.configure-bonus-product-attributes').html(data);\n $('.bonus-products-step2').removeClass('hidden-xl-down');\n $('#chooseBonusProductModal').modal('hide');\n\n if ($('.add-to-cart-messages').length === 0) {\n $('body').append('
    ');\n }\n $('.minicart-quantity').html(data.totalQty);\n $('.add-to-cart-messages').append(\n '
    '\n + data.msgSuccess + '
    '\n );\n setTimeout(function () {\n $('.add-to-basket-alert').remove();\n if ($('.cart-page').length) {\n location.reload();\n }\n }, 1500);\n }\n },\n error: function () {\n $.spinner().stop();\n }\n });\n });\n },\n updatePriceOnQuantity: function () {\n $(document).on('change', '.pdp-quantity input.quantity', function () {\n var $this = $(this);\n var $productContainer = $(this).closest('.product-detail');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.modal-content').find('.product-quickview');\n }\n\n var url = $(this).attr('data-qtyurl');\n var val = $(this).val();\n url = url + '&quantity=' + val + '&SORprice=' + $(this).closest('.pdp-cart-and-price').siblings('.js-bundle-selector').find('.OsfSorRefillProductYes').is(':checked');\n var $addToCartButton = $('.add-to-cart');\n $.spinner().start();\n $.ajax({\n url: url,\n method: 'GET',\n success: function (data) {\n var renderedHtml = $.parseHTML(data.product.renderedPriceQuantity);\n // Update price UI\n $this.closest('.quantity-wrapper').siblings('.pdp-cart-and-price').find('.pdp-price .price.row .col').html(renderedHtml);\n // Update discount badge\n if (data.product.discountPercentage) {\n $('body .pdp-price .price-discount').html(data.product.discountPercentage + '%');\n }\n\n updateAvailability(data, $productContainer);\n $('button.add-to-cart, button.add-to-cart-global, button.update-cart-product-global').trigger('product:updateAddToCart', {\n product: data.product, $productContainer: $productContainer\n }).trigger('product:statusUpdate', data.product);\n\n $addToCartButton.data('item-quantity', val);\n\n const quickView = $('.product-quickview');\n if (quickView.length > 0 && quickView.is(':visible')) {\n if (data.product.customBundleTemplate) {\n $this.closest('.subscription-wrapper').siblings('.js-bundle-selector').find('.pdp-bundle-selector').html(data.product.customBundleTemplate);\n }\n } else {\n if (data.product.customPDPBundleTemplate) {\n $this.closest('.subscription-wrapper').siblings('.js-bundle-selector').find('.pdp-bundle-selector').html(data.product.customPDPBundleTemplate);\n }\n }\n\n $.spinner().stop();\n },\n error: function (err) {\n console.log(err);\n $.spinner().stop();\n }\n });\n });\n },\n customAttributeSelection: function () {\n $(document).on('click', '.pdp-bundle-selector', function (e) {\n if ($(e.target).closest('.tab-bundle').hasClass('disabled')) {\n return;\n }\n var $productContainer = $(this).closest('.set-item');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.product-detail');\n }\n\n var url = $(this).find('.selected').attr('data-url');\n var pid = $(this).find('.selected').attr('data-custom-pid');\n var qty = $('.quantity').val();\n\n if (url && pid) {\n attributeSelect(url + '?pid=' + pid + '&quantity=' + qty, $productContainer);\n }\n\n });\n },\n handleDualMode: function () {\n if (window.sf_isWizardSubSession && window.sf_isWizardSubSession === 'true') {\n $('.pdp-subscription-selection-one-time-wrapper').hide();\n $('.pdp-subscription-selection-save-interval-wrapper').hide();\n }\n },\n\n getPidValue: getPidValue,\n getQuantitySelected: getQuantitySelected,\n miniCartReportingUrl: miniCartReportingUrl,\n applySORDiscount: applySORDiscount,\n quickViewSwiper: quickViewSwiper\n};\n","var base = require('./base');\nvar tabs = require('../components/tabs');\nvar subscription = require('../components/subscription');\nvar mainImage = require('../components/mainImage');\nvar largeSwiper = null;\nvar smallSwiper = null;\n\n/**\n * Enable/disable UI elements\n * @param {boolean} enableOrDisable - true or false\n */\nfunction updateAddToCartEnableDisableOtherElements(enableOrDisable) {\n $('button.add-to-cart-global').attr('disabled', enableOrDisable);\n}\n\nfunction toggleFeedingTextOverflow() {\n var box = $('.pdp-feeding .content-asset .pdp-feeding-text-main');\n if (box.hasClass('expanded'))\n box.removeClass('expanded');\n else\n box.addClass('expanded');\n}\n\nfunction toggleFeedingSeeMoreButton() {\n var button = $('.see-more-button');\n if (button.text() === 'See more') {\n button.text('See less');\n }\n else {\n button.text('See more');\n }\n}\n\nfunction handleProductIngredients(id) {\n $('.pdp-composition-info-wrapper').find('.dropdown-asset-content').each(function () {\n $(this).children('div').each(function () {\n if ($(this).get(0).id == id) {\n $(this).removeClass('d-none');\n } else {\n $(this).addClass('d-none');\n }\n });\n });\n}\n\n\n/**\n * Generates the modal window on the first call.\n *\n */\nfunction getModalHtmlElement() {\n if ($('#quickViewModal').length !== 0) {\n $('#quickViewModal').remove();\n }\n var htmlString = ''\n + '
    '\n + ''\n + '
    '\n + ''\n + '
    '\n + '
    '\n + '
    '\n + '
    '\n + '
    ';\n $('body').append(htmlString);\n}\n\n/**\n * replaces the content in the modal window on for the selected product variation.\n * @param {string} selectedValueUrl - url to be used to retrieve a new product model\n */\nfunction fillModalElement(selectedValueUrl) {\n $('.modal-body').spinner().start();\n $.ajax({\n url: selectedValueUrl,\n method: 'GET',\n dataType: 'json',\n success: function (data) {\n var parsedHtml = parseHtml(data.renderedTemplate);\n\n $('#quickViewModal .modal-body').empty();\n $('#quickViewModal .modal-body').html(parsedHtml.body);\n $('#quickViewModal .modal-footer').html(parsedHtml.footer);\n $('#quickViewModal .full-pdp-link').text(data.quickViewFullDetailMsg);\n $('#quickViewModal .full-pdp-link').attr('href', data.productUrl);\n $('#quickViewModal .size-chart').attr('href', data.productUrl);\n $('#quickViewModal .modal-header .close .sr-only').text(data.closeButtonText);\n $('#quickViewModal .enter-message').text(data.enterDialogMessage);\n $('#quickViewModal').modal('show');\n $('body').trigger('quickview:ready');\n $('#quickViewModal').find('input[name=hasSmartOrderRefill]').change();\n // Get the default interval option value from the checkbox data attribute\n var defaultIntervalOption = $('#quickViewModal').find('#OsfSorRefillProductYes').data('default-interval-option');\n $('#quickViewModal').find('button.btn-week.js-sor-interval-pdp').removeClass('active');\n $('#quickViewModal').find('button.btn-week.js-sor-interval-pdp[data-value=\"' + defaultIntervalOption + '\"]').addClass('active');\n\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n}\n\n/**\n * Parse HTML code in Ajax response\n *\n * @param {string} html - Rendered HTML from quickview template\n * @return {QuickViewHtml} - QuickView content components\n */\nfunction parseHtml(html) {\n var $html = $('
    ').append($.parseHTML(html));\n\n var body = $html.find('.product-quickview');\n var footer = $html.find('.modal-footer').children();\n\n return { body: body, footer: footer };\n}\n\n/**\n* Updates the Product Detail Page (PDP) floating carousel position based on scroll and accordion change\n* @param {boolean} accordionChange - indicates whether the change is due to accordion interaction\n* @returns {void}\n*/\nfunction updatePDPFloatingCarousel(accordionChange) {\n const $scrollingDiv = $('.desktop-scrolling-wrapper');\n const $column = $('.pdp-col-left');\n console.log($column.height());\n const finishScroll = $column.height() - $scrollingDiv.height();\n const initiateScroll = $('#maincontent').offset().top;\n const topDistance = $(window).scrollTop() - initiateScroll;\n\n if ($(window).scrollTop() >= initiateScroll && topDistance <= finishScroll) {\n $scrollingDiv.css('top', $(window).scrollTop() - initiateScroll);\n } else if (accordionChange && topDistance > finishScroll) {\n $scrollingDiv.css('top', finishScroll);\n }\n}\n\n/**\n* Manages the Swiper sliders for the product detail page\n* @returns {void}\n*/\nfunction swiperSliderManager() {\n var Swiper = require('swiper');\n largeSwiper = new Swiper('.pdp-main-swiper-large', {\n zoom: false,\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerGroup: 1,\n centeredSlides: true,\n keyboardControl: false,\n mousewheelControl: false,\n mousewheelForceToAxis: true,\n grabCursor: false,\n loop: true,\n nextButton: '.pdp-main-swiper-large-next',\n prevButton: '.pdp-main-swiper-large-prev',\n onSlideChangeEnd: function () {\n const activeSlide = $('.pdp-main-swiper-large').find('.swiper-slide-active');\n $('.active-slide-index').text(parseInt(activeSlide.attr('data-swiper-slide-index'), 10) + 1);\n $('.default-zoom-image').data('zoom-image', activeSlide.find('.carousel-image').attr('src'));\n }\n });\n smallSwiper = new Swiper('.pdp-main-swiper-small', {\n zoom: false,\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerGroup: 1,\n centeredSlides: true,\n keyboardControl: false,\n mousewheelControl: false,\n mousewheelForceToAxis: true,\n grabCursor: false,\n loop: true,\n nextButton: '.pdp-main-swiper-small-next',\n prevButton: '.pdp-main-swiper-small-prev',\n onSlideChangeEnd: function () {\n $('.active-slide-index').text(parseInt($('.pdp-main-swiper-small').find('.swiper-slide-active').attr('data-swiper-slide-index'), 10) + 1);\n }\n });\n var slideThreshold = 4;\n var swiperSlideCount = $('.pdp-swiper-recommendations .product').length;\n var isSwiperSlideCountOverThreshold = swiperSlideCount > slideThreshold;\n var slidesPerView = isSwiperSlideCountOverThreshold ? slideThreshold : swiperSlideCount;\n\n var recommendationsSwiper = new Swiper('.pdp-swiper-recommendations', {\n zoom: false,\n slidesPerView: slidesPerView,\n centeredSlides: false,\n keyboardControl: false,\n grabCursor: false,\n nextButton: '.pdp-recommendations-swiper-next',\n prevButton: '.pdp-recommendations-swiper-prev',\n loop: isSwiperSlideCountOverThreshold,\n onInit: function () {\n if (!isSwiperSlideCountOverThreshold) {\n $('.pdp-recommendations-swiper-prev').hide();\n $('.pdp-recommendations-swiper-next').hide();\n }\n },\n onAfterResize: function () {\n recommendationsSwiper.updateSlidesSize();\n recommendationsSwiper.updateSlidesOffset();\n },\n breakpoints: {\n 584: {\n slidesPerView: 1,\n centeredSlides: true\n },\n 768: {\n slidesPerView: swiperSlideCount > 2 ? 2 : swiperSlideCount,\n centeredSlides: isSwiperSlideCountOverThreshold\n },\n 1024: {\n slidesPerView: swiperSlideCount > 3 ? 2 : swiperSlideCount,\n centeredSlides: isSwiperSlideCountOverThreshold\n }\n }\n });\n\n var viewSize = $(window).width();\n if (viewSize < 584) {\n slidesPerView = 1;\n } else if ((viewSize >= 584) && (viewSize < 1024)) {\n if (swiperSlideCount > 2) {\n slidesPerView = 2;\n } else {\n slidesPerView = swiperSlideCount;\n }\n }\n\n // add the data outofinitview equal to true to the elements that are not visible\n $('.pdp-swiper-recommendations').attr('numberSlides', slidesPerView);\n var swiper = $('.pdp-swiper-recommendations');\n var items = swiper.find('.swiper-slide');\n var firstVisiblePos = swiper.find('.swiper-slide-active').index();\n var lastVisiblePos = firstVisiblePos + slidesPerView;\n for (var i = 0; i < items.length; i++) {\n if (i < firstVisiblePos || i >= lastVisiblePos) {\n items.eq(i).attr('data-outofinitview', true);\n }\n }\n\n $(window).on('resize', function () {\n recommendationsSwiper.updateSlidesSize();\n recommendationsSwiper.updateSlidesOffset();\n });\n\n if ($('.swiper-pdp-ingredients').length > 0) {\n $('.experience-commerce_assets-pdpIngredientsModuleSlide').addClass('swiper-slide');\n\n const ingredientsSliders = $('.swiper-pdp-ingredients');\n\n for (var k = 0; k < ingredientsSliders.length; k++) {\n const ingredientsSlider = $(ingredientsSliders[k]);\n const slides = ingredientsSlider.find('.swiper-slide');\n\n if (slides.length >= 8) {\n ingredientsSlider.find('.swiper-wrapper').removeClass('justify-content-md-center');\n }\n }\n\n new Swiper('.swiper-pdp-ingredients', { //NOSONAR\n zoom: false,\n slidesPerView: 8.5,\n loop: false,\n centeredSlides: false,\n keyboardControl: false,\n grabCursor: true,\n breakpoints: {\n 584: {\n slidesPerView: 2.5\n },\n 768: {\n slidesPerView: 8.5\n },\n 1024: {\n slidesPerView: 8.5\n }\n }\n });\n }\n\n if ($('.swiper-pdp-stats-carousel').length > 0 && $(document).width() < 768) {\n new Swiper('.swiper-pdp-stats-carousel', { //NOSONAR\n zoom: false,\n slidesPerView: 1,\n loop: true,\n centeredSlides: true,\n keyboardControl: false,\n grabCursor: true,\n autoplay: 4000,\n });\n }\n}\n\nfunction updateFeefoRatings(isSortChange) {\n const button = $('.pdp-feefo-product-reviews-button');\n const feefoWrapper = $('.pdp-feefo-product-reviews-list');\n var pageNumber = isSortChange ? 1 : parseInt(button.attr('data-page-number'), 10) + 1;\n\n $.spinner().start();\n\n $.ajax({\n url: button.attr('data-url'),\n method: 'GET',\n dataType: 'json',\n data: {\n pageNumber: pageNumber,\n productID: button.attr('data-product-id'),\n sort: $('.pdp-feefo-product-reviews-summary-sort option:selected').val()\n },\n success: function (data) {\n if (data && data.renderedTemplate && data.renderedTemplate.length > 0) {\n if (isSortChange) {\n feefoWrapper.empty();\n }\n\n feefoWrapper.append(data.renderedTemplate);\n button.attr('data-page-number', data.pageNumber);\n }\n\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n}\n\nmodule.exports = {\n methods: {\n updateAddToCartEnableDisableOtherElements: updateAddToCartEnableDisableOtherElements\n },\n\n availability: base.availability,\n\n addToCart: base.addToCart,\n\n updatePriceOnQuantity: base.updatePriceOnQuantity,\n customAttributeSelection: base.customAttributeSelection,\n\n updateAttributesAndDetails: function () {\n $('body').on('product:statusUpdate', function (e, data) {\n var $productContainer = $('.product-detail[data-pid=\"' + data.id + '\"]');\n\n $productContainer.find('.description-and-detail .product-attributes')\n .empty()\n .html(data.attributesHtml);\n\n if (data.shortDescription) {\n $productContainer.find('.description-and-detail .description')\n .removeClass('hidden-xl-down');\n $productContainer.find('.description-and-detail .description .content')\n .empty()\n .html(data.shortDescription);\n } else {\n $productContainer.find('.description-and-detail .description')\n .addClass('hidden-xl-down');\n }\n\n if (data.longDescription) {\n $productContainer.find('.description-and-detail .details')\n .removeClass('hidden-xl-down');\n $productContainer.find('.description-and-detail .details .content')\n .empty()\n .html(data.longDescription);\n } else {\n $productContainer.find('.description-and-detail .details')\n .addClass('hidden-xl-down');\n }\n });\n },\n\n showSpinner: function () {\n $('body').on('product:beforeAddToCart product:beforeAttributeSelect', function () {\n $.spinner().start();\n });\n },\n updateAttribute: function () {\n $('body').on('product:afterAttributeSelect', function (e, response) {\n if ($('.product-detail>.bundle-items').length || $('.product-set-detail').eq(0)) {\n response.container.data('pid', response.data.product.id);\n response.container.find('.product-id').text(response.data.product.id);\n } else {\n $('.product-id').text(response.data.product.id);\n $('.product-detail:not(\".bundle-item\")').data('pid', response.data.product.id);\n }\n // Re-init image\n module.exports.onClickGalleryThumbnail();\n if (smallSwiper) {\n smallSwiper.update();\n }\n module.exports.zoom();\n });\n },\n updateAddToCart: function () {\n $('body').on('product:updateAddToCart', function (e, response) {\n // update local add to cart (for sets)\n $('button.add-to-cart', response.$productContainer).attr('disabled',\n (!response.product.readyToOrder || !response.product.available));\n\n var enable = $('.product-availability').toArray().every(function (item) {\n return $(item).data('available') && $(item).data('ready-to-order');\n });\n module.exports.methods.updateAddToCartEnableDisableOtherElements(!enable);\n });\n },\n updateAvailability: function () {\n $('body').on('product:updateAvailability', function (e, response) {\n $('div.availability', response.$productContainer)\n .data('ready-to-order', response.product.readyToOrder)\n .data('available', response.product.available);\n\n $('.availability-msg', response.$productContainer)\n .empty().html(response.message);\n\n if ($('.global-availability').length) {\n var allAvailable = $('.product-availability').toArray()\n .every(function (item) { return $(item).data('available'); });\n\n var allReady = $('.product-availability').toArray()\n .every(function (item) { return $(item).data('ready-to-order'); });\n\n $('.global-availability')\n .data('ready-to-order', allReady)\n .data('available', allAvailable);\n\n $('.global-availability .availability-msg').empty()\n .html(allReady ? response.message : response.resources.info_selectforstock);\n }\n\n // Product has less stock than qty input\n var $input = $('.number-input-input-wrapper').find('input.quantity');\n var val = parseInt($input.val(), 10);\n var maxQty = parseInt($input.attr('max'), 10);\n\n $('.pdp-out-of-stock .alert-text').html(response.product.availability.stockLevelMessage);\n $('.pdp-out-of-stock .alert-text span').html(response.product.productName);\n $('.pdp-out-of-stock').hide();\n if (!(val <= maxQty || isNaN(maxQty))) {\n $('.pdp-out-of-stock').show();\n }\n });\n },\n sizeChart: function () {\n $('.size-chart a').on('click', function (e) {\n e.preventDefault();\n var url = $(this).attr('href');\n var $prodSizeChart = $(this).closest('.size-chart').find('.size-chart-collapsible');\n if ($prodSizeChart.is(':empty')) {\n $.ajax({\n url: url,\n type: 'get',\n dataType: 'json',\n success: function (data) {\n $prodSizeChart.append(data.content);\n }\n });\n }\n $prodSizeChart.toggleClass('active');\n });\n\n var $sizeChart = $('.size-chart-collapsible');\n $('body').on('click touchstart', function (e) {\n if ($('.size-chart').has(e.target).length <= 0) {\n $sizeChart.removeClass('active');\n }\n });\n },\n quantityButtonsDecrement: function () {\n $('body').on('click', '.pdp-quantity button.less', function () {\n var $input = $(this).siblings('.number-input-input-wrapper').find('input.quantity');\n var $addToCartButton = $('.add-to-cart');\n var val = parseInt($input.val(), 10);\n\n if (val > 1) {\n $input.val(val - 1);\n $input.trigger('change');\n $addToCartButton.data('item-quantity', $input.val());\n $('.pdp-out-of-stock').hide();\n }\n });\n },\n quantityButtonsIncrement: function () {\n $('body').on('click', '.pdp-quantity button.plus', function () {\n var $input = $(this).siblings('.number-input-input-wrapper').find('input.quantity');\n var $addToCartButton = $('.add-to-cart');\n var val = parseInt($input.val(), 10);\n var maxQty = parseInt($input.attr('max'), 10);\n\n if ((val + 1) <= maxQty || isNaN(maxQty)) {\n $input.val(val + 1);\n $input.trigger('change');\n $addToCartButton.data('item-quantity', $input.val());\n $('.pdp-out-of-stock').hide();\n } else {\n $('.pdp-out-of-stock').show();\n }\n });\n },\n copyProductLink: function () {\n $('body').on('click', '#fa-link', function () {\n event.preventDefault();\n var $temp = $('');\n $('body').append($temp);\n $temp.val($('#shareUrl').val()).select();\n document.execCommand('copy');\n $temp.remove();\n $('.copy-link-message').attr('role', 'alert');\n $('.copy-link-message').removeClass('d-none');\n setTimeout(function () {\n $('.copy-link-message').addClass('d-none');\n }, 3000);\n });\n },\n onSelectTab: function () {\n $(document).on('click', 'body .bundle-selector .tab', tabs.select);\n\n $('body .bundle-selector .tab')\n .on('mouseenter', function (e) {\n e.stopPropagation();\n var $this = $(this);\n if (!$this.hasClass('selected') && !$this.hasClass('disabled')) {\n var positionChange = {};\n if ($this.hasClass('tab-left')) {\n positionChange = {\n left: '-60%'\n };\n } else {\n positionChange = {\n left: '140%'\n };\n }\n $this.parent().find('.tab.selected .tab-line').animate(positionChange, 250);\n }\n })\n .on('mouseleave', function (e) {\n e.stopPropagation();\n var $this = $(this);\n if (!$this.hasClass('selected') && !$this.hasClass('disabled')) {\n var positionChange = {\n left: '40%'\n };\n $this.parent().find('.tab.selected .tab-line').animate(positionChange, 250);\n }\n });\n },\n onToggleSubscription: function () {\n $('body .subscription .form-check-toggle input').on('click', subscription.toggle);\n },\n onClickGalleryThumbnail: function () {\n $('body .pdp-gallery-large .pdp-gallery-large-image').on('click', function () {\n const url = $(this).attr('src');\n const slideIndex = $(this).attr('data-index');\n $('.default-zoom-image').data('zoom-image', url);\n largeSwiper.slideTo(parseInt(slideIndex, 10));\n });\n },\n pdpSwiper: function () {\n // Initialize Swiper\n swiperSliderManager();\n\n // Initialize Swiper when recommender is loaded\n $(window).on('recommenderLoaded', function () {\n swiperSliderManager();\n });\n },\n zoom: function () {\n $('body .zoom-image').on('mousemove', mainImage.zoom);\n $('body .zoom-image').on('mouseleave', function () {\n mainImage.setZoomImage('');\n });\n mainImage.mobileZoom();\n },\n toggleDescription: function () {\n $('body').on('click', '.pdp-description .dropdown-asset-row', function () {\n $('.pdp-description .dropdown-asset-content').toggle();\n $('.pdp-description .dropdown-asset-open').children('svg').toggleClass('flip');\n if ($(document).width() > 768) {\n updatePDPFloatingCarousel(true);\n }\n });\n },\n toggleFrozenInfo: function () {\n $('body').on('click', '.pdp-frozen-info .dropdown-asset-row', function () {\n $('.pdp-frozen-info .dropdown-asset-content').toggle();\n $('.pdp-frozen-info .dropdown-asset-open').children('svg').toggleClass('flip');\n if ($(document).width() > 768) {\n updatePDPFloatingCarousel(true);\n }\n });\n },\n toggleDeliveryAndReturn: function () {\n $('body').on('click', '.pdp-delivery-and-return .dropdown-asset-row', function () {\n $('.pdp-delivery-and-return .dropdown-asset-content').toggle();\n $('.pdp-delivery-and-return .dropdown-asset-open').children('svg').toggleClass('flip');\n if ($(document).width() > 768) {\n updatePDPFloatingCarousel(true);\n }\n });\n },\n toggleFeedingGuidelinesTable: function () {\n $('body').on('click', '.pdp-feeding-guidelines-table .dropdown-asset-row', function () {\n $('.pdp-feeding-guidelines-table .dropdown-asset-content').toggle();\n $('.pdp-feeding-guidelines-table .dropdown-asset-open').children('svg').toggleClass('flip');\n if ($(document).width() > 768) {\n updatePDPFloatingCarousel(true);\n }\n });\n },\n toggleProductIngridients: function () {\n $('body').on('click', '.pdp-ingredients-info .dropdown-asset-row', function () {\n $('.pdp-ingredients-info .dropdown-asset-content').toggle();\n $('.pdp-ingredients-info .dropdown-asset-open').children('svg').toggleClass('flip');\n if ($(document).width() > 768) {\n updatePDPFloatingCarousel(true);\n }\n });\n },\n toggleProductInformation: function () {\n $('body').on('click', '.pdp-product-information .dropdown-asset-row', function () {\n $('.pdp-product-information .dropdown-asset-content').toggle();\n $('.pdp-product-information .dropdown-asset-open').children('svg').toggleClass('flip');\n if ($(document).width() > 768) {\n updatePDPFloatingCarousel(true);\n }\n });\n },\n readyProductIngredients: function () {\n $(document).ready(function () {\n var flavour = $('.pdp-flavours .bundle-selector .tab.selected').text();\n var flavourElement = 'tab-' + flavour.trim().replace(/\\s+/g, '-').toLowerCase();\n handleProductIngredients(flavourElement);\n });\n },\n changeProductFlavour: function () {\n $('body').on('click', '.pdp-flavours .bundle-selector .tab', function () {\n var flavour = $(this).find('span').text();\n var flavourElement = 'tab-' + flavour.trim().replace(/\\s+/g, '-').toLowerCase();\n handleProductIngredients(flavourElement);\n });\n },\n productInformationShowMore: function () {\n var $informationTab = $('.product-information-text');\n var $seeMoreButton = $('.product-information-button');\n\n $('body').on('click', '.product-information-button', function () {\n $informationTab.toggleClass('expand');\n\n if ($informationTab.hasClass('expand')) {\n $(this).text('See less');\n } else {\n $(this).text('See more');\n }\n });\n if ($informationTab.text().length < 680) {\n $seeMoreButton.hide();\n }\n else {\n $seeMoreButton.show();\n }\n },\n onClickFeedingSeeMore: function () {\n $('body').on('click', '.pdp-feeding .see-more-button', function () {\n toggleFeedingTextOverflow();\n toggleFeedingSeeMoreButton();\n });\n },\n showReadMoreButtonBasedOnWindowWidth: function () {\n var box = $('.pdp-feeding .content-asset .pdp-feeding-text-main');\n var length = box.text().length;\n if (length > 200 && $(window).width() < 992) {\n $('.pdp-feeding .see-more-button').show();\n }\n else if (length > 400 && $(window).width() > 991) {\n $('.pdp-feeding .see-more-button').show();\n }\n else {\n $('.pdp-feeding .see-more-button').hide();\n box.addClass('expanded');\n }\n },\n forceEnableFeefoStarsWidgetOverlay: function () {\n // This was done because the requirement was to avoid the overlay\n // appearing on tiles but keeping it in pdp rating section\n $('.drop-element.drop-theme-feefo').addClass('d-none');\n $('.drop-element.drop-theme-feefo-no-triangle').addClass('d-none');\n },\n focusChooseBonusProductModal: base.focusChooseBonusProductModal(),\n showQuickview: function () {\n $('body').on('click', '.quickview', function (e) {\n e.preventDefault();\n var selectedValueUrl = $(this).closest('a.quickview').attr('href');\n $(e.target).trigger('quickview:show');\n getModalHtmlElement();\n fillModalElement(selectedValueUrl);\n });\n },\n applySORDiscountPDP: function () {\n $(document).on('change', '.smart-order-refill-options .input-switch', function () {\n base.applySORDiscount($(this));\n });\n },\n hideDialog: function () {\n $('body').on('product:afterAddToCart', function () {\n $('#quickViewModal').modal('hide');\n });\n },\n quickViewSwiper: function () {\n $('body').on('shown.bs.modal', '#quickViewModal', function () {\n base.quickViewSwiper();\n });\n },\n avoidLiveChatOverlap: function () {\n $('body').addClass('avoidLiveChatOverlap');\n },\n avoidCookiesOverlap: function () {\n $('body').addClass('avoidCookiesOverlap');\n\n },\n pdpSubscription: function () {\n $(document).on('click', '.pdp-subscription-selection', function (e) {\n $('.pdp-subscription-selection-container').removeClass('selected');\n $(e.currentTarget).closest('.pdp-subscription-selection-container').addClass('selected');\n $('#OsfSorRefillProductYes').trigger('click');\n });\n },\n pdpFloatingCarousel: function () {\n if ($(document).width() > 768) {\n $(window).on('scroll', function () {\n updatePDPFloatingCarousel(false);\n });\n }\n },\n pdpFeefoReviews: function () {\n $('.pdp-feefo-stars-link').on('click', function () {\n $('html, body').animate({\n scrollTop: $('.pdp-feefo-product-reviews-wrapper').offset().top\n }, 1000);\n });\n\n $('.pdp-feefo-product-reviews-button').on('click', function () {\n updateFeefoRatings(false);\n });\n\n $('.pdp-feefo-product-reviews-summary-sort').on('change', function () {\n updateFeefoRatings(true);\n });\n },\n pdpGenericModule: function () {\n const headings = document.querySelectorAll('.pdp-generic-module-title');\n\n const observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n const target = entry.target;\n\n if (entry.isIntersecting) {\n target.classList.add('underline-animation');\n return;\n }\n target.classList.remove('underline-animation');\n });\n });\n\n for (let i = 0; i < headings.length; i++) {\n observer.observe(headings[i]);\n }\n },\n pdpSizeSelector: function () {\n $('.pdp-weight-attribut-selector-tab').on('click', function (e) {\n $('.pdp-weight-attribut-selector-tab').removeClass('selected');\n $(e.currentTarget).addClass('selected');\n });\n }\n};\n","function selectTab() {\n if ($(this).hasClass('disabled'))\n return;\n $(this).siblings().removeClass('selected');\n $(this).addClass('selected');\n $(this).parent().find('.tab-line').removeAttr('style');\n}\nmodule.exports = {\n select: selectTab\n};\n","function toggleSubscription(e) {\n if (e) {\n if ($('.subscription-time').hasClass('d-none')) {\n $('.subscription-switch .form-check-input').attr('checked', true);\n $('.subscription-time').removeClass('d-none');\n }\n else {\n $('.subscription-switch .form-check-input').attr('checked', false);\n $('.subscription-time').addClass('d-none');\n }\n }\n}\nmodule.exports = {\n toggle: toggleSubscription\n};\n","function setDefaultZoomImage() {\n const url = $('.default-zoom-image').data('zoom-image').split('?')[0];\n $('.zoom-image').css({'background-image': 'url(\\'' + url + '\\')'});\n}\nfunction setZoomImage(url) {\n $('.zoom-image').css({'background-image': 'url(\\'' + url + '\\')'});\n}\nfunction zoom(e) {\n setDefaultZoomImage();\n var zoomer = e.currentTarget;\n let offsetX = e.offsetX || e.touches && e.touches[0].pageX;\n let offsetY;\n e.offsetY ? offsetY = e.offsetY : offsetX = e.touches && e.touches[0].pageX;\n let x = offsetX/zoomer.offsetWidth*100;\n let y = offsetY/zoomer.offsetHeight*100;\n zoomer.style.backgroundPosition = x + '% ' + y + '%';\n}\n\nfunction mobileZoom() {\n new window.SimpleLightbox('#mobile-gallery a', {\n overlayOpacity: 1.0,\n closeText: '✕',\n swipeClose: false,\n docClose: false,\n fadeSpeed: 100\n });\n\n $('.jqzoom').jqzoom({\n zoomType: 'standard',\n lens:true,\n preloadImages: false,\n alwaysOn:false,\n xOffset: 0,\n yOffset: 0,\n zoomWidth: $('.pdp-col-right').innerWidth() - 30,\n zoomHeight: $('.image-block').outerHeight()\n });\n\n var desktopGallery = new window.SimpleLightbox('.gallery a', {\n overlayOpacity: 1.0,\n closeText: '✕',\n swipeClose: false,\n docClose: false,\n fadeSpeed: 100\n });\n\n $('.jqzoom').on('click', e => {\n e.preventDefault();\n const href = e.currentTarget.href;\n const galleryImage = $('.gallery a[href=\"' + href + '\"]');\n desktopGallery.open(galleryImage);\n });\n\n $('.image-block__thumbnail *').on('mouseenter', e => {\n $('.image-block__image').toggleClass('full-bleed', $(e.currentTarget).closest('.image-block__thumbnail').hasClass('full-bleed'));\n });\n}\n\nmodule.exports = {\n setDefaultZoomImage: setDefaultZoomImage,\n setZoomImage: setZoomImage,\n zoom: zoom,\n mobileZoom: mobileZoom\n};\n","module.exports = function (include) {\n if (typeof include === 'function') {\n include();\n } else if (typeof include === 'object') {\n Object.keys(include).forEach(function (key) {\n if (typeof include[key] === 'function') {\n include[key]();\n }\n });\n }\n};\n","var processInclude = require('./util');\nrequire('simplelightbox');\n\n$(document).ready(function () {\n processInclude(require('./components/jqzoom'));\n processInclude(require('./product/detail'));\n});\n","/*!\r\n\tBy André Rinas, www.andrerinas.de\r\n\tDocumentation, www.simplelightbox.com\r\n\tAvailable for use under the MIT License\r\n\tVersion 2.14.3\r\n*/\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nvar SimpleLightbox = /*#__PURE__*/function () {\n function SimpleLightbox(elements, options) {\n var _this = this;\n _classCallCheck(this, SimpleLightbox);\n _defineProperty(this, \"defaultOptions\", {\n sourceAttr: 'href',\n overlay: true,\n overlayOpacity: 0.7,\n spinner: true,\n nav: true,\n navText: ['‹', '›'],\n captions: true,\n captionDelay: 0,\n captionSelector: 'img',\n captionType: 'attr',\n captionsData: 'title',\n captionPosition: 'bottom',\n captionClass: '',\n captionHTML: true,\n close: true,\n closeText: '×',\n swipeClose: true,\n showCounter: true,\n fileExt: 'png|jpg|jpeg|gif|webp|avif',\n animationSlide: true,\n animationSpeed: 250,\n preloading: true,\n enableKeyboard: true,\n loop: true,\n rel: false,\n docClose: true,\n swipeTolerance: 50,\n className: 'simple-lightbox',\n widthRatio: 0.8,\n heightRatio: 0.9,\n scaleImageToRatio: false,\n disableRightClick: false,\n disableScroll: true,\n alertError: true,\n alertErrorMessage: 'Image not found, next image will be loaded',\n additionalHtml: false,\n history: true,\n throttleInterval: 0,\n doubleTapZoom: 2,\n maxZoom: 10,\n htmlClass: 'has-lightbox',\n rtl: false,\n fixedClass: 'sl-fixed',\n fadeSpeed: 300,\n uniqueImages: true,\n focus: true,\n scrollZoom: true,\n scrollZoomFactor: 0.5,\n download: false\n });\n _defineProperty(this, \"transitionPrefix\", void 0);\n _defineProperty(this, \"isPassiveEventsSupported\", void 0);\n _defineProperty(this, \"transitionCapable\", false);\n _defineProperty(this, \"isTouchDevice\", 'ontouchstart' in window);\n _defineProperty(this, \"isAppleDevice\", /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform));\n _defineProperty(this, \"initialLocationHash\", void 0);\n _defineProperty(this, \"pushStateSupport\", 'pushState' in history);\n _defineProperty(this, \"isOpen\", false);\n _defineProperty(this, \"isAnimating\", false);\n _defineProperty(this, \"isClosing\", false);\n _defineProperty(this, \"isFadeIn\", false);\n _defineProperty(this, \"urlChangedOnce\", false);\n _defineProperty(this, \"hashReseted\", false);\n _defineProperty(this, \"historyHasChanges\", false);\n _defineProperty(this, \"historyUpdateTimeout\", null);\n _defineProperty(this, \"currentImage\", void 0);\n _defineProperty(this, \"eventNamespace\", 'simplelightbox');\n _defineProperty(this, \"domNodes\", {});\n _defineProperty(this, \"loadedImages\", []);\n _defineProperty(this, \"initialImageIndex\", 0);\n _defineProperty(this, \"currentImageIndex\", 0);\n _defineProperty(this, \"initialSelector\", null);\n _defineProperty(this, \"globalScrollbarWidth\", 0);\n _defineProperty(this, \"controlCoordinates\", {\n swipeDiff: 0,\n swipeYDiff: 0,\n swipeStart: 0,\n swipeEnd: 0,\n swipeYStart: 0,\n swipeYEnd: 0,\n mousedown: false,\n imageLeft: 0,\n zoomed: false,\n containerHeight: 0,\n containerWidth: 0,\n containerOffsetX: 0,\n containerOffsetY: 0,\n imgHeight: 0,\n imgWidth: 0,\n capture: false,\n initialOffsetX: 0,\n initialOffsetY: 0,\n initialPointerOffsetX: 0,\n initialPointerOffsetY: 0,\n initialPointerOffsetX2: 0,\n initialPointerOffsetY2: 0,\n initialScale: 1,\n initialPinchDistance: 0,\n pointerOffsetX: 0,\n pointerOffsetY: 0,\n pointerOffsetX2: 0,\n pointerOffsetY2: 0,\n targetOffsetX: 0,\n targetOffsetY: 0,\n targetScale: 0,\n pinchOffsetX: 0,\n pinchOffsetY: 0,\n limitOffsetX: 0,\n limitOffsetY: 0,\n scaleDifference: 0,\n targetPinchDistance: 0,\n touchCount: 0,\n doubleTapped: false,\n touchmoveCount: 0\n });\n this.options = Object.assign(this.defaultOptions, options);\n this.isPassiveEventsSupported = this.checkPassiveEventsSupport();\n if (typeof elements === 'string') {\n this.initialSelector = elements;\n this.elements = Array.from(document.querySelectorAll(elements));\n } else {\n this.elements = typeof elements.length !== 'undefined' && elements.length > 0 ? Array.from(elements) : [elements];\n }\n this.relatedElements = [];\n this.transitionPrefix = this.calculateTransitionPrefix();\n this.transitionCapable = this.transitionPrefix !== false;\n this.initialLocationHash = this.hash;\n\n // this should be handled by attribute selector IMHO! => 'a[rel=bla]'...\n if (this.options.rel) {\n this.elements = this.getRelated(this.options.rel);\n }\n if (this.options.uniqueImages) {\n var imgArr = [];\n this.elements = Array.from(this.elements).filter(function (element) {\n var src = element.getAttribute(_this.options.sourceAttr);\n if (imgArr.indexOf(src) === -1) {\n imgArr.push(src);\n return true;\n }\n return false;\n });\n }\n this.createDomNodes();\n if (this.options.close) {\n this.domNodes.wrapper.appendChild(this.domNodes.closeButton);\n }\n if (this.options.nav) {\n this.domNodes.wrapper.appendChild(this.domNodes.navigation);\n }\n if (this.options.spinner) {\n this.domNodes.wrapper.appendChild(this.domNodes.spinner);\n }\n this.addEventListener(this.elements, 'click.' + this.eventNamespace, function (event) {\n if (_this.isValidLink(event.currentTarget)) {\n event.preventDefault();\n if (_this.isAnimating) {\n return false;\n }\n _this.initialImageIndex = _this.elements.indexOf(event.currentTarget);\n _this.openImage(event.currentTarget);\n }\n });\n\n // close addEventListener click addEventListener doc\n if (this.options.docClose) {\n this.addEventListener(this.domNodes.wrapper, ['click.' + this.eventNamespace, 'touchstart.' + this.eventNamespace], function (event) {\n if (_this.isOpen && event.target === event.currentTarget) {\n _this.close();\n }\n });\n }\n\n // disable rightclick\n if (this.options.disableRightClick) {\n this.addEventListener(document.body, 'contextmenu.' + this.eventNamespace, function (event) {\n if (event.target.parentElement.classList.contains(\"sl-image\")) {\n event.preventDefault();\n }\n });\n }\n\n // keyboard-control\n if (this.options.enableKeyboard) {\n this.addEventListener(document.body, 'keyup.' + this.eventNamespace, this.throttle(function (event) {\n _this.controlCoordinates.swipeDiff = 0;\n // keyboard control only if lightbox is open\n\n if (_this.isAnimating && event.key === 'Escape') {\n _this.currentImage.setAttribute('src', '');\n _this.isAnimating = false;\n _this.close();\n return;\n }\n if (_this.isOpen) {\n event.preventDefault();\n if (event.key === 'Escape') {\n _this.close();\n }\n if (!_this.isAnimating && ['ArrowLeft', 'ArrowRight'].indexOf(event.key) > -1) {\n _this.loadImage(event.key === 'ArrowRight' ? 1 : -1);\n }\n }\n }, this.options.throttleInterval));\n }\n this.addEvents();\n }\n _createClass(SimpleLightbox, [{\n key: \"checkPassiveEventsSupport\",\n value: function checkPassiveEventsSupport() {\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection\n // Test via a getter in the options object to see if the passive property is accessed\n var supportsPassive = false;\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassive = true;\n }\n });\n window.addEventListener(\"testPassive\", null, opts);\n window.removeEventListener(\"testPassive\", null, opts);\n } catch (e) {}\n return supportsPassive;\n }\n }, {\n key: \"getCaptionElement\",\n value: function getCaptionElement(elem) {\n // look at sibling selector\n if (this.options.captionSelector.startsWith('+')) {\n var selector = this.options.captionSelector.replace(/^\\+/, '').trimStart();\n var sibling = elem.nextElementSibling;\n if (sibling && sibling.matches(selector)) {\n return sibling;\n }\n return false;\n } else if (this.options.captionSelector.startsWith('>')) {\n var _selector = this.options.captionSelector.replace(/^>/, '').trimStart();\n return elem.querySelector(_selector);\n } else {\n return elem.querySelector(this.options.captionSelector);\n }\n }\n }, {\n key: \"generateQuerySelector\",\n value: function generateQuerySelector(elem) {\n var tagName = elem.tagName,\n id = elem.id,\n className = elem.className,\n parentNode = elem.parentNode;\n if (tagName === 'HTML') return 'HTML';\n var str = tagName;\n str += id !== '' ? \"#\".concat(id) : '';\n if (className) {\n var classes = className.trim().split(/\\s/);\n for (var i = 0; i < classes.length; i++) {\n str += \".\".concat(classes[i]);\n }\n }\n var childIndex = 1;\n for (var e = elem; e.previousElementSibling; e = e.previousElementSibling) {\n childIndex += 1;\n }\n str += \":nth-child(\".concat(childIndex, \")\");\n return \"\".concat(this.generateQuerySelector(parentNode), \" > \").concat(str);\n }\n }, {\n key: \"createDomNodes\",\n value: function createDomNodes() {\n this.domNodes.overlay = document.createElement('div');\n this.domNodes.overlay.classList.add('sl-overlay');\n this.domNodes.overlay.dataset.opacityTarget = this.options.overlayOpacity;\n this.domNodes.closeButton = document.createElement('button');\n this.domNodes.closeButton.classList.add('sl-close');\n this.domNodes.closeButton.innerHTML = this.options.closeText;\n this.domNodes.spinner = document.createElement('div');\n this.domNodes.spinner.classList.add('sl-spinner');\n this.domNodes.spinner.innerHTML = '
    ';\n this.domNodes.navigation = document.createElement('div');\n this.domNodes.navigation.classList.add('sl-navigation');\n this.domNodes.navigation.innerHTML = \"\");\n this.domNodes.counter = document.createElement('div');\n this.domNodes.counter.classList.add('sl-counter');\n this.domNodes.counter.innerHTML = '/';\n this.domNodes.download = document.createElement('div');\n this.domNodes.download.classList.add('sl-download');\n this.domNodes.downloadLink = document.createElement('a');\n this.domNodes.downloadLink.setAttribute('download', '');\n this.domNodes.downloadLink.textContent = this.options.download;\n this.domNodes.download.appendChild(this.domNodes.downloadLink);\n this.domNodes.caption = document.createElement('div');\n this.domNodes.caption.classList.add('sl-caption', 'pos-' + this.options.captionPosition);\n if (this.options.captionClass) {\n var _this$domNodes$captio;\n var captionClasses = this.options.captionClass.split(/[\\s,]+/);\n (_this$domNodes$captio = this.domNodes.caption.classList).add.apply(_this$domNodes$captio, _toConsumableArray(captionClasses));\n }\n this.domNodes.image = document.createElement('div');\n this.domNodes.image.classList.add('sl-image');\n this.domNodes.wrapper = document.createElement('div');\n this.domNodes.wrapper.classList.add('sl-wrapper');\n this.domNodes.wrapper.setAttribute('tabindex', -1);\n this.domNodes.wrapper.setAttribute('role', 'dialog');\n this.domNodes.wrapper.setAttribute('aria-hidden', false);\n if (this.options.className) {\n this.domNodes.wrapper.classList.add(this.options.className);\n }\n if (this.options.rtl) {\n this.domNodes.wrapper.classList.add('sl-dir-rtl');\n }\n }\n }, {\n key: \"throttle\",\n value: function throttle(func, limit) {\n var inThrottle;\n return function () {\n if (!inThrottle) {\n func.apply(this, arguments);\n inThrottle = true;\n setTimeout(function () {\n return inThrottle = false;\n }, limit);\n }\n };\n }\n }, {\n key: \"isValidLink\",\n value: function isValidLink(element) {\n return !this.options.fileExt || element.getAttribute(this.options.sourceAttr) && new RegExp('(' + this.options.fileExt + ')($|\\\\?.*$)', 'i').test(element.getAttribute(this.options.sourceAttr));\n }\n }, {\n key: \"calculateTransitionPrefix\",\n value: function calculateTransitionPrefix() {\n var s = (document.body || document.documentElement).style;\n return 'transition' in s ? '' : 'WebkitTransition' in s ? '-webkit-' : 'MozTransition' in s ? '-moz-' : 'OTransition' in s ? '-o' : false;\n }\n }, {\n key: \"getScrollbarWidth\",\n value: function getScrollbarWidth() {\n var scrollbarWidth = 0;\n var scrollDiv = document.createElement('div');\n scrollDiv.classList.add('sl-scrollbar-measure');\n document.body.appendChild(scrollDiv);\n scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n return scrollbarWidth;\n }\n }, {\n key: \"toggleScrollbar\",\n value: function toggleScrollbar(type) {\n var scrollbarWidth = 0;\n var fixedElements = [].slice.call(document.querySelectorAll('.' + this.options.fixedClass));\n if (type === 'hide') {\n var fullWindowWidth = window.innerWidth;\n if (!fullWindowWidth) {\n var documentElementRect = document.documentElement.getBoundingClientRect();\n fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left);\n }\n if (document.body.clientWidth < fullWindowWidth || this.isAppleDevice) {\n var paddingRight = parseInt(window.getComputedStyle(document.body).paddingRight || 0, 10);\n scrollbarWidth = this.getScrollbarWidth();\n document.body.dataset.originalPaddingRight = paddingRight;\n if (scrollbarWidth > 0 || scrollbarWidth == 0 && this.isAppleDevice) {\n document.body.classList.add('hidden-scroll');\n document.body.style.paddingRight = paddingRight + scrollbarWidth + 'px';\n fixedElements.forEach(function (element) {\n var actualPadding = element.style.paddingRight;\n var calculatedPadding = window.getComputedStyle(element)['padding-right'];\n element.dataset.originalPaddingRight = actualPadding;\n element.style.paddingRight = \"\".concat(parseFloat(calculatedPadding) + scrollbarWidth, \"px\");\n });\n }\n }\n } else {\n document.body.classList.remove('hidden-scroll');\n document.body.style.paddingRight = document.body.dataset.originalPaddingRight + 'px';\n fixedElements.forEach(function (element) {\n var padding = element.dataset.originalPaddingRight;\n if (typeof padding !== 'undefined') {\n element.style.paddingRight = padding;\n }\n });\n }\n return scrollbarWidth;\n }\n }, {\n key: \"close\",\n value: function close() {\n var _this2 = this;\n if (!this.isOpen || this.isAnimating || this.isClosing) {\n return false;\n }\n this.isClosing = true;\n var element = this.relatedElements[this.currentImageIndex];\n element.dispatchEvent(new Event('close.simplelightbox'));\n if (this.options.history) {\n this.historyHasChanges = false;\n if (!this.hashReseted) {\n this.resetHash();\n }\n }\n this.removeEventListener(document, 'focusin.' + this.eventNamespace);\n this.fadeOut(this.domNodes.overlay, this.options.fadeSpeed);\n this.fadeOut(document.querySelectorAll('.sl-image img, .sl-close, .sl-navigation, .sl-image .sl-caption, .sl-counter'), this.options.fadeSpeed, function () {\n if (_this2.options.disableScroll) {\n _this2.toggleScrollbar('show');\n }\n if (_this2.options.htmlClass && _this2.options.htmlClass !== '') {\n document.querySelector('html').classList.remove(_this2.options.htmlClass);\n }\n document.body.removeChild(_this2.domNodes.wrapper);\n if (_this2.options.overlay) {\n document.body.removeChild(_this2.domNodes.overlay);\n }\n _this2.domNodes.additionalHtml = null;\n _this2.domNodes.download = null;\n element.dispatchEvent(new Event('closed.simplelightbox'));\n _this2.isClosing = false;\n });\n this.currentImage = null;\n this.isOpen = false;\n this.isAnimating = false;\n\n // reset touchcontrol coordinates\n for (var key in this.controlCoordinates) {\n this.controlCoordinates[key] = 0;\n }\n this.controlCoordinates.mousedown = false;\n this.controlCoordinates.zoomed = false;\n this.controlCoordinates.capture = false;\n this.controlCoordinates.initialScale = this.minMax(1, 1, this.options.maxZoom);\n this.controlCoordinates.doubleTapped = false;\n }\n }, {\n key: \"hash\",\n get: function get() {\n return window.location.hash.substring(1);\n }\n }, {\n key: \"preload\",\n value: function preload() {\n var _this3 = this;\n var index = this.currentImageIndex,\n length = this.relatedElements.length,\n next = index + 1 < 0 ? length - 1 : index + 1 >= length - 1 ? 0 : index + 1,\n prev = index - 1 < 0 ? length - 1 : index - 1 >= length - 1 ? 0 : index - 1,\n nextImage = new Image(),\n prevImage = new Image();\n nextImage.addEventListener('load', function (event) {\n var src = event.target.getAttribute('src');\n if (_this3.loadedImages.indexOf(src) === -1) {\n //is this condition even required... setting multiple times will not change usage...\n _this3.loadedImages.push(src);\n }\n _this3.relatedElements[index].dispatchEvent(new Event('nextImageLoaded.' + _this3.eventNamespace));\n });\n nextImage.setAttribute('src', this.relatedElements[next].getAttribute(this.options.sourceAttr));\n prevImage.addEventListener('load', function (event) {\n var src = event.target.getAttribute('src');\n if (_this3.loadedImages.indexOf(src) === -1) {\n _this3.loadedImages.push(src);\n }\n _this3.relatedElements[index].dispatchEvent(new Event('prevImageLoaded.' + _this3.eventNamespace));\n });\n prevImage.setAttribute('src', this.relatedElements[prev].getAttribute(this.options.sourceAttr));\n }\n }, {\n key: \"loadImage\",\n value: function loadImage(direction) {\n var _this4 = this;\n var slideDirection = direction;\n if (this.options.rtl) {\n direction = -direction;\n }\n this.relatedElements[this.currentImageIndex].dispatchEvent(new Event('change.' + this.eventNamespace));\n this.relatedElements[this.currentImageIndex].dispatchEvent(new Event((direction === 1 ? 'next' : 'prev') + '.' + this.eventNamespace));\n var newIndex = this.currentImageIndex + direction;\n if (this.isAnimating || (newIndex < 0 || newIndex >= this.relatedElements.length) && this.options.loop === false) {\n return false;\n }\n this.currentImageIndex = newIndex < 0 ? this.relatedElements.length - 1 : newIndex > this.relatedElements.length - 1 ? 0 : newIndex;\n this.domNodes.counter.querySelector('.sl-current').innerHTML = this.currentImageIndex + 1;\n if (this.options.animationSlide) {\n this.slide(this.options.animationSpeed / 1000, -100 * slideDirection - this.controlCoordinates.swipeDiff + 'px');\n }\n this.fadeOut(this.domNodes.image, this.options.fadeSpeed, function () {\n _this4.isAnimating = true;\n if (!_this4.isClosing) {\n setTimeout(function () {\n var element = _this4.relatedElements[_this4.currentImageIndex];\n if (!_this4.currentImage) return;\n _this4.currentImage.setAttribute('src', element.getAttribute(_this4.options.sourceAttr));\n if (_this4.loadedImages.indexOf(element.getAttribute(_this4.options.sourceAttr)) === -1) {\n _this4.show(_this4.domNodes.spinner);\n }\n if (_this4.domNodes.image.contains(_this4.domNodes.caption)) {\n _this4.domNodes.image.removeChild(_this4.domNodes.caption);\n }\n _this4.adjustImage(slideDirection);\n if (_this4.options.preloading) _this4.preload();\n }, 100);\n } else {\n _this4.isAnimating = false;\n }\n });\n }\n }, {\n key: \"adjustImage\",\n value: function adjustImage(direction) {\n var _this5 = this;\n if (!this.currentImage) {\n return false;\n }\n var tmpImage = new Image(),\n windowWidth = window.innerWidth * this.options.widthRatio,\n windowHeight = window.innerHeight * this.options.heightRatio;\n tmpImage.setAttribute('src', this.currentImage.getAttribute('src'));\n this.currentImage.dataset.scale = 1;\n this.currentImage.dataset.translateX = 0;\n this.currentImage.dataset.translateY = 0;\n this.zoomPanElement(0, 0, 1);\n tmpImage.addEventListener('error', function (event) {\n _this5.relatedElements[_this5.currentImageIndex].dispatchEvent(new Event('error.' + _this5.eventNamespace));\n _this5.isAnimating = false;\n _this5.isOpen = true;\n _this5.domNodes.spinner.style.display = 'none';\n var dirIsDefined = direction === 1 || direction === -1;\n if (_this5.initialImageIndex === _this5.currentImageIndex && dirIsDefined) {\n return _this5.close();\n }\n if (_this5.options.alertError) {\n alert(_this5.options.alertErrorMessage);\n }\n _this5.loadImage(dirIsDefined ? direction : 1);\n });\n tmpImage.addEventListener('load', function (event) {\n if (typeof direction !== 'undefined') {\n _this5.relatedElements[_this5.currentImageIndex].dispatchEvent(new Event('changed.' + _this5.eventNamespace));\n _this5.relatedElements[_this5.currentImageIndex].dispatchEvent(new Event((direction === 1 ? 'nextDone' : 'prevDone') + '.' + _this5.eventNamespace));\n }\n\n // history\n if (_this5.options.history) {\n _this5.updateURL();\n }\n if (_this5.loadedImages.indexOf(_this5.currentImage.getAttribute('src')) === -1) {\n _this5.loadedImages.push(_this5.currentImage.getAttribute('src'));\n }\n var imageWidth = event.target.width,\n imageHeight = event.target.height;\n if (_this5.options.scaleImageToRatio || imageWidth > windowWidth || imageHeight > windowHeight) {\n var ratio = imageWidth / imageHeight > windowWidth / windowHeight ? imageWidth / windowWidth : imageHeight / windowHeight;\n imageWidth /= ratio;\n imageHeight /= ratio;\n }\n _this5.domNodes.image.style.top = (window.innerHeight - imageHeight) / 2 + 'px';\n _this5.domNodes.image.style.left = (window.innerWidth - imageWidth - _this5.globalScrollbarWidth) / 2 + 'px';\n _this5.domNodes.image.style.width = imageWidth + 'px';\n _this5.domNodes.image.style.height = imageHeight + 'px';\n _this5.domNodes.spinner.style.display = 'none';\n if (_this5.options.focus) {\n _this5.forceFocus();\n }\n _this5.fadeIn(_this5.currentImage, _this5.options.fadeSpeed, function () {\n if (_this5.options.focus) {\n _this5.domNodes.wrapper.focus();\n }\n });\n _this5.isOpen = true;\n var captionContainer, captionText;\n if (typeof _this5.options.captionSelector === 'string') {\n captionContainer = _this5.options.captionSelector === 'self' ? _this5.relatedElements[_this5.currentImageIndex] : _this5.getCaptionElement(_this5.relatedElements[_this5.currentImageIndex]);\n } else if (typeof _this5.options.captionSelector === 'function') {\n captionContainer = _this5.options.captionSelector(_this5.relatedElements[_this5.currentImageIndex]);\n }\n if (_this5.options.captions && captionContainer) {\n if (_this5.options.captionType === 'data') {\n captionText = captionContainer.dataset[_this5.options.captionsData];\n } else if (_this5.options.captionType === 'text') {\n captionText = captionContainer.innerHTML;\n } else {\n captionText = captionContainer.getAttribute(_this5.options.captionsData);\n }\n }\n if (!_this5.options.loop) {\n if (_this5.currentImageIndex === 0) {\n _this5.hide(_this5.domNodes.navigation.querySelector('.sl-prev'));\n }\n if (_this5.currentImageIndex >= _this5.relatedElements.length - 1) {\n _this5.hide(_this5.domNodes.navigation.querySelector('.sl-next'));\n }\n if (_this5.currentImageIndex > 0) {\n _this5.show(_this5.domNodes.navigation.querySelector('.sl-prev'));\n }\n if (_this5.currentImageIndex < _this5.relatedElements.length - 1) {\n _this5.show(_this5.domNodes.navigation.querySelector('.sl-next'));\n }\n } else {\n if (_this5.relatedElements.length === 1) {\n _this5.hide(_this5.domNodes.navigation.querySelectorAll('.sl-prev, .sl-next'));\n } else {\n _this5.show(_this5.domNodes.navigation.querySelectorAll('.sl-prev, .sl-next'));\n }\n }\n if (direction === 1 || direction === -1) {\n if (_this5.options.animationSlide) {\n _this5.slide(0, 100 * direction + 'px');\n setTimeout(function () {\n _this5.slide(_this5.options.animationSpeed / 1000, 0 + 'px');\n }, 50);\n }\n _this5.fadeIn(_this5.domNodes.image, _this5.options.fadeSpeed, function () {\n _this5.isAnimating = false;\n _this5.setCaption(captionText, imageWidth);\n });\n } else {\n _this5.isAnimating = false;\n _this5.setCaption(captionText, imageWidth);\n }\n if (_this5.options.additionalHtml && !_this5.domNodes.additionalHtml) {\n _this5.domNodes.additionalHtml = document.createElement('div');\n _this5.domNodes.additionalHtml.classList.add('sl-additional-html');\n _this5.domNodes.additionalHtml.innerHTML = _this5.options.additionalHtml;\n _this5.domNodes.image.appendChild(_this5.domNodes.additionalHtml);\n }\n if (_this5.options.download) {\n _this5.domNodes.downloadLink.setAttribute('href', _this5.currentImage.getAttribute('src'));\n }\n });\n }\n }, {\n key: \"zoomPanElement\",\n value: function zoomPanElement(targetOffsetX, targetOffsetY, targetScale) {\n this.currentImage.style[this.transitionPrefix + 'transform'] = 'translate(' + targetOffsetX + ',' + targetOffsetY + ') scale(' + targetScale + ')';\n }\n }, {\n key: \"minMax\",\n value: function minMax(value, min, max) {\n return value < min ? min : value > max ? max : value;\n }\n }, {\n key: \"setZoomData\",\n value: function setZoomData(initialScale, targetOffsetX, targetOffsetY) {\n this.currentImage.dataset.scale = initialScale;\n this.currentImage.dataset.translateX = targetOffsetX;\n this.currentImage.dataset.translateY = targetOffsetY;\n }\n }, {\n key: \"hashchangeHandler\",\n value: function hashchangeHandler() {\n if (this.isOpen && this.hash === this.initialLocationHash) {\n this.hashReseted = true;\n this.close();\n }\n }\n }, {\n key: \"addEvents\",\n value: function addEvents() {\n var _this6 = this;\n // resize/responsive\n this.addEventListener(window, 'resize.' + this.eventNamespace, function (event) {\n //this.adjustImage.bind(this)\n if (_this6.isOpen) {\n _this6.adjustImage();\n }\n });\n this.addEventListener(this.domNodes.closeButton, ['click.' + this.eventNamespace, 'touchstart.' + this.eventNamespace], this.close.bind(this));\n if (this.options.history) {\n setTimeout(function () {\n _this6.addEventListener(window, 'hashchange.' + _this6.eventNamespace, function (event) {\n if (_this6.isOpen) {\n _this6.hashchangeHandler();\n }\n });\n }, 40);\n }\n this.addEventListener(this.domNodes.navigation.getElementsByTagName('button'), 'click.' + this.eventNamespace, function (event) {\n if (!event.currentTarget.tagName.match(/button/i)) {\n return true;\n }\n event.preventDefault();\n _this6.controlCoordinates.swipeDiff = 0;\n _this6.loadImage(event.currentTarget.classList.contains('sl-next') ? 1 : -1);\n });\n if (this.options.scrollZoom) {\n var scale = 1;\n this.addEventListener(this.domNodes.image, ['mousewheel', 'DOMMouseScroll'], function (event) {\n if (_this6.controlCoordinates.mousedown || _this6.isAnimating || _this6.isClosing || !_this6.isOpen) {\n return true;\n }\n if (_this6.controlCoordinates.containerHeight == 0) {\n _this6.controlCoordinates.containerHeight = _this6.getDimensions(_this6.domNodes.image).height;\n _this6.controlCoordinates.containerWidth = _this6.getDimensions(_this6.domNodes.image).width;\n _this6.controlCoordinates.imgHeight = _this6.getDimensions(_this6.currentImage).height;\n _this6.controlCoordinates.imgWidth = _this6.getDimensions(_this6.currentImage).width;\n _this6.controlCoordinates.containerOffsetX = _this6.domNodes.image.offsetLeft;\n _this6.controlCoordinates.containerOffsetY = _this6.domNodes.image.offsetTop;\n _this6.controlCoordinates.initialOffsetX = parseFloat(_this6.currentImage.dataset.translateX);\n _this6.controlCoordinates.initialOffsetY = parseFloat(_this6.currentImage.dataset.translateY);\n }\n // event.preventDefault();\n\n var delta = event.delta || event.wheelDelta;\n if (delta === undefined) {\n //we are on firefox\n delta = event.detail;\n }\n delta = Math.max(-1, Math.min(1, delta)); // cap the delta to [-1,1] for cross browser consistency\n\n // apply zoom\n scale += delta * _this6.options.scrollZoomFactor * scale;\n scale = Math.max(1, Math.min(_this6.options.maxZoom, scale));\n _this6.controlCoordinates.targetScale = scale;\n var scrollTopPos = document.documentElement.scrollTop || document.body.scrollTop;\n _this6.controlCoordinates.pinchOffsetX = event.pageX;\n _this6.controlCoordinates.pinchOffsetY = event.pageY - scrollTopPos || 0; // need to substract the scroll position\n\n _this6.controlCoordinates.limitOffsetX = (_this6.controlCoordinates.imgWidth * _this6.controlCoordinates.targetScale - _this6.controlCoordinates.containerWidth) / 2;\n _this6.controlCoordinates.limitOffsetY = (_this6.controlCoordinates.imgHeight * _this6.controlCoordinates.targetScale - _this6.controlCoordinates.containerHeight) / 2;\n _this6.controlCoordinates.scaleDifference = _this6.controlCoordinates.targetScale - _this6.controlCoordinates.initialScale;\n _this6.controlCoordinates.targetOffsetX = _this6.controlCoordinates.imgWidth * _this6.controlCoordinates.targetScale <= _this6.controlCoordinates.containerWidth ? 0 : _this6.minMax(_this6.controlCoordinates.initialOffsetX - (_this6.controlCoordinates.pinchOffsetX - _this6.controlCoordinates.containerOffsetX - _this6.controlCoordinates.containerWidth / 2 - _this6.controlCoordinates.initialOffsetX) / (_this6.controlCoordinates.targetScale - _this6.controlCoordinates.scaleDifference) * _this6.controlCoordinates.scaleDifference, _this6.controlCoordinates.limitOffsetX * -1, _this6.controlCoordinates.limitOffsetX);\n _this6.controlCoordinates.targetOffsetY = _this6.controlCoordinates.imgHeight * _this6.controlCoordinates.targetScale <= _this6.controlCoordinates.containerHeight ? 0 : _this6.minMax(_this6.controlCoordinates.initialOffsetY - (_this6.controlCoordinates.pinchOffsetY - _this6.controlCoordinates.containerOffsetY - _this6.controlCoordinates.containerHeight / 2 - _this6.controlCoordinates.initialOffsetY) / (_this6.controlCoordinates.targetScale - _this6.controlCoordinates.scaleDifference) * _this6.controlCoordinates.scaleDifference, _this6.controlCoordinates.limitOffsetY * -1, _this6.controlCoordinates.limitOffsetY);\n _this6.zoomPanElement(_this6.controlCoordinates.targetOffsetX + \"px\", _this6.controlCoordinates.targetOffsetY + \"px\", _this6.controlCoordinates.targetScale);\n if (_this6.controlCoordinates.targetScale > 1) {\n _this6.controlCoordinates.zoomed = true;\n if ((!_this6.domNodes.caption.style.opacity || _this6.domNodes.caption.style.opacity > 0) && _this6.domNodes.caption.style.display !== 'none') {\n _this6.fadeOut(_this6.domNodes.caption, _this6.options.fadeSpeed);\n }\n } else {\n if (_this6.controlCoordinates.initialScale === 1) {\n _this6.controlCoordinates.zoomed = false;\n if (_this6.domNodes.caption.style.display === 'none') {\n _this6.fadeIn(_this6.domNodes.caption, _this6.options.fadeSpeed);\n }\n }\n _this6.controlCoordinates.initialPinchDistance = null;\n _this6.controlCoordinates.capture = false;\n }\n _this6.controlCoordinates.initialPinchDistance = _this6.controlCoordinates.targetPinchDistance;\n _this6.controlCoordinates.initialScale = _this6.controlCoordinates.targetScale;\n _this6.controlCoordinates.initialOffsetX = _this6.controlCoordinates.targetOffsetX;\n _this6.controlCoordinates.initialOffsetY = _this6.controlCoordinates.targetOffsetY;\n _this6.setZoomData(_this6.controlCoordinates.targetScale, _this6.controlCoordinates.targetOffsetX, _this6.controlCoordinates.targetOffsetY);\n _this6.zoomPanElement(_this6.controlCoordinates.targetOffsetX + \"px\", _this6.controlCoordinates.targetOffsetY + \"px\", _this6.controlCoordinates.targetScale);\n });\n }\n this.addEventListener(this.domNodes.image, ['touchstart.' + this.eventNamespace, 'mousedown.' + this.eventNamespace], function (event) {\n if (event.target.tagName === 'A' && event.type === 'touchstart') {\n return true;\n }\n if (event.type === 'mousedown') {\n event.preventDefault();\n _this6.controlCoordinates.initialPointerOffsetX = event.clientX;\n _this6.controlCoordinates.initialPointerOffsetY = event.clientY;\n _this6.controlCoordinates.containerHeight = _this6.getDimensions(_this6.domNodes.image).height;\n _this6.controlCoordinates.containerWidth = _this6.getDimensions(_this6.domNodes.image).width;\n _this6.controlCoordinates.imgHeight = _this6.getDimensions(_this6.currentImage).height;\n _this6.controlCoordinates.imgWidth = _this6.getDimensions(_this6.currentImage).width;\n _this6.controlCoordinates.containerOffsetX = _this6.domNodes.image.offsetLeft;\n _this6.controlCoordinates.containerOffsetY = _this6.domNodes.image.offsetTop;\n _this6.controlCoordinates.initialOffsetX = parseFloat(_this6.currentImage.dataset.translateX);\n _this6.controlCoordinates.initialOffsetY = parseFloat(_this6.currentImage.dataset.translateY);\n _this6.controlCoordinates.capture = true;\n } else {\n _this6.controlCoordinates.touchCount = event.touches.length;\n _this6.controlCoordinates.initialPointerOffsetX = event.touches[0].clientX;\n _this6.controlCoordinates.initialPointerOffsetY = event.touches[0].clientY;\n _this6.controlCoordinates.containerHeight = _this6.getDimensions(_this6.domNodes.image).height;\n _this6.controlCoordinates.containerWidth = _this6.getDimensions(_this6.domNodes.image).width;\n _this6.controlCoordinates.imgHeight = _this6.getDimensions(_this6.currentImage).height;\n _this6.controlCoordinates.imgWidth = _this6.getDimensions(_this6.currentImage).width;\n _this6.controlCoordinates.containerOffsetX = _this6.domNodes.image.offsetLeft;\n _this6.controlCoordinates.containerOffsetY = _this6.domNodes.image.offsetTop;\n if (_this6.controlCoordinates.touchCount === 1) /* Single touch */{\n if (!_this6.controlCoordinates.doubleTapped) {\n _this6.controlCoordinates.doubleTapped = true;\n setTimeout(function () {\n _this6.controlCoordinates.doubleTapped = false;\n }, 300);\n } else {\n _this6.currentImage.classList.add('sl-transition');\n if (!_this6.controlCoordinates.zoomed) {\n _this6.controlCoordinates.initialScale = _this6.options.doubleTapZoom;\n _this6.setZoomData(_this6.controlCoordinates.initialScale, 0, 0);\n _this6.zoomPanElement(0 + \"px\", 0 + \"px\", _this6.controlCoordinates.initialScale);\n if ((!_this6.domNodes.caption.style.opacity || _this6.domNodes.caption.style.opacity > 0) && _this6.domNodes.caption.style.display !== 'none') {\n _this6.fadeOut(_this6.domNodes.caption, _this6.options.fadeSpeed);\n }\n _this6.controlCoordinates.zoomed = true;\n } else {\n _this6.controlCoordinates.initialScale = 1;\n _this6.setZoomData(_this6.controlCoordinates.initialScale, 0, 0);\n _this6.zoomPanElement(0 + \"px\", 0 + \"px\", _this6.controlCoordinates.initialScale);\n _this6.controlCoordinates.zoomed = false;\n }\n setTimeout(function () {\n if (_this6.currentImage) {\n _this6.currentImage.classList.remove('sl-transition');\n }\n }, 200);\n return false;\n }\n _this6.controlCoordinates.initialOffsetX = parseFloat(_this6.currentImage.dataset.translateX);\n _this6.controlCoordinates.initialOffsetY = parseFloat(_this6.currentImage.dataset.translateY);\n } else if (_this6.controlCoordinates.touchCount === 2) /* Pinch */{\n _this6.controlCoordinates.initialPointerOffsetX2 = event.touches[1].clientX;\n _this6.controlCoordinates.initialPointerOffsetY2 = event.touches[1].clientY;\n _this6.controlCoordinates.initialOffsetX = parseFloat(_this6.currentImage.dataset.translateX);\n _this6.controlCoordinates.initialOffsetY = parseFloat(_this6.currentImage.dataset.translateY);\n _this6.controlCoordinates.pinchOffsetX = (_this6.controlCoordinates.initialPointerOffsetX + _this6.controlCoordinates.initialPointerOffsetX2) / 2;\n _this6.controlCoordinates.pinchOffsetY = (_this6.controlCoordinates.initialPointerOffsetY + _this6.controlCoordinates.initialPointerOffsetY2) / 2;\n _this6.controlCoordinates.initialPinchDistance = Math.sqrt((_this6.controlCoordinates.initialPointerOffsetX - _this6.controlCoordinates.initialPointerOffsetX2) * (_this6.controlCoordinates.initialPointerOffsetX - _this6.controlCoordinates.initialPointerOffsetX2) + (_this6.controlCoordinates.initialPointerOffsetY - _this6.controlCoordinates.initialPointerOffsetY2) * (_this6.controlCoordinates.initialPointerOffsetY - _this6.controlCoordinates.initialPointerOffsetY2));\n }\n _this6.controlCoordinates.capture = true;\n }\n if (_this6.controlCoordinates.mousedown) return true;\n if (_this6.transitionCapable) {\n _this6.controlCoordinates.imageLeft = parseInt(_this6.domNodes.image.style.left, 10);\n }\n _this6.controlCoordinates.mousedown = true;\n _this6.controlCoordinates.swipeDiff = 0;\n _this6.controlCoordinates.swipeYDiff = 0;\n _this6.controlCoordinates.swipeStart = event.pageX || event.touches[0].pageX;\n _this6.controlCoordinates.swipeYStart = event.pageY || event.touches[0].pageY;\n return false;\n });\n this.addEventListener(this.domNodes.image, ['touchmove.' + this.eventNamespace, 'mousemove.' + this.eventNamespace, 'MSPointerMove'], function (event) {\n if (!_this6.controlCoordinates.mousedown) {\n return true;\n }\n if (event.type === 'touchmove') {\n if (_this6.controlCoordinates.capture === false) {\n return false;\n }\n _this6.controlCoordinates.pointerOffsetX = event.touches[0].clientX;\n _this6.controlCoordinates.pointerOffsetY = event.touches[0].clientY;\n _this6.controlCoordinates.touchCount = event.touches.length;\n _this6.controlCoordinates.touchmoveCount++;\n if (_this6.controlCoordinates.touchCount > 1) /* Pinch */{\n _this6.controlCoordinates.pointerOffsetX2 = event.touches[1].clientX;\n _this6.controlCoordinates.pointerOffsetY2 = event.touches[1].clientY;\n _this6.controlCoordinates.targetPinchDistance = Math.sqrt((_this6.controlCoordinates.pointerOffsetX - _this6.controlCoordinates.pointerOffsetX2) * (_this6.controlCoordinates.pointerOffsetX - _this6.controlCoordinates.pointerOffsetX2) + (_this6.controlCoordinates.pointerOffsetY - _this6.controlCoordinates.pointerOffsetY2) * (_this6.controlCoordinates.pointerOffsetY - _this6.controlCoordinates.pointerOffsetY2));\n if (_this6.controlCoordinates.initialPinchDistance === null) {\n _this6.controlCoordinates.initialPinchDistance = _this6.controlCoordinates.targetPinchDistance;\n }\n if (Math.abs(_this6.controlCoordinates.initialPinchDistance - _this6.controlCoordinates.targetPinchDistance) >= 1) {\n /* Initialize helpers */\n _this6.controlCoordinates.targetScale = _this6.minMax(_this6.controlCoordinates.targetPinchDistance / _this6.controlCoordinates.initialPinchDistance * _this6.controlCoordinates.initialScale, 1, _this6.options.maxZoom);\n _this6.controlCoordinates.limitOffsetX = (_this6.controlCoordinates.imgWidth * _this6.controlCoordinates.targetScale - _this6.controlCoordinates.containerWidth) / 2;\n _this6.controlCoordinates.limitOffsetY = (_this6.controlCoordinates.imgHeight * _this6.controlCoordinates.targetScale - _this6.controlCoordinates.containerHeight) / 2;\n _this6.controlCoordinates.scaleDifference = _this6.controlCoordinates.targetScale - _this6.controlCoordinates.initialScale;\n _this6.controlCoordinates.targetOffsetX = _this6.controlCoordinates.imgWidth * _this6.controlCoordinates.targetScale <= _this6.controlCoordinates.containerWidth ? 0 : _this6.minMax(_this6.controlCoordinates.initialOffsetX - (_this6.controlCoordinates.pinchOffsetX - _this6.controlCoordinates.containerOffsetX - _this6.controlCoordinates.containerWidth / 2 - _this6.controlCoordinates.initialOffsetX) / (_this6.controlCoordinates.targetScale - _this6.controlCoordinates.scaleDifference) * _this6.controlCoordinates.scaleDifference, _this6.controlCoordinates.limitOffsetX * -1, _this6.controlCoordinates.limitOffsetX);\n _this6.controlCoordinates.targetOffsetY = _this6.controlCoordinates.imgHeight * _this6.controlCoordinates.targetScale <= _this6.controlCoordinates.containerHeight ? 0 : _this6.minMax(_this6.controlCoordinates.initialOffsetY - (_this6.controlCoordinates.pinchOffsetY - _this6.controlCoordinates.containerOffsetY - _this6.controlCoordinates.containerHeight / 2 - _this6.controlCoordinates.initialOffsetY) / (_this6.controlCoordinates.targetScale - _this6.controlCoordinates.scaleDifference) * _this6.controlCoordinates.scaleDifference, _this6.controlCoordinates.limitOffsetY * -1, _this6.controlCoordinates.limitOffsetY);\n _this6.zoomPanElement(_this6.controlCoordinates.targetOffsetX + \"px\", _this6.controlCoordinates.targetOffsetY + \"px\", _this6.controlCoordinates.targetScale);\n if (_this6.controlCoordinates.targetScale > 1) {\n _this6.controlCoordinates.zoomed = true;\n if ((!_this6.domNodes.caption.style.opacity || _this6.domNodes.caption.style.opacity > 0) && _this6.domNodes.caption.style.display !== 'none') {\n _this6.fadeOut(_this6.domNodes.caption, _this6.options.fadeSpeed);\n }\n }\n _this6.controlCoordinates.initialPinchDistance = _this6.controlCoordinates.targetPinchDistance;\n _this6.controlCoordinates.initialScale = _this6.controlCoordinates.targetScale;\n _this6.controlCoordinates.initialOffsetX = _this6.controlCoordinates.targetOffsetX;\n _this6.controlCoordinates.initialOffsetY = _this6.controlCoordinates.targetOffsetY;\n }\n } else {\n _this6.controlCoordinates.targetScale = _this6.controlCoordinates.initialScale;\n _this6.controlCoordinates.limitOffsetX = (_this6.controlCoordinates.imgWidth * _this6.controlCoordinates.targetScale - _this6.controlCoordinates.containerWidth) / 2;\n _this6.controlCoordinates.limitOffsetY = (_this6.controlCoordinates.imgHeight * _this6.controlCoordinates.targetScale - _this6.controlCoordinates.containerHeight) / 2;\n _this6.controlCoordinates.targetOffsetX = _this6.controlCoordinates.imgWidth * _this6.controlCoordinates.targetScale <= _this6.controlCoordinates.containerWidth ? 0 : _this6.minMax(_this6.controlCoordinates.pointerOffsetX - (_this6.controlCoordinates.initialPointerOffsetX - _this6.controlCoordinates.initialOffsetX), _this6.controlCoordinates.limitOffsetX * -1, _this6.controlCoordinates.limitOffsetX);\n _this6.controlCoordinates.targetOffsetY = _this6.controlCoordinates.imgHeight * _this6.controlCoordinates.targetScale <= _this6.controlCoordinates.containerHeight ? 0 : _this6.minMax(_this6.controlCoordinates.pointerOffsetY - (_this6.controlCoordinates.initialPointerOffsetY - _this6.controlCoordinates.initialOffsetY), _this6.controlCoordinates.limitOffsetY * -1, _this6.controlCoordinates.limitOffsetY);\n if (Math.abs(_this6.controlCoordinates.targetOffsetX) === Math.abs(_this6.controlCoordinates.limitOffsetX)) {\n _this6.controlCoordinates.initialOffsetX = _this6.controlCoordinates.targetOffsetX;\n _this6.controlCoordinates.initialPointerOffsetX = _this6.controlCoordinates.pointerOffsetX;\n }\n if (Math.abs(_this6.controlCoordinates.targetOffsetY) === Math.abs(_this6.controlCoordinates.limitOffsetY)) {\n _this6.controlCoordinates.initialOffsetY = _this6.controlCoordinates.targetOffsetY;\n _this6.controlCoordinates.initialPointerOffsetY = _this6.controlCoordinates.pointerOffsetY;\n }\n _this6.setZoomData(_this6.controlCoordinates.initialScale, _this6.controlCoordinates.targetOffsetX, _this6.controlCoordinates.targetOffsetY);\n _this6.zoomPanElement(_this6.controlCoordinates.targetOffsetX + \"px\", _this6.controlCoordinates.targetOffsetY + \"px\", _this6.controlCoordinates.targetScale);\n }\n }\n\n /* Mouse Move implementation */\n if (event.type === 'mousemove' && _this6.controlCoordinates.mousedown) {\n if (event.type == 'touchmove') return true;\n event.preventDefault();\n if (_this6.controlCoordinates.capture === false) return false;\n _this6.controlCoordinates.pointerOffsetX = event.clientX;\n _this6.controlCoordinates.pointerOffsetY = event.clientY;\n _this6.controlCoordinates.targetScale = _this6.controlCoordinates.initialScale;\n _this6.controlCoordinates.limitOffsetX = (_this6.controlCoordinates.imgWidth * _this6.controlCoordinates.targetScale - _this6.controlCoordinates.containerWidth) / 2;\n _this6.controlCoordinates.limitOffsetY = (_this6.controlCoordinates.imgHeight * _this6.controlCoordinates.targetScale - _this6.controlCoordinates.containerHeight) / 2;\n _this6.controlCoordinates.targetOffsetX = _this6.controlCoordinates.imgWidth * _this6.controlCoordinates.targetScale <= _this6.controlCoordinates.containerWidth ? 0 : _this6.minMax(_this6.controlCoordinates.pointerOffsetX - (_this6.controlCoordinates.initialPointerOffsetX - _this6.controlCoordinates.initialOffsetX), _this6.controlCoordinates.limitOffsetX * -1, _this6.controlCoordinates.limitOffsetX);\n _this6.controlCoordinates.targetOffsetY = _this6.controlCoordinates.imgHeight * _this6.controlCoordinates.targetScale <= _this6.controlCoordinates.containerHeight ? 0 : _this6.minMax(_this6.controlCoordinates.pointerOffsetY - (_this6.controlCoordinates.initialPointerOffsetY - _this6.controlCoordinates.initialOffsetY), _this6.controlCoordinates.limitOffsetY * -1, _this6.controlCoordinates.limitOffsetY);\n if (Math.abs(_this6.controlCoordinates.targetOffsetX) === Math.abs(_this6.controlCoordinates.limitOffsetX)) {\n _this6.controlCoordinates.initialOffsetX = _this6.controlCoordinates.targetOffsetX;\n _this6.controlCoordinates.initialPointerOffsetX = _this6.controlCoordinates.pointerOffsetX;\n }\n if (Math.abs(_this6.controlCoordinates.targetOffsetY) === Math.abs(_this6.controlCoordinates.limitOffsetY)) {\n _this6.controlCoordinates.initialOffsetY = _this6.controlCoordinates.targetOffsetY;\n _this6.controlCoordinates.initialPointerOffsetY = _this6.controlCoordinates.pointerOffsetY;\n }\n _this6.setZoomData(_this6.controlCoordinates.initialScale, _this6.controlCoordinates.targetOffsetX, _this6.controlCoordinates.targetOffsetY);\n _this6.zoomPanElement(_this6.controlCoordinates.targetOffsetX + \"px\", _this6.controlCoordinates.targetOffsetY + \"px\", _this6.controlCoordinates.targetScale);\n }\n if (!_this6.controlCoordinates.zoomed) {\n _this6.controlCoordinates.swipeEnd = event.pageX || event.touches[0].pageX;\n _this6.controlCoordinates.swipeYEnd = event.pageY || event.touches[0].pageY;\n _this6.controlCoordinates.swipeDiff = _this6.controlCoordinates.swipeStart - _this6.controlCoordinates.swipeEnd;\n _this6.controlCoordinates.swipeYDiff = _this6.controlCoordinates.swipeYStart - _this6.controlCoordinates.swipeYEnd;\n if (_this6.options.animationSlide) {\n _this6.slide(0, -_this6.controlCoordinates.swipeDiff + 'px');\n }\n }\n });\n this.addEventListener(this.domNodes.image, ['touchend.' + this.eventNamespace, 'mouseup.' + this.eventNamespace, 'touchcancel.' + this.eventNamespace, 'mouseleave.' + this.eventNamespace, 'pointerup', 'pointercancel', 'MSPointerUp', 'MSPointerCancel'], function (event) {\n if (_this6.isTouchDevice && event.type === 'touchend') {\n _this6.controlCoordinates.touchCount = event.touches.length;\n if (_this6.controlCoordinates.touchCount === 0) /* No touch */{\n /* Set attributes */\n if (_this6.currentImage) {\n _this6.setZoomData(_this6.controlCoordinates.initialScale, _this6.controlCoordinates.targetOffsetX, _this6.controlCoordinates.targetOffsetY);\n }\n if (_this6.controlCoordinates.initialScale === 1) {\n _this6.controlCoordinates.zoomed = false;\n if (_this6.domNodes.caption.style.display === 'none') {\n _this6.fadeIn(_this6.domNodes.caption, _this6.options.fadeSpeed);\n }\n }\n _this6.controlCoordinates.initialPinchDistance = null;\n _this6.controlCoordinates.capture = false;\n } else if (_this6.controlCoordinates.touchCount === 1) /* Single touch */{\n _this6.controlCoordinates.initialPointerOffsetX = event.touches[0].clientX;\n _this6.controlCoordinates.initialPointerOffsetY = event.touches[0].clientY;\n } else if (_this6.controlCoordinates.touchCount > 1) /* Pinch */{\n _this6.controlCoordinates.initialPinchDistance = null;\n }\n }\n if (_this6.controlCoordinates.mousedown) {\n _this6.controlCoordinates.mousedown = false;\n var possibleDir = true;\n if (!_this6.options.loop) {\n if (_this6.currentImageIndex === 0 && _this6.controlCoordinates.swipeDiff < 0) {\n possibleDir = false;\n }\n if (_this6.currentImageIndex >= _this6.relatedElements.length - 1 && _this6.controlCoordinates.swipeDiff > 0) {\n possibleDir = false;\n }\n }\n if (Math.abs(_this6.controlCoordinates.swipeDiff) > _this6.options.swipeTolerance && possibleDir) {\n _this6.loadImage(_this6.controlCoordinates.swipeDiff > 0 ? 1 : -1);\n } else if (_this6.options.animationSlide) {\n _this6.slide(_this6.options.animationSpeed / 1000, 0 + 'px');\n }\n if (_this6.options.swipeClose && Math.abs(_this6.controlCoordinates.swipeYDiff) > 50 && Math.abs(_this6.controlCoordinates.swipeDiff) < _this6.options.swipeTolerance) {\n _this6.close();\n }\n }\n });\n this.addEventListener(this.domNodes.image, ['dblclick'], function (event) {\n if (_this6.isTouchDevice) return;\n _this6.controlCoordinates.initialPointerOffsetX = event.clientX;\n _this6.controlCoordinates.initialPointerOffsetY = event.clientY;\n _this6.controlCoordinates.containerHeight = _this6.getDimensions(_this6.domNodes.image).height;\n _this6.controlCoordinates.containerWidth = _this6.getDimensions(_this6.domNodes.image).width;\n _this6.controlCoordinates.imgHeight = _this6.getDimensions(_this6.currentImage).height;\n _this6.controlCoordinates.imgWidth = _this6.getDimensions(_this6.currentImage).width;\n _this6.controlCoordinates.containerOffsetX = _this6.domNodes.image.offsetLeft;\n _this6.controlCoordinates.containerOffsetY = _this6.domNodes.image.offsetTop;\n _this6.currentImage.classList.add('sl-transition');\n if (!_this6.controlCoordinates.zoomed) {\n _this6.controlCoordinates.initialScale = _this6.options.doubleTapZoom;\n _this6.setZoomData(_this6.controlCoordinates.initialScale, 0, 0);\n _this6.zoomPanElement(0 + \"px\", 0 + \"px\", _this6.controlCoordinates.initialScale);\n if ((!_this6.domNodes.caption.style.opacity || _this6.domNodes.caption.style.opacity > 0) && _this6.domNodes.caption.style.display !== 'none') {\n _this6.fadeOut(_this6.domNodes.caption, _this6.options.fadeSpeed);\n }\n _this6.controlCoordinates.zoomed = true;\n } else {\n _this6.controlCoordinates.initialScale = 1;\n _this6.setZoomData(_this6.controlCoordinates.initialScale, 0, 0);\n _this6.zoomPanElement(0 + \"px\", 0 + \"px\", _this6.controlCoordinates.initialScale);\n _this6.controlCoordinates.zoomed = false;\n if (_this6.domNodes.caption.style.display === 'none') {\n _this6.fadeIn(_this6.domNodes.caption, _this6.options.fadeSpeed);\n }\n }\n setTimeout(function () {\n if (_this6.currentImage) {\n _this6.currentImage.classList.remove('sl-transition');\n _this6.currentImage.style[_this6.transitionPrefix + 'transform-origin'] = null;\n }\n }, 200);\n _this6.controlCoordinates.capture = true;\n return false;\n });\n }\n }, {\n key: \"getDimensions\",\n value: function getDimensions(element) {\n var styles = window.getComputedStyle(element),\n height = element.offsetHeight,\n width = element.offsetWidth,\n borderTopWidth = parseFloat(styles.borderTopWidth),\n borderBottomWidth = parseFloat(styles.borderBottomWidth),\n paddingTop = parseFloat(styles.paddingTop),\n paddingBottom = parseFloat(styles.paddingBottom),\n borderLeftWidth = parseFloat(styles.borderLeftWidth),\n borderRightWidth = parseFloat(styles.borderRightWidth),\n paddingLeft = parseFloat(styles.paddingLeft),\n paddingRight = parseFloat(styles.paddingRight);\n return {\n height: height - borderBottomWidth - borderTopWidth - paddingTop - paddingBottom,\n width: width - borderLeftWidth - borderRightWidth - paddingLeft - paddingRight\n };\n }\n }, {\n key: \"updateHash\",\n value: function updateHash() {\n var newHash = 'pid=' + (this.currentImageIndex + 1),\n newURL = window.location.href.split('#')[0] + '#' + newHash;\n this.hashReseted = false;\n if (this.pushStateSupport) {\n window.history[this.historyHasChanges ? 'replaceState' : 'pushState']('', document.title, newURL);\n } else {\n // what is the browser target of this?\n if (this.historyHasChanges) {\n window.location.replace(newURL);\n } else {\n window.location.hash = newHash;\n }\n }\n if (!this.historyHasChanges) {\n this.urlChangedOnce = true;\n }\n this.historyHasChanges = true;\n }\n }, {\n key: \"resetHash\",\n value: function resetHash() {\n this.hashReseted = true;\n if (this.urlChangedOnce) {\n history.back();\n } else {\n if (this.pushStateSupport) {\n history.pushState('', document.title, window.location.pathname + window.location.search);\n } else {\n window.location.hash = '';\n }\n }\n //\n //in case an history operation is still pending\n clearTimeout(this.historyUpdateTimeout);\n }\n }, {\n key: \"updateURL\",\n value: function updateURL() {\n clearTimeout(this.historyUpdateTimeout);\n if (!this.historyHasChanges) {\n this.updateHash(); // first time\n } else {\n this.historyUpdateTimeout = setTimeout(this.updateHash.bind(this), 800);\n }\n }\n }, {\n key: \"setCaption\",\n value: function setCaption(captionText, imageWidth, allowHTML) {\n var _this7 = this;\n if (this.options.captions && captionText && captionText !== '' && typeof captionText !== \"undefined\") {\n var _ref;\n var property = ((_ref = allowHTML !== null && allowHTML !== void 0 ? allowHTML : this.options.captionHTML) !== null && _ref !== void 0 ? _ref : true) ? 'innerHTML' : 'innerText';\n this.hide(this.domNodes.caption);\n this.domNodes.caption.style.width = imageWidth + 'px';\n this.domNodes.caption[property] = captionText;\n this.domNodes.image.appendChild(this.domNodes.caption);\n setTimeout(function () {\n _this7.fadeIn(_this7.domNodes.caption, _this7.options.fadeSpeed);\n }, this.options.captionDelay);\n }\n }\n }, {\n key: \"slide\",\n value: function slide(speed, pos) {\n if (!this.transitionCapable) {\n return this.domNodes.image.style.left = pos;\n }\n this.domNodes.image.style[this.transitionPrefix + 'transform'] = 'translateX(' + pos + ')';\n this.domNodes.image.style[this.transitionPrefix + 'transition'] = this.transitionPrefix + 'transform ' + speed + 's linear';\n }\n }, {\n key: \"getRelated\",\n value: function getRelated(rel) {\n var elems;\n if (rel && rel !== false && rel !== 'nofollow') {\n elems = Array.from(this.elements).filter(function (element) {\n return element.getAttribute('rel') === rel;\n });\n } else {\n elems = this.elements;\n }\n return elems;\n }\n }, {\n key: \"openImage\",\n value: function openImage(element) {\n var _this8 = this;\n element.dispatchEvent(new Event('show.' + this.eventNamespace));\n this.globalScrollbarWidth = this.getScrollbarWidth();\n if (this.options.disableScroll) {\n this.toggleScrollbar('hide');\n this.globalScrollbarWidth = 0;\n }\n if (this.options.htmlClass && this.options.htmlClass !== '') {\n document.querySelector('html').classList.add(this.options.htmlClass);\n }\n document.body.appendChild(this.domNodes.wrapper);\n this.domNodes.wrapper.appendChild(this.domNodes.image);\n if (this.options.overlay) {\n document.body.appendChild(this.domNodes.overlay);\n }\n this.relatedElements = this.getRelated(element.rel);\n if (this.options.showCounter) {\n if (this.relatedElements.length == 1 && this.domNodes.wrapper.contains(this.domNodes.counter)) {\n this.domNodes.wrapper.removeChild(this.domNodes.counter);\n } else if (this.relatedElements.length > 1 && !this.domNodes.wrapper.contains(this.domNodes.counter)) {\n this.domNodes.wrapper.appendChild(this.domNodes.counter);\n }\n }\n if (this.options.download && this.domNodes.download) {\n this.domNodes.wrapper.appendChild(this.domNodes.download);\n }\n this.isAnimating = true;\n this.currentImageIndex = this.relatedElements.indexOf(element);\n var targetURL = element.getAttribute(this.options.sourceAttr);\n this.currentImage = document.createElement('img');\n this.currentImage.style.display = 'none';\n this.currentImage.setAttribute('src', targetURL);\n this.currentImage.dataset.scale = 1;\n this.currentImage.dataset.translateX = 0;\n this.currentImage.dataset.translateY = 0;\n if (this.loadedImages.indexOf(targetURL) === -1) {\n this.loadedImages.push(targetURL);\n }\n this.domNodes.image.innerHTML = '';\n this.domNodes.image.setAttribute('style', '');\n this.domNodes.image.appendChild(this.currentImage);\n this.fadeIn(this.domNodes.overlay, this.options.fadeSpeed);\n this.fadeIn([this.domNodes.counter, this.domNodes.navigation, this.domNodes.closeButton, this.domNodes.download], this.options.fadeSpeed);\n this.show(this.domNodes.spinner);\n this.domNodes.counter.querySelector('.sl-current').innerHTML = this.currentImageIndex + 1;\n this.domNodes.counter.querySelector('.sl-total').innerHTML = this.relatedElements.length;\n this.adjustImage();\n if (this.options.preloading) {\n this.preload();\n }\n setTimeout(function () {\n element.dispatchEvent(new Event('shown.' + _this8.eventNamespace));\n }, this.options.animationSpeed);\n }\n }, {\n key: \"forceFocus\",\n value: function forceFocus() {\n var _this9 = this;\n this.removeEventListener(document, 'focusin.' + this.eventNamespace);\n this.addEventListener(document, 'focusin.' + this.eventNamespace, function (event) {\n if (document !== event.target && _this9.domNodes.wrapper !== event.target && !_this9.domNodes.wrapper.contains(event.target)) {\n _this9.domNodes.wrapper.focus();\n }\n });\n }\n\n // utility\n }, {\n key: \"addEventListener\",\n value: function addEventListener(elements, events, callback, opts) {\n elements = this.wrap(elements);\n events = this.wrap(events);\n var _iterator = _createForOfIteratorHelper(elements),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var element = _step.value;\n if (!element.namespaces) {\n element.namespaces = {};\n } // save the namespaces addEventListener the DOM element itself\n var _iterator2 = _createForOfIteratorHelper(events),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var event = _step2.value;\n var options = opts || false;\n var needsPassiveFix = ['touchstart', 'touchmove', 'mousewheel', 'DOMMouseScroll'].indexOf(event.split('.')[0]) >= 0;\n if (needsPassiveFix && this.isPassiveEventsSupported) {\n if (_typeof(options) === 'object') {\n options.passive = true;\n } else {\n options = {\n passive: true\n };\n }\n }\n element.namespaces[event] = callback;\n element.addEventListener(event.split('.')[0], callback, options);\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n }, {\n key: \"removeEventListener\",\n value: function removeEventListener(elements, events) {\n elements = this.wrap(elements);\n events = this.wrap(events);\n var _iterator3 = _createForOfIteratorHelper(elements),\n _step3;\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var _iterator4 = _createForOfIteratorHelper(events),\n _step4;\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var event = _step4.value;\n if (element.namespaces && element.namespaces[event]) {\n element.removeEventListener(event.split('.')[0], element.namespaces[event]);\n delete element.namespaces[event];\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n }, {\n key: \"fadeOut\",\n value: function fadeOut(elements, duration, callback) {\n var _this10 = this;\n elements = this.wrap(elements);\n var _iterator5 = _createForOfIteratorHelper(elements),\n _step5;\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var element = _step5.value;\n element.style.opacity = parseFloat(element) || window.getComputedStyle(element).getPropertyValue(\"opacity\");\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n this.isFadeIn = false;\n var step = 16.66666 / (duration || this.options.fadeSpeed),\n fade = function fade() {\n var currentOpacity = parseFloat(elements[0].style.opacity);\n if ((currentOpacity -= step) < 0) {\n var _iterator6 = _createForOfIteratorHelper(elements),\n _step6;\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var element = _step6.value;\n element.style.display = \"none\";\n // element.style.opacity = '';\n element.style.opacity = 1;\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n callback && callback.call(_this10, elements);\n } else {\n var _iterator7 = _createForOfIteratorHelper(elements),\n _step7;\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var _element = _step7.value;\n _element.style.opacity = currentOpacity;\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n requestAnimationFrame(fade);\n }\n };\n fade();\n }\n }, {\n key: \"fadeIn\",\n value: function fadeIn(elements, duration, callback, display) {\n var _this11 = this;\n elements = this.wrap(elements);\n var _iterator8 = _createForOfIteratorHelper(elements),\n _step8;\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var element = _step8.value;\n if (element) {\n element.style.opacity = 0;\n element.style.display = display || \"block\";\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n this.isFadeIn = true;\n var opacityTarget = parseFloat(elements[0].dataset.opacityTarget || 1),\n step = 16.66666 * opacityTarget / (duration || this.options.fadeSpeed),\n fade = function fade() {\n var currentOpacity = parseFloat(elements[0].style.opacity);\n if (!((currentOpacity += step) > opacityTarget)) {\n var _iterator9 = _createForOfIteratorHelper(elements),\n _step9;\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var element = _step9.value;\n if (element) {\n element.style.opacity = currentOpacity;\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n if (!_this11.isFadeIn) return;\n requestAnimationFrame(fade);\n } else {\n var _iterator10 = _createForOfIteratorHelper(elements),\n _step10;\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var _element2 = _step10.value;\n if (_element2) {\n _element2.style.opacity = opacityTarget;\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n callback && callback.call(_this11, elements);\n }\n };\n fade();\n }\n }, {\n key: \"hide\",\n value: function hide(elements) {\n elements = this.wrap(elements);\n var _iterator11 = _createForOfIteratorHelper(elements),\n _step11;\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var element = _step11.value;\n if (element.style.display != 'none') {\n element.dataset.initialDisplay = element.style.display;\n }\n element.style.display = 'none';\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n }, {\n key: \"show\",\n value: function show(elements, display) {\n elements = this.wrap(elements);\n var _iterator12 = _createForOfIteratorHelper(elements),\n _step12;\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var element = _step12.value;\n element.style.display = element.dataset.initialDisplay || display || 'block';\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n }\n }, {\n key: \"wrap\",\n value: function wrap(input) {\n return typeof input[Symbol.iterator] === 'function' && typeof input !== 'string' ? input : [input];\n }\n }, {\n key: \"on\",\n value: function on(events, callback) {\n events = this.wrap(events);\n var _iterator13 = _createForOfIteratorHelper(this.elements),\n _step13;\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var element = _step13.value;\n if (!element.fullyNamespacedEvents) {\n element.fullyNamespacedEvents = {};\n }\n var _iterator14 = _createForOfIteratorHelper(events),\n _step14;\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var event = _step14.value;\n element.fullyNamespacedEvents[event] = callback;\n element.addEventListener(event, callback);\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n return this;\n }\n }, {\n key: \"off\",\n value: function off(events) {\n events = this.wrap(events);\n var _iterator15 = _createForOfIteratorHelper(this.elements),\n _step15;\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var element = _step15.value;\n var _iterator16 = _createForOfIteratorHelper(events),\n _step16;\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var event = _step16.value;\n if (typeof element.fullyNamespacedEvents !== 'undefined' && event in element.fullyNamespacedEvents) {\n element.removeEventListener(event, element.fullyNamespacedEvents[event]);\n }\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n return this;\n }\n\n // api\n }, {\n key: \"open\",\n value: function open(elem) {\n var position = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n elem = elem || this.elements[0];\n if (typeof jQuery !== \"undefined\" && elem instanceof jQuery) {\n elem = elem.get(0);\n }\n if (position > 0) {\n elem = this.elements[position];\n }\n this.initialImageIndex = this.elements.indexOf(elem);\n if (this.initialImageIndex > -1) {\n this.openImage(elem);\n }\n }\n }, {\n key: \"openPosition\",\n value: function openPosition(position) {\n var elem = this.elements[position];\n this.open(elem, position);\n }\n }, {\n key: \"next\",\n value: function next() {\n this.loadImage(1);\n }\n }, {\n key: \"prev\",\n value: function prev() {\n this.loadImage(-1);\n }\n\n // get some useful data\n }, {\n key: \"getLighboxData\",\n value: function getLighboxData() {\n return {\n currentImageIndex: this.currentImageIndex,\n currentImage: this.currentImage,\n globalScrollbarWidth: this.globalScrollbarWidth\n };\n }\n\n //close is exposed anyways..\n }, {\n key: \"destroy\",\n value: function destroy() {\n //remove all custom event listeners from elements\n this.off(['close.' + this.eventNamespace, 'closed.' + this.eventNamespace, 'nextImageLoaded.' + this.eventNamespace, 'prevImageLoaded.' + this.eventNamespace, 'change.' + this.eventNamespace, 'nextDone.' + this.eventNamespace, 'prevDone.' + this.eventNamespace, 'error.' + this.eventNamespace, 'changed.' + this.eventNamespace, 'next.' + this.eventNamespace, 'prev.' + this.eventNamespace, 'show.' + this.eventNamespace, 'shown.' + this.eventNamespace]);\n this.removeEventListener(this.elements, 'click.' + this.eventNamespace);\n this.removeEventListener(document, 'focusin.' + this.eventNamespace);\n this.removeEventListener(document.body, 'contextmenu.' + this.eventNamespace);\n this.removeEventListener(document.body, 'keyup.' + this.eventNamespace);\n this.removeEventListener(this.domNodes.navigation.getElementsByTagName('button'), 'click.' + this.eventNamespace);\n this.removeEventListener(this.domNodes.closeButton, 'click.' + this.eventNamespace);\n this.removeEventListener(window, 'resize.' + this.eventNamespace);\n this.removeEventListener(window, 'hashchange.' + this.eventNamespace);\n this.close();\n if (this.isOpen) {\n document.body.removeChild(this.domNodes.wrapper);\n document.body.removeChild(this.domNodes.overlay);\n }\n this.elements = null;\n }\n }, {\n key: \"refresh\",\n value: function refresh() {\n if (!this.initialSelector) {\n throw 'refreshing only works when you initialize using a selector!';\n }\n var options = this.options,\n selector = this.initialSelector;\n this.destroy();\n this.constructor(selector, options);\n return this;\n }\n }]);\n return SimpleLightbox;\n}();\nvar _default = SimpleLightbox;\nexports[\"default\"] = _default;\nglobal.SimpleLightbox = SimpleLightbox;","/* eslint-disable radix */\n/* eslint-disable no-unused-vars */\n/* eslint-disable no-undef */\n/*!\n * jQzoom Evolution Library v2.3 - Javascript Image magnifier\n * http://www.mind-projects.it\n *\n * Copyright 2011, Engineer Marco Renzi\n * Licensed under the BSD license.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * * Neither the name of the organization nor the\n * names of its contributors may be used to endorse or promote products\n * derived from this software without specific prior written permission.\n *\n * Date: 03 May 2011 22:16:00\n */\n(function ($) {\n //GLOBAL VARIABLES\n var body = $(document.body);\n var window = $(window);\n var jqzoompluging_disabled = false; //disabilita globalmente il plugin\n $.fn.jqzoom = function (options) {\n return this.each(function () {\n var node = this.nodeName.toLowerCase();\n if (node == 'a') {\n new jqzoom(this, options);\n }\n });\n };\n jqzoom = function (el, options) {\n var api = null;\n api = $(el).data('jqzoom');\n if (api) return api;\n var obj = this;\n var settings = $.extend({}, $.jqzoom.defaults, options || {});\n obj.el = el;\n el.rel = $(el).attr('rel');\n //ANCHOR ELEMENT\n el.zoom_active = false;\n el.zoom_disabled = false; //to disable single zoom instance\n el.largeimageloading = false; //tell us if large image is loading\n el.largeimageloaded = false; //tell us if large image is loaded\n el.scale = {};\n el.timer = null;\n el.mousepos = {};\n el.mouseDown = false;\n $(el).css({\n 'outline-style': 'none',\n 'text-decoration': 'none'\n });\n //BASE IMAGE\n var img = $('img:eq(0)', el);\n el.title = $(el).attr('title');\n el.imagetitle = img.attr('title');\n var zoomtitle = ($.trim(el.title).length > 0) ? el.title : el.imagetitle;\n var smallimage = new Smallimage(img);\n var lens = new Lens();\n var stage = new Stage();\n var largeimage = new Largeimage();\n var loader = new Loader();\n //preventing default click,allowing the onclick event [exmple: lightbox]\n $(el).bind('click', function (e) {\n e.preventDefault();\n return false;\n });\n //setting the default zoomType if not in settings\n var zoomtypes = ['standard', 'drag', 'innerzoom', 'reverse'];\n if ($.inArray($.trim(settings.zoomType), zoomtypes) < 0) {\n settings.zoomType = 'standard';\n }\n $.extend(obj, {\n create: function () { //create the main objects\n //create ZoomPad\n if ($('.zoomPad', el).length == 0) {\n el.zoomPad = $('
    ').addClass('zoomPad');\n img.wrap(el.zoomPad);\n }\n if (settings.zoomType == 'innerzoom') {\n settings.zoomWidth = smallimage.w;\n settings.zoomHeight = smallimage.h;\n }\n //creating ZoomPup\n if ($('.zoomPup', el).length == 0) {\n lens.append();\n }\n //creating zoomWindow\n if ($('.zoomWindow', el).length == 0) {\n stage.append();\n }\n //creating Preload\n if ($('.zoomPreload', el).length == 0) {\n loader.append();\n }\n //preloading images\n if (settings.preloadImages || settings.zoomType == 'drag' || settings.alwaysOn) {\n obj.load();\n }\n obj.init();\n },\n init: function () {\n //drag option\n if (settings.zoomType == 'drag') {\n $('.zoomPad', el).mousedown(function () {\n el.mouseDown = true;\n });\n $('.zoomPad', el).mouseup(function () {\n el.mouseDown = false;\n });\n document.body.ondragstart = function () {\n return false;\n };\n $('.zoomPad', el).css({\n cursor: 'default'\n });\n $('.zoomPup', el).css({\n cursor: 'move'\n });\n }\n if (settings.zoomType == 'innerzoom') {\n $('.zoomWrapper', el).css({\n cursor: 'crosshair'\n });\n }\n $('.zoomPad', el).on('mouseenter', function (event) {\n img.attr('title', '');\n $(el).attr('title', '');\n el.zoom_active = true;\n //if loaded then activate else load large image\n smallimage.fetchdata();\n if (el.largeimageloaded) {\n obj.activate(event);\n } else {\n obj.load();\n }\n });\n $('.zoomPad', el).on('mouseleave', function (event) {\n obj.deactivate();\n });\n $('.zoomPad', el).on('mousemove', function (e) {\n\n //prevent fast mouse mevements not to fire the mouseout event\n if (e.pageX > smallimage.pos.r || e.pageX < smallimage.pos.l || e.pageY < smallimage.pos.t || e.pageY > smallimage.pos.b) {\n lens.setcenter();\n return false;\n }\n el.zoom_active = true;\n if (el.largeimageloaded && !$('.zoomWindow', el).is(':visible')) {\n obj.activate(e);\n }\n if (el.largeimageloaded && (settings.zoomType != 'drag' || (settings.zoomType == 'drag' && el.mouseDown))) {\n lens.setposition(e);\n }\n });\n var thumb_preload = new Array();\n var i = 0;\n //binding click event on thumbnails\n var thumblist = new Array();\n thumblist = $('a', $('.jqzoom-thumblist')).filter(function () {\n var rel = $(this).attr('rel');\n if (rel.includes(el.rel)) {\n return this;\n }\n });\n if (thumblist.length > 0) {\n //getting the first to the last\n var first = thumblist.splice(0, 1);\n thumblist.push(first);\n }\n thumblist.each(function () {\n //preloading thumbs\n if (settings.preloadImages) {\n var thumb_options = $.extend({}, eval('(' + $.trim($(this).attr('rel')) + ')'));\n thumb_preload[i] = new Image();\n thumb_preload[i].src = thumb_options.largeimage;\n i++;\n }\n $(this).on('mouseover touch', function (e) {\n if ($(this).hasClass('zoomThumbActive')) {\n return false;\n }\n thumblist.each(function () {\n $(this).removeClass('zoomThumbActive');\n $(this).closest('.image-block__thumbnail').removeClass('borderActive');\n });\n e.preventDefault();\n obj.swapimage(this);\n return false;\n });\n });\n },\n load: function () {\n if (el.largeimageloaded == false && el.largeimageloading == false) {\n var url = $(el).attr('href');\n el.largeimageloading = true;\n largeimage.loadimage(url);\n }\n },\n activate: function (e) {\n clearTimeout(el.timer);\n //show lens and zoomWindow\n lens.show();\n stage.setposition();\n stage.show();\n },\n deactivate: function (e) {\n switch (settings.zoomType) {\n case 'drag':\n //nothing or lens.setcenter();\n break;\n default:\n img.attr('title', el.imagetitle);\n $(el).attr('title', el.title);\n if (settings.alwaysOn) {\n lens.setcenter();\n } else {\n stage.hide();\n lens.hide();\n }\n break;\n }\n el.zoom_active = false;\n },\n swapimage: function (link) {\n el.largeimageloading = false;\n el.largeimageloaded = false;\n var options = new Object();\n options = $.extend({}, eval('(' + $.trim($(link).attr('rel')) + ')'));\n if (options.smallimage && options.largeimage) {\n var smallimage = options.smallimage;\n var largeimage = options.largeimage;\n $(link).addClass('zoomThumbActive');\n $(link).closest('.image-block__thumbnail').addClass('borderActive');\n $(el).attr('href', largeimage);\n img.attr('src', smallimage);\n lens.hide();\n stage.hide();\n obj.load();\n } else {\n alert('ERROR :: Missing parameter for largeimage or smallimage.');\n throw 'ERROR :: Missing parameter for largeimage or smallimage.';\n }\n return false;\n }\n });\n //sometimes image is already loaded and onload will not fire\n if (img[0].complete) {\n //fetching data from sallimage if was previously loaded\n smallimage.fetchdata();\n if ($('.zoomPad', el).length == 0) obj.create();\n }\n /*========================================================,\n| Smallimage\n|---------------------------------------------------------:\n| Base image into the anchor element\n`========================================================*/\n\n function Smallimage(image) {\n var $obj = this;\n this.node = image[0];\n this.findborder = function () {\n var bordertop = 0;\n bordertop = image.css('border-top-width');\n btop = '';\n var borderleft = 0;\n borderleft = image.css('border-left-width');\n bleft = '';\n if (bordertop) {\n for (i = 0; i < 3; i++) {\n var x = [];\n x = bordertop.substr(i, 1);\n if (isNaN(x) == false) {\n btop = btop + '' + bordertop.substr(i, 1);\n } else {\n break;\n }\n }\n }\n if (borderleft) {\n for (i = 0; i < 3; i++) {\n if (!isNaN(borderleft.substr(i, 1))) {\n bleft = bleft + borderleft.substr(i, 1);\n } else {\n break;\n }\n }\n }\n $obj.btop = (btop.length > 0) ? eval(btop) : 0;\n $obj.bleft = (bleft.length > 0) ? eval(bleft) : 0;\n };\n this.fetchdata = function () {\n $obj.findborder();\n $obj.w = image.width();\n $obj.h = image.height();\n $obj.ow = image.outerWidth();\n $obj.oh = image.outerHeight();\n $obj.pos = image.offset();\n $obj.pos.l = image.offset().left + $obj.bleft;\n $obj.pos.t = image.offset().top + $obj.btop;\n $obj.pos.r = $obj.w + $obj.pos.l;\n $obj.pos.b = $obj.h + $obj.pos.t;\n $obj.rightlimit = image.offset().left + $obj.ow;\n $obj.bottomlimit = image.offset().top + $obj.oh;\n \n };\n this.node.onerror = function () {\n alert('Problems while loading image.');\n throw 'Problems while loading image.';\n };\n this.node.onload = function () {\n $obj.fetchdata();\n if ($('.zoomPad', el).length == 0) obj.create();\n };\n return $obj;\n }\n /*========================================================,\n | Loader\n |---------------------------------------------------------:\n | Show that the large image is loading\n `========================================================*/\n\n function Loader() {\n var $obj = this;\n this.append = function () {\n this.node = $('
    ').addClass('zoomPreload').css('visibility', 'hidden').html(settings.preloadText);\n $('.zoomPad', el).append(this.node);\n };\n this.show = function () {\n this.node.top = (smallimage.oh - this.node.height()) / 2;\n this.node.left = (smallimage.ow - this.node.width()) / 2;\n //setting position\n this.node.css({\n top: this.node.top,\n left: this.node.left,\n position: 'absolute',\n visibility: 'visible'\n });\n };\n this.hide = function () {\n this.node.css('visibility', 'hidden');\n };\n return this;\n }\n /*========================================================,\n| Lens\n|---------------------------------------------------------:\n| Lens over the image\n`========================================================*/\n\n function Lens() {\n var $obj = this;\n this.node = $('
    ').addClass('zoomPup');\n //this.nodeimgwrapper = $('
    ').addClass('zoomPupImgWrapper');\n this.append = function () {\n $('.zoomPad', el).append($(this.node).hide());\n if (settings.zoomType == 'reverse') {\n this.image = new Image();\n this.image.src = smallimage.node.src; // fires off async\n $(this.node).empty().append(this.image);\n }\n };\n this.setdimensions = function () {\n this.node.w = (parseInt((settings.zoomWidth) / el.scale.x) > smallimage.w) ? smallimage.w : (parseInt(settings.zoomWidth / el.scale.x)); \n this.node.h = (parseInt((settings.zoomHeight) / el.scale.y) > smallimage.h) ? smallimage.h : (parseInt(settings.zoomHeight / el.scale.y)); \n this.node.top = (smallimage.oh - this.node.h - 2) / 2;\n this.node.left = (smallimage.ow - this.node.w - 2) / 2;\n //centering lens\n this.node.css({\n top: 0,\n left: 0,\n width: this.node.w + 'px',\n height: this.node.h + 'px',\n position: 'absolute',\n display: 'none',\n borderWidth: 1 + 'px'\n });\n\n\n\n if (settings.zoomType == 'reverse') {\n this.image.src = smallimage.node.src;\n $(this.node).css({\n 'opacity': 1\n });\n\n $(this.image).css({\n position: 'absolute',\n display: 'block',\n left: -(this.node.left + 1 - smallimage.bleft) + 'px',\n top: -(this.node.top + 1 - smallimage.btop) + 'px'\n });\n\n }\n };\n this.setcenter = function () {\n //calculating center position\n this.node.top = (smallimage.oh - this.node.h - 2) / 2;\n this.node.left = (smallimage.ow - this.node.w - 2) / 2;\n //centering lens\n this.node.css({\n top: this.node.top,\n left: this.node.left\n });\n if (settings.zoomType == 'reverse') {\n $(this.image).css({\n position: 'absolute',\n display: 'block',\n left: -(this.node.left + 1 - smallimage.bleft) + 'px',\n top: -(this.node.top + 1 - smallimage.btop) + 'px'\n });\n\n }\n //centering large image\n largeimage.setposition();\n };\n this.setposition = function (e) {\n el.mousepos.x = e.pageX;\n el.mousepos.y = e.pageY;\n var lensleft = 0;\n var lenstop = 0;\n\n function overleft(lens) {\n return el.mousepos.x - (lens.w) / 2 < smallimage.pos.l; \n }\n\n function overright(lens) {\n return el.mousepos.x + (lens.w) / 2 > smallimage.pos.r;\n }\n\n function overtop(lens) {\n return el.mousepos.y - (lens.h) / 2 < smallimage.pos.t; \n }\n\n function overbottom(lens) {\n return el.mousepos.y + (lens.h) / 2 > smallimage.pos.b; \n }\n \n lensleft = el.mousepos.x + smallimage.bleft - smallimage.pos.l - (this.node.w + 2) / 2;\n lenstop = el.mousepos.y + smallimage.btop - smallimage.pos.t - (this.node.h + 2) / 2;\n if (overleft(this.node)) {\n lensleft = smallimage.bleft - 1;\n } else if (overright(this.node)) {\n lensleft = smallimage.w + smallimage.bleft - this.node.w - 1;\n }\n if (overtop(this.node)) {\n lenstop = smallimage.btop - 1;\n } else if (overbottom(this.node)) {\n lenstop = smallimage.h + smallimage.btop - this.node.h - 1;\n }\n \n this.node.left = lensleft;\n this.node.top = lenstop;\n this.node.css({\n 'left': lensleft + 'px',\n 'top': lenstop + 'px'\n });\n if (settings.zoomType == 'reverse') {\n $(this.image).css({\n position: 'absolute',\n display: 'block',\n left: -(this.node.left + 1 - smallimage.bleft) + 'px',\n top: -(this.node.top + 1 - smallimage.btop) + 'px'\n });\n }\n\n largeimage.setposition();\n };\n this.hide = function () {\n img.css({\n 'opacity': 1\n });\n this.node.hide();\n };\n this.show = function () { \n \n if (settings.zoomType != 'innerzoom' && (settings.lens || settings.zoomType == 'drag')) {\n this.node.show();\n } \n\n if (settings.zoomType == 'reverse') {\n img.css({\n 'opacity': settings.imageOpacity\n });\n }\n };\n this.getoffset = function () {\n var o = {};\n o.left = $obj.node.left;\n o.top = $obj.node.top;\n return o;\n };\n return this;\n }\n /*========================================================,\n| Stage\n|---------------------------------------------------------:\n| Window area that contains the large image\n`========================================================*/\n\n function Stage() {\n var $obj = this;\n var add_title = settings.title === true ? '
    ' : '';\n this.node = $('
    '+ add_title +'
    ');\n this.ieframe = $('');\n this.setposition = function () {\n this.node.leftpos = 0;\n this.node.toppos = 0;\n if (settings.zoomType != 'innerzoom') {\n //positioning\n switch (settings.position) {\n case 'left':\n this.node.leftpos = (smallimage.pos.l - smallimage.bleft - Math.abs(settings.xOffset) - settings.zoomWidth > 0) ? (0 - settings.zoomWidth - Math.abs(settings.xOffset)) : (smallimage.ow + Math.abs(settings.xOffset));\n this.node.toppos = Math.abs(settings.yOffset);\n break;\n case 'top':\n this.node.leftpos = Math.abs(settings.xOffset);\n this.node.toppos = (smallimage.pos.t - smallimage.btop - Math.abs(settings.yOffset) - settings.zoomHeight > 0) ? (0 - settings.zoomHeight - Math.abs(settings.yOffset)) : (smallimage.oh + Math.abs(settings.yOffset));\n break;\n case 'bottom':\n this.node.leftpos = Math.abs(settings.xOffset);\n this.node.toppos = (smallimage.pos.t - smallimage.btop + smallimage.oh + Math.abs(settings.yOffset) + settings.zoomHeight < screen.height) ? (smallimage.oh + Math.abs(settings.yOffset)) : (0 - settings.zoomHeight - Math.abs(settings.yOffset));\n break;\n default:\n this.node.leftpos = (smallimage.rightlimit + Math.abs(settings.xOffset) + settings.zoomWidth < screen.width) ? (smallimage.ow + settings.xOffset) : (0 - settings.zoomWidth - settings.xOffset);\n this.node.toppos = settings.yOffset;\n break;\n }\n }\n this.node.css({\n 'left': 'calc(100% + 60px + ' + (($('.image-block').outerWidth() - $('.jqzoom').outerWidth()) / 2) + 'px)',\n 'top': this.node.toppos + 'px'\n });\n return this;\n };\n this.append = function () {\n $('.zoomPad', el).append(this.node);\n this.node.css({\n position: 'absolute',\n display: 'none',\n zIndex: 5001\n });\n if (settings.zoomType == 'innerzoom') {\n this.node.css({\n cursor: 'default'\n });\n var thickness = (smallimage.bleft == 0) ? 1 : smallimage.bleft;\n $('.zoomWrapper', this.node).css({\n borderWidth: thickness + 'px'\n }); \n }\n \n $('.zoomWrapper', this.node).css({\n width: Math.round(settings.zoomWidth) + 'px',\n borderWidth: thickness + 'px'\n });\n $('.zoomWrapperImage', this.node).css({\n width: '100%',\n height: Math.round(settings.zoomHeight) + 'px'\n });\n //zoom title\n if (settings.title === true) {\n $('.zoomWrapperTitle', this.node).css({\n width: '100%',\n position: 'absolute'\n });\n }\n\n if (settings.title === true) $('.zoomWrapperTitle', this.node).hide();\n if (settings.title && zoomtitle.length > 0) {\n $('.zoomWrapperTitle', this.node).html(zoomtitle).show();\n }\n $obj.setposition();\n };\n this.hide = function () {\n switch (settings.hideEffect) {\n case 'fadeout':\n this.node.fadeOut(settings.fadeoutSpeed, function () {});\n break;\n default:\n this.node.hide();\n break;\n }\n this.ieframe.hide();\n };\n this.show = function () {\n switch (settings.showEffect) {\n case 'fadein':\n this.node.fadeIn();\n this.node.fadeIn(settings.fadeinSpeed, function () {});\n break;\n default:\n this.node.show();\n break;\n }\n if (settings.zoomType != 'innerzoom') {\n this.ieframe.width = this.node.width();\n this.ieframe.height = this.node.height();\n this.ieframe.left = this.node.leftpos;\n this.ieframe.top = this.node.toppos;\n this.ieframe.css({\n display: 'block',\n position: 'absolute',\n left: this.ieframe.left,\n top: this.ieframe.top,\n zIndex: 99,\n width: this.ieframe.width + 'px',\n height: this.ieframe.height + 'px'\n });\n $('.zoomPad', el).append(this.ieframe);\n this.ieframe.show();\n }\n };\n }\n /*========================================================,\n | LargeImage\n |---------------------------------------------------------:\n | The large detailed image\n `========================================================*/\n\n function Largeimage() {\n var $obj = this;\n this.node = new Image();\n this.loadimage = function (url) {\n //showing preload\n loader.show();\n this.url = url;\n this.node.style.position = 'absolute';\n this.node.style.border = '0px';\n this.node.style.display = 'none';\n this.node.style.left = '-5000px';\n this.node.style.top = '0px';\n document.body.appendChild(this.node);\n this.node.src = url; // fires off async\n };\n this.fetchdata = function () {\n var image = $(this.node);\n var scale = {};\n this.node.style.display = 'block';\n $obj.w = image.width();\n $obj.h = image.height();\n $obj.pos = image.offset();\n $obj.pos.l = image.offset().left;\n $obj.pos.t = image.offset().top;\n $obj.pos.r = $obj.w + $obj.pos.l;\n $obj.pos.b = $obj.h + $obj.pos.t;\n scale.x = ($obj.w / smallimage.w);\n scale.y = ($obj.h / smallimage.h);\n el.scale = scale;\n document.body.removeChild(this.node);\n $('.zoomWrapperImage', el).empty().append(this.node);\n //setting lens dimensions;\n lens.setdimensions();\n };\n this.node.onerror = function () {\n alert('Problems while loading the big image.');\n throw 'Problems while loading the big image.';\n };\n this.node.onload = function () {\n //fetching data\n $obj.fetchdata();\n loader.hide();\n el.largeimageloading = false;\n el.largeimageloaded = true;\n if (settings.zoomType == 'drag' || settings.alwaysOn) {\n lens.show();\n stage.show();\n lens.setcenter();\n }\n };\n this.setposition = function () {\n var left = -el.scale.x * (lens.getoffset().left - smallimage.bleft + 1);\n var top = -el.scale.y * (lens.getoffset().top - smallimage.btop + 1);\n $(this.node).css({\n 'left': left + 'px',\n 'top': top + 'px'\n });\n };\n return this;\n }\n $(el).data('jqzoom', obj);\n };\n //es. $.jqzoom.disable('#jqzoom1');\n $.jqzoom = {\n defaults: {\n zoomType: 'standard',\n //innerzoom/standard/reverse/drag\n zoomWidth: 300,\n //zoomWindow default width\n zoomHeight: 300,\n //zoomWindow default height\n xOffset: 10,\n //zoomWindow x offset, can be negative(more on the left) or positive(more on the right)\n yOffset: 0,\n //zoomWindow y offset, can be negative(more on the left) or positive(more on the right)\n position: 'right',\n //zoomWindow default position\n preloadImages: true,\n //image preload\n preloadText: 'Loading zoom',\n // show or not the title in the large area\n title: true,\n lens: true,\n imageOpacity: 0.4,\n alwaysOn: false,\n showEffect: 'show',\n //show/fadein\n hideEffect: 'hide',\n //hide/fadeout\n fadeinSpeed: 'slow',\n //fast/slow/number\n fadeoutSpeed: '2000', //fast/slow/number\n },\n disable: function (el) {\n var api = $(el).data('jqzoom');\n api.disable();\n return false;\n },\n enable: function (el) {\n var api = $(el).data('jqzoom');\n api.enable();\n return false;\n },\n disableAll: function (el) {\n jqzoompluging_disabled = true;\n },\n enableAll: function (el) {\n jqzoompluging_disabled = false;\n }\n };\n})(jQuery);\n","/**\n * Swiper 3.4.2\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * \n * http://www.idangero.us/swiper/\n * \n * Copyright 2017, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n * \n * Licensed under MIT\n * \n * Released on: March 10, 2017\n */\n(function () {\n 'use strict';\n var $;\n\n /*===========================\n Swiper\n ===========================*/\n var Swiper = function (container, params) {\n if (!(this instanceof Swiper)) return new Swiper(container, params);\n \n\n var defaults = {\n direction: 'horizontal',\n touchEventsTarget: 'container',\n initialSlide: 0,\n speed: 300,\n // autoplay\n autoplay: false,\n autoplayDisableOnInteraction: true,\n autoplayStopOnLast: false,\n // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).\n iOSEdgeSwipeDetection: false,\n iOSEdgeSwipeThreshold: 20,\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 // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n coverflow: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n modifier: 1,\n slideShadows : true\n },\n flip: {\n slideShadows : true,\n limitRotation: true\n },\n cube: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94\n },\n fade: {\n crossFade: false\n },\n // Parallax\n parallax: false,\n // Zoom\n zoom: false,\n zoomMax: 3,\n zoomMin: 1,\n zoomToggle: true,\n // Scrollbar\n scrollbar: null,\n scrollbarHide: true,\n scrollbarDraggable: false,\n scrollbarSnapOnRelease: false,\n // Keyboard Mousewheel\n keyboardControl: false,\n mousewheelControl: false,\n mousewheelReleaseOnEdges: false,\n mousewheelInvert: false,\n mousewheelForceToAxis: false,\n mousewheelSensitivity: 1,\n mousewheelEventsTarged: 'container',\n // Hash Navigation\n hashnav: false,\n hashnavWatchState: false,\n // History\n history: false,\n // Commong Nav State\n replaceState: false,\n // Breakpoints\n breakpoints: undefined,\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerColumnFill: 'column',\n slidesPerGroup: 1,\n centeredSlides: false,\n slidesOffsetBefore: 0, // in px\n slidesOffsetAfter: 0, // in px\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n onlyExternal: false,\n threshold: 0,\n touchMoveStopPropagation: true,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Pagination\n pagination: null,\n paginationElement: 'span',\n paginationClickable: false,\n paginationHide: false,\n paginationBulletRender: null,\n paginationProgressRender: null,\n paginationFractionRender: null,\n paginationCustomRender: null,\n paginationType: 'bullets', // 'bullets' or 'progress' or 'fraction' or 'custom'\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Next/prev buttons\n nextButton: null,\n prevButton: null,\n // Progress\n watchSlidesProgress: false,\n watchSlidesVisibility: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // Lazy Loading\n lazyLoading: false,\n lazyLoadingInPrevNext: false,\n lazyLoadingInPrevNextAmount: 1,\n lazyLoadingOnTransitionStart: false,\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n // Control\n control: undefined,\n controlInverse: false,\n controlBy: 'slide', //or 'container'\n normalizeSlideIndex: true,\n // Swiping/no swiping\n allowSwipeToPrev: true,\n allowSwipeToNext: true,\n swipeHandler: null, //'.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n // Passive Listeners\n passiveListeners: true,\n // NS\n containerModifierClass: 'swiper-container-', // NEW\n slideClass: 'swiper-slide',\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 bulletClass: 'swiper-pagination-bullet',\n bulletActiveClass: 'swiper-pagination-bullet-active',\n buttonDisabledClass: 'swiper-button-disabled',\n paginationCurrentClass: 'swiper-pagination-current',\n paginationTotalClass: 'swiper-pagination-total',\n paginationHiddenClass: 'swiper-pagination-hidden',\n paginationProgressbarClass: 'swiper-pagination-progressbar',\n paginationClickableClass: 'swiper-pagination-clickable', // NEW\n paginationModifierClass: 'swiper-pagination-', // NEW\n lazyLoadingClass: 'swiper-lazy',\n lazyStatusLoadingClass: 'swiper-lazy-loading',\n lazyStatusLoadedClass: 'swiper-lazy-loaded',\n lazyPreloaderClass: 'swiper-lazy-preloader',\n notificationClass: 'swiper-notification',\n preloaderClass: 'preloader',\n zoomContainerClass: 'swiper-zoom-container',\n \n // Observer\n observer: false,\n observeParents: false,\n // Accessibility\n a11y: false,\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 // Callbacks\n runCallbacksOnInit: true\n /*\n Callbacks:\n onInit: function (swiper)\n onDestroy: function (swiper)\n onBeforeResize: function (swiper)\n onAfterResize: function (swiper)\n onClick: function (swiper, e)\n onTap: function (swiper, e)\n onDoubleTap: function (swiper, e)\n onSliderMove: function (swiper, e)\n onSlideChangeStart: function (swiper)\n onSlideChangeEnd: function (swiper)\n onTransitionStart: function (swiper)\n onTransitionEnd: function (swiper)\n onImagesReady: function (swiper)\n onProgress: function (swiper, progress)\n onTouchStart: function (swiper, e)\n onTouchMove: function (swiper, e)\n onTouchMoveOpposite: function (swiper, e)\n onTouchEnd: function (swiper, e)\n onReachBeginning: function (swiper)\n onReachEnd: function (swiper)\n onSetTransition: function (swiper, duration)\n onSetTranslate: function (swiper, translate)\n onAutoplayStart: function (swiper)\n onAutoplayStop: function (swiper),\n onLazyImageLoad: function (swiper, slide, image)\n onLazyImageReady: function (swiper, slide, image)\n onKeyPress: function (swiper, keyCode)\n */\n \n };\n var initialVirtualTranslate = params && params.virtualTranslate;\n \n params = params || {};\n var originalParams = {};\n for (var param in params) {\n if (typeof params[param] === 'object' && params[param] !== null && !(params[param].nodeType || params[param] === window || params[param] === document || (typeof Dom7 !== 'undefined' && params[param] instanceof Dom7) || (typeof jQuery !== 'undefined' && params[param] instanceof jQuery))) {\n originalParams[param] = {};\n for (var deepParam in params[param]) {\n originalParams[param][deepParam] = params[param][deepParam];\n }\n }\n else {\n originalParams[param] = params[param];\n }\n }\n for (var def in defaults) {\n if (typeof params[def] === 'undefined') {\n params[def] = defaults[def];\n }\n else if (typeof params[def] === 'object') {\n for (var deepDef in defaults[def]) {\n if (typeof params[def][deepDef] === 'undefined') {\n params[def][deepDef] = defaults[def][deepDef];\n }\n }\n }\n }\n \n // Swiper\n var s = this;\n \n // Params\n s.params = params;\n s.originalParams = originalParams;\n \n // Classname\n s.classNames = [];\n /*=========================\n Dom Library and plugins\n ===========================*/\n if (typeof $ !== 'undefined' && typeof Dom7 !== 'undefined'){\n $ = Dom7;\n }\n if (typeof $ === 'undefined') {\n if (typeof Dom7 === 'undefined') {\n $ = window.Dom7 || window.Zepto || window.jQuery;\n }\n else {\n $ = Dom7;\n }\n if (!$) return;\n }\n // Export it to Swiper instance\n s.$ = $;\n \n /*=========================\n Breakpoints\n ===========================*/\n s.currentBreakpoint = undefined;\n s.getActiveBreakpoint = function () {\n //Get breakpoint for window width\n if (!s.params.breakpoints) return false;\n var breakpoint = false;\n var points = [], point;\n for ( point in s.params.breakpoints ) {\n if (s.params.breakpoints.hasOwnProperty(point)) {\n points.push(point);\n }\n }\n points.sort(function (a, b) {\n return parseInt(a, 10) > parseInt(b, 10);\n });\n for (var i = 0; i < points.length; i++) {\n point = points[i];\n if (point >= window.innerWidth && !breakpoint) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n };\n s.setBreakpoint = function () {\n //Set breakpoint for window width and update parameters\n var breakpoint = s.getActiveBreakpoint();\n if (breakpoint && s.currentBreakpoint !== breakpoint) {\n var breakPointsParams = breakpoint in s.params.breakpoints ? s.params.breakpoints[breakpoint] : s.originalParams;\n var needsReLoop = s.params.loop && (breakPointsParams.slidesPerView !== s.params.slidesPerView);\n for ( var param in breakPointsParams ) {\n s.params[param] = breakPointsParams[param];\n }\n s.currentBreakpoint = breakpoint;\n if(needsReLoop && s.destroyLoop) {\n s.reLoop(true);\n }\n }\n };\n // Set breakpoint on load\n if (s.params.breakpoints) {\n s.setBreakpoint();\n }\n \n /*=========================\n Preparation - Define Container, Wrapper and Pagination\n ===========================*/\n s.container = $(container);\n if (s.container.length === 0) return;\n if (s.container.length > 1) {\n var swipers = [];\n s.container.each(function () {\n var container = this;\n swipers.push(new Swiper(this, params));\n });\n return swipers;\n }\n \n // Save instance in container HTML Element and in data\n s.container[0].swiper = s;\n s.container.data('swiper', s);\n \n s.classNames.push(s.params.containerModifierClass + s.params.direction);\n \n if (s.params.freeMode) {\n s.classNames.push(s.params.containerModifierClass + 'free-mode');\n }\n if (!s.support.flexbox) {\n s.classNames.push(s.params.containerModifierClass + 'no-flexbox');\n s.params.slidesPerColumn = 1;\n }\n if (s.params.autoHeight) {\n s.classNames.push(s.params.containerModifierClass + 'autoheight');\n }\n // Enable slides progress when required\n if (s.params.parallax || s.params.watchSlidesVisibility) {\n s.params.watchSlidesProgress = true;\n }\n // Max resistance when touchReleaseOnEdges\n if (s.params.touchReleaseOnEdges) {\n s.params.resistanceRatio = 0;\n }\n // Coverflow / 3D\n if (['cube', 'coverflow', 'flip'].indexOf(s.params.effect) >= 0) {\n if (s.support.transforms3d) {\n s.params.watchSlidesProgress = true;\n s.classNames.push(s.params.containerModifierClass + '3d');\n }\n else {\n s.params.effect = 'slide';\n }\n }\n if (s.params.effect !== 'slide') {\n s.classNames.push(s.params.containerModifierClass + s.params.effect);\n }\n if (s.params.effect === 'cube') {\n s.params.resistanceRatio = 0;\n s.params.slidesPerView = 1;\n s.params.slidesPerColumn = 1;\n s.params.slidesPerGroup = 1;\n s.params.centeredSlides = false;\n s.params.spaceBetween = 0;\n s.params.virtualTranslate = true;\n }\n if (s.params.effect === 'fade' || s.params.effect === 'flip') {\n s.params.slidesPerView = 1;\n s.params.slidesPerColumn = 1;\n s.params.slidesPerGroup = 1;\n s.params.watchSlidesProgress = true;\n s.params.spaceBetween = 0;\n if (typeof initialVirtualTranslate === 'undefined') {\n s.params.virtualTranslate = true;\n }\n }\n \n // Grab Cursor\n if (s.params.grabCursor && s.support.touch) {\n s.params.grabCursor = false;\n }\n \n // Wrapper\n s.wrapper = s.container.children('.' + s.params.wrapperClass);\n \n // Pagination\n if (s.params.pagination) {\n s.paginationContainer = $(s.params.pagination);\n if (s.params.uniqueNavElements && typeof s.params.pagination === 'string' && s.paginationContainer.length > 1 && s.container.find(s.params.pagination).length === 1) {\n s.paginationContainer = s.container.find(s.params.pagination);\n }\n \n if (s.params.paginationType === 'bullets' && s.params.paginationClickable) {\n s.paginationContainer.addClass(s.params.paginationModifierClass + 'clickable');\n }\n else {\n s.params.paginationClickable = false;\n }\n s.paginationContainer.addClass(s.params.paginationModifierClass + s.params.paginationType);\n }\n // Next/Prev Buttons\n if (s.params.nextButton || s.params.prevButton) {\n if (s.params.nextButton) {\n s.nextButton = $(s.params.nextButton);\n if (s.params.uniqueNavElements && typeof s.params.nextButton === 'string' && s.nextButton.length > 1 && s.container.find(s.params.nextButton).length === 1) {\n s.nextButton = s.container.find(s.params.nextButton);\n }\n }\n if (s.params.prevButton) {\n s.prevButton = $(s.params.prevButton);\n if (s.params.uniqueNavElements && typeof s.params.prevButton === 'string' && s.prevButton.length > 1 && s.container.find(s.params.prevButton).length === 1) {\n s.prevButton = s.container.find(s.params.prevButton);\n }\n }\n }\n \n // Is Horizontal\n s.isHorizontal = function () {\n return s.params.direction === 'horizontal';\n };\n // s.isH = isH;\n \n // RTL\n s.rtl = s.isHorizontal() && (s.container[0].dir.toLowerCase() === 'rtl' || s.container.css('direction') === 'rtl');\n if (s.rtl) {\n s.classNames.push(s.params.containerModifierClass + 'rtl');\n }\n \n // Wrong RTL support\n if (s.rtl) {\n s.wrongRTL = s.wrapper.css('display') === '-webkit-box';\n }\n \n // Columns\n if (s.params.slidesPerColumn > 1) {\n s.classNames.push(s.params.containerModifierClass + 'multirow');\n }\n \n // Check for Android\n if (s.device.android) {\n s.classNames.push(s.params.containerModifierClass + 'android');\n }\n \n // Add classes\n s.container.addClass(s.classNames.join(' '));\n \n // Translate\n s.translate = 0;\n \n // Progress\n s.progress = 0;\n \n // Velocity\n s.velocity = 0;\n \n /*=========================\n Locks, unlocks\n ===========================*/\n s.lockSwipeToNext = function () {\n s.params.allowSwipeToNext = false;\n if (s.params.allowSwipeToPrev === false && s.params.grabCursor) {\n s.unsetGrabCursor();\n }\n };\n s.lockSwipeToPrev = function () {\n s.params.allowSwipeToPrev = false;\n if (s.params.allowSwipeToNext === false && s.params.grabCursor) {\n s.unsetGrabCursor();\n }\n };\n s.lockSwipes = function () {\n s.params.allowSwipeToNext = s.params.allowSwipeToPrev = false;\n if (s.params.grabCursor) s.unsetGrabCursor();\n };\n s.unlockSwipeToNext = function () {\n s.params.allowSwipeToNext = true;\n if (s.params.allowSwipeToPrev === true && s.params.grabCursor) {\n s.setGrabCursor();\n }\n };\n s.unlockSwipeToPrev = function () {\n s.params.allowSwipeToPrev = true;\n if (s.params.allowSwipeToNext === true && s.params.grabCursor) {\n s.setGrabCursor();\n }\n };\n s.unlockSwipes = function () {\n s.params.allowSwipeToNext = s.params.allowSwipeToPrev = true;\n if (s.params.grabCursor) s.setGrabCursor();\n };\n \n /*=========================\n Round helper\n ===========================*/\n function round(a) {\n return Math.floor(a);\n }\n /*=========================\n Set grab cursor\n ===========================*/\n s.setGrabCursor = function(moving) {\n s.container[0].style.cursor = 'move';\n s.container[0].style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n s.container[0].style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n s.container[0].style.cursor = moving ? 'grabbing': 'grab';\n };\n s.unsetGrabCursor = function () {\n s.container[0].style.cursor = '';\n };\n if (s.params.grabCursor) {\n s.setGrabCursor();\n }\n /*=========================\n Update on Images Ready\n ===========================*/\n s.imagesToLoad = [];\n s.imagesLoaded = 0;\n \n s.loadImage = function (imgElement, src, srcset, sizes, checkForComplete, callback) {\n var image;\n function onReady () {\n if (callback) callback();\n }\n if (!imgElement.complete || !checkForComplete) {\n if (src) {\n image = new window.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 \n } else {//image already loaded...\n onReady();\n }\n };\n s.preloadImages = function () {\n s.imagesToLoad = s.container.find('img');\n function _onReady() {\n if (typeof s === 'undefined' || s === null || !s) return;\n if (s.imagesLoaded !== undefined) s.imagesLoaded++;\n if (s.imagesLoaded === s.imagesToLoad.length) {\n if (s.params.updateOnImagesReady) s.update();\n s.emit('onImagesReady', s);\n }\n }\n for (var i = 0; i < s.imagesToLoad.length; i++) {\n s.loadImage(s.imagesToLoad[i], (s.imagesToLoad[i].currentSrc || s.imagesToLoad[i].getAttribute('src')), (s.imagesToLoad[i].srcset || s.imagesToLoad[i].getAttribute('srcset')), s.imagesToLoad[i].sizes || s.imagesToLoad[i].getAttribute('sizes'), true, _onReady);\n }\n };\n \n /*=========================\n Autoplay\n ===========================*/\n s.autoplayTimeoutId = undefined;\n s.autoplaying = false;\n s.autoplayPaused = false;\n function autoplay() {\n var autoplayDelay = s.params.autoplay;\n var activeSlide = s.slides.eq(s.activeIndex);\n if (activeSlide.attr('data-swiper-autoplay')) {\n autoplayDelay = activeSlide.attr('data-swiper-autoplay') || s.params.autoplay;\n }\n s.autoplayTimeoutId = setTimeout(function () {\n if (s.params.loop) {\n s.fixLoop();\n s._slideNext();\n s.emit('onAutoplay', s);\n }\n else {\n if (!s.isEnd) {\n s._slideNext();\n s.emit('onAutoplay', s);\n }\n else {\n if (!params.autoplayStopOnLast) {\n s._slideTo(0);\n s.emit('onAutoplay', s);\n }\n else {\n s.stopAutoplay();\n }\n }\n }\n }, autoplayDelay);\n }\n s.startAutoplay = function () {\n if (typeof s.autoplayTimeoutId !== 'undefined') return false;\n if (!s.params.autoplay) return false;\n if (s.autoplaying) return false;\n s.autoplaying = true;\n s.emit('onAutoplayStart', s);\n autoplay();\n };\n s.stopAutoplay = function (internal) {\n if (!s.autoplayTimeoutId) return;\n if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId);\n s.autoplaying = false;\n s.autoplayTimeoutId = undefined;\n s.emit('onAutoplayStop', s);\n };\n s.pauseAutoplay = function (speed) {\n if (s.autoplayPaused) return;\n if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId);\n s.autoplayPaused = true;\n if (speed === 0) {\n s.autoplayPaused = false;\n autoplay();\n }\n else {\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.autoplayPaused = false;\n if (!s.autoplaying) {\n s.stopAutoplay();\n }\n else {\n autoplay();\n }\n });\n }\n };\n /*=========================\n Min/Max Translate\n ===========================*/\n s.minTranslate = function () {\n return (-s.snapGrid[0]);\n };\n s.maxTranslate = function () {\n return (-s.snapGrid[s.snapGrid.length - 1]);\n };\n /*=========================\n Slider/slides sizes\n ===========================*/\n s.updateAutoHeight = function () {\n var activeSlides = [];\n var newHeight = 0;\n var i;\n \n // Find slides currently in view\n if(s.params.slidesPerView !== 'auto' && s.params.slidesPerView > 1) {\n for (i = 0; i < Math.ceil(s.params.slidesPerView); i++) {\n var index = s.activeIndex + i;\n if(index > s.slides.length) break;\n activeSlides.push(s.slides.eq(index)[0]);\n }\n } else {\n activeSlides.push(s.slides.eq(s.activeIndex)[0]);\n }\n \n // Find new height from heighest slide in view\n for (i = 0; i < activeSlides.length; i++) {\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) s.wrapper.css('height', newHeight + 'px');\n };\n s.updateContainerSize = function () {\n var width, height;\n if (typeof s.params.width !== 'undefined') {\n width = s.params.width;\n }\n else {\n width = s.container[0].clientWidth;\n }\n if (typeof s.params.height !== 'undefined') {\n height = s.params.height;\n }\n else {\n height = s.container[0].clientHeight;\n }\n if (width === 0 && s.isHorizontal() || height === 0 && !s.isHorizontal()) {\n return;\n }\n \n //Subtract paddings\n width = width - parseInt(s.container.css('padding-left'), 10) - parseInt(s.container.css('padding-right'), 10);\n height = height - parseInt(s.container.css('padding-top'), 10) - parseInt(s.container.css('padding-bottom'), 10);\n \n // Store values\n s.width = width;\n s.height = height;\n s.size = s.isHorizontal() ? s.width : s.height;\n };\n \n s.updateSlidesSize = function () {\n s.slides = s.wrapper.children('.' + s.params.slideClass);\n s.snapGrid = [];\n s.slidesGrid = [];\n s.slidesSizesGrid = [];\n \n var spaceBetween = s.params.spaceBetween,\n slidePosition = -s.params.slidesOffsetBefore,\n i,\n prevSlideSize = 0,\n index = 0;\n if (typeof s.size === 'undefined') return;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * s.size;\n }\n \n s.virtualSize = -spaceBetween;\n // reset margins\n if (s.rtl) s.slides.css({marginLeft: '', marginTop: ''});\n else s.slides.css({marginRight: '', marginBottom: ''});\n \n var slidesNumberEvenToRows;\n if (s.params.slidesPerColumn > 1) {\n if (Math.floor(s.slides.length / s.params.slidesPerColumn) === s.slides.length / s.params.slidesPerColumn) {\n slidesNumberEvenToRows = s.slides.length;\n }\n else {\n slidesNumberEvenToRows = Math.ceil(s.slides.length / s.params.slidesPerColumn) * s.params.slidesPerColumn;\n }\n if (s.params.slidesPerView !== 'auto' && s.params.slidesPerColumnFill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, s.params.slidesPerView * s.params.slidesPerColumn);\n }\n }\n \n // Calc slides\n var slideSize;\n var slidesPerColumn = s.params.slidesPerColumn;\n var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n var numFullColumns = slidesPerRow - (s.params.slidesPerColumn * slidesPerRow - s.slides.length);\n for (i = 0; i < s.slides.length; i++) {\n slideSize = 0;\n var slide = s.slides.eq(i);\n if (s.params.slidesPerColumn > 1) {\n // Set slides order\n var newSlideOrderIndex;\n var column, row;\n if (s.params.slidesPerColumnFill === 'column') {\n column = Math.floor(i / slidesPerColumn);\n row = i - column * slidesPerColumn;\n if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn-1)) {\n if (++row >= slidesPerColumn) {\n row = 0;\n column++;\n }\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 }\n else {\n row = Math.floor(i / slidesPerRow);\n column = i - row * slidesPerRow;\n }\n slide\n .css(\n 'margin-' + (s.isHorizontal() ? 'top' : 'left'),\n (row !== 0 && s.params.spaceBetween) && (s.params.spaceBetween + 'px')\n )\n .attr('data-swiper-column', column)\n .attr('data-swiper-row', row);\n \n }\n if (slide.css('display') === 'none') continue;\n if (s.params.slidesPerView === 'auto') {\n slideSize = s.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n if (s.params.roundLengths) slideSize = round(slideSize);\n }\n else {\n slideSize = (s.size - (s.params.slidesPerView - 1) * spaceBetween) / s.params.slidesPerView;\n if (s.params.roundLengths) slideSize = round(slideSize);\n \n if (s.isHorizontal()) {\n s.slides[i].style.width = slideSize + 'px';\n }\n else {\n s.slides[i].style.height = slideSize + 'px';\n }\n }\n s.slides[i].swiperSlideSize = slideSize;\n s.slidesSizesGrid.push(slideSize);\n \n \n if (s.params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if(prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - s.size / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - s.size / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition);\n s.slidesGrid.push(slidePosition);\n }\n else {\n if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition);\n s.slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n \n s.virtualSize += slideSize + spaceBetween;\n \n prevSlideSize = slideSize;\n \n index ++;\n }\n s.virtualSize = Math.max(s.virtualSize, s.size) + s.params.slidesOffsetAfter;\n var newSlidesGrid;\n \n if (\n s.rtl && s.wrongRTL && (s.params.effect === 'slide' || s.params.effect === 'coverflow')) {\n s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n }\n if (!s.support.flexbox || s.params.setWrapperSize) {\n if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'});\n }\n \n if (s.params.slidesPerColumn > 1) {\n s.virtualSize = (slideSize + s.params.spaceBetween) * slidesNumberEvenToRows;\n s.virtualSize = Math.ceil(s.virtualSize / s.params.slidesPerColumn) - s.params.spaceBetween;\n if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});\n else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'});\n if (s.params.centeredSlides) {\n newSlidesGrid = [];\n for (i = 0; i < s.snapGrid.length; i++) {\n if (s.snapGrid[i] < s.virtualSize + s.snapGrid[0]) newSlidesGrid.push(s.snapGrid[i]);\n }\n s.snapGrid = newSlidesGrid;\n }\n }\n \n // Remove last grid elements depending on width\n if (!s.params.centeredSlides) {\n newSlidesGrid = [];\n for (i = 0; i < s.snapGrid.length; i++) {\n if (s.snapGrid[i] <= s.virtualSize - s.size) {\n newSlidesGrid.push(s.snapGrid[i]);\n }\n }\n s.snapGrid = newSlidesGrid;\n if (Math.floor(s.virtualSize - s.size) - Math.floor(s.snapGrid[s.snapGrid.length - 1]) > 1) {\n s.snapGrid.push(s.virtualSize - s.size);\n }\n }\n if (s.snapGrid.length === 0) s.snapGrid = [0];\n \n if (s.params.spaceBetween !== 0) {\n if (s.isHorizontal()) {\n if (s.rtl) s.slides.css({marginLeft: spaceBetween + 'px'});\n else s.slides.css({marginRight: spaceBetween + 'px'});\n }\n else s.slides.css({marginBottom: spaceBetween + 'px'});\n }\n if (s.params.watchSlidesProgress) {\n s.updateSlidesOffset();\n }\n };\n s.updateSlidesOffset = function () {\n for (var i = 0; i < s.slides.length; i++) {\n s.slides[i].swiperSlideOffset = s.isHorizontal() ? s.slides[i].offsetLeft : s.slides[i].offsetTop;\n }\n };\n \n /*=========================\n Dynamic Slides Per View\n ===========================*/\n s.currentSlidesPerView = function () {\n var spv = 1, i, j;\n if (s.params.centeredSlides) {\n var size = s.slides[s.activeIndex].swiperSlideSize;\n var breakLoop;\n for (i = s.activeIndex + 1; i < s.slides.length; i++) {\n if (s.slides[i] && !breakLoop) {\n size += s.slides[i].swiperSlideSize;\n spv ++;\n if (size > s.size) breakLoop = true;\n }\n }\n for (j = s.activeIndex - 1; j >= 0; j--) {\n if (s.slides[j] && !breakLoop) {\n size += s.slides[j].swiperSlideSize;\n spv ++;\n if (size > s.size) breakLoop = true;\n }\n }\n }\n else {\n for (i = s.activeIndex + 1; i < s.slides.length; i++) {\n if (s.slidesGrid[i] - s.slidesGrid[s.activeIndex] < s.size) {\n spv++;\n }\n }\n }\n return spv;\n };\n /*=========================\n Slider/slides progress\n ===========================*/\n s.updateSlidesProgress = function (translate) {\n if (typeof translate === 'undefined') {\n translate = s.translate || 0;\n }\n if (s.slides.length === 0) return;\n if (typeof s.slides[0].swiperSlideOffset === 'undefined') s.updateSlidesOffset();\n \n var offsetCenter = -translate;\n if (s.rtl) offsetCenter = translate;\n \n // Visible Slides\n s.slides.removeClass(s.params.slideVisibleClass);\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides[i];\n var slideProgress = (offsetCenter + (s.params.centeredSlides ? s.minTranslate() : 0) - slide.swiperSlideOffset) / (slide.swiperSlideSize + s.params.spaceBetween);\n if (s.params.watchSlidesVisibility) {\n var slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n var slideAfter = slideBefore + s.slidesSizesGrid[i];\n var isVisible =\n (slideBefore >= 0 && slideBefore < s.size) ||\n (slideAfter > 0 && slideAfter <= s.size) ||\n (slideBefore <= 0 && slideAfter >= s.size);\n if (isVisible) {\n s.slides.eq(i).addClass(s.params.slideVisibleClass);\n }\n }\n slide.progress = s.rtl ? -slideProgress : slideProgress;\n }\n };\n s.updateProgress = function (translate) {\n if (typeof translate === 'undefined') {\n translate = s.translate || 0;\n }\n var translatesDiff = s.maxTranslate() - s.minTranslate();\n var wasBeginning = s.isBeginning;\n var wasEnd = s.isEnd;\n if (translatesDiff === 0) {\n s.progress = 0;\n s.isBeginning = s.isEnd = true;\n }\n else {\n s.progress = (translate - s.minTranslate()) / (translatesDiff);\n s.isBeginning = s.progress <= 0;\n s.isEnd = s.progress >= 1;\n }\n if (s.isBeginning && !wasBeginning) s.emit('onReachBeginning', s);\n if (s.isEnd && !wasEnd) s.emit('onReachEnd', s);\n \n if (s.params.watchSlidesProgress) s.updateSlidesProgress(translate);\n s.emit('onProgress', s, s.progress);\n };\n s.updateActiveIndex = function () {\n var translate = s.rtl ? s.translate : -s.translate;\n var newActiveIndex, i, snapIndex;\n for (i = 0; i < s.slidesGrid.length; i ++) {\n if (typeof s.slidesGrid[i + 1] !== 'undefined') {\n if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1] - (s.slidesGrid[i + 1] - s.slidesGrid[i]) / 2) {\n newActiveIndex = i;\n }\n else if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1]) {\n newActiveIndex = i + 1;\n }\n }\n else {\n if (translate >= s.slidesGrid[i]) {\n newActiveIndex = i;\n }\n }\n }\n // Normalize slideIndex\n if(s.params.normalizeSlideIndex){\n if (newActiveIndex < 0 || typeof newActiveIndex === 'undefined') newActiveIndex = 0;\n }\n // for (i = 0; i < s.slidesGrid.length; i++) {\n // if (- translate >= s.slidesGrid[i]) {\n // newActiveIndex = i;\n // }\n // }\n snapIndex = Math.floor(newActiveIndex / s.params.slidesPerGroup);\n if (snapIndex >= s.snapGrid.length) snapIndex = s.snapGrid.length - 1;\n \n if (newActiveIndex === s.activeIndex) {\n return;\n }\n s.snapIndex = snapIndex;\n s.previousIndex = s.activeIndex;\n s.activeIndex = newActiveIndex;\n s.updateClasses();\n s.updateRealIndex();\n };\n s.updateRealIndex = function(){\n s.realIndex = parseInt(s.slides.eq(s.activeIndex).attr('data-swiper-slide-index') || s.activeIndex, 10);\n };\n \n /*=========================\n Classes\n ===========================*/\n s.updateClasses = function () {\n s.slides.removeClass(s.params.slideActiveClass + ' ' + s.params.slideNextClass + ' ' + s.params.slidePrevClass + ' ' + s.params.slideDuplicateActiveClass + ' ' + s.params.slideDuplicateNextClass + ' ' + s.params.slideDuplicatePrevClass);\n var activeSlide = s.slides.eq(s.activeIndex);\n // Active classes\n activeSlide.addClass(s.params.slideActiveClass);\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(s.params.slideDuplicateClass)) {\n s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index=\"' + s.realIndex + '\"]').addClass(s.params.slideDuplicateActiveClass);\n }\n else {\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + s.realIndex + '\"]').addClass(s.params.slideDuplicateActiveClass);\n }\n }\n // Next Slide\n var nextSlide = activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);\n if (s.params.loop && nextSlide.length === 0) {\n nextSlide = s.slides.eq(0);\n nextSlide.addClass(s.params.slideNextClass);\n }\n // Prev Slide\n var prevSlide = activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass);\n if (s.params.loop && prevSlide.length === 0) {\n prevSlide = s.slides.eq(-1);\n prevSlide.addClass(s.params.slidePrevClass);\n }\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(s.params.slideDuplicateClass)) {\n s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index=\"' + nextSlide.attr('data-swiper-slide-index') + '\"]').addClass(s.params.slideDuplicateNextClass);\n }\n else {\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + nextSlide.attr('data-swiper-slide-index') + '\"]').addClass(s.params.slideDuplicateNextClass);\n }\n if (prevSlide.hasClass(s.params.slideDuplicateClass)) {\n s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index=\"' + prevSlide.attr('data-swiper-slide-index') + '\"]').addClass(s.params.slideDuplicatePrevClass);\n }\n else {\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + prevSlide.attr('data-swiper-slide-index') + '\"]').addClass(s.params.slideDuplicatePrevClass);\n }\n }\n \n // Pagination\n if (s.paginationContainer && s.paginationContainer.length > 0) {\n // Current/Total\n var current,\n total = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length;\n if (s.params.loop) {\n current = Math.ceil((s.activeIndex - s.loopedSlides)/s.params.slidesPerGroup);\n if (current > s.slides.length - 1 - s.loopedSlides * 2) {\n current = current - (s.slides.length - s.loopedSlides * 2);\n }\n if (current > total - 1) current = current - total;\n if (current < 0 && s.params.paginationType !== 'bullets') current = total + current;\n }\n else {\n if (typeof s.snapIndex !== 'undefined') {\n current = s.snapIndex;\n }\n else {\n current = s.activeIndex || 0;\n }\n }\n // Types\n if (s.params.paginationType === 'bullets' && s.bullets && s.bullets.length > 0) {\n s.bullets.removeClass(s.params.bulletActiveClass);\n if (s.paginationContainer.length > 1) {\n s.bullets.each(function () {\n if ($(this).index() === current) $(this).addClass(s.params.bulletActiveClass);\n });\n }\n else {\n s.bullets.eq(current).addClass(s.params.bulletActiveClass);\n }\n }\n if (s.params.paginationType === 'fraction') {\n s.paginationContainer.find('.' + s.params.paginationCurrentClass).text(current + 1);\n s.paginationContainer.find('.' + s.params.paginationTotalClass).text(total);\n }\n if (s.params.paginationType === 'progress') {\n var scale = (current + 1) / total,\n scaleX = scale,\n scaleY = 1;\n if (!s.isHorizontal()) {\n scaleY = scale;\n scaleX = 1;\n }\n s.paginationContainer.find('.' + s.params.paginationProgressbarClass).transform('translate3d(0,0,0) scaleX(' + scaleX + ') scaleY(' + scaleY + ')').transition(s.params.speed);\n }\n if (s.params.paginationType === 'custom' && s.params.paginationCustomRender) {\n s.paginationContainer.html(s.params.paginationCustomRender(s, current + 1, total));\n s.emit('onPaginationRendered', s, s.paginationContainer[0]);\n }\n }\n \n // Next/active buttons\n if (!s.params.loop) {\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n if (s.isBeginning) {\n s.prevButton.addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable(s.prevButton);\n }\n else {\n s.prevButton.removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable(s.prevButton);\n }\n }\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n if (s.isEnd) {\n s.nextButton.addClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.disable(s.nextButton);\n }\n else {\n s.nextButton.removeClass(s.params.buttonDisabledClass);\n if (s.params.a11y && s.a11y) s.a11y.enable(s.nextButton);\n }\n }\n }\n };\n \n /*=========================\n Pagination\n ===========================*/\n s.updatePagination = function () {\n if (!s.params.pagination) return;\n if (s.paginationContainer && s.paginationContainer.length > 0) {\n var paginationHTML = '';\n if (s.params.paginationType === 'bullets') {\n var numberOfBullets = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length;\n for (var i = 0; i < numberOfBullets; i++) {\n if (s.params.paginationBulletRender) {\n paginationHTML += s.params.paginationBulletRender(s, i, s.params.bulletClass);\n }\n else {\n paginationHTML += '<' + s.params.paginationElement+' class=\"' + s.params.bulletClass + '\">';\n }\n }\n s.paginationContainer.html(paginationHTML);\n s.bullets = s.paginationContainer.find('.' + s.params.bulletClass);\n if (s.params.paginationClickable && s.params.a11y && s.a11y) {\n s.a11y.initPagination();\n }\n }\n if (s.params.paginationType === 'fraction') {\n if (s.params.paginationFractionRender) {\n paginationHTML = s.params.paginationFractionRender(s, s.params.paginationCurrentClass, s.params.paginationTotalClass);\n }\n else {\n paginationHTML =\n '' +\n ' / ' +\n '';\n }\n s.paginationContainer.html(paginationHTML);\n }\n if (s.params.paginationType === 'progress') {\n if (s.params.paginationProgressRender) {\n paginationHTML = s.params.paginationProgressRender(s, s.params.paginationProgressbarClass);\n }\n else {\n paginationHTML = '';\n }\n s.paginationContainer.html(paginationHTML);\n }\n if (s.params.paginationType !== 'custom') {\n s.emit('onPaginationRendered', s, s.paginationContainer[0]);\n }\n }\n };\n /*=========================\n Common update method\n ===========================*/\n s.update = function (updateTranslate) {\n if (!s) return;\n s.updateContainerSize();\n s.updateSlidesSize();\n s.updateProgress();\n s.updatePagination();\n s.updateClasses();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n }\n var newTranslate;\n function forceSetTranslate() {\n var translate = s.rtl ? -s.translate : s.translate;\n newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());\n s.setWrapperTranslate(newTranslate);\n s.updateActiveIndex();\n s.updateClasses();\n }\n if (updateTranslate) {\n var translated;\n if (s.controller && s.controller.spline) {\n s.controller.spline = undefined;\n }\n if (s.params.freeMode) {\n forceSetTranslate();\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n }\n else {\n if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) {\n translated = s.slideTo(s.slides.length - 1, 0, false, true);\n }\n else {\n translated = s.slideTo(s.activeIndex, 0, false, true);\n }\n if (!translated) {\n forceSetTranslate();\n }\n }\n }\n else if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n };\n \n /*=========================\n Resize Handler\n ===========================*/\n s.onResize = function (forceUpdatePagination) {\n if (s.params.onBeforeResize) s.params.onBeforeResize(s);\n //Breakpoints\n if (s.params.breakpoints) {\n s.setBreakpoint();\n }\n \n // Disable locks on resize\n var allowSwipeToPrev = s.params.allowSwipeToPrev;\n var allowSwipeToNext = s.params.allowSwipeToNext;\n s.params.allowSwipeToPrev = s.params.allowSwipeToNext = true;\n \n s.updateContainerSize();\n s.updateSlidesSize();\n if (s.params.slidesPerView === 'auto' || s.params.freeMode || forceUpdatePagination) s.updatePagination();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n }\n if (s.controller && s.controller.spline) {\n s.controller.spline = undefined;\n }\n var slideChangedBySlideTo = false;\n if (s.params.freeMode) {\n var newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());\n s.setWrapperTranslate(newTranslate);\n s.updateActiveIndex();\n s.updateClasses();\n \n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n }\n else {\n s.updateClasses();\n if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) {\n slideChangedBySlideTo = s.slideTo(s.slides.length - 1, 0, false, true);\n }\n else {\n slideChangedBySlideTo = s.slideTo(s.activeIndex, 0, false, true);\n }\n }\n if (s.params.lazyLoading && !slideChangedBySlideTo && s.lazy) {\n s.lazy.load();\n }\n // Return locks after resize\n s.params.allowSwipeToPrev = allowSwipeToPrev;\n s.params.allowSwipeToNext = allowSwipeToNext;\n if (s.params.onAfterResize) s.params.onAfterResize(s);\n };\n \n /*=========================\n Events\n ===========================*/\n \n //Define Touch Events\n s.touchEventsDesktop = {start: 'mousedown', move: 'mousemove', end: 'mouseup'};\n if (window.navigator.pointerEnabled) s.touchEventsDesktop = {start: 'pointerdown', move: 'pointermove', end: 'pointerup'};\n else if (window.navigator.msPointerEnabled) s.touchEventsDesktop = {start: 'MSPointerDown', move: 'MSPointerMove', end: 'MSPointerUp'};\n s.touchEvents = {\n start : s.support.touch || !s.params.simulateTouch ? 'touchstart' : s.touchEventsDesktop.start,\n move : s.support.touch || !s.params.simulateTouch ? 'touchmove' : s.touchEventsDesktop.move,\n end : s.support.touch || !s.params.simulateTouch ? 'touchend' : s.touchEventsDesktop.end\n };\n \n \n // WP8 Touch Events Fix\n if (window.navigator.pointerEnabled || window.navigator.msPointerEnabled) {\n (s.params.touchEventsTarget === 'container' ? s.container : s.wrapper).addClass('swiper-wp8-' + s.params.direction);\n }\n \n // Attach/detach events\n s.initEvents = function (detach) {\n var actionDom = detach ? 'off' : 'on';\n var action = detach ? 'removeEventListener' : 'addEventListener';\n var touchEventsTarget = s.params.touchEventsTarget === 'container' ? s.container[0] : s.wrapper[0];\n var target = s.support.touch ? touchEventsTarget : document;\n \n var moveCapture = s.params.nested ? true : false;\n \n //Touch Events\n if (s.browser.ie) {\n touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false);\n target[action](s.touchEvents.move, s.onTouchMove, moveCapture);\n target[action](s.touchEvents.end, s.onTouchEnd, false);\n }\n else {\n if (s.support.touch) {\n var passiveListener = s.touchEvents.start === 'touchstart' && s.support.passiveListener && s.params.passiveListeners ? {passive: true, capture: false} : false;\n touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, passiveListener);\n touchEventsTarget[action](s.touchEvents.move, s.onTouchMove, moveCapture);\n touchEventsTarget[action](s.touchEvents.end, s.onTouchEnd, passiveListener);\n }\n if ((params.simulateTouch && !s.device.ios && !s.device.android) || (params.simulateTouch && !s.support.touch && s.device.ios)) {\n touchEventsTarget[action]('mousedown', s.onTouchStart, false);\n document[action]('mousemove', s.onTouchMove, moveCapture);\n document[action]('mouseup', s.onTouchEnd, false);\n }\n }\n window[action]('resize', s.onResize);\n \n // Next, Prev, Index\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n s.nextButton[actionDom]('click', s.onClickNext);\n if (s.params.a11y && s.a11y) s.nextButton[actionDom]('keydown', s.a11y.onEnterKey);\n }\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n s.prevButton[actionDom]('click', s.onClickPrev);\n if (s.params.a11y && s.a11y) s.prevButton[actionDom]('keydown', s.a11y.onEnterKey);\n }\n if (s.params.pagination && s.params.paginationClickable) {\n s.paginationContainer[actionDom]('click', '.' + s.params.bulletClass, s.onClickIndex);\n if (s.params.a11y && s.a11y) s.paginationContainer[actionDom]('keydown', '.' + s.params.bulletClass, s.a11y.onEnterKey);\n }\n \n // Prevent Links Clicks\n if (s.params.preventClicks || s.params.preventClicksPropagation) touchEventsTarget[action]('click', s.preventClicks, true);\n };\n s.attachEvents = function () {\n s.initEvents();\n };\n s.detachEvents = function () {\n s.initEvents(true);\n };\n \n /*=========================\n Handle Clicks\n ===========================*/\n // Prevent Clicks\n s.allowClick = true;\n s.preventClicks = function (e) {\n if (!s.allowClick) {\n if (s.params.preventClicks) e.preventDefault();\n if (s.params.preventClicksPropagation && s.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n };\n // Clicks\n s.onClickNext = function (e) {\n e.preventDefault();\n if (s.isEnd && !s.params.loop) return;\n s.slideNext();\n };\n s.onClickPrev = function (e) {\n e.preventDefault();\n if (s.isBeginning && !s.params.loop) return;\n s.slidePrev();\n };\n s.onClickIndex = function (e) {\n e.preventDefault();\n var index = $(this).index() * s.params.slidesPerGroup;\n if (s.params.loop) index = index + s.loopedSlides;\n s.slideTo(index);\n };\n \n /*=========================\n Handle Touches\n ===========================*/\n function findElementInEvent(e, selector) {\n var el = $(e.target);\n if (!el.is(selector)) {\n if (typeof selector === 'string') {\n el = el.parents(selector);\n }\n else if (selector.nodeType) {\n var found;\n el.parents().each(function (index, _el) {\n if (_el === selector) found = selector;\n });\n if (!found) return undefined;\n else return selector;\n }\n }\n if (el.length === 0) {\n return undefined;\n }\n return el[0];\n }\n s.updateClickedSlide = function (e) {\n var slide = findElementInEvent(e, '.' + s.params.slideClass);\n var slideFound = false;\n if (slide) {\n for (var i = 0; i < s.slides.length; i++) {\n if (s.slides[i] === slide) slideFound = true;\n }\n }\n \n if (slide && slideFound) {\n s.clickedSlide = slide;\n s.clickedIndex = $(slide).index();\n }\n else {\n s.clickedSlide = undefined;\n s.clickedIndex = undefined;\n return;\n }\n if (s.params.slideToClickedSlide && s.clickedIndex !== undefined && s.clickedIndex !== s.activeIndex) {\n var slideToIndex = s.clickedIndex,\n realIndex,\n duplicatedSlides,\n slidesPerView = s.params.slidesPerView === 'auto' ? s.currentSlidesPerView() : s.params.slidesPerView;\n if (s.params.loop) {\n if (s.animating) return;\n realIndex = parseInt($(s.clickedSlide).attr('data-swiper-slide-index'), 10);\n if (s.params.centeredSlides) {\n if ((slideToIndex < s.loopedSlides - slidesPerView/2) || (slideToIndex > s.slides.length - s.loopedSlides + slidesPerView/2)) {\n s.fixLoop();\n slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index=\"' + realIndex + '\"]:not(.' + s.params.slideDuplicateClass + ')').eq(0).index();\n setTimeout(function () {\n s.slideTo(slideToIndex);\n }, 0);\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n else {\n if (slideToIndex > s.slides.length - slidesPerView) {\n s.fixLoop();\n slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index=\"' + realIndex + '\"]:not(.' + s.params.slideDuplicateClass + ')').eq(0).index();\n setTimeout(function () {\n s.slideTo(slideToIndex);\n }, 0);\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n }\n else {\n s.slideTo(slideToIndex);\n }\n }\n };\n \n var isTouched,\n isMoved,\n allowTouchCallbacks,\n touchStartTime,\n isScrolling,\n currentTranslate,\n startTranslate,\n allowThresholdMove,\n // Form elements to match\n formElements = 'input, select, textarea, button, video',\n // Last click time\n lastClickTime = Date.now(), clickTimeout,\n //Velocities\n velocities = [],\n allowMomentumBounce;\n \n // Animating Flag\n s.animating = false;\n \n // Touches information\n s.touches = {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n };\n \n // Touch handlers\n var isTouchEvent, startMoving;\n s.onTouchStart = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n isTouchEvent = e.type === 'touchstart';\n if (!isTouchEvent && 'which' in e && e.which === 3) return;\n if (s.params.noSwiping && findElementInEvent(e, '.' + s.params.noSwipingClass)) {\n s.allowClick = true;\n return;\n }\n if (s.params.swipeHandler) {\n if (!findElementInEvent(e, s.params.swipeHandler)) return;\n }\n \n var startX = s.touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n var startY = s.touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n \n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore\n if(s.device.ios && s.params.iOSEdgeSwipeDetection && startX <= s.params.iOSEdgeSwipeThreshold) {\n return;\n }\n \n isTouched = true;\n isMoved = false;\n allowTouchCallbacks = true;\n isScrolling = undefined;\n startMoving = undefined;\n s.touches.startX = startX;\n s.touches.startY = startY;\n touchStartTime = Date.now();\n s.allowClick = true;\n s.updateContainerSize();\n s.swipeDirection = undefined;\n if (s.params.threshold > 0) allowThresholdMove = false;\n if (e.type !== 'touchstart') {\n var preventDefault = true;\n if ($(e.target).is(formElements)) preventDefault = false;\n if (document.activeElement && $(document.activeElement).is(formElements)) {\n document.activeElement.blur();\n }\n if (preventDefault) {\n e.preventDefault();\n }\n }\n s.emit('onTouchStart', s, e);\n };\n \n s.onTouchMove = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n if (isTouchEvent && e.type === 'mousemove') return;\n if (e.preventedByNestedSwiper) {\n s.touches.startX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.startY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n return;\n }\n if (s.params.onlyExternal) {\n // isMoved = true;\n s.allowClick = false;\n if (isTouched) {\n s.touches.startX = s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.startY = s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n touchStartTime = Date.now();\n }\n return;\n }\n if (isTouchEvent && s.params.touchReleaseOnEdges && !s.params.loop) {\n if (!s.isHorizontal()) {\n // Vertical\n if (\n (s.touches.currentY < s.touches.startY && s.translate <= s.maxTranslate()) ||\n (s.touches.currentY > s.touches.startY && s.translate >= s.minTranslate())\n ) {\n return;\n }\n }\n else {\n if (\n (s.touches.currentX < s.touches.startX && s.translate <= s.maxTranslate()) ||\n (s.touches.currentX > s.touches.startX && s.translate >= s.minTranslate())\n ) {\n return;\n }\n }\n }\n if (isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(formElements)) {\n isMoved = true;\n s.allowClick = false;\n return;\n }\n }\n if (allowTouchCallbacks) {\n s.emit('onTouchMove', s, e);\n }\n if (e.targetTouches && e.targetTouches.length > 1) return;\n \n s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n \n if (typeof isScrolling === 'undefined') {\n var touchAngle;\n if (s.isHorizontal() && s.touches.currentY === s.touches.startY || !s.isHorizontal() && s.touches.currentX === s.touches.startX) {\n isScrolling = false;\n }\n else {\n touchAngle = Math.atan2(Math.abs(s.touches.currentY - s.touches.startY), Math.abs(s.touches.currentX - s.touches.startX)) * 180 / Math.PI;\n isScrolling = s.isHorizontal() ? touchAngle > s.params.touchAngle : (90 - touchAngle > s.params.touchAngle);\n }\n }\n if (isScrolling) {\n s.emit('onTouchMoveOpposite', s, e);\n }\n if (typeof startMoving === 'undefined') {\n if (s.touches.currentX !== s.touches.startX || s.touches.currentY !== s.touches.startY) {\n startMoving = true;\n }\n }\n if (!isTouched) return;\n if (isScrolling) {\n isTouched = false;\n return;\n }\n if (!startMoving) {\n return;\n }\n s.allowClick = false;\n s.emit('onSliderMove', s, e);\n e.preventDefault();\n if (s.params.touchMoveStopPropagation && !s.params.nested) {\n e.stopPropagation();\n }\n \n if (!isMoved) {\n if (params.loop) {\n s.fixLoop();\n }\n startTranslate = s.getWrapperTranslate();\n s.setWrapperTransition(0);\n if (s.animating) {\n s.wrapper.trigger('webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd');\n }\n if (s.params.autoplay && s.autoplaying) {\n if (s.params.autoplayDisableOnInteraction) {\n s.stopAutoplay();\n }\n else {\n s.pauseAutoplay();\n }\n }\n allowMomentumBounce = false;\n //Grab Cursor\n if (s.params.grabCursor && (s.params.allowSwipeToNext === true || s.params.allowSwipeToPrev === true)) {\n s.setGrabCursor(true);\n }\n }\n isMoved = true;\n \n var diff = s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY;\n \n diff = diff * s.params.touchRatio;\n if (s.rtl) diff = -diff;\n \n s.swipeDirection = diff > 0 ? 'prev' : 'next';\n currentTranslate = diff + startTranslate;\n \n var disableParentSwiper = true;\n if ((diff > 0 && currentTranslate > s.minTranslate())) {\n disableParentSwiper = false;\n if (s.params.resistance) currentTranslate = s.minTranslate() - 1 + Math.pow(-s.minTranslate() + startTranslate + diff, s.params.resistanceRatio);\n }\n else if (diff < 0 && currentTranslate < s.maxTranslate()) {\n disableParentSwiper = false;\n if (s.params.resistance) currentTranslate = s.maxTranslate() + 1 - Math.pow(s.maxTranslate() - startTranslate - diff, s.params.resistanceRatio);\n }\n \n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n \n // Directions locks\n if (!s.params.allowSwipeToNext && s.swipeDirection === 'next' && currentTranslate < startTranslate) {\n currentTranslate = startTranslate;\n }\n if (!s.params.allowSwipeToPrev && s.swipeDirection === 'prev' && currentTranslate > startTranslate) {\n currentTranslate = startTranslate;\n }\n \n \n // Threshold\n if (s.params.threshold > 0) {\n if (Math.abs(diff) > s.params.threshold || allowThresholdMove) {\n if (!allowThresholdMove) {\n allowThresholdMove = true;\n s.touches.startX = s.touches.currentX;\n s.touches.startY = s.touches.currentY;\n currentTranslate = startTranslate;\n s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY;\n return;\n }\n }\n else {\n currentTranslate = startTranslate;\n return;\n }\n }\n \n if (!s.params.followFinger) return;\n \n // Update active index in free mode\n if (s.params.freeMode || s.params.watchSlidesProgress) {\n s.updateActiveIndex();\n }\n if (s.params.freeMode) {\n //Velocity\n if (velocities.length === 0) {\n velocities.push({\n position: s.touches[s.isHorizontal() ? 'startX' : 'startY'],\n time: touchStartTime\n });\n }\n velocities.push({\n position: s.touches[s.isHorizontal() ? 'currentX' : 'currentY'],\n time: (new window.Date()).getTime()\n });\n }\n // Update progress\n s.updateProgress(currentTranslate);\n // Update translate\n s.setWrapperTranslate(currentTranslate);\n };\n s.onTouchEnd = function (e) {\n if (e.originalEvent) e = e.originalEvent;\n if (allowTouchCallbacks) {\n s.emit('onTouchEnd', s, e);\n }\n allowTouchCallbacks = false;\n if (!isTouched) return;\n //Return Grab Cursor\n if (s.params.grabCursor && isMoved && isTouched && (s.params.allowSwipeToNext === true || s.params.allowSwipeToPrev === true)) {\n s.setGrabCursor(false);\n }\n \n // Time diff\n var touchEndTime = Date.now();\n var timeDiff = touchEndTime - touchStartTime;\n \n // Tap, doubleTap, Click\n if (s.allowClick) {\n s.updateClickedSlide(e);\n s.emit('onTap', s, e);\n if (timeDiff < 300 && (touchEndTime - lastClickTime) > 300) {\n if (clickTimeout) clearTimeout(clickTimeout);\n clickTimeout = setTimeout(function () {\n if (!s) return;\n if (s.params.paginationHide && s.paginationContainer.length > 0 && !$(e.target).hasClass(s.params.bulletClass)) {\n s.paginationContainer.toggleClass(s.params.paginationHiddenClass);\n }\n s.emit('onClick', s, e);\n }, 300);\n \n }\n if (timeDiff < 300 && (touchEndTime - lastClickTime) < 300) {\n if (clickTimeout) clearTimeout(clickTimeout);\n s.emit('onDoubleTap', s, e);\n }\n }\n \n lastClickTime = Date.now();\n setTimeout(function () {\n if (s) s.allowClick = true;\n }, 0);\n \n if (!isTouched || !isMoved || !s.swipeDirection || s.touches.diff === 0 || currentTranslate === startTranslate) {\n isTouched = isMoved = false;\n return;\n }\n isTouched = isMoved = false;\n \n var currentPos;\n if (s.params.followFinger) {\n currentPos = s.rtl ? s.translate : -s.translate;\n }\n else {\n currentPos = -currentTranslate;\n }\n if (s.params.freeMode) {\n if (currentPos < -s.minTranslate()) {\n s.slideTo(s.activeIndex);\n return;\n }\n else if (currentPos > -s.maxTranslate()) {\n if (s.slides.length < s.snapGrid.length) {\n s.slideTo(s.snapGrid.length - 1);\n }\n else {\n s.slideTo(s.slides.length - 1);\n }\n return;\n }\n \n if (s.params.freeModeMomentum) {\n if (velocities.length > 1) {\n var lastMoveEvent = velocities.pop(), velocityEvent = velocities.pop();\n \n var distance = lastMoveEvent.position - velocityEvent.position;\n var time = lastMoveEvent.time - velocityEvent.time;\n s.velocity = distance / time;\n s.velocity = s.velocity / 2;\n if (Math.abs(s.velocity) < s.params.freeModeMinimumVelocity) {\n s.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 || (new window.Date().getTime() - lastMoveEvent.time) > 300) {\n s.velocity = 0;\n }\n } else {\n s.velocity = 0;\n }\n s.velocity = s.velocity * s.params.freeModeMomentumVelocityRatio;\n \n velocities.length = 0;\n var momentumDuration = 1000 * s.params.freeModeMomentumRatio;\n var momentumDistance = s.velocity * momentumDuration;\n \n var newPosition = s.translate + momentumDistance;\n if (s.rtl) newPosition = - newPosition;\n var doBounce = false;\n var afterBouncePosition;\n var bounceAmount = Math.abs(s.velocity) * 20 * s.params.freeModeMomentumBounceRatio;\n if (newPosition < s.maxTranslate()) {\n if (s.params.freeModeMomentumBounce) {\n if (newPosition + s.maxTranslate() < -bounceAmount) {\n newPosition = s.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = s.maxTranslate();\n doBounce = true;\n allowMomentumBounce = true;\n }\n else {\n newPosition = s.maxTranslate();\n }\n }\n else if (newPosition > s.minTranslate()) {\n if (s.params.freeModeMomentumBounce) {\n if (newPosition - s.minTranslate() > bounceAmount) {\n newPosition = s.minTranslate() + bounceAmount;\n }\n afterBouncePosition = s.minTranslate();\n doBounce = true;\n allowMomentumBounce = true;\n }\n else {\n newPosition = s.minTranslate();\n }\n }\n else if (s.params.freeModeSticky) {\n var j = 0,\n nextSlide;\n for (j = 0; j < s.snapGrid.length; j += 1) {\n if (s.snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n \n }\n if (Math.abs(s.snapGrid[nextSlide] - newPosition) < Math.abs(s.snapGrid[nextSlide - 1] - newPosition) || s.swipeDirection === 'next') {\n newPosition = s.snapGrid[nextSlide];\n } else {\n newPosition = s.snapGrid[nextSlide - 1];\n }\n if (!s.rtl) newPosition = - newPosition;\n }\n //Fix duration\n if (s.velocity !== 0) {\n if (s.rtl) {\n momentumDuration = Math.abs((-newPosition - s.translate) / s.velocity);\n }\n else {\n momentumDuration = Math.abs((newPosition - s.translate) / s.velocity);\n }\n }\n else if (s.params.freeModeSticky) {\n s.slideReset();\n return;\n }\n \n if (s.params.freeModeMomentumBounce && doBounce) {\n s.updateProgress(afterBouncePosition);\n s.setWrapperTransition(momentumDuration);\n s.setWrapperTranslate(newPosition);\n s.onTransitionStart();\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s || !allowMomentumBounce) return;\n s.emit('onMomentumBounce', s);\n \n s.setWrapperTransition(s.params.speed);\n s.setWrapperTranslate(afterBouncePosition);\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd();\n });\n });\n } else if (s.velocity) {\n s.updateProgress(newPosition);\n s.setWrapperTransition(momentumDuration);\n s.setWrapperTranslate(newPosition);\n s.onTransitionStart();\n if (!s.animating) {\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd();\n });\n }\n \n } else {\n s.updateProgress(newPosition);\n }\n \n s.updateActiveIndex();\n }\n if (!s.params.freeModeMomentum || timeDiff >= s.params.longSwipesMs) {\n s.updateProgress();\n s.updateActiveIndex();\n }\n return;\n }\n \n // Find current slide\n var i, stopIndex = 0, groupSize = s.slidesSizesGrid[0];\n for (i = 0; i < s.slidesGrid.length; i += s.params.slidesPerGroup) {\n if (typeof s.slidesGrid[i + s.params.slidesPerGroup] !== 'undefined') {\n if (currentPos >= s.slidesGrid[i] && currentPos < s.slidesGrid[i + s.params.slidesPerGroup]) {\n stopIndex = i;\n groupSize = s.slidesGrid[i + s.params.slidesPerGroup] - s.slidesGrid[i];\n }\n }\n else {\n if (currentPos >= s.slidesGrid[i]) {\n stopIndex = i;\n groupSize = s.slidesGrid[s.slidesGrid.length - 1] - s.slidesGrid[s.slidesGrid.length - 2];\n }\n }\n }\n \n // Find current slide size\n var ratio = (currentPos - s.slidesGrid[stopIndex]) / groupSize;\n \n if (timeDiff > s.params.longSwipesMs) {\n // Long touches\n if (!s.params.longSwipes) {\n s.slideTo(s.activeIndex);\n return;\n }\n if (s.swipeDirection === 'next') {\n if (ratio >= s.params.longSwipesRatio) s.slideTo(stopIndex + s.params.slidesPerGroup);\n else s.slideTo(stopIndex);\n \n }\n if (s.swipeDirection === 'prev') {\n if (ratio > (1 - s.params.longSwipesRatio)) s.slideTo(stopIndex + s.params.slidesPerGroup);\n else s.slideTo(stopIndex);\n }\n }\n else {\n // Short swipes\n if (!s.params.shortSwipes) {\n s.slideTo(s.activeIndex);\n return;\n }\n if (s.swipeDirection === 'next') {\n s.slideTo(stopIndex + s.params.slidesPerGroup);\n \n }\n if (s.swipeDirection === 'prev') {\n s.slideTo(stopIndex);\n }\n }\n };\n /*=========================\n Transitions\n ===========================*/\n s._slideTo = function (slideIndex, speed) {\n return s.slideTo(slideIndex, speed, true, true);\n };\n s.slideTo = function (slideIndex, speed, runCallbacks, internal) {\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (typeof slideIndex === 'undefined') slideIndex = 0;\n if (slideIndex < 0) slideIndex = 0;\n s.snapIndex = Math.floor(slideIndex / s.params.slidesPerGroup);\n if (s.snapIndex >= s.snapGrid.length) s.snapIndex = s.snapGrid.length - 1;\n \n var translate = - s.snapGrid[s.snapIndex];\n // Stop autoplay\n if (s.params.autoplay && s.autoplaying) {\n if (internal || !s.params.autoplayDisableOnInteraction) {\n s.pauseAutoplay(speed);\n }\n else {\n s.stopAutoplay();\n }\n }\n // Update progress\n s.updateProgress(translate);\n \n // Normalize slideIndex\n if(s.params.normalizeSlideIndex){\n for (var i = 0; i < s.slidesGrid.length; i++) {\n if (- Math.floor(translate * 100) >= Math.floor(s.slidesGrid[i] * 100)) {\n slideIndex = i;\n }\n }\n }\n \n // Directions locks\n if (!s.params.allowSwipeToNext && translate < s.translate && translate < s.minTranslate()) {\n return false;\n }\n if (!s.params.allowSwipeToPrev && translate > s.translate && translate > s.maxTranslate()) {\n if ((s.activeIndex || 0) !== slideIndex ) return false;\n }\n \n // Update Index\n if (typeof speed === 'undefined') speed = s.params.speed;\n s.previousIndex = s.activeIndex || 0;\n s.activeIndex = slideIndex;\n s.updateRealIndex();\n if ((s.rtl && -translate === s.translate) || (!s.rtl && translate === s.translate)) {\n // Update Height\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n s.updateClasses();\n if (s.params.effect !== 'slide') {\n s.setWrapperTranslate(translate);\n }\n return false;\n }\n s.updateClasses();\n s.onTransitionStart(runCallbacks);\n \n if (speed === 0 || s.browser.lteIE9) {\n s.setWrapperTranslate(translate);\n s.setWrapperTransition(0);\n s.onTransitionEnd(runCallbacks);\n }\n else {\n s.setWrapperTranslate(translate);\n s.setWrapperTransition(speed);\n if (!s.animating) {\n s.animating = true;\n s.wrapper.transitionEnd(function () {\n if (!s) return;\n s.onTransitionEnd(runCallbacks);\n });\n }\n \n }\n \n return true;\n };\n \n s.onTransitionStart = function (runCallbacks) {\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (s.params.autoHeight) {\n s.updateAutoHeight();\n }\n if (s.lazy) s.lazy.onTransitionStart();\n if (runCallbacks) {\n s.emit('onTransitionStart', s);\n if (s.activeIndex !== s.previousIndex) {\n s.emit('onSlideChangeStart', s);\n if (s.activeIndex > s.previousIndex) {\n s.emit('onSlideNextStart', s);\n }\n else {\n s.emit('onSlidePrevStart', s);\n }\n }\n \n }\n };\n s.onTransitionEnd = function (runCallbacks) {\n s.animating = false;\n s.setWrapperTransition(0);\n if (typeof runCallbacks === 'undefined') runCallbacks = true;\n if (s.lazy) s.lazy.onTransitionEnd();\n if (runCallbacks) {\n s.emit('onTransitionEnd', s);\n if (s.activeIndex !== s.previousIndex) {\n s.emit('onSlideChangeEnd', s);\n if (s.activeIndex > s.previousIndex) {\n s.emit('onSlideNextEnd', s);\n }\n else {\n s.emit('onSlidePrevEnd', s);\n }\n }\n }\n if (s.params.history && s.history) {\n s.history.setHistory(s.params.history, s.activeIndex);\n }\n if (s.params.hashnav && s.hashnav) {\n s.hashnav.setHash();\n }\n \n };\n s.slideNext = function (runCallbacks, speed, internal) {\n if (s.params.loop) {\n if (s.animating) return false;\n s.fixLoop();\n var clientLeft = s.container[0].clientLeft;\n return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal);\n }\n else return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal);\n };\n s._slideNext = function (speed) {\n return s.slideNext(true, speed, true);\n };\n s.slidePrev = function (runCallbacks, speed, internal) {\n if (s.params.loop) {\n if (s.animating) return false;\n s.fixLoop();\n var clientLeft = s.container[0].clientLeft;\n return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal);\n }\n else return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal);\n };\n s._slidePrev = function (speed) {\n return s.slidePrev(true, speed, true);\n };\n s.slideReset = function (runCallbacks, speed, internal) {\n return s.slideTo(s.activeIndex, speed, runCallbacks);\n };\n \n s.disableTouchControl = function () {\n s.params.onlyExternal = true;\n return true;\n };\n s.enableTouchControl = function () {\n s.params.onlyExternal = false;\n return true;\n };\n \n /*=========================\n Translate/transition helpers\n ===========================*/\n s.setWrapperTransition = function (duration, byController) {\n s.wrapper.transition(duration);\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n s.effects[s.params.effect].setTransition(duration);\n }\n if (s.params.parallax && s.parallax) {\n s.parallax.setTransition(duration);\n }\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.setTransition(duration);\n }\n if (s.params.control && s.controller) {\n s.controller.setTransition(duration, byController);\n }\n s.emit('onSetTransition', s, duration);\n };\n s.setWrapperTranslate = function (translate, updateActiveIndex, byController) {\n var x = 0, y = 0, z = 0;\n if (s.isHorizontal()) {\n x = s.rtl ? -translate : translate;\n }\n else {\n y = translate;\n }\n \n if (s.params.roundLengths) {\n x = round(x);\n y = round(y);\n }\n \n if (!s.params.virtualTranslate) {\n if (s.support.transforms3d) s.wrapper.transform('translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)');\n else s.wrapper.transform('translate(' + x + 'px, ' + y + 'px)');\n }\n \n s.translate = s.isHorizontal() ? x : y;\n \n // Check if we need to update progress\n var progress;\n var translatesDiff = s.maxTranslate() - s.minTranslate();\n if (translatesDiff === 0) {\n progress = 0;\n }\n else {\n progress = (translate - s.minTranslate()) / (translatesDiff);\n }\n if (progress !== s.progress) {\n s.updateProgress(translate);\n }\n \n if (updateActiveIndex) s.updateActiveIndex();\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n s.effects[s.params.effect].setTranslate(s.translate);\n }\n if (s.params.parallax && s.parallax) {\n s.parallax.setTranslate(s.translate);\n }\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.setTranslate(s.translate);\n }\n if (s.params.control && s.controller) {\n s.controller.setTranslate(s.translate, byController);\n }\n s.emit('onSetTranslate', s, s.translate);\n };\n \n s.getTranslate = function (el, axis) {\n var matrix, curTransform, curStyle, transformMatrix;\n \n // automatic axis detection\n if (typeof axis === 'undefined') {\n axis = 'x';\n }\n \n if (s.params.virtualTranslate) {\n return s.rtl ? -s.translate : s.translate;\n }\n \n curStyle = window.getComputedStyle(el, null);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(function(a){\n return a.replace(',','.');\n }).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n }\n else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n \n if (axis === 'x') {\n //Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix)\n curTransform = transformMatrix.m41;\n //Crazy IE10 Matrix\n else if (matrix.length === 16)\n curTransform = parseFloat(matrix[12]);\n //Normal Browsers\n else\n curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n //Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix)\n curTransform = transformMatrix.m42;\n //Crazy IE10 Matrix\n else if (matrix.length === 16)\n curTransform = parseFloat(matrix[13]);\n //Normal Browsers\n else\n curTransform = parseFloat(matrix[5]);\n }\n if (s.rtl && curTransform) curTransform = -curTransform;\n return curTransform || 0;\n };\n s.getWrapperTranslate = function (axis) {\n if (typeof axis === 'undefined') {\n axis = s.isHorizontal() ? 'x' : 'y';\n }\n return s.getTranslate(s.wrapper[0], axis);\n };\n \n /*=========================\n Observer\n ===========================*/\n s.observers = [];\n function initObserver(target, options) {\n options = options || {};\n // create an observer instance\n var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n var observer = new ObserverFunc(function (mutations) {\n mutations.forEach(function (mutation) {\n s.onResize(true);\n s.emit('onObserverUpdate', s, mutation);\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 s.observers.push(observer);\n }\n s.initObservers = function () {\n if (s.params.observeParents) {\n var containerParents = s.container.parents();\n for (var i = 0; i < containerParents.length; i++) {\n initObserver(containerParents[i]);\n }\n }\n \n // Observe container\n initObserver(s.container[0], {childList: false});\n \n // Observe wrapper\n initObserver(s.wrapper[0], {attributes: false});\n };\n s.disconnectObservers = function () {\n for (var i = 0; i < s.observers.length; i++) {\n s.observers[i].disconnect();\n }\n s.observers = [];\n };\n /*=========================\n Loop\n ===========================*/\n // Create looped slides\n s.createLoop = function () {\n // Remove duplicated slides\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();\n \n var slides = s.wrapper.children('.' + s.params.slideClass);\n \n if(s.params.slidesPerView === 'auto' && !s.params.loopedSlides) s.params.loopedSlides = slides.length;\n \n s.loopedSlides = parseInt(s.params.loopedSlides || s.params.slidesPerView, 10);\n s.loopedSlides = s.loopedSlides + s.params.loopAdditionalSlides;\n if (s.loopedSlides > slides.length) {\n s.loopedSlides = slides.length;\n }\n \n var prependSlides = [], appendSlides = [], i;\n slides.each(function (index, el) {\n var slide = $(this);\n if (index < s.loopedSlides) appendSlides.push(el);\n if (index < slides.length && index >= slides.length - s.loopedSlides) prependSlides.push(el);\n slide.attr('data-swiper-slide-index', index);\n });\n for (i = 0; i < appendSlides.length; i++) {\n s.wrapper.append($(appendSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));\n }\n for (i = prependSlides.length - 1; i >= 0; i--) {\n s.wrapper.prepend($(prependSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));\n }\n };\n s.destroyLoop = function () {\n s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();\n s.slides.removeAttr('data-swiper-slide-index');\n };\n s.reLoop = function (updatePosition) {\n var oldIndex = s.activeIndex - s.loopedSlides;\n s.destroyLoop();\n s.createLoop();\n s.updateSlidesSize();\n if (updatePosition) {\n s.slideTo(oldIndex + s.loopedSlides, 0, false);\n }\n \n };\n s.fixLoop = function () {\n var newIndex;\n //Fix For Negative Oversliding\n if (s.activeIndex < s.loopedSlides) {\n newIndex = s.slides.length - s.loopedSlides * 3 + s.activeIndex;\n newIndex = newIndex + s.loopedSlides;\n s.slideTo(newIndex, 0, false, true);\n }\n //Fix For Positive Oversliding\n else if ((s.params.slidesPerView === 'auto' && s.activeIndex >= s.loopedSlides * 2) || (s.activeIndex > s.slides.length - s.params.slidesPerView * 2)) {\n newIndex = -s.slides.length + s.activeIndex + s.loopedSlides;\n newIndex = newIndex + s.loopedSlides;\n s.slideTo(newIndex, 0, false, true);\n }\n };\n /*=========================\n Append/Prepend/Remove Slides\n ===========================*/\n s.appendSlide = function (slides) {\n if (s.params.loop) {\n s.destroyLoop();\n }\n if (typeof slides === 'object' && slides.length) {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i]) s.wrapper.append(slides[i]);\n }\n }\n else {\n s.wrapper.append(slides);\n }\n if (s.params.loop) {\n s.createLoop();\n }\n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n };\n s.prependSlide = function (slides) {\n if (s.params.loop) {\n s.destroyLoop();\n }\n var newActiveIndex = s.activeIndex + 1;\n if (typeof slides === 'object' && slides.length) {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i]) s.wrapper.prepend(slides[i]);\n }\n newActiveIndex = s.activeIndex + slides.length;\n }\n else {\n s.wrapper.prepend(slides);\n }\n if (s.params.loop) {\n s.createLoop();\n }\n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n s.slideTo(newActiveIndex, 0, false);\n };\n s.removeSlide = function (slidesIndexes) {\n if (s.params.loop) {\n s.destroyLoop();\n s.slides = s.wrapper.children('.' + s.params.slideClass);\n }\n var newActiveIndex = s.activeIndex,\n indexToRemove;\n if (typeof slidesIndexes === 'object' && slidesIndexes.length) {\n for (var i = 0; i < slidesIndexes.length; i++) {\n indexToRemove = slidesIndexes[i];\n if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex--;\n }\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n else {\n indexToRemove = slidesIndexes;\n if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex--;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n \n if (s.params.loop) {\n s.createLoop();\n }\n \n if (!(s.params.observer && s.support.observer)) {\n s.update(true);\n }\n if (s.params.loop) {\n s.slideTo(newActiveIndex + s.loopedSlides, 0, false);\n }\n else {\n s.slideTo(newActiveIndex, 0, false);\n }\n \n };\n s.removeAllSlides = function () {\n var slidesIndexes = [];\n for (var i = 0; i < s.slides.length; i++) {\n slidesIndexes.push(i);\n }\n s.removeSlide(slidesIndexes);\n };\n \n\n /*=========================\n Effects\n ===========================*/\n s.effects = {\n fade: {\n setTranslate: function () {\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var offset = slide[0].swiperSlideOffset;\n var tx = -offset;\n if (!s.params.virtualTranslate) tx = tx - s.translate;\n var ty = 0;\n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n var slideOpacity = s.params.fade.crossFade ?\n Math.max(1 - Math.abs(slide[0].progress), 0) :\n 1 + Math.min(Math.max(slide[0].progress, -1), 0);\n slide\n .css({\n opacity: slideOpacity\n })\n .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px)');\n \n }\n \n },\n setTransition: function (duration) {\n s.slides.transition(duration);\n if (s.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n s.slides.transitionEnd(function () {\n if (eventTriggered) return;\n if (!s) return;\n eventTriggered = true;\n s.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];\n for (var i = 0; i < triggerEvents.length; i++) {\n s.wrapper.trigger(triggerEvents[i]);\n }\n });\n }\n }\n },\n flip: {\n setTranslate: function () {\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var progress = slide[0].progress;\n if (s.params.flip.limitRotation) {\n progress = Math.max(Math.min(slide[0].progress, 1), -1);\n }\n var offset = slide[0].swiperSlideOffset;\n var rotate = -180 * progress,\n rotateY = rotate,\n rotateX = 0,\n tx = -offset,\n ty = 0;\n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n }\n else if (s.rtl) {\n rotateY = -rotateY;\n }\n \n slide[0].style.zIndex = -Math.abs(Math.round(progress)) + s.slides.length;\n \n if (s.params.flip.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('
    ');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('
    ');\n slide.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n }\n \n slide\n .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)');\n }\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n if (s.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n s.slides.eq(s.activeIndex).transitionEnd(function () {\n if (eventTriggered) return;\n if (!s) return;\n if (!$(this).hasClass(s.params.slideActiveClass)) return;\n eventTriggered = true;\n s.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];\n for (var i = 0; i < triggerEvents.length; i++) {\n s.wrapper.trigger(triggerEvents[i]);\n }\n });\n }\n }\n },\n cube: {\n setTranslate: function () {\n var wrapperRotate = 0, cubeShadow;\n if (s.params.cube.shadow) {\n if (s.isHorizontal()) {\n cubeShadow = s.wrapper.find('.swiper-cube-shadow');\n if (cubeShadow.length === 0) {\n cubeShadow = $('
    ');\n s.wrapper.append(cubeShadow);\n }\n cubeShadow.css({height: s.width + 'px'});\n }\n else {\n cubeShadow = s.container.find('.swiper-cube-shadow');\n if (cubeShadow.length === 0) {\n cubeShadow = $('
    ');\n s.container.append(cubeShadow);\n }\n }\n }\n for (var i = 0; i < s.slides.length; i++) {\n var slide = s.slides.eq(i);\n var slideAngle = i * 90;\n var round = Math.floor(slideAngle / 360);\n if (s.rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n var progress = Math.max(Math.min(slide[0].progress, 1), -1);\n var tx = 0, ty = 0, tz = 0;\n if (i % 4 === 0) {\n tx = - round * 4 * s.size;\n tz = 0;\n }\n else if ((i - 1) % 4 === 0) {\n tx = 0;\n tz = - round * 4 * s.size;\n }\n else if ((i - 2) % 4 === 0) {\n tx = s.size + round * 4 * s.size;\n tz = s.size;\n }\n else if ((i - 3) % 4 === 0) {\n tx = - s.size;\n tz = 3 * s.size + s.size * 4 * round;\n }\n if (s.rtl) {\n tx = -tx;\n }\n \n if (!s.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n \n var transform = 'rotateX(' + (s.isHorizontal() ? 0 : -slideAngle) + 'deg) rotateY(' + (s.isHorizontal() ? slideAngle : 0) + 'deg) translate3d(' + tx + 'px, ' + ty + 'px, ' + tz + 'px)';\n if (progress <= 1 && progress > -1) {\n wrapperRotate = i * 90 + progress * 90;\n if (s.rtl) wrapperRotate = -i * 90 - progress * 90;\n }\n slide.transform(transform);\n if (s.params.cube.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('
    ');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('
    ');\n slide.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n }\n }\n s.wrapper.css({\n '-webkit-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n '-moz-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n '-ms-transform-origin': '50% 50% -' + (s.size / 2) + 'px',\n 'transform-origin': '50% 50% -' + (s.size / 2) + 'px'\n });\n \n if (s.params.cube.shadow) {\n if (s.isHorizontal()) {\n cubeShadow.transform('translate3d(0px, ' + (s.width / 2 + s.params.cube.shadowOffset) + 'px, ' + (-s.width / 2) + 'px) rotateX(90deg) rotateZ(0deg) scale(' + (s.params.cube.shadowScale) + ')');\n }\n else {\n var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);\n var scale1 = s.params.cube.shadowScale,\n scale2 = s.params.cube.shadowScale / multiplier,\n offset = s.params.cube.shadowOffset;\n cubeShadow.transform('scale3d(' + scale1 + ', 1, ' + scale2 + ') translate3d(0px, ' + (s.height / 2 + offset) + 'px, ' + (-s.height / 2 / scale2) + 'px) rotateX(-90deg)');\n }\n }\n var zFactor = (s.isSafari || s.isUiWebView) ? (-s.size / 2) : 0;\n s.wrapper.transform('translate3d(0px,0,' + zFactor + 'px) rotateX(' + (s.isHorizontal() ? 0 : wrapperRotate) + 'deg) rotateY(' + (s.isHorizontal() ? -wrapperRotate : 0) + 'deg)');\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n if (s.params.cube.shadow && !s.isHorizontal()) {\n s.container.find('.swiper-cube-shadow').transition(duration);\n }\n }\n },\n coverflow: {\n setTranslate: function () {\n var transform = s.translate;\n var center = s.isHorizontal() ? -transform + s.width / 2 : -transform + s.height / 2;\n var rotate = s.isHorizontal() ? s.params.coverflow.rotate: -s.params.coverflow.rotate;\n var translate = s.params.coverflow.depth;\n //Each slide offset from center\n for (var i = 0, length = s.slides.length; i < length; i++) {\n var slide = s.slides.eq(i);\n var slideSize = s.slidesSizesGrid[i];\n var slideOffset = slide[0].swiperSlideOffset;\n var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * s.params.coverflow.modifier;\n \n var rotateY = s.isHorizontal() ? rotate * offsetMultiplier : 0;\n var rotateX = s.isHorizontal() ? 0 : rotate * offsetMultiplier;\n // var rotateZ = 0\n var translateZ = -translate * Math.abs(offsetMultiplier);\n \n var translateY = s.isHorizontal() ? 0 : s.params.coverflow.stretch * (offsetMultiplier);\n var translateX = s.isHorizontal() ? s.params.coverflow.stretch * (offsetMultiplier) : 0;\n \n //Fix for ultra small values\n if (Math.abs(translateX) < 0.001) translateX = 0;\n if (Math.abs(translateY) < 0.001) translateY = 0;\n if (Math.abs(translateZ) < 0.001) translateZ = 0;\n if (Math.abs(rotateY) < 0.001) rotateY = 0;\n if (Math.abs(rotateX) < 0.001) rotateX = 0;\n \n var slideTransform = 'translate3d(' + translateX + 'px,' + translateY + 'px,' + translateZ + 'px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)';\n \n slide.transform(slideTransform);\n slide[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n if (s.params.coverflow.slideShadows) {\n //Set shadows\n var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');\n var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $('
    ');\n slide.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $('
    ');\n slide.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if (shadowAfter.length) shadowAfter[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0;\n }\n }\n \n //Set correct perspective for IE10\n if (s.browser.ie) {\n var ws = s.wrapper[0].style;\n ws.perspectiveOrigin = center + 'px 50%';\n }\n },\n setTransition: function (duration) {\n s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n }\n }\n };\n \n\n /*=========================\n Images Lazy Loading\n ===========================*/\n s.lazy = {\n initialImageLoaded: false,\n loadImageInSlide: function (index, loadInDuplicate) {\n if (typeof index === 'undefined') return;\n if (typeof loadInDuplicate === 'undefined') loadInDuplicate = true;\n if (s.slides.length === 0) return;\n \n var slide = s.slides.eq(index);\n var img = slide.find('.' + s.params.lazyLoadingClass + ':not(.' + s.params.lazyStatusLoadedClass + '):not(.' + s.params.lazyStatusLoadingClass + ')');\n if (slide.hasClass(s.params.lazyLoadingClass) && !slide.hasClass(s.params.lazyStatusLoadedClass) && !slide.hasClass(s.params.lazyStatusLoadingClass)) {\n img = img.add(slide[0]);\n }\n if (img.length === 0) return;\n \n img.each(function () {\n var _img = $(this);\n _img.addClass(s.params.lazyStatusLoadingClass);\n var background = _img.attr('data-background');\n var src = _img.attr('data-src'),\n srcset = _img.attr('data-srcset'),\n sizes = _img.attr('data-sizes');\n s.loadImage(_img[0], (src || background), srcset, sizes, false, function () {\n if (typeof s === 'undefined' || s === null || !s) return;\n if (background) {\n _img.css('background-image', 'url(\"' + background + '\")');\n _img.removeAttr('data-background');\n }\n else {\n if (srcset) {\n _img.attr('srcset', srcset);\n _img.removeAttr('data-srcset');\n }\n if (sizes) {\n _img.attr('sizes', sizes);\n _img.removeAttr('data-sizes');\n }\n if (src) {\n _img.attr('src', src);\n _img.removeAttr('data-src');\n }\n \n }\n \n _img.addClass(s.params.lazyStatusLoadedClass).removeClass(s.params.lazyStatusLoadingClass);\n slide.find('.' + s.params.lazyPreloaderClass + ', .' + s.params.preloaderClass).remove();\n if (s.params.loop && loadInDuplicate) {\n var slideOriginalIndex = slide.attr('data-swiper-slide-index');\n if (slide.hasClass(s.params.slideDuplicateClass)) {\n var originalSlide = s.wrapper.children('[data-swiper-slide-index=\"' + slideOriginalIndex + '\"]:not(.' + s.params.slideDuplicateClass + ')');\n s.lazy.loadImageInSlide(originalSlide.index(), false);\n }\n else {\n var duplicatedSlide = s.wrapper.children('.' + s.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + slideOriginalIndex + '\"]');\n s.lazy.loadImageInSlide(duplicatedSlide.index(), false);\n }\n }\n s.emit('onLazyImageReady', s, slide[0], _img[0]);\n });\n \n s.emit('onLazyImageLoad', s, slide[0], _img[0]);\n });\n \n },\n load: function () {\n var i;\n var slidesPerView = s.params.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = 0;\n }\n if (!s.lazy.initialImageLoaded) s.lazy.initialImageLoaded = true;\n if (s.params.watchSlidesVisibility) {\n s.wrapper.children('.' + s.params.slideVisibleClass).each(function () {\n s.lazy.loadImageInSlide($(this).index());\n });\n }\n else {\n if (slidesPerView > 1) {\n for (i = s.activeIndex; i < s.activeIndex + slidesPerView ; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n }\n else {\n s.lazy.loadImageInSlide(s.activeIndex);\n }\n }\n if (s.params.lazyLoadingInPrevNext) {\n if (slidesPerView > 1 || (s.params.lazyLoadingInPrevNextAmount && s.params.lazyLoadingInPrevNextAmount > 1)) {\n var amount = s.params.lazyLoadingInPrevNextAmount;\n var spv = slidesPerView;\n var maxIndex = Math.min(s.activeIndex + spv + Math.max(amount, spv), s.slides.length);\n var minIndex = Math.max(s.activeIndex - Math.max(spv, amount), 0);\n // Next Slides\n for (i = s.activeIndex + slidesPerView; i < maxIndex; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n // Prev Slides\n for (i = minIndex; i < s.activeIndex ; i++) {\n if (s.slides[i]) s.lazy.loadImageInSlide(i);\n }\n }\n else {\n var nextSlide = s.wrapper.children('.' + s.params.slideNextClass);\n if (nextSlide.length > 0) s.lazy.loadImageInSlide(nextSlide.index());\n \n var prevSlide = s.wrapper.children('.' + s.params.slidePrevClass);\n if (prevSlide.length > 0) s.lazy.loadImageInSlide(prevSlide.index());\n }\n }\n },\n onTransitionStart: function () {\n if (s.params.lazyLoading) {\n if (s.params.lazyLoadingOnTransitionStart || (!s.params.lazyLoadingOnTransitionStart && !s.lazy.initialImageLoaded)) {\n s.lazy.load();\n }\n }\n },\n onTransitionEnd: function () {\n if (s.params.lazyLoading && !s.params.lazyLoadingOnTransitionStart) {\n s.lazy.load();\n }\n }\n };\n \n\n /*=========================\n Scrollbar\n ===========================*/\n s.scrollbar = {\n isTouched: false,\n setDragPosition: function (e) {\n var sb = s.scrollbar;\n var x = 0, y = 0;\n var translate;\n var pointerPosition = s.isHorizontal() ?\n ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX) :\n ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY) ;\n var position = (pointerPosition) - sb.track.offset()[s.isHorizontal() ? 'left' : 'top'] - sb.dragSize / 2;\n var positionMin = -s.minTranslate() * sb.moveDivider;\n var positionMax = -s.maxTranslate() * sb.moveDivider;\n if (position < positionMin) {\n position = positionMin;\n }\n else if (position > positionMax) {\n position = positionMax;\n }\n position = -position / sb.moveDivider;\n s.updateProgress(position);\n s.setWrapperTranslate(position, true);\n },\n dragStart: function (e) {\n var sb = s.scrollbar;\n sb.isTouched = true;\n e.preventDefault();\n e.stopPropagation();\n \n sb.setDragPosition(e);\n clearTimeout(sb.dragTimeout);\n \n sb.track.transition(0);\n if (s.params.scrollbarHide) {\n sb.track.css('opacity', 1);\n }\n s.wrapper.transition(100);\n sb.drag.transition(100);\n s.emit('onScrollbarDragStart', s);\n },\n dragMove: function (e) {\n var sb = s.scrollbar;\n if (!sb.isTouched) return;\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n sb.setDragPosition(e);\n s.wrapper.transition(0);\n sb.track.transition(0);\n sb.drag.transition(0);\n s.emit('onScrollbarDragMove', s);\n },\n dragEnd: function (e) {\n var sb = s.scrollbar;\n if (!sb.isTouched) return;\n sb.isTouched = false;\n if (s.params.scrollbarHide) {\n clearTimeout(sb.dragTimeout);\n sb.dragTimeout = setTimeout(function () {\n sb.track.css('opacity', 0);\n sb.track.transition(400);\n }, 1000);\n \n }\n s.emit('onScrollbarDragEnd', s);\n if (s.params.scrollbarSnapOnRelease) {\n s.slideReset();\n }\n },\n draggableEvents: (function () {\n if ((s.params.simulateTouch === false && !s.support.touch)) return s.touchEventsDesktop;\n else return s.touchEvents;\n })(),\n enableDraggable: function () {\n var sb = s.scrollbar;\n var target = s.support.touch ? sb.track : document;\n $(sb.track).on(sb.draggableEvents.start, sb.dragStart);\n $(target).on(sb.draggableEvents.move, sb.dragMove);\n $(target).on(sb.draggableEvents.end, sb.dragEnd);\n },\n disableDraggable: function () {\n var sb = s.scrollbar;\n var target = s.support.touch ? sb.track : document;\n $(sb.track).off(sb.draggableEvents.start, sb.dragStart);\n $(target).off(sb.draggableEvents.move, sb.dragMove);\n $(target).off(sb.draggableEvents.end, sb.dragEnd);\n },\n set: function () {\n if (!s.params.scrollbar) return;\n var sb = s.scrollbar;\n sb.track = $(s.params.scrollbar);\n if (s.params.uniqueNavElements && typeof s.params.scrollbar === 'string' && sb.track.length > 1 && s.container.find(s.params.scrollbar).length === 1) {\n sb.track = s.container.find(s.params.scrollbar);\n }\n sb.drag = sb.track.find('.swiper-scrollbar-drag');\n if (sb.drag.length === 0) {\n sb.drag = $('
    ');\n sb.track.append(sb.drag);\n }\n sb.drag[0].style.width = '';\n sb.drag[0].style.height = '';\n sb.trackSize = s.isHorizontal() ? sb.track[0].offsetWidth : sb.track[0].offsetHeight;\n \n sb.divider = s.size / s.virtualSize;\n sb.moveDivider = sb.divider * (sb.trackSize / s.size);\n sb.dragSize = sb.trackSize * sb.divider;\n \n if (s.isHorizontal()) {\n sb.drag[0].style.width = sb.dragSize + 'px';\n }\n else {\n sb.drag[0].style.height = sb.dragSize + 'px';\n }\n \n if (sb.divider >= 1) {\n sb.track[0].style.display = 'none';\n }\n else {\n sb.track[0].style.display = '';\n }\n if (s.params.scrollbarHide) {\n sb.track[0].style.opacity = 0;\n }\n },\n setTranslate: function () {\n if (!s.params.scrollbar) return;\n var diff;\n var sb = s.scrollbar;\n var translate = s.translate || 0;\n var newPos;\n \n var newSize = sb.dragSize;\n newPos = (sb.trackSize - sb.dragSize) * s.progress;\n if (s.rtl && s.isHorizontal()) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = sb.dragSize - newPos;\n newPos = 0;\n }\n else if (-newPos + sb.dragSize > sb.trackSize) {\n newSize = sb.trackSize + newPos;\n }\n }\n else {\n if (newPos < 0) {\n newSize = sb.dragSize + newPos;\n newPos = 0;\n }\n else if (newPos + sb.dragSize > sb.trackSize) {\n newSize = sb.trackSize - newPos;\n }\n }\n if (s.isHorizontal()) {\n if (s.support.transforms3d) {\n sb.drag.transform('translate3d(' + (newPos) + 'px, 0, 0)');\n }\n else {\n sb.drag.transform('translateX(' + (newPos) + 'px)');\n }\n sb.drag[0].style.width = newSize + 'px';\n }\n else {\n if (s.support.transforms3d) {\n sb.drag.transform('translate3d(0px, ' + (newPos) + 'px, 0)');\n }\n else {\n sb.drag.transform('translateY(' + (newPos) + 'px)');\n }\n sb.drag[0].style.height = newSize + 'px';\n }\n if (s.params.scrollbarHide) {\n clearTimeout(sb.timeout);\n sb.track[0].style.opacity = 1;\n sb.timeout = setTimeout(function () {\n sb.track[0].style.opacity = 0;\n sb.track.transition(400);\n }, 1000);\n }\n },\n setTransition: function (duration) {\n if (!s.params.scrollbar) return;\n s.scrollbar.drag.transition(duration);\n }\n };\n \n\n /*=========================\n Controller\n ===========================*/\n s.controller = {\n LinearSpline: function (x, y) {\n var binarySearch = (function() {\n var maxIndex, minIndex, guess;\n return function(array, val) {\n minIndex = -1;\n maxIndex = array.length;\n while (maxIndex - minIndex > 1)\n if (array[guess = maxIndex + minIndex >> 1] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\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, i3;\n var l = this.x.length;\n \n this.interpolate = function (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 },\n //xxx: for now i will just save one spline function to to\n getInterpolateFunction: function(c){\n if(!s.controller.spline) s.controller.spline = s.params.loop ?\n new s.controller.LinearSpline(s.slidesGrid, c.slidesGrid) :\n new s.controller.LinearSpline(s.snapGrid, c.snapGrid);\n },\n setTranslate: function (translate, byController) {\n var controlled = s.params.control;\n var multiplier, 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 translate = c.rtl && c.params.direction === 'horizontal' ? -s.translate : s.translate;\n if (s.params.controlBy === 'slide') {\n s.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 = -s.controller.spline.interpolate(-translate);\n }\n \n if(!controlledTranslate || s.params.controlBy === 'container'){\n multiplier = (c.maxTranslate() - c.minTranslate()) / (s.maxTranslate() - s.minTranslate());\n controlledTranslate = (translate - s.minTranslate()) * multiplier + c.minTranslate();\n }\n \n if (s.params.controlInverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n c.updateProgress(controlledTranslate);\n c.setWrapperTranslate(controlledTranslate, false, s);\n c.updateActiveIndex();\n }\n if (Array.isArray(controlled)) {\n for (var i = 0; i < controlled.length; i++) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n }\n else if (controlled instanceof Swiper && byController !== controlled) {\n \n setControlledTranslate(controlled);\n }\n },\n setTransition: function (duration, byController) {\n var controlled = s.params.control;\n var i;\n function setControlledTransition(c) {\n c.setWrapperTransition(duration, s);\n if (duration !== 0) {\n c.onTransitionStart();\n c.wrapper.transitionEnd(function(){\n if (!controlled) return;\n if (c.params.loop && s.params.controlBy === 'slide') {\n c.fixLoop();\n }\n c.onTransitionEnd();\n \n });\n }\n }\n if (Array.isArray(controlled)) {\n for (i = 0; i < controlled.length; i++) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n }\n else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n }\n };\n \n\n /*=========================\n Hash Navigation\n ===========================*/\n s.hashnav = {\n onHashCange: function (e, a) {\n var newHash = document.location.hash.replace('#', '');\n var activeSlideHash = s.slides.eq(s.activeIndex).attr('data-hash');\n if (newHash !== activeSlideHash) {\n s.slideTo(s.wrapper.children('.' + s.params.slideClass + '[data-hash=\"' + (newHash) + '\"]').index());\n }\n },\n attachEvents: function (detach) {\n var action = detach ? 'off' : 'on';\n $(window)[action]('hashchange', s.hashnav.onHashCange);\n },\n setHash: function () {\n if (!s.hashnav.initialized || !s.params.hashnav) return;\n if (s.params.replaceState && window.history && window.history.replaceState) {\n window.history.replaceState(null, null, ('#' + s.slides.eq(s.activeIndex).attr('data-hash') || ''));\n } else {\n var slide = s.slides.eq(s.activeIndex);\n var hash = slide.attr('data-hash') || slide.attr('data-history');\n document.location.hash = hash || '';\n }\n },\n init: function () {\n if (!s.params.hashnav || s.params.history) return;\n s.hashnav.initialized = true;\n var hash = document.location.hash.replace('#', '');\n if (hash) {\n var speed = 0;\n for (var i = 0, length = s.slides.length; i < length; i++) {\n var slide = s.slides.eq(i);\n var slideHash = slide.attr('data-hash') || slide.attr('data-history');\n if (slideHash === hash && !slide.hasClass(s.params.slideDuplicateClass)) {\n var index = slide.index();\n s.slideTo(index, speed, s.params.runCallbacksOnInit, true);\n }\n }\n }\n if (s.params.hashnavWatchState) s.hashnav.attachEvents();\n },\n destroy: function () {\n if (s.params.hashnavWatchState) s.hashnav.attachEvents(true);\n }\n };\n \n\n /*=========================\n History Api with fallback to Hashnav\n ===========================*/\n s.history = {\n init: function () {\n if (!s.params.history) return;\n if (!window.history || !window.history.pushState) {\n s.params.history = false;\n s.params.hashnav = true;\n return;\n }\n s.history.initialized = true;\n this.paths = this.getPathValues();\n if (!this.paths.key && !this.paths.value) return;\n this.scrollToSlide(0, this.paths.value, s.params.runCallbacksOnInit);\n if (!s.params.replaceState) {\n window.addEventListener('popstate', this.setHistoryPopState);\n }\n },\n setHistoryPopState: function() {\n s.history.paths = s.history.getPathValues();\n s.history.scrollToSlide(s.params.speed, s.history.paths.value, false);\n },\n getPathValues: function() {\n var pathArray = window.location.pathname.slice(1).split('/');\n var total = pathArray.length;\n var key = pathArray[total - 2];\n var value = pathArray[total - 1];\n return { key: key, value: value };\n },\n setHistory: function (key, index) {\n if (!s.history.initialized || !s.params.history) return;\n var slide = s.slides.eq(index);\n var value = this.slugify(slide.attr('data-history'));\n if (!window.location.pathname.includes(key)) {\n value = key + '/' + value;\n }\n if (s.params.replaceState) {\n window.history.replaceState(null, null, value);\n } else {\n window.history.pushState(null, null, value);\n }\n },\n slugify: function(text) {\n return text.toString().toLowerCase()\n .replace(/\\s+/g, '-')\n .replace(/[^\\w\\-]+/g, '')\n .replace(/\\-\\-+/g, '-')\n .replace(/^-+/, '')\n .replace(/-+$/, '');\n },\n scrollToSlide: function(speed, value, runCallbacks) {\n if (value) {\n for (var i = 0, length = s.slides.length; i < length; i++) {\n var slide = s.slides.eq(i);\n var slideHistory = this.slugify(slide.attr('data-history'));\n if (slideHistory === value && !slide.hasClass(s.params.slideDuplicateClass)) {\n var index = slide.index();\n s.slideTo(index, speed, runCallbacks);\n }\n }\n } else {\n s.slideTo(0, speed, runCallbacks);\n }\n }\n };\n \n\n /*=========================\n Keyboard Control\n ===========================*/\n function handleKeyboard(e) {\n if (e.originalEvent) e = e.originalEvent; //jquery fix\n var kc = e.keyCode || e.charCode;\n // Directions locks\n if (!s.params.allowSwipeToNext && (s.isHorizontal() && kc === 39 || !s.isHorizontal() && kc === 40)) {\n return false;\n }\n if (!s.params.allowSwipeToPrev && (s.isHorizontal() && kc === 37 || !s.isHorizontal() && kc === 38)) {\n return false;\n }\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return;\n }\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return;\n }\n if (kc === 37 || kc === 39 || kc === 38 || kc === 40) {\n var inView = false;\n //Check that swiper should be inside of visible area of window\n if (s.container.parents('.' + s.params.slideClass).length > 0 && s.container.parents('.' + s.params.slideActiveClass).length === 0) {\n return;\n }\n var windowScroll = {\n left: window.pageXOffset,\n top: window.pageYOffset\n };\n var windowWidth = window.innerWidth;\n var windowHeight = window.innerHeight;\n var swiperOffset = s.container.offset();\n if (s.rtl) swiperOffset.left = swiperOffset.left - s.container[0].scrollLeft;\n var swiperCoord = [\n [swiperOffset.left, swiperOffset.top],\n [swiperOffset.left + s.width, swiperOffset.top],\n [swiperOffset.left, swiperOffset.top + s.height],\n [swiperOffset.left + s.width, swiperOffset.top + s.height]\n ];\n for (var i = 0; i < swiperCoord.length; i++) {\n var point = swiperCoord[i];\n if (\n point[0] >= windowScroll.left && point[0] <= windowScroll.left + windowWidth &&\n point[1] >= windowScroll.top && point[1] <= windowScroll.top + windowHeight\n ) {\n inView = true;\n }\n \n }\n if (!inView) return;\n }\n if (s.isHorizontal()) {\n if (kc === 37 || kc === 39) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if ((kc === 39 && !s.rtl) || (kc === 37 && s.rtl)) s.slideNext();\n if ((kc === 37 && !s.rtl) || (kc === 39 && s.rtl)) s.slidePrev();\n }\n else {\n if (kc === 38 || kc === 40) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if (kc === 40) s.slideNext();\n if (kc === 38) s.slidePrev();\n }\n s.emit('onKeyPress', s, kc);\n }\n s.disableKeyboardControl = function () {\n s.params.keyboardControl = false;\n $(document).off('keydown', handleKeyboard);\n };\n s.enableKeyboardControl = function () {\n s.params.keyboardControl = true;\n $(document).on('keydown', handleKeyboard);\n };\n \n\n /*=========================\n Mousewheel Control\n ===========================*/\n s.mousewheel = {\n event: false,\n lastScrollTime: (new window.Date()).getTime()\n };\n function isEventSupported() {\n var eventName = 'onwheel';\n var isSupported = eventName in document;\n \n if (!isSupported) {\n var element = document.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n \n if (!isSupported &&\n document.implementation &&\n document.implementation.hasFeature &&\n // always returns true in newer browsers as per the standard.\n // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n document.implementation.hasFeature('', '') !== true ) {\n // This is the only way to test support for the `wheel` event in IE9+.\n isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n }\n \n return isSupported;\n }\n /**\n * Mouse wheel (and 2-finger trackpad) support on the web sucks. It is\n * complicated, thus this doc is long and (hopefully) detailed enough to answer\n * your questions.\n *\n * If you need to react to the mouse wheel in a predictable way, this code is\n * like your bestest friend. * hugs *\n *\n * As of today, there are 4 DOM event types you can listen to:\n *\n * 'wheel' -- Chrome(31+), FF(17+), IE(9+)\n * 'mousewheel' -- Chrome, IE(6+), Opera, Safari\n * 'MozMousePixelScroll' -- FF(3.5 only!) (2010-2013) -- don't bother!\n * 'DOMMouseScroll' -- FF(0.9.7+) since 2003\n *\n * So what to do? The is the best:\n *\n * normalizeWheel.getEventType();\n *\n * In your event callback, use this code to get sane interpretation of the\n * deltas. This code will return an object with properties:\n *\n * spinX -- normalized spin speed (use for zoom) - x plane\n * spinY -- \" - y plane\n * pixelX -- normalized distance (to pixels) - x plane\n * pixelY -- \" - y plane\n *\n * Wheel values are provided by the browser assuming you are using the wheel to\n * scroll a web page by a number of lines or pixels (or pages). Values can vary\n * significantly on different platforms and browsers, forgetting that you can\n * scroll at different speeds. Some devices (like trackpads) emit more events\n * at smaller increments with fine granularity, and some emit massive jumps with\n * linear speed or acceleration.\n *\n * This code does its best to normalize the deltas for you:\n *\n * - spin is trying to normalize how far the wheel was spun (or trackpad\n * dragged). This is super useful for zoom support where you want to\n * throw away the chunky scroll steps on the PC and make those equal to\n * the slow and smooth tiny steps on the Mac. Key data: This code tries to\n * resolve a single slow step on a wheel to 1.\n *\n * - pixel is normalizing the desired scroll delta in pixel units. You'll\n * get the crazy differences between browsers, but at least it'll be in\n * pixels!\n *\n * - positive value indicates scrolling DOWN/RIGHT, negative UP/LEFT. This\n * should translate to positive value zooming IN, negative zooming OUT.\n * This matches the newer 'wheel' event.\n *\n * Why are there spinX, spinY (or pixels)?\n *\n * - spinX is a 2-finger side drag on the trackpad, and a shift + wheel turn\n * with a mouse. It results in side-scrolling in the browser by default.\n *\n * - spinY is what you expect -- it's the classic axis of a mouse wheel.\n *\n * - I dropped spinZ/pixelZ. It is supported by the DOM 3 'wheel' event and\n * probably is by browsers in conjunction with fancy 3D controllers .. but\n * you know.\n *\n * Implementation info:\n *\n * Examples of 'wheel' event if you scroll slowly (down) by one step with an\n * average mouse:\n *\n * OS X + Chrome (mouse) - 4 pixel delta (wheelDelta -120)\n * OS X + Safari (mouse) - N/A pixel delta (wheelDelta -12)\n * OS X + Firefox (mouse) - 0.1 line delta (wheelDelta N/A)\n * Win8 + Chrome (mouse) - 100 pixel delta (wheelDelta -120)\n * Win8 + Firefox (mouse) - 3 line delta (wheelDelta -120)\n *\n * On the trackpad:\n *\n * OS X + Chrome (trackpad) - 2 pixel delta (wheelDelta -6)\n * OS X + Firefox (trackpad) - 1 pixel delta (wheelDelta N/A)\n *\n * On other/older browsers.. it's more complicated as there can be multiple and\n * also missing delta values.\n *\n * The 'wheel' event is more standard:\n *\n * http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents\n *\n * The basics is that it includes a unit, deltaMode (pixels, lines, pages), and\n * deltaX, deltaY and deltaZ. Some browsers provide other values to maintain\n * backward compatibility with older events. Those other values help us\n * better normalize spin speed. Example of what the browsers provide:\n *\n * | event.wheelDelta | event.detail\n * ------------------+------------------+--------------\n * Safari v5/OS X | -120 | 0\n * Safari v5/Win7 | -120 | 0\n * Chrome v17/OS X | -120 | 0\n * Chrome v17/Win7 | -120 | 0\n * IE9/Win7 | -120 | undefined\n * Firefox v4/OS X | undefined | 1\n * Firefox v4/Win7 | undefined | 3\n *\n */\n function normalizeWheel( /*object*/ event ) /*object*/ {\n // Reasonable defaults\n var PIXEL_STEP = 10;\n var LINE_HEIGHT = 40;\n var PAGE_HEIGHT = 800;\n \n var sX = 0, sY = 0, // spinX, spinY\n pX = 0, pY = 0; // pixelX, pixelY\n \n // Legacy\n if( 'detail' in event ) {\n sY = event.detail;\n }\n if( 'wheelDelta' in event ) {\n sY = -event.wheelDelta / 120;\n }\n if( 'wheelDeltaY' in event ) {\n sY = -event.wheelDeltaY / 120;\n }\n if( 'wheelDeltaX' in event ) {\n sX = -event.wheelDeltaX / 120;\n }\n \n // side scrolling on FF with DOMMouseScroll\n if( 'axis' in event && event.axis === event.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 event ) {\n pY = event.deltaY;\n }\n if( 'deltaX' in event ) {\n pX = event.deltaX;\n }\n \n if( (pX || pY) && event.deltaMode ) {\n if( event.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 if (s.params.mousewheelControl) {\n /**\n * The best combination if you prefer spinX + spinY normalization. It favors\n * the older DOMMouseScroll for Firefox, as FF does not include wheelDelta with\n * 'wheel' event, making spin speed determination impossible.\n */\n s.mousewheel.event = (navigator.userAgent.indexOf('firefox') > -1) ?\n 'DOMMouseScroll' :\n isEventSupported() ?\n 'wheel' : 'mousewheel';\n }\n function handleMousewheel(e) {\n if (e.originalEvent) e = e.originalEvent; //jquery fix\n var delta = 0;\n var rtlFactor = s.rtl ? -1 : 1;\n \n var data = normalizeWheel( e );\n \n if (s.params.mousewheelForceToAxis) {\n if (s.isHorizontal()) {\n if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = data.pixelX * rtlFactor;\n else return;\n }\n else {\n if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = data.pixelY;\n else return;\n }\n }\n else {\n delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? - data.pixelX * rtlFactor : - data.pixelY;\n }\n \n if (delta === 0) return;\n \n if (s.params.mousewheelInvert) delta = -delta;\n \n if (!s.params.freeMode) {\n if ((new window.Date()).getTime() - s.mousewheel.lastScrollTime > 60) {\n if (delta < 0) {\n if ((!s.isEnd || s.params.loop) && !s.animating) {\n s.slideNext();\n s.emit('onScroll', s, e);\n }\n else if (s.params.mousewheelReleaseOnEdges) return true;\n }\n else {\n if ((!s.isBeginning || s.params.loop) && !s.animating) {\n s.slidePrev();\n s.emit('onScroll', s, e);\n }\n else if (s.params.mousewheelReleaseOnEdges) return true;\n }\n }\n s.mousewheel.lastScrollTime = (new window.Date()).getTime();\n \n }\n else {\n //Freemode or scrollContainer:\n var position = s.getWrapperTranslate() + delta * s.params.mousewheelSensitivity;\n var wasBeginning = s.isBeginning,\n wasEnd = s.isEnd;\n \n if (position >= s.minTranslate()) position = s.minTranslate();\n if (position <= s.maxTranslate()) position = s.maxTranslate();\n \n s.setWrapperTransition(0);\n s.setWrapperTranslate(position);\n s.updateProgress();\n s.updateActiveIndex();\n \n if (!wasBeginning && s.isBeginning || !wasEnd && s.isEnd) {\n s.updateClasses();\n }\n \n if (s.params.freeModeSticky) {\n clearTimeout(s.mousewheel.timeout);\n s.mousewheel.timeout = setTimeout(function () {\n s.slideReset();\n }, 300);\n }\n else {\n if (s.params.lazyLoading && s.lazy) {\n s.lazy.load();\n }\n }\n // Emit event\n s.emit('onScroll', s, e);\n \n // Stop autoplay\n if (s.params.autoplay && s.params.autoplayDisableOnInteraction) s.stopAutoplay();\n \n // Return page scroll on edge positions\n if (position === 0 || position === s.maxTranslate()) return;\n }\n \n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n return false;\n }\n s.disableMousewheelControl = function () {\n if (!s.mousewheel.event) return false;\n var target = s.container;\n if (s.params.mousewheelEventsTarged !== 'container') {\n target = $(s.params.mousewheelEventsTarged);\n }\n target.off(s.mousewheel.event, handleMousewheel);\n s.params.mousewheelControl = false;\n return true;\n };\n \n s.enableMousewheelControl = function () {\n if (!s.mousewheel.event) return false;\n var target = s.container;\n if (s.params.mousewheelEventsTarged !== 'container') {\n target = $(s.params.mousewheelEventsTarged);\n }\n target.on(s.mousewheel.event, handleMousewheel);\n s.params.mousewheelControl = true;\n return true;\n };\n \n\n /*=========================\n Parallax\n ===========================*/\n function setParallaxTransform(el, progress) {\n el = $(el);\n var p, pX, pY;\n var rtlFactor = s.rtl ? -1 : 1;\n \n p = el.attr('data-swiper-parallax') || '0';\n pX = el.attr('data-swiper-parallax-x');\n pY = el.attr('data-swiper-parallax-y');\n if (pX || pY) {\n pX = pX || '0';\n pY = pY || '0';\n }\n else {\n if (s.isHorizontal()) {\n pX = p;\n pY = '0';\n }\n else {\n pY = p;\n pX = '0';\n }\n }\n \n if ((pX).indexOf('%') >= 0) {\n pX = parseInt(pX, 10) * progress * rtlFactor + '%';\n }\n else {\n pX = pX * progress * rtlFactor + 'px' ;\n }\n if ((pY).indexOf('%') >= 0) {\n pY = parseInt(pY, 10) * progress + '%';\n }\n else {\n pY = pY * progress + 'px' ;\n }\n \n el.transform('translate3d(' + pX + ', ' + pY + ',0px)');\n }\n s.parallax = {\n setTranslate: function () {\n s.container.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){\n setParallaxTransform(this, s.progress);\n \n });\n s.slides.each(function () {\n var slide = $(this);\n slide.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function () {\n var progress = Math.min(Math.max(slide[0].progress, -1), 1);\n setParallaxTransform(this, progress);\n });\n });\n },\n setTransition: function (duration) {\n if (typeof duration === 'undefined') duration = s.params.speed;\n s.container.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){\n var el = $(this);\n var parallaxDuration = parseInt(el.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n el.transition(parallaxDuration);\n });\n }\n };\n \n\n /*=========================\n Zoom\n ===========================*/\n s.zoom = {\n // \"Global\" Props\n scale: 1,\n currentScale: 1,\n isScaling: false,\n gesture: {\n slide: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n image: undefined,\n imageWrap: undefined,\n zoomMax: s.params.zoomMax\n },\n image: {\n isTouched: undefined,\n isMoved: undefined,\n currentX: undefined,\n currentY: undefined,\n minX: undefined,\n minY: undefined,\n maxX: undefined,\n maxY: undefined,\n width: undefined,\n height: undefined,\n startX: undefined,\n startY: undefined,\n touchesStart: {},\n touchesCurrent: {}\n },\n velocity: {\n x: undefined,\n y: undefined,\n prevPositionX: undefined,\n prevPositionY: undefined,\n prevTime: undefined\n },\n // Calc Scale From Multi-touches\n getDistanceBetweenTouches: function (e) {\n if (e.targetTouches.length < 2) return 1;\n var x1 = e.targetTouches[0].pageX,\n y1 = e.targetTouches[0].pageY,\n x2 = e.targetTouches[1].pageX,\n y2 = e.targetTouches[1].pageY;\n var distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\n return distance;\n },\n // Events\n onGestureStart: function (e) {\n var z = s.zoom;\n if (!s.support.gestures) {\n if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) {\n return;\n }\n z.gesture.scaleStart = z.getDistanceBetweenTouches(e);\n }\n if (!z.gesture.slide || !z.gesture.slide.length) {\n z.gesture.slide = $(this);\n if (z.gesture.slide.length === 0) z.gesture.slide = s.slides.eq(s.activeIndex);\n z.gesture.image = z.gesture.slide.find('img, svg, canvas');\n z.gesture.imageWrap = z.gesture.image.parent('.' + s.params.zoomContainerClass);\n z.gesture.zoomMax = z.gesture.imageWrap.attr('data-swiper-zoom') || s.params.zoomMax ;\n if (z.gesture.imageWrap.length === 0) {\n z.gesture.image = undefined;\n return;\n }\n }\n z.gesture.image.transition(0);\n z.isScaling = true;\n },\n onGestureChange: function (e) {\n var z = s.zoom;\n if (!s.support.gestures) {\n if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) {\n return;\n }\n z.gesture.scaleMove = z.getDistanceBetweenTouches(e);\n }\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n if (s.support.gestures) {\n z.scale = e.scale * z.currentScale;\n }\n else {\n z.scale = (z.gesture.scaleMove / z.gesture.scaleStart) * z.currentScale;\n }\n if (z.scale > z.gesture.zoomMax) {\n z.scale = z.gesture.zoomMax - 1 + Math.pow((z.scale - z.gesture.zoomMax + 1), 0.5);\n }\n if (z.scale < s.params.zoomMin) {\n z.scale = s.params.zoomMin + 1 - Math.pow((s.params.zoomMin - z.scale + 1), 0.5);\n }\n z.gesture.image.transform('translate3d(0,0,0) scale(' + z.scale + ')');\n },\n onGestureEnd: function (e) {\n var z = s.zoom;\n if (!s.support.gestures) {\n if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2) {\n return;\n }\n }\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n z.scale = Math.max(Math.min(z.scale, z.gesture.zoomMax), s.params.zoomMin);\n z.gesture.image.transition(s.params.speed).transform('translate3d(0,0,0) scale(' + z.scale + ')');\n z.currentScale = z.scale;\n z.isScaling = false;\n if (z.scale === 1) z.gesture.slide = undefined;\n },\n onTouchStart: function (s, e) {\n var z = s.zoom;\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n if (z.image.isTouched) return;\n if (s.device.os === 'android') e.preventDefault();\n z.image.isTouched = true;\n z.image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n z.image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n },\n onTouchMove: function (e) {\n var z = s.zoom;\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n s.allowClick = false;\n if (!z.image.isTouched || !z.gesture.slide) return;\n \n if (!z.image.isMoved) {\n z.image.width = z.gesture.image[0].offsetWidth;\n z.image.height = z.gesture.image[0].offsetHeight;\n z.image.startX = s.getTranslate(z.gesture.imageWrap[0], 'x') || 0;\n z.image.startY = s.getTranslate(z.gesture.imageWrap[0], 'y') || 0;\n z.gesture.slideWidth = z.gesture.slide[0].offsetWidth;\n z.gesture.slideHeight = z.gesture.slide[0].offsetHeight;\n z.gesture.imageWrap.transition(0);\n if (s.rtl) z.image.startX = -z.image.startX;\n if (s.rtl) z.image.startY = -z.image.startY;\n }\n // Define if we need image drag\n var scaledWidth = z.image.width * z.scale;\n var scaledHeight = z.image.height * z.scale;\n \n if (scaledWidth < z.gesture.slideWidth && scaledHeight < z.gesture.slideHeight) return;\n \n z.image.minX = Math.min((z.gesture.slideWidth / 2 - scaledWidth / 2), 0);\n z.image.maxX = -z.image.minX;\n z.image.minY = Math.min((z.gesture.slideHeight / 2 - scaledHeight / 2), 0);\n z.image.maxY = -z.image.minY;\n \n z.image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n z.image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n \n if (!z.image.isMoved && !z.isScaling) {\n if (s.isHorizontal() &&\n (Math.floor(z.image.minX) === Math.floor(z.image.startX) && z.image.touchesCurrent.x < z.image.touchesStart.x) ||\n (Math.floor(z.image.maxX) === Math.floor(z.image.startX) && z.image.touchesCurrent.x > z.image.touchesStart.x)\n ) {\n z.image.isTouched = false;\n return;\n }\n else if (!s.isHorizontal() &&\n (Math.floor(z.image.minY) === Math.floor(z.image.startY) && z.image.touchesCurrent.y < z.image.touchesStart.y) ||\n (Math.floor(z.image.maxY) === Math.floor(z.image.startY) && z.image.touchesCurrent.y > z.image.touchesStart.y)\n ) {\n z.image.isTouched = false;\n return;\n }\n }\n e.preventDefault();\n e.stopPropagation();\n \n z.image.isMoved = true;\n z.image.currentX = z.image.touchesCurrent.x - z.image.touchesStart.x + z.image.startX;\n z.image.currentY = z.image.touchesCurrent.y - z.image.touchesStart.y + z.image.startY;\n \n if (z.image.currentX < z.image.minX) {\n z.image.currentX = z.image.minX + 1 - Math.pow((z.image.minX - z.image.currentX + 1), 0.8);\n }\n if (z.image.currentX > z.image.maxX) {\n z.image.currentX = z.image.maxX - 1 + Math.pow((z.image.currentX - z.image.maxX + 1), 0.8);\n }\n \n if (z.image.currentY < z.image.minY) {\n z.image.currentY = z.image.minY + 1 - Math.pow((z.image.minY - z.image.currentY + 1), 0.8);\n }\n if (z.image.currentY > z.image.maxY) {\n z.image.currentY = z.image.maxY - 1 + Math.pow((z.image.currentY - z.image.maxY + 1), 0.8);\n }\n \n //Velocity\n if (!z.velocity.prevPositionX) z.velocity.prevPositionX = z.image.touchesCurrent.x;\n if (!z.velocity.prevPositionY) z.velocity.prevPositionY = z.image.touchesCurrent.y;\n if (!z.velocity.prevTime) z.velocity.prevTime = Date.now();\n z.velocity.x = (z.image.touchesCurrent.x - z.velocity.prevPositionX) / (Date.now() - z.velocity.prevTime) / 2;\n z.velocity.y = (z.image.touchesCurrent.y - z.velocity.prevPositionY) / (Date.now() - z.velocity.prevTime) / 2;\n if (Math.abs(z.image.touchesCurrent.x - z.velocity.prevPositionX) < 2) z.velocity.x = 0;\n if (Math.abs(z.image.touchesCurrent.y - z.velocity.prevPositionY) < 2) z.velocity.y = 0;\n z.velocity.prevPositionX = z.image.touchesCurrent.x;\n z.velocity.prevPositionY = z.image.touchesCurrent.y;\n z.velocity.prevTime = Date.now();\n \n z.gesture.imageWrap.transform('translate3d(' + z.image.currentX + 'px, ' + z.image.currentY + 'px,0)');\n },\n onTouchEnd: function (s, e) {\n var z = s.zoom;\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n if (!z.image.isTouched || !z.image.isMoved) {\n z.image.isTouched = false;\n z.image.isMoved = false;\n return;\n }\n z.image.isTouched = false;\n z.image.isMoved = false;\n var momentumDurationX = 300;\n var momentumDurationY = 300;\n var momentumDistanceX = z.velocity.x * momentumDurationX;\n var newPositionX = z.image.currentX + momentumDistanceX;\n var momentumDistanceY = z.velocity.y * momentumDurationY;\n var newPositionY = z.image.currentY + momentumDistanceY;\n \n //Fix duration\n if (z.velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - z.image.currentX) / z.velocity.x);\n if (z.velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - z.image.currentY) / z.velocity.y);\n var momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n \n z.image.currentX = newPositionX;\n z.image.currentY = newPositionY;\n \n // Define if we need image drag\n var scaledWidth = z.image.width * z.scale;\n var scaledHeight = z.image.height * z.scale;\n z.image.minX = Math.min((z.gesture.slideWidth / 2 - scaledWidth / 2), 0);\n z.image.maxX = -z.image.minX;\n z.image.minY = Math.min((z.gesture.slideHeight / 2 - scaledHeight / 2), 0);\n z.image.maxY = -z.image.minY;\n z.image.currentX = Math.max(Math.min(z.image.currentX, z.image.maxX), z.image.minX);\n z.image.currentY = Math.max(Math.min(z.image.currentY, z.image.maxY), z.image.minY);\n \n z.gesture.imageWrap.transition(momentumDuration).transform('translate3d(' + z.image.currentX + 'px, ' + z.image.currentY + 'px,0)');\n },\n onTransitionEnd: function (s) {\n var z = s.zoom;\n if (z.gesture.slide && s.previousIndex !== s.activeIndex) {\n z.gesture.image.transform('translate3d(0,0,0) scale(1)');\n z.gesture.imageWrap.transform('translate3d(0,0,0)');\n z.gesture.slide = z.gesture.image = z.gesture.imageWrap = undefined;\n z.scale = z.currentScale = 1;\n }\n },\n // Toggle Zoom\n toggleZoom: function (s, e) {\n var z = s.zoom;\n if (!z.gesture.slide) {\n z.gesture.slide = s.clickedSlide ? $(s.clickedSlide) : s.slides.eq(s.activeIndex);\n z.gesture.image = z.gesture.slide.find('img, svg, canvas');\n z.gesture.imageWrap = z.gesture.image.parent('.' + s.params.zoomContainerClass);\n }\n if (!z.gesture.image || z.gesture.image.length === 0) return;\n \n var touchX, touchY, offsetX, offsetY, diffX, diffY, translateX, translateY, imageWidth, imageHeight, scaledWidth, scaledHeight, translateMinX, translateMinY, translateMaxX, translateMaxY, slideWidth, slideHeight;\n \n if (typeof z.image.touchesStart.x === 'undefined' && e) {\n touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;\n touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;\n }\n else {\n touchX = z.image.touchesStart.x;\n touchY = z.image.touchesStart.y;\n }\n \n if (z.scale && z.scale !== 1) {\n // Zoom Out\n z.scale = z.currentScale = 1;\n z.gesture.imageWrap.transition(300).transform('translate3d(0,0,0)');\n z.gesture.image.transition(300).transform('translate3d(0,0,0) scale(1)');\n z.gesture.slide = undefined;\n }\n else {\n // Zoom In\n z.scale = z.currentScale = z.gesture.imageWrap.attr('data-swiper-zoom') || s.params.zoomMax;\n if (e) {\n slideWidth = z.gesture.slide[0].offsetWidth;\n slideHeight = z.gesture.slide[0].offsetHeight;\n offsetX = z.gesture.slide.offset().left;\n offsetY = z.gesture.slide.offset().top;\n diffX = offsetX + slideWidth/2 - touchX;\n diffY = offsetY + slideHeight/2 - touchY;\n \n imageWidth = z.gesture.image[0].offsetWidth;\n imageHeight = z.gesture.image[0].offsetHeight;\n scaledWidth = imageWidth * z.scale;\n scaledHeight = imageHeight * z.scale;\n \n translateMinX = Math.min((slideWidth / 2 - scaledWidth / 2), 0);\n translateMinY = Math.min((slideHeight / 2 - scaledHeight / 2), 0);\n translateMaxX = -translateMinX;\n translateMaxY = -translateMinY;\n \n translateX = diffX * z.scale;\n translateY = diffY * z.scale;\n \n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n \n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n }\n else {\n translateX = 0;\n translateY = 0;\n }\n z.gesture.imageWrap.transition(300).transform('translate3d(' + translateX + 'px, ' + translateY + 'px,0)');\n z.gesture.image.transition(300).transform('translate3d(0,0,0) scale(' + z.scale + ')');\n }\n },\n // Attach/Detach Events\n attachEvents: function (detach) {\n var action = detach ? 'off' : 'on';\n \n if (s.params.zoom) {\n var target = s.slides;\n var passiveListener = s.touchEvents.start === 'touchstart' && s.support.passiveListener && s.params.passiveListeners ? {passive: true, capture: false} : false;\n // Scale image\n if (s.support.gestures) {\n s.slides[action]('gesturestart', s.zoom.onGestureStart, passiveListener);\n s.slides[action]('gesturechange', s.zoom.onGestureChange, passiveListener);\n s.slides[action]('gestureend', s.zoom.onGestureEnd, passiveListener);\n }\n else if (s.touchEvents.start === 'touchstart') {\n s.slides[action](s.touchEvents.start, s.zoom.onGestureStart, passiveListener);\n s.slides[action](s.touchEvents.move, s.zoom.onGestureChange, passiveListener);\n s.slides[action](s.touchEvents.end, s.zoom.onGestureEnd, passiveListener);\n }\n \n // Move image\n s[action]('touchStart', s.zoom.onTouchStart);\n s.slides.each(function (index, slide){\n if ($(slide).find('.' + s.params.zoomContainerClass).length > 0) {\n $(slide)[action](s.touchEvents.move, s.zoom.onTouchMove);\n }\n });\n s[action]('touchEnd', s.zoom.onTouchEnd);\n \n // Scale Out\n s[action]('transitionEnd', s.zoom.onTransitionEnd);\n if (s.params.zoomToggle) {\n s.on('doubleTap', s.zoom.toggleZoom);\n }\n }\n },\n init: function () {\n s.zoom.attachEvents();\n },\n destroy: function () {\n s.zoom.attachEvents(true);\n }\n };\n \n\n /*=========================\n Plugins API. Collect all and init all plugins\n ===========================*/\n s._plugins = [];\n for (var plugin in s.plugins) {\n var p = s.plugins[plugin](s, s.params[plugin]);\n if (p) s._plugins.push(p);\n }\n // Method to call all plugins event/method\n s.callPlugins = function (eventName) {\n for (var i = 0; i < s._plugins.length; i++) {\n if (eventName in s._plugins[i]) {\n s._plugins[i][eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n }\n };\n \n\n /*=========================\n Events/Callbacks/Plugins Emitter\n ===========================*/\n function normalizeEventName (eventName) {\n if (eventName.indexOf('on') !== 0) {\n if (eventName[0] !== eventName[0].toUpperCase()) {\n eventName = 'on' + eventName[0].toUpperCase() + eventName.substring(1);\n }\n else {\n eventName = 'on' + eventName;\n }\n }\n return eventName;\n }\n s.emitterEventListeners = {\n \n };\n s.emit = function (eventName) {\n // Trigger callbacks\n if (s.params[eventName]) {\n s.params[eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n var i;\n // Trigger events\n if (s.emitterEventListeners[eventName]) {\n for (i = 0; i < s.emitterEventListeners[eventName].length; i++) {\n s.emitterEventListeners[eventName][i](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n }\n // Trigger plugins\n if (s.callPlugins) s.callPlugins(eventName, arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n };\n s.on = function (eventName, handler) {\n eventName = normalizeEventName(eventName);\n if (!s.emitterEventListeners[eventName]) s.emitterEventListeners[eventName] = [];\n s.emitterEventListeners[eventName].push(handler);\n return s;\n };\n s.off = function (eventName, handler) {\n var i;\n eventName = normalizeEventName(eventName);\n if (typeof handler === 'undefined') {\n // Remove all handlers for such event\n s.emitterEventListeners[eventName] = [];\n return s;\n }\n if (!s.emitterEventListeners[eventName] || s.emitterEventListeners[eventName].length === 0) return;\n for (i = 0; i < s.emitterEventListeners[eventName].length; i++) {\n if(s.emitterEventListeners[eventName][i] === handler) s.emitterEventListeners[eventName].splice(i, 1);\n }\n return s;\n };\n s.once = function (eventName, handler) {\n eventName = normalizeEventName(eventName);\n var _handler = function () {\n handler(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]);\n s.off(eventName, _handler);\n };\n s.on(eventName, _handler);\n return s;\n };\n \n\n // Accessibility tools\n s.a11y = {\n makeFocusable: function ($el) {\n $el.attr('tabIndex', '0');\n return $el;\n },\n addRole: function ($el, role) {\n $el.attr('role', role);\n return $el;\n },\n \n addLabel: function ($el, label) {\n $el.attr('aria-label', label);\n return $el;\n },\n \n disable: function ($el) {\n $el.attr('aria-disabled', true);\n return $el;\n },\n \n enable: function ($el) {\n $el.attr('aria-disabled', false);\n return $el;\n },\n \n onEnterKey: function (event) {\n if (event.keyCode !== 13) return;\n if ($(event.target).is(s.params.nextButton)) {\n s.onClickNext(event);\n if (s.isEnd) {\n s.a11y.notify(s.params.lastSlideMessage);\n }\n else {\n s.a11y.notify(s.params.nextSlideMessage);\n }\n }\n else if ($(event.target).is(s.params.prevButton)) {\n s.onClickPrev(event);\n if (s.isBeginning) {\n s.a11y.notify(s.params.firstSlideMessage);\n }\n else {\n s.a11y.notify(s.params.prevSlideMessage);\n }\n }\n if ($(event.target).is('.' + s.params.bulletClass)) {\n $(event.target)[0].click();\n }\n },\n \n liveRegion: $(''),\n \n notify: function (message) {\n var notification = s.a11y.liveRegion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n },\n init: function () {\n // Setup accessibility\n if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {\n s.a11y.makeFocusable(s.nextButton);\n s.a11y.addRole(s.nextButton, 'button');\n s.a11y.addLabel(s.nextButton, s.params.nextSlideMessage);\n }\n if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {\n s.a11y.makeFocusable(s.prevButton);\n s.a11y.addRole(s.prevButton, 'button');\n s.a11y.addLabel(s.prevButton, s.params.prevSlideMessage);\n }\n \n $(s.container).append(s.a11y.liveRegion);\n },\n initPagination: function () {\n if (s.params.pagination && s.params.paginationClickable && s.bullets && s.bullets.length) {\n s.bullets.each(function () {\n var bullet = $(this);\n s.a11y.makeFocusable(bullet);\n s.a11y.addRole(bullet, 'button');\n s.a11y.addLabel(bullet, s.params.paginationBulletMessage.replace(/{{index}}/, bullet.index() + 1));\n });\n }\n },\n destroy: function () {\n if (s.a11y.liveRegion && s.a11y.liveRegion.length > 0) s.a11y.liveRegion.remove();\n }\n };\n \n\n /*=========================\n Init/Destroy\n ===========================*/\n s.init = function () {\n if (s.params.loop) s.createLoop();\n s.updateContainerSize();\n s.updateSlidesSize();\n s.updatePagination();\n if (s.params.scrollbar && s.scrollbar) {\n s.scrollbar.set();\n if (s.params.scrollbarDraggable) {\n s.scrollbar.enableDraggable();\n }\n }\n if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {\n if (!s.params.loop) s.updateProgress();\n s.effects[s.params.effect].setTranslate();\n }\n if (s.params.loop) {\n s.slideTo(s.params.initialSlide + s.loopedSlides, 0, s.params.runCallbacksOnInit);\n }\n else {\n s.slideTo(s.params.initialSlide, 0, s.params.runCallbacksOnInit);\n if (s.params.initialSlide === 0) {\n if (s.parallax && s.params.parallax) s.parallax.setTranslate();\n if (s.lazy && s.params.lazyLoading) {\n s.lazy.load();\n s.lazy.initialImageLoaded = true;\n }\n }\n }\n s.attachEvents();\n if (s.params.observer && s.support.observer) {\n s.initObservers();\n }\n if (s.params.preloadImages && !s.params.lazyLoading) {\n s.preloadImages();\n }\n if (s.params.zoom && s.zoom) {\n s.zoom.init();\n }\n if (s.params.autoplay) {\n s.startAutoplay();\n }\n if (s.params.keyboardControl) {\n if (s.enableKeyboardControl) s.enableKeyboardControl();\n }\n if (s.params.mousewheelControl) {\n if (s.enableMousewheelControl) s.enableMousewheelControl();\n }\n // Deprecated hashnavReplaceState changed to replaceState for use in hashnav and history\n if (s.params.hashnavReplaceState) {\n s.params.replaceState = s.params.hashnavReplaceState;\n }\n if (s.params.history) {\n if (s.history) s.history.init();\n }\n if (s.params.hashnav) {\n if (s.hashnav) s.hashnav.init();\n }\n if (s.params.a11y && s.a11y) s.a11y.init();\n s.emit('onInit', s);\n };\n \n // Cleanup dynamic styles\n s.cleanupStyles = function () {\n // Container\n s.container.removeClass(s.classNames.join(' ')).removeAttr('style');\n \n // Wrapper\n s.wrapper.removeAttr('style');\n \n // Slides\n if (s.slides && s.slides.length) {\n s.slides\n .removeClass([\n s.params.slideVisibleClass,\n s.params.slideActiveClass,\n s.params.slideNextClass,\n s.params.slidePrevClass\n ].join(' '))\n .removeAttr('style')\n .removeAttr('data-swiper-column')\n .removeAttr('data-swiper-row');\n }\n \n // Pagination/Bullets\n if (s.paginationContainer && s.paginationContainer.length) {\n s.paginationContainer.removeClass(s.params.paginationHiddenClass);\n }\n if (s.bullets && s.bullets.length) {\n s.bullets.removeClass(s.params.bulletActiveClass);\n }\n \n // Buttons\n if (s.params.prevButton) $(s.params.prevButton).removeClass(s.params.buttonDisabledClass);\n if (s.params.nextButton) $(s.params.nextButton).removeClass(s.params.buttonDisabledClass);\n \n // Scrollbar\n if (s.params.scrollbar && s.scrollbar) {\n if (s.scrollbar.track && s.scrollbar.track.length) s.scrollbar.track.removeAttr('style');\n if (s.scrollbar.drag && s.scrollbar.drag.length) s.scrollbar.drag.removeAttr('style');\n }\n };\n \n // Destroy\n s.destroy = function (deleteInstance, cleanupStyles) {\n // Detach evebts\n s.detachEvents();\n // Stop autoplay\n s.stopAutoplay();\n // Disable draggable\n if (s.params.scrollbar && s.scrollbar) {\n if (s.params.scrollbarDraggable) {\n s.scrollbar.disableDraggable();\n }\n }\n // Destroy loop\n if (s.params.loop) {\n s.destroyLoop();\n }\n // Cleanup styles\n if (cleanupStyles) {\n s.cleanupStyles();\n }\n // Disconnect observer\n s.disconnectObservers();\n \n // Destroy zoom\n if (s.params.zoom && s.zoom) {\n s.zoom.destroy();\n }\n // Disable keyboard/mousewheel\n if (s.params.keyboardControl) {\n if (s.disableKeyboardControl) s.disableKeyboardControl();\n }\n if (s.params.mousewheelControl) {\n if (s.disableMousewheelControl) s.disableMousewheelControl();\n }\n // Disable a11y\n if (s.params.a11y && s.a11y) s.a11y.destroy();\n // Delete history popstate\n if (s.params.history && !s.params.replaceState) {\n window.removeEventListener('popstate', s.history.setHistoryPopState);\n }\n if (s.params.hashnav && s.hashnav) {\n s.hashnav.destroy();\n }\n // Destroy callback\n s.emit('onDestroy');\n // Delete instance\n if (deleteInstance !== false) s = null;\n };\n \n s.init();\n \n\n \n // Return swiper instance\n return s;\n };\n \n\n /*==================================================\n Prototype\n ====================================================*/\n Swiper.prototype = {\n isSafari: (function () {\n var ua = window.navigator.userAgent.toLowerCase();\n return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);\n })(),\n isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),\n isArray: function (arr) {\n return Object.prototype.toString.apply(arr) === '[object Array]';\n },\n /*==================================================\n Browser\n ====================================================*/\n browser: {\n ie: window.navigator.pointerEnabled || window.navigator.msPointerEnabled,\n ieTouch: (window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 1) || (window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 1),\n lteIE9: (function() {\n // create temporary DIV\n var div = document.createElement('div');\n // add content to tmp DIV which is wrapped into the IE HTML conditional statement\n div.innerHTML = '';\n // return true / false value based on what will browser render\n return div.getElementsByTagName('i').length === 1;\n })()\n },\n /*==================================================\n Devices\n ====================================================*/\n device: (function () {\n var ua = window.navigator.userAgent;\n var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/);\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 return {\n ios: ipad || iphone || ipod,\n android: android\n };\n })(),\n /*==================================================\n Feature Detection\n ====================================================*/\n support: {\n touch : (window.Modernizr && Modernizr.touch === true) || (function () {\n return !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch);\n })(),\n \n transforms3d : (window.Modernizr && Modernizr.csstransforms3d === true) || (function () {\n var div = document.createElement('div').style;\n return ('webkitPerspective' in div || 'MozPerspective' in div || 'OPerspective' in div || 'MsPerspective' in div || 'perspective' in div);\n })(),\n \n flexbox: (function () {\n var div = document.createElement('div').style;\n var styles = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' ');\n for (var i = 0; i < styles.length; i++) {\n if (styles[i] in div) return true;\n }\n })(),\n \n observer: (function () {\n return ('MutationObserver' in window || 'WebkitMutationObserver' in window);\n })(),\n \n passiveListener: (function () {\n var supportsPassive = false;\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function() {\n supportsPassive = true;\n }\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {}\n return supportsPassive;\n })(),\n \n gestures: (function () {\n return 'ongesturestart' in window;\n })()\n },\n /*==================================================\n Plugins\n ====================================================*/\n plugins: {}\n };\n \n\n /*===========================\n Dom7 Library\n ===========================*/\n var Dom7 = (function () {\n var Dom7 = function (arr) {\n var _this = this, i = 0;\n // Create array-like object\n for (i = 0; i < arr.length; i++) {\n _this[i] = arr[i];\n }\n _this.length = arr.length;\n // Return collection with methods\n return this;\n };\n var $ = function (selector, context) {\n var arr = [], 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, tempParent, html = selector.trim();\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n var toCreate = 'div';\n if (html.indexOf(':~]/)) {\n // Pure ID selector\n els = [document.getElementById(selector.split('#')[1])];\n }\n else {\n // Other selectors\n els = (context || document).querySelectorAll(selector);\n }\n for (i = 0; i < els.length; i++) {\n if (els[i]) arr.push(els[i]);\n }\n }\n }\n // Node/element\n else if (selector.nodeType || selector === window || selector === document) {\n arr.push(selector);\n }\n //Array of elements or instance of Dom\n else if (selector.length > 0 && selector[0].nodeType) {\n for (i = 0; i < selector.length; i++) {\n arr.push(selector[i]);\n }\n }\n }\n return new Dom7(arr);\n };\n Dom7.prototype = {\n // Classes and attriutes\n addClass: function (className) {\n if (typeof className === 'undefined') {\n return this;\n }\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i++) {\n for (var j = 0; j < this.length; j++) {\n this[j].classList.add(classes[i]);\n }\n }\n return this;\n },\n removeClass: function (className) {\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i++) {\n for (var j = 0; j < this.length; j++) {\n this[j].classList.remove(classes[i]);\n }\n }\n return this;\n },\n hasClass: function (className) {\n if (!this[0]) return false;\n else return this[0].classList.contains(className);\n },\n toggleClass: function (className) {\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i++) {\n for (var j = 0; j < this.length; j++) {\n this[j].classList.toggle(classes[i]);\n }\n }\n return this;\n },\n attr: function (attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n else return undefined;\n }\n else {\n // Set attrs\n for (var i = 0; i < this.length; i++) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n }\n else {\n // Object\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 },\n removeAttr: function (attr) {\n for (var i = 0; i < this.length; i++) {\n this[i].removeAttribute(attr);\n }\n return this;\n },\n data: function (key, value) {\n if (typeof value === 'undefined') {\n // Get value\n if (this[0]) {\n var dataKey = this[0].getAttribute('data-' + key);\n if (dataKey) return dataKey;\n else if (this[0].dom7ElementDataStorage && (key in this[0].dom7ElementDataStorage)) return this[0].dom7ElementDataStorage[key];\n else return undefined;\n }\n else return undefined;\n }\n else {\n // Set value\n for (var i = 0; i < this.length; i++) {\n var el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n return this;\n }\n },\n // Transforms\n transform : function (transform) {\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform;\n }\n return this;\n },\n transition: function (duration) {\n if (typeof duration !== 'string') {\n duration = duration + 'ms';\n }\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration;\n }\n return this;\n },\n //Events\n on: function (eventName, targetSelector, listener, capture) {\n function handleLiveEvent(e) {\n var target = e.target;\n if ($(target).is(targetSelector)) listener.call(target, e);\n else {\n var parents = $(target).parents();\n for (var k = 0; k < parents.length; k++) {\n if ($(parents[k]).is(targetSelector)) listener.call(parents[k], e);\n }\n }\n }\n var events = eventName.split(' ');\n var i, j;\n for (i = 0; i < this.length; i++) {\n if (typeof targetSelector === 'function' || targetSelector === false) {\n // Usual events\n if (typeof targetSelector === 'function') {\n listener = arguments[1];\n capture = arguments[2] || false;\n }\n for (j = 0; j < events.length; j++) {\n this[i].addEventListener(events[j], listener, capture);\n }\n }\n else {\n //Live events\n for (j = 0; j < events.length; j++) {\n if (!this[i].dom7LiveListeners) this[i].dom7LiveListeners = [];\n this[i].dom7LiveListeners.push({listener: listener, liveListener: handleLiveEvent});\n this[i].addEventListener(events[j], handleLiveEvent, capture);\n }\n }\n }\n \n return this;\n },\n off: function (eventName, targetSelector, listener, capture) {\n var events = eventName.split(' ');\n for (var i = 0; i < events.length; i++) {\n for (var j = 0; j < this.length; j++) {\n if (typeof targetSelector === 'function' || targetSelector === false) {\n // Usual events\n if (typeof targetSelector === 'function') {\n listener = arguments[1];\n capture = arguments[2] || false;\n }\n this[j].removeEventListener(events[i], listener, capture);\n }\n else {\n // Live event\n if (this[j].dom7LiveListeners) {\n for (var k = 0; k < this[j].dom7LiveListeners.length; k++) {\n if (this[j].dom7LiveListeners[k].listener === listener) {\n this[j].removeEventListener(events[i], this[j].dom7LiveListeners[k].liveListener, capture);\n }\n }\n }\n }\n }\n }\n return this;\n },\n once: function (eventName, targetSelector, listener, capture) {\n var dom = this;\n if (typeof targetSelector === 'function') {\n targetSelector = false;\n listener = arguments[1];\n capture = arguments[2];\n }\n function proxy(e) {\n listener(e);\n dom.off(eventName, targetSelector, proxy, capture);\n }\n dom.on(eventName, targetSelector, proxy, capture);\n },\n trigger: function (eventName, eventData) {\n for (var i = 0; i < this.length; i++) {\n var evt;\n try {\n evt = new window.CustomEvent(eventName, {detail: eventData, bubbles: true, cancelable: true});\n }\n catch (e) {\n evt = document.createEvent('Event');\n evt.initEvent(eventName, true, true);\n evt.detail = eventData;\n }\n this[i].dispatchEvent(evt);\n }\n return this;\n },\n transitionEnd: function (callback) {\n var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'],\n i, j, dom = this;\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++) {\n dom.off(events[i], fireCallBack);\n }\n }\n if (callback) {\n for (i = 0; i < events.length; i++) {\n dom.on(events[i], fireCallBack);\n }\n }\n return this;\n },\n // Sizing/Styles\n width: function () {\n if (this[0] === window) {\n return window.innerWidth;\n }\n else {\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n else {\n return null;\n }\n }\n },\n outerWidth: function (includeMargins) {\n if (this.length > 0) {\n if (includeMargins)\n return this[0].offsetWidth + parseFloat(this.css('margin-right')) + parseFloat(this.css('margin-left'));\n else\n return this[0].offsetWidth;\n }\n else return null;\n },\n height: function () {\n if (this[0] === window) {\n return window.innerHeight;\n }\n else {\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n else {\n return null;\n }\n }\n },\n outerHeight: function (includeMargins) {\n if (this.length > 0) {\n if (includeMargins)\n return this[0].offsetHeight + parseFloat(this.css('margin-top')) + parseFloat(this.css('margin-bottom'));\n else\n return this[0].offsetHeight;\n }\n else return null;\n },\n offset: function () {\n if (this.length > 0) {\n var el = this[0];\n var box = el.getBoundingClientRect();\n var body = document.body;\n var clientTop = el.clientTop || body.clientTop || 0;\n var clientLeft = el.clientLeft || body.clientLeft || 0;\n var scrollTop = window.pageYOffset || el.scrollTop;\n var scrollLeft = window.pageXOffset || el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n }\n else {\n return null;\n }\n },\n css: function (props, value) {\n var i;\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n }\n else {\n for (i = 0; i < this.length; i++) {\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++) {\n this[i].style[props] = value;\n }\n return this;\n }\n return this;\n },\n \n //Dom manipulation\n each: function (callback) {\n for (var i = 0; i < this.length; i++) {\n callback.call(this[i], i, this[i]);\n }\n return this;\n },\n html: function (html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : undefined;\n }\n else {\n for (var i = 0; i < this.length; i++) {\n this[i].innerHTML = html;\n }\n return this;\n }\n },\n text: function (text) {\n if (typeof text === 'undefined') {\n if (this[0]) {\n return this[0].textContent.trim();\n }\n else return null;\n }\n else {\n for (var i = 0; i < this.length; i++) {\n this[i].textContent = text;\n }\n return this;\n }\n },\n is: function (selector) {\n if (!this[0]) return false;\n var compareWith, i;\n if (typeof selector === 'string') {\n var el = this[0];\n if (el === document) return selector === document;\n if (el === window) return selector === window;\n \n if (el.matches) return el.matches(selector);\n else if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n else if (el.mozMatchesSelector) return el.mozMatchesSelector(selector);\n else if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n else {\n compareWith = $(selector);\n for (i = 0; i < compareWith.length; i++) {\n if (compareWith[i] === this[0]) return true;\n }\n return false;\n }\n }\n else if (selector === document) return this[0] === document;\n else if (selector === window) return this[0] === window;\n else {\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n for (i = 0; i < compareWith.length; i++) {\n if (compareWith[i] === this[0]) return true;\n }\n return false;\n }\n return false;\n }\n \n },\n index: function () {\n if (this[0]) {\n var child = this[0];\n var i = 0;\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i++;\n }\n return i;\n }\n else return undefined;\n },\n eq: function (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 else return new Dom7([this[returnIndex]]);\n }\n return new Dom7([this[index]]);\n },\n append: function (newChild) {\n var i, j;\n for (i = 0; i < this.length; i++) {\n if (typeof newChild === 'string') {\n var tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n }\n else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j++) {\n this[i].appendChild(newChild[j]);\n }\n }\n else {\n this[i].appendChild(newChild);\n }\n }\n return this;\n },\n prepend: function (newChild) {\n var i, j;\n for (i = 0; i < this.length; i++) {\n if (typeof newChild === 'string') {\n var tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n for (j = tempDiv.childNodes.length - 1; j >= 0; j--) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n // this[i].insertAdjacentHTML('afterbegin', newChild);\n }\n else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j++) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n }\n else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n return this;\n },\n insertBefore: function (selector) {\n var before = $(selector);\n for (var i = 0; i < this.length; i++) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n }\n else if (before.length > 1) {\n for (var j = 0; j < before.length; j++) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n },\n insertAfter: function (selector) {\n var after = $(selector);\n for (var i = 0; i < this.length; i++) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n }\n else if (after.length > 1) {\n for (var j = 0; j < after.length; j++) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n },\n next: function (selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) return new Dom7([this[0].nextElementSibling]);\n else return new Dom7([]);\n }\n else {\n if (this[0].nextElementSibling) return new Dom7([this[0].nextElementSibling]);\n else return new Dom7([]);\n }\n }\n else return new Dom7([]);\n },\n nextAll: function (selector) {\n var nextEls = [];\n var el = this[0];\n if (!el) return new Dom7([]);\n while (el.nextElementSibling) {\n var next = el.nextElementSibling;\n if (selector) {\n if($(next).is(selector)) nextEls.push(next);\n }\n else nextEls.push(next);\n el = next;\n }\n return new Dom7(nextEls);\n },\n prev: function (selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].previousElementSibling && $(this[0].previousElementSibling).is(selector)) return new Dom7([this[0].previousElementSibling]);\n else return new Dom7([]);\n }\n else {\n if (this[0].previousElementSibling) return new Dom7([this[0].previousElementSibling]);\n else return new Dom7([]);\n }\n }\n else return new Dom7([]);\n },\n prevAll: function (selector) {\n var prevEls = [];\n var el = this[0];\n if (!el) return new Dom7([]);\n while (el.previousElementSibling) {\n var prev = el.previousElementSibling;\n if (selector) {\n if($(prev).is(selector)) prevEls.push(prev);\n }\n else prevEls.push(prev);\n el = prev;\n }\n return new Dom7(prevEls);\n },\n parent: function (selector) {\n var parents = [];\n for (var i = 0; i < this.length; i++) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n }\n else {\n parents.push(this[i].parentNode);\n }\n }\n return $($.unique(parents));\n },\n parents: function (selector) {\n var parents = [];\n for (var i = 0; i < this.length; i++) {\n var parent = this[i].parentNode;\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n }\n else {\n parents.push(parent);\n }\n parent = parent.parentNode;\n }\n }\n return $($.unique(parents));\n },\n find : function (selector) {\n var foundElements = [];\n for (var i = 0; i < this.length; i++) {\n var found = this[i].querySelectorAll(selector);\n for (var j = 0; j < found.length; j++) {\n foundElements.push(found[j]);\n }\n }\n return new Dom7(foundElements);\n },\n children: function (selector) {\n var children = [];\n for (var i = 0; i < this.length; i++) {\n var childNodes = this[i].childNodes;\n \n for (var j = 0; j < childNodes.length; j++) {\n if (!selector) {\n if (childNodes[j].nodeType === 1) children.push(childNodes[j]);\n }\n else {\n if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) children.push(childNodes[j]);\n }\n }\n }\n return new Dom7($.unique(children));\n },\n remove: function () {\n for (var i = 0; i < this.length; i++) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n return this;\n },\n add: function () {\n var dom = this;\n var i, j;\n for (i = 0; i < arguments.length; i++) {\n var toAdd = $(arguments[i]);\n for (j = 0; j < toAdd.length; j++) {\n dom[dom.length] = toAdd[j];\n dom.length++;\n }\n }\n return dom;\n }\n };\n $.fn = Dom7.prototype;\n $.unique = function (arr) {\n var unique = [];\n for (var i = 0; i < arr.length; i++) {\n if (unique.indexOf(arr[i]) === -1) unique.push(arr[i]);\n }\n return unique;\n };\n \n return $;\n })();\n \n\n /*===========================\n Get Dom libraries\n ===========================*/\n var swiperDomPlugins = ['jQuery', 'Zepto', 'Dom7'];\n for (var i = 0; i < swiperDomPlugins.length; i++) {\n \tif (window[swiperDomPlugins[i]]) {\n \t\taddLibraryPlugin(window[swiperDomPlugins[i]]);\n \t}\n }\n // Required DOM Plugins\n var domLib;\n if (typeof Dom7 === 'undefined') {\n \tdomLib = window.Dom7 || window.Zepto || window.jQuery;\n }\n else {\n \tdomLib = Dom7;\n }\n \n\n /*===========================\n Add .swiper plugin from Dom libraries\n ===========================*/\n function addLibraryPlugin(lib) {\n lib.fn.swiper = function (params) {\n var firstInstance;\n lib(this).each(function () {\n var s = new Swiper(this, params);\n if (!firstInstance) firstInstance = s;\n });\n return firstInstance;\n };\n }\n \n if (domLib) {\n if (!('transitionEnd' in domLib.fn)) {\n domLib.fn.transitionEnd = function (callback) {\n var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'],\n i, j, dom = this;\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++) {\n dom.off(events[i], fireCallBack);\n }\n }\n if (callback) {\n for (i = 0; i < events.length; i++) {\n dom.on(events[i], fireCallBack);\n }\n }\n return this;\n };\n }\n if (!('transform' in domLib.fn)) {\n domLib.fn.transform = function (transform) {\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform;\n }\n return this;\n };\n }\n if (!('transition' in domLib.fn)) {\n domLib.fn.transition = function (duration) {\n if (typeof duration !== 'string') {\n duration = duration + 'ms';\n }\n for (var i = 0; i < this.length; i++) {\n var elStyle = this[i].style;\n elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration;\n }\n return this;\n };\n }\n if (!('outerWidth' in domLib.fn)) {\n domLib.fn.outerWidth = function (includeMargins) {\n if (this.length > 0) {\n if (includeMargins)\n return this[0].offsetWidth + parseFloat(this.css('margin-right')) + parseFloat(this.css('margin-left'));\n else\n return this[0].offsetWidth;\n }\n else return null;\n };\n }\n }\n \n\n window.Swiper = Swiper;\n})();\n\n/*===========================\nSwiper AMD Export\n===========================*/\nif (typeof(module) !== 'undefined')\n{\n module.exports = window.Swiper;\n}\nelse if (typeof define === 'function' && define.amd) {\n define([], function () {\n 'use strict';\n return window.Swiper;\n });\n}\n\n//# sourceMappingURL=maps/swiper.js.map\n","/**\n * Set a cookie with options.\n * @param {string} name - The name of the cookie.\n * @param {string} value - The value of the cookie.\n * @param {object} options - Options for the cookie.\n */\nfunction setCookie(name, value, options) {\n let cookieString = `${name}=${encodeURIComponent(value)}`;\n\n if (options.path) cookieString += `; path=${options.path}`;\n if (options.domain) cookieString += `; domain=${options.domain}`;\n if (options.secure) cookieString += `; secure`;\n if (options.sameSite) cookieString += `; samesite=${options.sameSite}`;\n\n document.cookie = cookieString;\n}\n\n/**\n * Get the value of a cookie by name.\n * @param {string} name - The name of the cookie.\n * @returns {string|null} The cookie value or null if not found.\n */\nfunction getCookie(name) {\n const cookies = document.cookie.split(';');\n for (let cookie of cookies) {\n const [key, value] = cookie.split('=');\n if (key.trim() === name) {\n return decodeURIComponent(value);\n }\n }\n return null;\n}\n\nfunction removeCookie(name, options = {}) {\n this.setCookie(name, '', { ...options, expires: -1 });\n}\n\nmodule.exports = {\n setCookie: setCookie,\n getCookie: getCookie,\n removeCookie: removeCookie\n};"],"sourceRoot":""}